Spaces:
Paused
Paused
File size: 3,670 Bytes
37079c9 b629103 954a46c 37079c9 8cd9e82 37079c9 b629103 8cd9e82 37079c9 b629103 954a46c 37079c9 954a46c 37079c9 b629103 8cd9e82 b629103 954a46c b629103 37079c9 b629103 37079c9 b629103 37079c9 954a46c 8cd9e82 b629103 37079c9 954a46c 37079c9 8cd9e82 954a46c 37079c9 954a46c 8cd9e82 37079c9 b629103 8cd9e82 954a46c | 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 | # 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()
|