Pokilondron56 commited on
Commit
0604b14
·
verified ·
1 Parent(s): af34481

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -9
app.py CHANGED
@@ -14,19 +14,20 @@ def search_web(query: str, max_results: int = 3):
14
  results = []
15
  with DDGS() as ddg:
16
  for r in ddg.text(query, max_results=max_results):
17
- results.append(f"- {r['title']} ({r['href']})\n{r['body']}")
18
- return "\n\n".join(results) if results else "Ничего не найдено."
19
 
20
 
21
  # ==== Основная функция ====
22
  def respond(message, history: list[dict[str, str]], hf_token: gr.OAuthToken):
23
  client = InferenceClient(token=hf_token.token, model=MODEL_NAME)
24
 
 
25
  messages = [{"role": "system", "content": SYSTEM_MESSAGE}]
26
  messages.extend(history)
27
  messages.append({"role": "user", "content": message})
28
 
29
- response = ""
30
  for msg in client.chat_completion(
31
  messages,
32
  max_tokens=MAX_TOKENS,
@@ -38,14 +39,38 @@ def respond(message, history: list[dict[str, str]], hf_token: gr.OAuthToken):
38
  continue
39
  delta = msg.choices[0].delta.content
40
  if delta:
41
- response += delta
42
- yield response
43
 
44
- # Если модель вернула команду поиска
45
- if response.strip().startswith("#search"):
46
- query = response.replace("#search", "").strip()
47
  web_context = search_web(query)
48
- yield f"🔎 Поиск по запросу: **{query}**\n\n{web_context}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
 
51
  # ==== Интерфейс ====
 
14
  results = []
15
  with DDGS() as ddg:
16
  for r in ddg.text(query, max_results=max_results):
17
+ results.append(f"{r['title']}: {r['body']}")
18
+ return "\n".join(results) if results else "Ничего не найдено."
19
 
20
 
21
  # ==== Основная функция ====
22
  def respond(message, history: list[dict[str, str]], hf_token: gr.OAuthToken):
23
  client = InferenceClient(token=hf_token.token, model=MODEL_NAME)
24
 
25
+ # 1-й прогон: что отвечает модель
26
  messages = [{"role": "system", "content": SYSTEM_MESSAGE}]
27
  messages.extend(history)
28
  messages.append({"role": "user", "content": message})
29
 
30
+ raw_response = ""
31
  for msg in client.chat_completion(
32
  messages,
33
  max_tokens=MAX_TOKENS,
 
39
  continue
40
  delta = msg.choices[0].delta.content
41
  if delta:
42
+ raw_response += delta
 
43
 
44
+ # === Проверка на команду поиска ===
45
+ if raw_response.strip().startswith("#search"):
46
+ query = raw_response.replace("#search", "").strip()
47
  web_context = search_web(query)
48
+
49
+ # 2-й прогон: модель формирует финальный ответ с учётом поиска
50
+ followup_messages = [
51
+ {"role": "system", "content": SYSTEM_MESSAGE},
52
+ {"role": "system", "content": f"Web context:\n{web_context}"},
53
+ ]
54
+ followup_messages.extend(history)
55
+ followup_messages.append({"role": "user", "content": message})
56
+
57
+ final_response = ""
58
+ for msg in client.chat_completion(
59
+ followup_messages,
60
+ max_tokens=MAX_TOKENS,
61
+ stream=True,
62
+ temperature=TEMPERATURE,
63
+ top_p=TOP_P,
64
+ ):
65
+ if not msg.choices:
66
+ continue
67
+ delta = msg.choices[0].delta.content
68
+ if delta:
69
+ final_response += delta
70
+ yield final_response
71
+ else:
72
+ # Если поиска не нужно — выдаём обычный ответ
73
+ yield raw_response
74
 
75
 
76
  # ==== Интерфейс ====