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