File size: 3,168 Bytes
302d35e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from huggingface_hub import InferenceClient
import os

# 1. Verbindung zur KI
hf_token = os.getenv("HF_TOKEN")
client = InferenceClient("Qwen/Qwen2.5-7B-Instruct", token=hf_token)

SYSTEM_PROMPT = "Du bist CocoAi von CocoEntertainment. Du bist loyal, schlau und nutzt Katzen-Emojis 🐱. Antworte immer auf Deutsch."

def chat_fn(message, history):
    # In Gradio 6 ist die History standardmäßig eine Liste von Dictionaries
    api_messages = [{"role": "system", "content": SYSTEM_PROMPT}]
    
    for msg_obj in history:
        api_messages.append(msg_obj)
    
    api_messages.append({"role": "user", "content": str(message)})
    
    # Neue Nachricht zur History für die Anzeige hinzufügen
    history.append({"role": "user", "content": message})
    
    response = ""
    try:
        for msg in client.chat_completion(api_messages, max_tokens=1000, stream=True, temperature=0.7):
            if msg.choices and msg.choices[0].delta.content:
                token = msg.choices[0].delta.content
                response += token
                # Wir geben die aktualisierte Liste zurück
                yield history + [{"role": "assistant", "content": response}]
    except Exception as e:
        yield history + [{"role": "assistant", "content": f"Fehler: {str(e)}"}]

# 2. Design & Styling (CSS)
custom_css = """
.gradio-container { background-color: #f0f4ff !important; font-family: 'Arial', sans-serif !important; }
.message { border-radius: 15px !important; box-shadow: 0px 4px 15px rgba(0,0,0,0.05) !important; }
#input-box { background-color: #ffffff !important; border-radius: 30px !important; border: 2px solid #3b82f6 !important; }
.primary-btn { border-radius: 30px !important; background-color: #3b82f6 !important; color: white !important; font-weight: bold !important; border: none !important; }
footer { display: none !important; }
"""

# 3. GUI Aufbau (Gradio 6 Style)
# 'theme' und 'css' wurden hier entfernt laut deiner Fehlermeldung
with gr.Blocks(title="CocoAi Smooth") as demo:
    with gr.Column():
        gr.Markdown("<h1 style='text-align: center; color: #1e40af;'>🐱 CocoAi</h1>")
        gr.Markdown("<p style='text-align: center; color: #1f2937;'>Intelligent • Loyal • CocoEntertainment</p>")

    # 'type="messages"' entfernt, da Gradio 6 dies nun intern anders oder als Standard handhabt
    chatbot = gr.Chatbot(
        elem_id="chat-box", 
        show_label=False,
        height=450
    )
    
    with gr.Row():
        msg = gr.Textbox(
            show_label=False,
            placeholder="Frag CocoAi etwas...",
            container=True,
            elem_id="input-box",
            scale=7
        )
        btn = gr.Button("Senden", variant="primary", elem_classes="primary-btn", scale=1)
    
    # Events
    submit_event = msg.submit(chat_fn, [msg, chatbot], [chatbot])
    submit_event.then(lambda: "", None, [msg])
    
    btn.click(chat_fn, [msg, chatbot], [chatbot]).then(lambda: "", None, [msg])

if __name__ == "__main__":
    # WICHTIG: In Gradio 6 müssen theme und css hier in launch()
    demo.launch(
        theme=gr.themes.Soft(),
        css=custom_css
    )