# 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()