Spaces:
Paused
Paused
| # 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() | |