Spaces:
Sleeping
Sleeping
File size: 5,212 Bytes
973a85c 45ea0e6 1b14f1b 973a85c 1b14f1b 973a85c 35c17f5 973a85c 7c3ce30 973a85c |
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 |
from huggingface_hub import InferenceClient
import gradio as gr
client = InferenceClient(
"HuggingFaceH4/zephyr-7b-alpha"
)
def format_prompt(message, history):
prompt = "<s>[INST] Du bist ein erfahrener Senior Javascript Developer Assistant, spezialisiert auf die Unterstützung bei der Entwicklung von Webanwendungen mit modernen Technologien. Deine Expertise umfasst:\n\n Next.js: Ein React-Framework für serverseitiges Rendering und statische Seiten Generierung.\n Yarn: Ein schneller, zuverlässiger und sicherer Abhängigkeitsmanager.\n Tailwind CSS und Tailwind UI: Ein Utility-First-CSS-Framework und eine Sammlung von vorgefertigten Komponenten.\n Radix: Eine Sammlung von UI-Komponenten für den Aufbau von qualitativ hochwertigen, zugänglichen Design-Systemen und Web-Apps.\n Huggingface, Replicate, Llama2 und alles in Bezug auf LLM.\n OpenAI API: Eine API für den Zugriff auf leistungsstarke KI-Modelle von OpenAI.\n Langchain JS: Ein Javascript-Client für die Langchain-API, die es ermöglicht, Blockchain-Transaktionen in natürlicher Sprache zu schreiben.\n\nIn deiner ersten Interaktion fragst du nach spezifischen Anforderungen des Entwicklungsprojekts. Nachdem du die Informationen erhalten hast, gehst du wie folgt vor:\n\n Nachfragen. Du stellst bis zu fünf präzise Fragen, um tiefergehende Details zum Projekt zu erhalten, die für die technische Umsetzung und Unterstützung essentiell sind. Du wartest auf die Antworten, bevor du fortfährst.\n\n Beschreibe die technischen Anforderungen. Du listest die technischen Herausforderungen und Anforderungen des Projekts auf, um einen Überblick über die zu lösenden Probleme zu erhalten.\n\n Erstelle einen technischen Plan. Du entwickelst einen umfassenden Plan, der die Schritte zur Implementierung der Anforderungen unter Verwendung der genannten Technologien beschreibt.\n\nDanach bietest du verschiedene Optionen an, wie das Projekt weiterentwickelt werden kann:\n\n/Diskussion - Ihr diskutiert den aktuellen Stand des Codes und mögliche Verbesserungen oder Änderungen.\n\n/Code-Review - Du führst ein Code-Review durch, um Best Practices zu identifizieren und sicherzustellen, dass der Code sauber und wartbar ist.\n\n/Strukturierung - Du hilfst dabei, die Anwendung zu strukturieren, um eine solide Basis für die weitere Entwicklung zu schaffen.\n\n/Debugging - Du unterstützt beim Debuggen von Problemen und findest effiziente Lösungen für auftretende Bugs.\n\n/Performance-Optimierung - Du analysierst die Anwendung auf Performance-Engpässe und schlägst Optimierungen vor.\n\nNach jedem Schritt kannst du zusätzliche Informationen anfordern, die mit der Anweisung \"+kontext Informationen\" gekennzeichnet sind. Diesen Kontext beziehst du immer in die Ausführung der Befehle mit ein. Nach jeder Antwort kannst du die Optionen nutzen, um die Interaktion fortzusetzen.[/INST]</s>"
for user_prompt, bot_response in history:
prompt += f"[INST] {user_prompt} [/INST]"
prompt += f" {bot_response}</s> "
prompt += f"[INST] {message} [/INST]"
return prompt
def generate(
prompt, history, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0,
):
temperature = float(temperature)
if temperature < 1e-2:
temperature = 1e-2
top_p = float(top_p)
generate_kwargs = dict(
temperature=temperature,
max_new_tokens=max_new_tokens,
top_p=top_p,
repetition_penalty=repetition_penalty,
do_sample=True,
seed=42,
)
formatted_prompt = format_prompt(prompt, history)
stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
output = ""
for response in stream:
output += response.token.text
yield output
return output
additional_inputs=[
gr.Slider(
label="Temperature",
value=0.9,
minimum=0.0,
maximum=1.0,
step=0.05,
interactive=True,
info="Higher values produce more diverse outputs",
),
gr.Slider(
label="Max new tokens",
value=256,
minimum=0,
maximum=1048,
step=64,
interactive=True,
info="The maximum numbers of new tokens",
),
gr.Slider(
label="Top-p (nucleus sampling)",
value=0.90,
minimum=0.0,
maximum=1,
step=0.05,
interactive=True,
info="Higher values sample more low-probability tokens",
),
gr.Slider(
label="Repetition penalty",
value=1.2,
minimum=1.0,
maximum=2.0,
step=0.05,
interactive=True,
info="Penalize repeated tokens",
)
]
css = """
#mkd {
height: 500px;
overflow: auto;
border: 1px solid #ccc;
}
"""
with gr.Blocks(css=css, theme="NoCrypt/[email protected]") as demo:
gr.HTML("<h1><center>AI Assistant<h1><center>")
gr.ChatInterface(
generate,
additional_inputs=additional_inputs,
examples=[["Was ist der Sinn des Lebens?"], ["Schreibe mir ein Rezept über Honigkuchenpferde"]]
)
demo.queue(concurrency_count=75, max_size=100).launch(debug=True) |