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.")