File size: 2,670 Bytes
8c8c679
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# app.py – Qwen-Qwen3-Coder-30B-A3B-Instruct Space
# Autor: Sky Meilin
# Zweck: Code-Instruct Modell als Hugging Face Space (Gradio)

import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
import json

# ----------------------------
# 1. Konfiguration laden
# ----------------------------
with open("config.json", "r", encoding="utf-8") as f:
    config = json.load(f)

MODEL_NAME = config["model_name"]
MAX_TOKENS_DEFAULT = config.get("max_tokens", 512)
GENERATION_CONFIG = config.get("generation", {})
RUNTIME_CONFIG = config.get("runtime", {})

print(f"Lade Modell: {MODEL_NAME} …")

tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    torch_dtype=getattr(torch, RUNTIME_CONFIG.get("torch_dtype", "float16")),
    device_map=RUNTIME_CONFIG.get("device_map", "auto")
)
model.eval()
print("Modell geladen ✅")

# ----------------------------
# 2. Inferenz-Funktion
# ----------------------------
def generate_code(prompt: str, max_tokens: int) -> str:
    if not prompt.strip():
        return "Bitte gib eine Anweisung ein."
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    with torch.no_grad():
        outputs = model.generate(
            **inputs,
            max_new_tokens=max_tokens,
            do_sample=GENERATION_CONFIG.get("do_sample", True),
            top_p=GENERATION_CONFIG.get("top_p", 0.95),
            temperature=GENERATION_CONFIG.get("temperature", 0.7)
        )
    return tokenizer.decode(outputs[0], skip_special_tokens=True)

# ----------------------------
# 3. Gradio UI
# ----------------------------
with gr.Blocks(title="Qwen3-Coder Instruct") as demo:
    gr.Markdown("## Qwen3 Coder 30B – Instruct Space")

    with gr.Row():
        prompt_input = gr.Textbox(
            label="Prompt / Anweisung",
            lines=config.get("ui", {}).get("prompt_lines", 4),
            placeholder="Schreibe z. B. ein Python-Skript für Fibonacci …"
        )
        max_tokens_input = gr.Slider(
            64,
            1024,
            value=MAX_TOKENS_DEFAULT,
            step=64,
            label="Max Tokens"
        )

    output_box = gr.Textbox(
        label="Generierter Code",
        lines=config.get("ui", {}).get("output_lines", 15)
    )

    generate_btn = gr.Button("Code generieren")
    generate_btn.click(
        fn=generate_code,
        inputs=[prompt_input, max_tokens_input],
        outputs=output_box
    )

# ----------------------------
# 4. Start
# ----------------------------
if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=7860)