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()