LegalEasyAI / app.py
lastsummerkape's picture
Update app.py
37079c9 verified
# app.py • LegalEasyAI • v0.2 (без examples, с рабочим InferenceClient)
import os
import gradio as gr
from huggingface_hub import InferenceClient
# ──────────────────────────────────────────────────────────────
# 1. Подключение к модели через Inference API
# ──────────────────────────────────────────────────────────────
MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta" # можно заменить, напр. на IlyaGusev/saiga_mistral_7b_lora
HF_TOKEN = os.getenv("HF_TOKEN") # токен хранится в Settings → Secrets
if HF_TOKEN is None:
raise RuntimeError(
"Секрет HF_TOKEN не найден. Добавь его в Settings → Secrets, иначе API ограничит запросы."
)
client = InferenceClient(MODEL_NAME, token=HF_TOKEN) # ✔️ актуальная сигнатура
# ──────────────────────────────────────────────────────────────
# 2. Функция генерации ответа
# ──────────────────────────────────────────────────────────────
SYSTEM_PROMPT = (
"Ты — LegalEasy AI, ассистент‑юрист по законодательству Республики Беларусь. "
"Отвечай кратко и точно, ссылаясь на статьи и пункты НПА."
)
def respond(message, history, system_message, max_tokens, temperature, top_p):
# собираем историю в формате OpenAI‑Chat
msgs = [{"role": "system", "content": system_message or SYSTEM_PROMPT}]
for user_msg, bot_msg in history:
if user_msg:
msgs.append({"role": "user", "content": user_msg})
if bot_msg:
msgs.append({"role": "assistant", "content": bot_msg})
msgs.append({"role": "user", "content": message})
partial = ""
for chunk in client.chat_completion(
messages=msgs,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = chunk.choices[0].delta.content or ""
partial += token
yield partial
# ──────────────────────────────────────────────────────────────
# 3. Интерфейс Gradio (без параметра examples)
# ──────────────────────────────────────────────────────────────
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(value=SYSTEM_PROMPT,
label="System‑prompt (можно изменить)"),
gr.Slider(1, 2048, value=512, step=1, label="Max new tokens"),
gr.Slider(0.1, 4.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(0.1, 1.0, value=0.95,step=0.05, label="Top‑p"),
],
title="⚖️ LegalEasy AI — демо",
description="Спроси о праве РБ. Модель: Zephyr‑7B (Inference API).",
)
if __name__ == "__main__":
demo.launch()