File size: 4,877 Bytes
50af927
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from openai import OpenAI

def process_language(api_key, task, user_message):
    if not api_key:
        return "⚠️ Please enter your OpenRouter API Key"
    
    client = OpenAI(
        base_url="https://openrouter.ai/api/v1",
        api_key=api_key
    )
    
    system_message = ("You are a bilingual language tutor. Respond in the language used in the question. "
                     "For conversations, keep exchanges natural. For grammar explanations, provide "
                     "detailed rules with English/Chinese examples.")
    
    try:
        completion = client.chat.completions.create(
            extra_headers={"HTTP-Referer": "", "X-Title": ""},
            extra_body={},
            model="deepseek/deepseek-v3-base:free",
            messages=[
                {"role": "system", "content": system_message},
                {"role": "user", "content": f"{task}: {user_message}"}
            ]
        )
        return completion.choices[0].message.content
    except Exception as e:
        return f"❌ Error: {str(e)}"

def process_pseudocode(api_key, user_idea):
    if not api_key:
        return "⚠️ Please enter your OpenRouter API Key"
    
    client = OpenAI(
        base_url="https://openrouter.ai/api/v1",
        api_key=api_key
    )
    
    system_message = ("Generate clear, step-by-step pseudocode for the given idea. "
                     "Use programming conventions but avoid actual code. Structure your answer with:")
    
    try:
        completion = client.chat.completions.create(
            extra_headers={"HTTP-Referer": "", "X-Title": ""},
            extra_body={},
            model="deepseek/deepseek-v3-base:free",
            messages=[
                {"role": "system", "content": system_message},
                {"role": "user", "content": user_idea}
            ]
        )
        return completion.choices[0].message.content
    except Exception as e:
        return f"❌ Error: {str(e)}"

def process_algorithm(api_key, challenge):
    if not api_key:
        return "⚠️ Please enter your OpenRouter API Key"
    
    client = OpenAI(
        base_url="https://openrouter.ai/api/v1",
        api_key=api_key
    )
    
    system_message = ("Suggest multiple approaches to solve the problem. Compare time/space complexity, "
                     "trade-offs, and ideal use cases. Structure your answer clearly.")
    
    try:
        completion = client.chat.completions.create(
            extra_headers={"HTTP-Referer": "", "X-Title": ""},
            extra_body={},
            model="deepseek/deepseek-v3-base:free",
            messages=[
                {"role": "system", "content": system_message},
                {"role": "user", "content": challenge}
            ]
        )
        return completion.choices[0].message.content
    except Exception as e:
        return f"❌ Error: {str(e)}"

with gr.Blocks(theme=gr.themes.Soft()) as app:
    gr.Markdown("# πŸš€ Code & Language Learning Assistant")
    api_key = gr.Textbox(label="Enter your OpenRouter API Key", type="password")
    
    with gr.Tabs():
        # Language Learning Tab
        with gr.Tab("πŸ‡¬πŸ‡§/πŸ‡¨πŸ‡³ Language Learning Buddy"):
            with gr.Row():
                with gr.Column():
                    task_type = gr.Radio(
                        choices=["Simulate bilingual conversation", "Explain grammar rules"],
                        label="Select Task Type"
                    )
                    lang_input = gr.Textbox(label="Your message/question", lines=3)
                    lang_btn = gr.Button("Get Assistance")
                lang_output = gr.Textbox(label="Assistant Response", interactive=False, lines=10)
            lang_btn.click(process_language, [api_key, task_type, lang_input], lang_output)
        
        # Pseudocode Tab
        with gr.Tab("πŸ“ Pseudocode Explainer"):
            with gr.Row():
                with gr.Column():
                    pseudo_input = gr.Textbox(label="Your idea (e.g., 'How to build a calculator app')", lines=3)
                    pseudo_btn = gr.Button("Generate Steps")
                pseudo_output = gr.Textbox(label="Step-by-Step Pseudocode", interactive=False, lines=10)
            pseudo_btn.click(process_pseudocode, [api_key, pseudo_input], pseudo_output)
        
        # Algorithm Tab
        with gr.Tab("🧠 Algorithm Brainstormer"):
            with gr.Row():
                with gr.Column():
                    algo_input = gr.Textbox(label="Challenge description (e.g., 'Sort list without built-in functions')", lines=3)
                    algo_btn = gr.Button("Brainstorm Solutions")
                algo_output = gr.Textbox(label="Suggested Approaches", interactive=False, lines=10)
            algo_btn.click(process_algorithm, [api_key, algo_input], algo_output)

app.launch()