shital2024 commited on
Commit
364061c
·
verified ·
1 Parent(s): 650afbe

Upload 5 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ java_to_python_seq2seq_model.pdf filter=lfs diff=lfs merge=lfs -text
app.py ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import requests
3
+ import os
4
+ import google.generativeai as genai
5
+ import tensorflow as tf
6
+ import numpy as np
7
+ from tensorflow.keras.layers import TextVectorization
8
+
9
+ # --- Config ---
10
+ vocab_size = 10000
11
+ sequence_length = 150
12
+
13
+ # Load API keys
14
+ HF_API_TOKEN = os.getenv("HF_API_TOKEN")
15
+ GEMINI_API_KEY = os.getenv("GOOGLE_API_KEY")
16
+
17
+ # Hugging Face setup
18
+ MODEL_ID = "Salesforce/codet5p-770m"
19
+ API_URL = f"https://api-inference.huggingface.co/models/{MODEL_ID}"
20
+ HEADERS = {"Authorization": f"Bearer {HF_API_TOKEN}"}
21
+
22
+ genai.configure(api_key="AIzaSyBkc8CSEhyYwZAuUiJfzF1Xtns-RYmBOpg")
23
+
24
+ # --- Load Local Model & Vectorizers ---
25
+ model = tf.keras.models.load_model("java_to_python_seq2seq_model.h5")
26
+
27
+ java_vectorizer = TextVectorization(max_tokens=vocab_size, output_sequence_length=sequence_length)
28
+ python_vectorizer = TextVectorization(max_tokens=vocab_size, output_sequence_length=sequence_length)
29
+
30
+ # Dummy adaptation to initialize
31
+ java_vectorizer.adapt(tf.data.Dataset.from_tensor_slices(["public class Main { public static void main(String[] args) {} }"]))
32
+ python_vectorizer.adapt(tf.data.Dataset.from_tensor_slices(["def main():\n pass"]))
33
+
34
+ python_vocab = python_vectorizer.get_vocabulary()
35
+ index_to_word = dict(enumerate(python_vocab))
36
+
37
+ # --- Translator Functions ---
38
+
39
+ def fallback_translate_with_gemini(code_snippet, source_lang, target_lang):
40
+ prompt = f"""You are a code translation expert. Convert the following {source_lang} code to {target_lang}:
41
+
42
+ {code_snippet}
43
+
44
+ Ensure the translation is accurate and follows {target_lang} best practices.
45
+ Do not give any explanation. Only give the translated code.
46
+ """
47
+ try:
48
+ model = genai.GenerativeModel("gemini-1.5-pro")
49
+ response = model.generate_content(prompt)
50
+ return response.text.strip() if response else "Translation failed."
51
+ except Exception as e:
52
+ return f"Gemini API Error: {str(e)}"
53
+
54
+ def translate_with_local_model(code_snippet):
55
+ try:
56
+ java_seq = java_vectorizer(tf.constant([code_snippet]))
57
+ python_in = tf.constant([[1] + [0] * (sequence_length - 1)])
58
+ translated_tokens = []
59
+
60
+ for i in range(sequence_length):
61
+ preds = model.predict([java_seq, python_in], verbose=0)
62
+ next_token = tf.argmax(preds[0, i]).numpy()
63
+ translated_tokens.append(next_token)
64
+ if next_token == 0:
65
+ break
66
+ if i + 1 < sequence_length:
67
+ python_in = tf.tensor_scatter_nd_update(
68
+ python_in, [[0, i + 1]], [next_token]
69
+ )
70
+
71
+ tokens = [index_to_word.get(t, "") for t in translated_tokens]
72
+ return " ".join(tokens).replace("[UNK]", "").strip()
73
+
74
+ except Exception as e:
75
+ return f"Local Model Error: {str(e)}"
76
+
77
+ def translate_code(code_snippet, source_lang, target_lang):
78
+ prompt = f"Translate the following {source_lang} code to {target_lang}:\n\n{code_snippet}\n\nTranslated {target_lang} Code:\n"
79
+ response = requests.post(API_URL, headers=HEADERS, json={
80
+ "inputs": prompt,
81
+ "parameters": {"max_new_tokens": 150, "temperature": 0.2, "top_k": 50}
82
+ })
83
+
84
+ if response.status_code == 200:
85
+ generated_text = response.json()[0]["generated_text"]
86
+ translated_code = generated_text.split(f"Translated {target_lang} Code:\n")[-1].strip()
87
+ return translated_code
88
+ else:
89
+ return f"Error: {response.status_code}, {response.text}"
90
+
91
+ # --- Streamlit UI ---
92
+
93
+ st.title("🔄 Programming Language Translator")
94
+ st.write("Translate code between programming languages using 3-tier logic:")
95
+
96
+ languages = ["Python", "Java", "C++", "C"]
97
+ source_lang = st.selectbox("Select source language", languages)
98
+ target_lang = st.selectbox("Select target language", languages)
99
+ code_input = st.text_area("Enter your code here:", height=200)
100
+
101
+ # State initialization
102
+ if "translate_attempts" not in st.session_state:
103
+ st.session_state.translate_attempts = 0
104
+ st.session_state.translated_code = ""
105
+
106
+ if st.button("Translate"):
107
+ if code_input.strip():
108
+ st.session_state.translate_attempts += 1
109
+ attempt = st.session_state.translate_attempts
110
+
111
+ with st.spinner(f"Translating..."):
112
+ # First click
113
+ if attempt == 1:
114
+ if source_lang == "Java" and target_lang == "Python":
115
+ st.session_state.translated_code = translate_with_local_model(code_input)
116
+ else:
117
+ st.session_state.translated_code = translate_code(code_input, source_lang, target_lang)
118
+ else:
119
+ # Second and later attempts -> Gemini
120
+ st.session_state.translated_code = fallback_translate_with_gemini(code_input, source_lang, target_lang)
121
+
122
+ st.subheader("Translated Code:")
123
+ st.code(st.session_state.translated_code, language=target_lang.lower())
124
+ else:
125
+ st.warning("⚠️ Please enter some code before translating.")
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+ # Best version. It doesn't having trained model only.
134
+
135
+ # import streamlit as st
136
+ # import requests
137
+ # import os # To access environment variables
138
+ # import google.generativeai as genai # Import Gemini API
139
+
140
+ # # Load API keys from environment variables
141
+ # HF_API_TOKEN = os.getenv("HF_API_TOKEN")
142
+ # GEMINI_API_KEY = os.getenv("GOOGLE_API_KEY")
143
+
144
+ # # Set up Hugging Face API
145
+ # MODEL_ID = "Salesforce/codet5p-770m" # CodeT5+ (Recommended)
146
+ # API_URL = f"https://api-inference.huggingface.co/models/{MODEL_ID}"
147
+ # HEADERS = {"Authorization": f"Bearer {HF_API_TOKEN}"}
148
+
149
+ # # Initialize Gemini API
150
+ # genai.configure(api_key='AIzaSyBkc8CSEhyYwZAuUiJfzF1Xtns-RYmBOpg')
151
+
152
+ # def translate_code(code_snippet, source_lang, target_lang):
153
+ # """Translate code using Hugging Face API."""
154
+ # prompt = f"Translate the following {source_lang} code to {target_lang}:\n\n{code_snippet}\n\nTranslated {target_lang} Code:\n"
155
+
156
+ # response = requests.post(API_URL, headers=HEADERS, json={
157
+ # "inputs": prompt,
158
+ # "parameters": {
159
+ # "max_new_tokens": 150,
160
+ # "temperature": 0.2,
161
+ # "top_k": 50
162
+ # }
163
+ # })
164
+
165
+ # if response.status_code == 200:
166
+ # generated_text = response.json()[0]["generated_text"]
167
+ # translated_code = generated_text.split(f"Translated {target_lang} Code:\n")[-1].strip()
168
+ # return translated_code
169
+ # else:
170
+ # return f"Error: {response.status_code}, {response.text}"
171
+
172
+ # def fallback_translate_with_gemini(code_snippet, source_lang, target_lang):
173
+ # """Fallback function using Gemini API for translation."""
174
+ # prompt = f"""You are a code translation expert. Convert the following {source_lang} code to {target_lang}:
175
+
176
+ # {code_snippet}
177
+
178
+ # Ensure the translation is accurate and follows {target_lang} best practices.
179
+ # Do not give any explaination. only give the translated code.
180
+ # """
181
+ # try:
182
+ # model = genai.GenerativeModel("gemini-1.5-pro")
183
+ # response = model.generate_content(prompt)
184
+ # return response.text.strip() if response else "Translation failed."
185
+ # except Exception as e:
186
+ # return f"Gemini API Error: {str(e)}"
187
+
188
+ # # Streamlit UI
189
+ # st.title("🔄 Code Translator with Gemini AI")
190
+ # st.write("Translate code between different programming languages using AI.")
191
+
192
+ # languages = ["Python", "Java", "C++", "C"]
193
+
194
+ # source_lang = st.selectbox("Select source language", languages)
195
+ # target_lang = st.selectbox("Select target language", languages)
196
+ # code_input = st.text_area("Enter your code here:", height=200)
197
+
198
+ # # Initialize session state
199
+ # if "translate_attempts" not in st.session_state:
200
+ # st.session_state.translate_attempts = 0
201
+ # st.session_state.translated_code = ""
202
+
203
+ # if st.button("Translate"):
204
+ # if code_input.strip():
205
+ # st.session_state.translate_attempts += 1
206
+ # with st.spinner("Translating..."):
207
+ # if st.session_state.translate_attempts == 1:
208
+ # # First attempt using the pretrained model
209
+ # st.session_state.translated_code = translate_code(code_input, source_lang, target_lang)
210
+ # else:
211
+ # # Second attempt uses Gemini API
212
+ # st.session_state.translated_code = fallback_translate_with_gemini(code_input, source_lang, target_lang)
213
+
214
+ # st.subheader("Translated Code:")
215
+ # st.code(st.session_state.translated_code, language=target_lang.lower())
216
+ # else:
217
+ # st.warning("⚠️ Please enter some code before translating.")
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+ # V1 without LLM
231
+
232
+ # import streamlit as st
233
+ # import requests
234
+ # import os # Import os to access environment variables
235
+
236
+ # # Get API token from environment variable
237
+ # API_TOKEN = os.getenv("HF_API_TOKEN") # Fetch token securely
238
+ # # Change MODEL_ID to a better model
239
+ # # MODEL_ID = "Salesforce/codet5p-770m" # CodeT5+ (Recommended)
240
+ # MODEL_ID = "bigcode/starcoder2-15b" # StarCoder2
241
+ # # MODEL_ID = "meta-llama/CodeLlama-34b-Instruct" # Code Llama
242
+
243
+ # # API_URL = f"https://api-inference.huggingface.co/models/{MODEL_ID}"
244
+
245
+ # API_URL = f"https://api-inference.huggingface.co/models/{MODEL_ID}"
246
+ # HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}
247
+
248
+ # def translate_code(code_snippet, source_lang, target_lang):
249
+ # """Translate code using Hugging Face API securely."""
250
+ # prompt = f"Translate the following {source_lang} code to {target_lang}:\n\n{code_snippet}\n\nTranslated {target_lang} Code:\n"
251
+
252
+ # response = requests.post(API_URL, headers=HEADERS, json={
253
+ # "inputs": prompt,
254
+ # "parameters": {
255
+ # "max_new_tokens": 150,
256
+ # "temperature": 0.2,
257
+ # "top_k": 50,
258
+ # "stop": ["\n\n", "#", "//", "'''"]
259
+ # }
260
+ # })
261
+
262
+ # if response.status_code == 200:
263
+ # generated_text = response.json()[0]["generated_text"]
264
+ # translated_code = generated_text.split(f"Translated {target_lang} Code:\n")[-1].strip()
265
+ # return translated_code
266
+ # else:
267
+ # return f"Error: {response.status_code}, {response.text}"
268
+
269
+ # # Streamlit UI
270
+ # st.title("🔄 Code Translator using StarCoder")
271
+ # st.write("Translate code between different programming languages using AI.")
272
+
273
+ # languages = ["Python", "Java", "C++", "C"]
274
+
275
+ # source_lang = st.selectbox("Select source language", languages)
276
+ # target_lang = st.selectbox("Select target language", languages)
277
+ # code_input = st.text_area("Enter your code here:", height=200)
278
+
279
+ # if st.button("Translate"):
280
+ # if code_input.strip():
281
+ # with st.spinner("Translating..."):
282
+ # translated_code = translate_code(code_input, source_lang, target_lang)
283
+ # st.subheader("Translated Code:")
284
+ # st.code(translated_code, language=target_lang.lower())
285
+ # else:
286
+ # st.warning("⚠️ Please enter some code before translating.")
java_to_python_seq2seq_model.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a68cc27b5fdf226846c3a069451dcf9a35905ec6bec9a5a8c6ed8cc94df9a30a
3
+ size 160844388
java_to_python_seq2seq_model.pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5d4e74324bdec3d287aa7d57fdfcd2dec443e995cecab4813148c24ef60ce3c8
3
+ size 789260
requirements.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ torch
2
+ torchvision
3
+ torchaudio
4
+ transformers
5
+ tree_sitter
6
+ fastapi
7
+ uvicorn
8
+ sentencepiece
9
+ accelerate
10
+ streamlit
11
+ google.generativeai
12
+ tensorflow
translator.py ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import os
3
+
4
+ # Your Hugging Face API token (Replace 'your_token_here' with your actual token)
5
+
6
+ API_TOKEN = os.getenv("HF_API_TOKEN")
7
+
8
+ # Define model and API endpoint
9
+ MODEL_ID = "bigcode/starcoder"
10
+ API_URL = f"https://api-inference.huggingface.co/models/{MODEL_ID}"
11
+ HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}
12
+
13
+ def translate_code(code_snippet, source_lang, target_lang):
14
+ """
15
+ Translate code using Hugging Face API (No local download needed).
16
+ """
17
+ prompt = f"Translate the following {source_lang} code to {target_lang}:\n\n{code_snippet}\n\nTranslated {target_lang} Code:"
18
+
19
+ response = requests.post(API_URL, headers=HEADERS, json={"inputs": prompt})
20
+
21
+ if response.status_code == 200:
22
+ return response.json()[0]["generated_text"]
23
+ else:
24
+ return f"Error: {response.status_code}, {response.text}"
25
+
26
+ # Example usage
27
+ source_code = """
28
+ def add(a, b):
29
+ return a + b
30
+ """
31
+ translated_code = translate_code(source_code, "Python", "Java")
32
+ print("Translated Java Code:\n", translated_code)
33
+
34
+
35
+