lastsummerkape commited on
Commit
8cd9e82
·
verified ·
1 Parent(s): b629103

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -38
app.py CHANGED
@@ -1,52 +1,40 @@
1
- # app.py • LegalEasyAI • v0.1
2
- # Полностью готовый минимальный чат‑бот на Gradio,
3
- # использующий облачную модель Zephyr‑7B через Inference API.
4
-
5
  import os
6
  import gradio as gr
7
  from huggingface_hub import InferenceClient
8
 
9
- # ──────────────────────────────────────────────────────────────
10
- # 1. Настройка соединения с моделью
11
- # ──────────────────────────────────────────────────────────────
12
- MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta" # можно сменить позже
13
- HF_TOKEN = os.getenv("HF_TOKEN") # секрет из Settings→Secrets
14
 
15
- # Если токен не найден, покажем понятное сообщение в логах
16
  if HF_TOKEN is None:
17
- raise ValueError(
18
- "Секрет HF_TOKEN не найден! "
19
- "Добавь его в Settings → Secrets, иначе Inference API ограничен."
20
  )
21
 
22
- client = InferenceClient(repo_id=MODEL_NAME, token=HF_TOKEN)
 
23
 
24
- # ──────────────────────────────────────────────────────────────
25
- # 2. Логика ответа (streaming)
26
- # ──────────────────────────────────────────────────────────────
27
  SYSTEM_PROMPT = (
28
  "Ты — LegalEasy AI, ассистент‑юрист по законодательству Республики Беларусь. "
29
- "Отвечай кратко, но точно; всегда указывай статью, пункт и название НПА."
30
  )
31
 
32
  def respond(message, history, system_message, max_tokens, temperature, top_p):
33
- """
34
- Функция‑генератор — отправляет запрос и построчно выдаёт токены,
35
- чтобы текст появлялся «живым».
36
- """
37
- # собираем историю диалога в формате OpenAI Chat
38
  messages = [{"role": "system", "content": system_message or SYSTEM_PROMPT}]
39
  for user_msg, bot_msg in history:
40
  if user_msg:
41
  messages.append({"role": "user", "content": user_msg})
42
  if bot_msg:
43
  messages.append({"role": "assistant", "content": bot_msg})
44
-
45
- # добавляем текущий вопрос
46
  messages.append({"role": "user", "content": message})
47
 
48
- # шлём запрос по стриму
49
- partial_answer = ""
50
  for chunk in client.chat_completion(
51
  messages=messages,
52
  max_tokens=max_tokens,
@@ -55,30 +43,26 @@ def respond(message, history, system_message, max_tokens, temperature, top_p):
55
  top_p=top_p,
56
  ):
57
  token = chunk.choices[0].delta.content
58
- partial_answer += token
59
- yield partial_answer # отдаём токены по мере генерации
60
 
61
- # ──────────────────────────────────────────────────────────────
62
  # 3. Интерфейс Gradio
63
- # ───────��──────────────────────────────────────────────────────
64
  demo = gr.ChatInterface(
65
  respond,
66
  additional_inputs=[
67
- gr.Textbox(
68
- value=SYSTEM_PROMPT,
69
- label="System‑prompt (можно уточнить стиль ответа)"
70
- ),
71
  gr.Slider(1, 2048, value=512, step=1, label="Max new tokens"),
72
  gr.Slider(0.1, 4.0, value=0.7, step=0.1, label="Temperature"),
73
  gr.Slider(0.1, 1.0, value=0.95,step=0.05,label="Top‑p"),
74
  ],
75
  title="⚖️ LegalEasy AI — демо",
76
- description="Задай вопрос по законодательству РБ. "
77
- "Модель: HuggingFaceH4/zephyr‑7b‑beta (Inference API).",
78
  examples=[
79
  "Какой срок исковой давности для оспаривания брака?",
80
  "Что означает принцип устойчивого водопользования?",
81
- "Какая статья Конституции гарантирует право на благоприятную окружающую среду?",
82
  ],
83
  )
84
 
 
1
+ # app.py • LegalEasyAI • v0.1‑fix
 
 
 
2
  import os
3
  import gradio as gr
4
  from huggingface_hub import InferenceClient
5
 
6
+ # ──────────────────────────────────────────────
7
+ # 1. Подключение к модели через Inference API
8
+ # ──────────────────────────────────────────────
9
+ MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta" # можешь заменить
10
+ HF_TOKEN = os.getenv("HF_TOKEN") # секрет из Settings Secrets
11
 
 
12
  if HF_TOKEN is None:
13
+ raise RuntimeError(
14
+ "Секрет HF_TOKEN не найден. Добавь его в Settings → Secrets."
 
15
  )
16
 
17
+ # ✔️ Главная правка здесь — убираем repo_id, передаём модель первым аргументом
18
+ client = InferenceClient(MODEL_NAME, token=HF_TOKEN)
19
 
20
+ # ──────────────────────────────────────────────
21
+ # 2. Генерация ответа (стриминг)
22
+ # ──────────────────────────────────────────────
23
  SYSTEM_PROMPT = (
24
  "Ты — LegalEasy AI, ассистент‑юрист по законодательству Республики Беларусь. "
25
+ "Отвечай кратко и точно, ссылаясь на статьи и пункты НПА."
26
  )
27
 
28
  def respond(message, history, system_message, max_tokens, temperature, top_p):
 
 
 
 
 
29
  messages = [{"role": "system", "content": system_message or SYSTEM_PROMPT}]
30
  for user_msg, bot_msg in history:
31
  if user_msg:
32
  messages.append({"role": "user", "content": user_msg})
33
  if bot_msg:
34
  messages.append({"role": "assistant", "content": bot_msg})
 
 
35
  messages.append({"role": "user", "content": message})
36
 
37
+ partial = ""
 
38
  for chunk in client.chat_completion(
39
  messages=messages,
40
  max_tokens=max_tokens,
 
43
  top_p=top_p,
44
  ):
45
  token = chunk.choices[0].delta.content
46
+ partial += token
47
+ yield partial
48
 
49
+ # ──────────────────────────────────────────────
50
  # 3. Интерфейс Gradio
51
+ # ──────────────────────────────────────────────
52
  demo = gr.ChatInterface(
53
  respond,
54
  additional_inputs=[
55
+ gr.Textbox(value=SYSTEM_PROMPT,
56
+ label="System‑prompt (можно изменить)"),
 
 
57
  gr.Slider(1, 2048, value=512, step=1, label="Max new tokens"),
58
  gr.Slider(0.1, 4.0, value=0.7, step=0.1, label="Temperature"),
59
  gr.Slider(0.1, 1.0, value=0.95,step=0.05,label="Top‑p"),
60
  ],
61
  title="⚖️ LegalEasy AI — демо",
62
+ description="Спроси о праве РБ. Модель: Zephyr‑7B (Inference API).",
 
63
  examples=[
64
  "Какой срок исковой давности для оспаривания брака?",
65
  "Что означает принцип устойчивого водопользования?",
 
66
  ],
67
  )
68