WhatsMusic commited on
Commit
7b19954
·
verified ·
1 Parent(s): 4f1cd2e

added provider

Browse files
Files changed (1) hide show
  1. app.py +76 -40
app.py CHANGED
@@ -1,48 +1,84 @@
1
  import gradio as gr
 
2
 
3
- # Funktion zur Code-Generierung für Next.js, TypeScript und TailwindCSS
4
  def generate_code(prompt):
5
- """
6
- Diese Funktion generiert Code basierend auf einem Benutzer-Prompt.
7
- Sie simuliert die Interaktion mit dem DeepSeek-V3-Modell.
8
- """
9
- # Beispielantwort (kann durch eine echte API-Anfrage ersetzt werden)
10
- example_response = f"""
11
- // Generierter Code für: {prompt}
12
- import React from 'react';
13
-
14
- const MyComponent: React.FC = () => {{
15
- return (
16
- <div className="p-4 bg-blue-500 text-white">
17
- <h1 className="text-2xl font-bold">Hello, Next.js mit TypeScript und TailwindCSS!</h1>
18
- <p className="mt-2">Dies ist ein Beispiel für {prompt}.</p>
19
- </div>
20
- );
21
- }};
22
-
23
- export default MyComponent;
24
- """
25
- return example_response
 
 
 
 
 
 
 
 
 
26
 
27
- # Gradio Interface
28
- with gr.Blocks(fill_height=True) as demo:
29
- with gr.Sidebar():
30
- gr.Markdown("# Next.js + TypeScript + TailwindCSS Code Generator")
31
- gr.Markdown("Dieser Space hilft dir, Code für Next.js (mit App Router), TypeScript und TailwindCSS zu generieren.")
32
- gr.Markdown("Gib deine Anforderungen ein und erhalte den passenden Code.")
33
 
34
- with gr.Column():
35
- # Eingabefeld für den Benutzer-Prompt
36
- user_prompt = gr.Textbox(label="Beschreibe deine Anforderungen", placeholder="z.B. Erstelle eine Komponente mit einem Button und einem Textfeld...")
37
-
38
- # Ausgabefeld für den generierten Code
39
- code_output = gr.Code(label="Generierter Code", language="typescript")
 
 
 
 
 
 
 
40
 
41
- # Schaltfläche zum Generieren des Codes
42
- generate_button = gr.Button("Code generieren")
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
- # Interaktion: Button-Klick ruft die generate_code-Funktion auf
45
- generate_button.click(fn=generate_code, inputs=user_prompt, outputs=code_output)
 
 
 
46
 
47
- # Starte die Gradio-App
48
- demo.launch()
 
 
 
 
 
1
  import gradio as gr
2
+ from huggingface_hub import InferenceClient
3
 
4
+ # Function to generate code with proper error handling
5
  def generate_code(prompt):
6
+ try:
7
+ # Get the token from Gradio's secrets
8
+ token = gr.secrets["HF_TOKEN"]
9
+
10
+ client = InferenceClient(
11
+ model="deepseek-ai/DeepSeek-V3",
12
+ token=token
13
+ )
14
+
15
+ system_prompt = """You are an expert Next.js, TypeScript and TailwindCSS developer.
16
+ Generate clean, efficient code following these rules:
17
+ 1. Use Next.js App Router
18
+ 2. Strict TypeScript typing
19
+ 3. Modern TailwindCSS classes
20
+ 4. Include proper error boundaries
21
+ 5. Add JSDoc comments"""
22
+
23
+ response = client.chat_completion(
24
+ messages=[
25
+ {"role": "system", "content": system_prompt},
26
+ {"role": "user", "content": prompt}
27
+ ],
28
+ max_tokens=1500,
29
+ temperature=0.3
30
+ )
31
+
32
+ return response.choices[0].message.content
33
+
34
+ except Exception as e:
35
+ return f"Error generating code: {str(e)}"
36
 
37
+ # Gradio interface with improved layout
38
+ with gr.Blocks(
39
+ title="Next.js Code Generator",
40
+ theme=gr.themes.Soft(),
41
+ css=".gradio-container {max-width: 900px !important}"
42
+ ) as demo:
43
 
44
+ gr.Markdown("## 🚀 Next.js + TypeScript + TailwindCSS Code Generator")
45
+
46
+ with gr.Row():
47
+ with gr.Column(scale=3):
48
+ input_prompt = gr.Textbox(
49
+ label="Describe your component",
50
+ placeholder="Create a responsive navbar with dark mode toggle...",
51
+ lines=5,
52
+ max_lines=10
53
+ )
54
+ with gr.Row():
55
+ submit_btn = gr.Button("Generate Code", variant="primary")
56
+ clear_btn = gr.Button("Clear")
57
 
58
+ with gr.Column(scale=7):
59
+ output_code = gr.Code(
60
+ label="Generated Component",
61
+ language="typescript",
62
+ interactive=False,
63
+ lines=25
64
+ )
65
+
66
+ # Form submission handling
67
+ submit_btn.click(
68
+ fn=generate_code,
69
+ inputs=input_prompt,
70
+ outputs=output_code
71
+ )
72
 
73
+ clear_btn.click(
74
+ fn=lambda: ("", ""),
75
+ inputs=None,
76
+ outputs=[input_prompt, output_code]
77
+ )
78
 
79
+ # Launch with sharing enabled
80
+ if __name__ == "__main__":
81
+ demo.launch(
82
+ share=True,
83
+ auth=lambda u,p: True # Remove this for production!
84
+ )