MLDeveloper commited on
Commit
e3e93d3
·
verified ·
1 Parent(s): 07ad560

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +137 -61
app.py CHANGED
@@ -1,79 +1,155 @@
1
  import streamlit as st
2
  import requests
3
- import os
 
4
 
5
- # Ensure the Hugging Face API Token is available
6
- API_TOKEN = os.getenv("HF_API_TOKEN")
7
- if not API_TOKEN:
8
- st.error("⚠️ API Token is missing! Please set HF_API_TOKEN as an environment variable.")
9
- st.stop()
10
 
11
- # Use StarCoder for better translation
12
- MODEL_ID = "bigcode/starcoder"
13
  API_URL = f"https://api-inference.huggingface.co/models/{MODEL_ID}"
14
- HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}
 
 
 
15
 
16
  def translate_code(code_snippet, source_lang, target_lang):
17
- """Translate code between languages using Hugging Face API."""
18
- prompt = f"""
19
- ### Task: Convert {source_lang} code to {target_lang}.
20
 
21
- #### {source_lang} Code:
22
- ```{source_lang.lower()}
23
- {code_snippet}
24
- ```
 
 
 
 
25
 
26
- #### Translated {target_lang} Code:
27
- """
 
 
 
 
28
 
 
 
 
 
 
 
 
 
29
  try:
30
- response = requests.post(API_URL, headers=HEADERS, json={"inputs": prompt})
31
-
32
- if response.status_code == 200:
33
- result = response.json()
34
- if isinstance(result, list) and result:
35
- generated_text = result[0].get("generated_text", "")
36
-
37
- # Extract translated code
38
- if f"#### Translated {target_lang} Code:" in generated_text:
39
- translated_code = generated_text.split(f"#### Translated {target_lang} Code:")[-1].strip()
40
- else:
41
- translated_code = generated_text.strip()
42
-
43
- return translated_code if translated_code else "⚠️ No translated code received."
44
-
45
- return "⚠️ Unexpected API response format."
46
-
47
- elif response.status_code == 400:
48
- return "⚠️ Error: Bad request. Check your input."
49
- elif response.status_code == 401:
50
- return "⚠️ Error: Unauthorized. Check your API token."
51
- elif response.status_code == 403:
52
- return "⚠️ Error: Access Forbidden. You may need special model access."
53
- elif response.status_code == 503:
54
- return "⚠️ Error: Model is loading. Please wait and try again."
55
- else:
56
- return f"⚠️ API Error {response.status_code}: {response.text}"
57
-
58
- except requests.exceptions.RequestException as e:
59
- return f"⚠️ Network Error: {str(e)}"
60
 
61
  # Streamlit UI
62
- st.title("🔄 AI Code Translator")
63
- st.write("Convert code between Python, Java, C++, and C.")
64
 
65
  languages = ["Python", "Java", "C++", "C"]
66
- source_lang = st.selectbox("Select Source Language", languages)
67
- target_lang = st.selectbox("Select Target Language", languages)
68
- code_input = st.text_area("Enter your code:", height=200)
 
 
 
 
 
 
69
 
70
  if st.button("Translate"):
71
- if source_lang == target_lang:
72
- st.warning("⚠️ Source and target languages must be different!")
73
- elif not code_input.strip():
74
- st.warning("⚠️ Please enter some code before translating.")
 
 
 
 
 
 
 
 
75
  else:
76
- with st.spinner("Translating... "):
77
- translated_code = translate_code(code_input, source_lang, target_lang)
78
- st.subheader(f"Translated {target_lang} Code:")
79
- st.code(translated_code, language=target_lang.lower())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import requests
3
+ import os # To access environment variables
4
+ import google.generativeai as genai # Import Gemini API
5
 
6
+ # Load API keys from environment variables
7
+ HF_API_TOKEN = os.getenv("HF_API_TOKEN")
8
+ GEMINI_API_KEY = os.getenv("GOOGLE_API_KEY")
 
 
9
 
10
+ # Set up Hugging Face API
11
+ MODEL_ID = "Salesforce/codet5p-770m" # CodeT5+ (Recommended)
12
  API_URL = f"https://api-inference.huggingface.co/models/{MODEL_ID}"
13
+ HEADERS = {"Authorization": f"Bearer {HF_API_TOKEN}"}
14
+
15
+ # Initialize Gemini API
16
+ genai.configure(api_key='AIzaSyBkc8CSEhyYwZAuUiJfzF1Xtns-RYmBOpg')
17
 
18
  def translate_code(code_snippet, source_lang, target_lang):
19
+ """Translate code using Hugging Face API."""
20
+ prompt = f"Translate the following {source_lang} code to {target_lang}:\n\n{code_snippet}\n\nTranslated {target_lang} Code:\n"
 
21
 
22
+ response = requests.post(API_URL, headers=HEADERS, json={
23
+ "inputs": prompt,
24
+ "parameters": {
25
+ "max_new_tokens": 150,
26
+ "temperature": 0.2,
27
+ "top_k": 50
28
+ }
29
+ })
30
 
31
+ if response.status_code == 200:
32
+ generated_text = response.json()[0]["generated_text"]
33
+ translated_code = generated_text.split(f"Translated {target_lang} Code:\n")[-1].strip()
34
+ return translated_code
35
+ else:
36
+ return f"Error: {response.status_code}, {response.text}"
37
 
38
+ def fallback_translate_with_gemini(code_snippet, source_lang, target_lang):
39
+ """Fallback function using Gemini API for translation."""
40
+ prompt = f"""You are a code translation expert. Convert the following {source_lang} code to {target_lang}:
41
+
42
+ {code_snippet}
43
+ Ensure the translation is accurate and follows {target_lang} best practices.
44
+ Do not give any explaination. only give the translated code.
45
+ """
46
  try:
47
+ model = genai.GenerativeModel("gemini-1.5-pro")
48
+ response = model.generate_content(prompt)
49
+ return response.text.strip() if response else "Translation failed."
50
+ except Exception as e:
51
+ return f"Gemini API Error: {str(e)}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
  # Streamlit UI
54
+ st.title("🔄 Programming Language Translator")
55
+ st.write("Translate code between different programming languages using AI.")
56
 
57
  languages = ["Python", "Java", "C++", "C"]
58
+
59
+ source_lang = st.selectbox("Select source language", languages)
60
+ target_lang = st.selectbox("Select target language", languages)
61
+ code_input = st.text_area("Enter your code here:", height=200)
62
+
63
+ # Initialize session state
64
+ if "translate_attempts" not in st.session_state:
65
+ st.session_state.translate_attempts = 0
66
+ st.session_state.translated_code = ""
67
 
68
  if st.button("Translate"):
69
+ if code_input.strip():
70
+ st.session_state.translate_attempts += 1
71
+ with st.spinner("Translating..."):
72
+ if st.session_state.translate_attempts == 1:
73
+ # First attempt using the pretrained model
74
+ st.session_state.translated_code = translate_code(code_input, source_lang, target_lang)
75
+ else:
76
+ # Second attempt uses Gemini API
77
+ st.session_state.translated_code = fallback_translate_with_gemini(code_input, source_lang, target_lang)
78
+
79
+ st.subheader("Translated Code:")
80
+ st.code(st.session_state.translated_code, language=target_lang.lower())
81
  else:
82
+ st.warning("⚠️ Please enter some code before translating.")
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ # V1 without gemini api
101
+
102
+ # import streamlit as st
103
+ # import requests
104
+ # import os # Import os to access environment variables
105
+
106
+ # # Get API token from environment variable
107
+ # API_TOKEN = os.getenv("HF_API_TOKEN")
108
+
109
+
110
+ # # Change MODEL_ID to a better model
111
+ # MODEL_ID = "Salesforce/codet5p-770m" # CodeT5+ (Recommended)
112
+ # # MODEL_ID = "bigcode/starcoder2-15b" # StarCoder2
113
+ # # MODEL_ID = "bigcode/starcoder"
114
+ # API_URL = f"https://api-inference.huggingface.co/models/{MODEL_ID}"
115
+ # HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}
116
+
117
+ # def translate_code(code_snippet, source_lang, target_lang):
118
+ # """Translate code using Hugging Face API securely."""
119
+ # prompt = f"Translate the following {source_lang} code to {target_lang}:\n\n{code_snippet}\n\nTranslated {target_lang} Code:\n"
120
+
121
+ # response = requests.post(API_URL, headers=HEADERS, json={
122
+ # "inputs": prompt,
123
+ # "parameters": {
124
+ # "max_new_tokens": 150,
125
+ # "temperature": 0.2,
126
+ # "top_k": 50
127
+ # # "stop": ["\n\n", "#", "//", "'''"]
128
+ # }
129
+ # })
130
+
131
+ # if response.status_code == 200:
132
+ # generated_text = response.json()[0]["generated_text"]
133
+ # translated_code = generated_text.split(f"Translated {target_lang} Code:\n")[-1].strip()
134
+ # return translated_code
135
+ # else:
136
+ # return f"Error: {response.status_code}, {response.text}"
137
+
138
+ # # Streamlit UI
139
+ # st.title("🔄 Code Translator using StarCoder")
140
+ # st.write("Translate code between different programming languages using AI.")
141
+
142
+ # languages = ["Python", "Java", "C++", "C"]
143
+
144
+ # source_lang = st.selectbox("Select source language", languages)
145
+ # target_lang = st.selectbox("Select target language", languages)
146
+ # code_input = st.text_area("Enter your code here:", height=200)
147
+
148
+ # if st.button("Translate"):
149
+ # if code_input.strip():
150
+ # with st.spinner("Translating..."):
151
+ # translated_code = translate_code(code_input, source_lang, target_lang)
152
+ # st.subheader("Translated Code:")
153
+ # st.code(translated_code, language=target_lang.lower())
154
+ # else:
155
+ # st.warning("⚠️ Please enter some code before translating.")