Spaces:
Sleeping
Sleeping
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() | |