Spaces:
Sleeping
Sleeping
File size: 2,712 Bytes
e56196a ff9d706 f936acf e56196a 12164ce e56196a 12164ce 87fd051 f936acf 87fd051 f936acf 5e018d0 e56196a 12164ce 87fd051 ff9d706 12164ce ff9d706 12164ce ff9d706 f936acf ff9d706 12164ce ff9d706 87fd051 12164ce 811d292 12164ce 811d292 12164ce 811d292 87fd051 811d292 f936acf e56196a f936acf 87fd051 f936acf |
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 |
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()
|