codeswitch / app.py
Raahulthakur's picture
Update app.py
12164ce verified
import gradio as gr
import os
import requests
from pygments.lexers import guess_lexer_for_filename
from pygments.util import ClassNotFound
# Fetch OpenRouter API key from environment variable (set in HF secrets or local .env)
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY", "sk-...") # Replace with your actual key if testing locally
# Function to detect source programming language
def detect_language(code_snippet):
try:
lexer = guess_lexer_for_filename("example.py", code_snippet)
return lexer.name
except ClassNotFound:
return "Unknown"
# Function to translate code using OpenRouter + DeepSeek Coder
def translate_code(code_snippet, target_language):
detected_lang = detect_language(code_snippet)
prompt = f"""You are a coding assistant. Translate the following {detected_lang} code to {target_language}:\n\n```{detected_lang}\n{code_snippet}\n```"""
headers = {
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"HTTP-Referer": "https://huggingface.co/spaces/Raahulthakur/codeswitch", # Optional, but recommended for OpenRouter free tier
"Content-Type": "application/json"
}
payload = {
"model": "deepseek-coder-6.7b", # βœ… Correct model format
"messages": [
{"role": "system", "content": "You are an expert code translator."},
{"role": "user", "content": prompt}
]
}
try:
response = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json=payload)
response.raise_for_status()
result = response.json()
# Safe access to output
translated_code = result.get("choices", [{}])[0].get("message", {}).get("content", "⚠️ No output from model.")
return detected_lang, translated_code.strip()
except Exception as e:
return detected_lang, f"Error: {str(e)}"
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## πŸš€ CodeSwitch: Translate Code Between Languages")
code_input = gr.Code(label="Paste your Code", language="python", lines=20)
target_lang = gr.Dropdown(
choices=["Python", "JavaScript", "C++", "Java", "Go", "C", "PHP", "Ruby"],
label="Translate To",
value="JavaScript"
)
detect_btn = gr.Button("Detect Language")
translate_btn = gr.Button("Translate Code")
detected_lang_output = gr.Textbox(label="Detected Language")
translated_output = gr.Code(label="Translated Code")
detect_btn.click(fn=detect_language, inputs=code_input, outputs=detected_lang_output)
translate_btn.click(fn=translate_code, inputs=[code_input, target_lang], outputs=[detected_lang_output, translated_output])
demo.launch()