File size: 2,957 Bytes
edf2a04
 
 
5b7d46d
ebe55ae
878f9f9
 
344548e
534795e
fb4f3f2
ff5d575
fb4f3f2
 
5becc54
fb4f3f2
b0e1b1f
878f9f9
b0e1b1f
5b7d46d
fb4f3f2
5b7d46d
fb4f3f2
5b7d46d
fb4f3f2
 
 
b0e1b1f
878f9f9
b0e1b1f
fb4f3f2
878f9f9
fb4f3f2
 
5b7d46d
fb4f3f2
b0e1b1f
 
 
fb4f3f2
 
 
 
 
 
5b7d46d
fb4f3f2
5b7d46d
fb4f3f2
5b7d46d
fb4f3f2
5b7d46d
fb4f3f2
5b7d46d
fb4f3f2
5b7d46d
 
 
 
534795e
878f9f9
5b7d46d
 
 
 
 
 
fb4f3f2
5b7d46d
 
 
 
fb4f3f2
5b7d46d
534795e
878f9f9
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
import gradio as gr
import os
import requests
import json

SYSTEM_PROMPT = "Als LLM besteht deine Aufgabe darin, detaillierte Aufforderungen zu generieren, die mit 'Generiere das Bild' beginnen, für Bildgenerierungsmodelle basierend auf Benutzereingaben. Sei beschreibend und spezifisch, aber achte auch darauf, dass deine Aufforderungen klar und prägnant sind."
TITLE = "Bildanreger"
EXAMPLE_INPUT = "Ein AI Cyborg reitet ein Stier im Weltraum"

zephyr_7b_beta = "https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta/"

HF_TOKEN = os.getenv("HF_TOKEN")
HEADERS = {"Authorization": f"Bearer {HF_TOKEN}"}

def build_input_prompt(message, chatbot, system_prompt):
    """
    Konstruiert die Eingabeaufforderung aus den Chatbot-Interaktionen und der aktuellen Nachricht.
    """
    input_prompt = "\n" + system_prompt + "\n\n"
    for interaction in chatbot:
        input_prompt += f"{interaction[0]}\n\n{interaction[1]}\n\n"

    input_prompt += f"{message}\n"
    return input_prompt

def post_request_beta(payload):
    """
    Sendet eine POST-Anfrage an die vordefinierte Zephyr-7b-Beta-URL und gibt die JSON-Antwort zurück.
    """
    response = requests.post(zephyr_7b_beta, headers=HEADERS, json=payload)
    response.raise_for_status()  # Löst einen HTTPError aus, wenn die HTTP-Anfrage einen erfolglosen Statuscode zurückgegeben hat
    return response.json()

def predict_beta(message, chatbot=[], system_prompt=SYSTEM_PROMPT):
    input_prompt = build_input_prompt(message, chatbot, system_prompt)
    data = {
        "inputs": input_prompt
    }

    try:
        response_data = post_request_beta(data)
        json_obj = response_data[0]
        
        if 'generated_text' in json_obj and len(json_obj['generated_text']) > 0:
            return json_obj['generated_text']
        elif 'error' in json_obj:
            raise Exception(json_obj['error'])
        else:
            raise Exception("Unerwartete Antwort vom Server")
    except requests.HTTPError as e:
        raise Exception(f"Anfrage fehlgeschlagen mit Statuscode {e.response.status_code}")
    except json.JSONDecodeError as e:
        raise Exception(f"Antwort konnte nicht als JSON dekodiert werden: {str(e)}")

def test_preview_chatbot(message, history=[]):
    response = predict_beta(message, history)
    history.append((message, response))
    return response, history

with gr.Blocks(theme='syddharth/gray-minimal') as app:
    with gr.Row():
        chatbot_preview = gr.Chatbot()
        textbox_preview = gr.Textbox(label="Deine Eingabe", placeholder=EXAMPLE_INPUT)

    btn_send = gr.Button("Senden")
    chat_history = []

    def update_chatbot(input_text):
        global chat_history
        response, chat_history = test_preview_chatbot(input_text, chat_history)
        chatbot_preview.append((input_text, response))

    btn_send.click(fn=update_chatbot, inputs=textbox_preview, outputs=chatbot_preview)

app.launch(share=True)