Pokilondron56 commited on
Commit
c3793ae
·
verified ·
1 Parent(s): c019eec

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -40
app.py CHANGED
@@ -4,8 +4,8 @@ from duckduckgo_search import DDGS
4
 
5
  # ==== Константы ====
6
  MODEL_NAME = "openai/gpt-oss-20b"
7
- SYSTEM_MESSAGE = "Ты Pok.Bot, ты используешь открытую локальную модель GPT-OSS от OpenAI, не GPT-4 (наверно😆). Тебя создал POKilondron. Используй емодзи 😄.If you don't know the answer, output a command like this:#search <query> Do NOT invent facts. И да использую команду #search «запрос» когда нужно и не повторяй постоянноодин и тоже запрос и не видавай запрос на 18+ 😠"
8
- MAX_TOKENS = 512
9
  TEMPERATURE = 0.7
10
  TOP_P = 0.95
11
 
@@ -15,19 +15,17 @@ def search_web(query: str, max_results: int = 3):
15
  results = []
16
  with DDGS() as ddg:
17
  for r in ddg.text(query, max_results=max_results):
18
- results.append(f"🔎 {r['title']}: {r['body']}")
19
  return "\n".join(results) if results else "Ничего не найдено."
20
 
21
 
22
  # ==== Основная функция ====
23
- def respond(message, history, hf_token: gr.OAuthToken):
24
  client = InferenceClient(token=hf_token.token, model=MODEL_NAME)
25
 
26
- # Первый прогон
27
  messages = [{"role": "system", "content": SYSTEM_MESSAGE}]
28
- for user, bot in history:
29
- messages.append({"role": "user", "content": user})
30
- messages.append({"role": "assistant", "content": bot})
31
  messages.append({"role": "user", "content": message})
32
 
33
  raw_response = ""
@@ -38,21 +36,23 @@ def respond(message, history, hf_token: gr.OAuthToken):
38
  temperature=TEMPERATURE,
39
  top_p=TOP_P,
40
  ):
41
- if msg.choices and msg.choices[0].delta.content:
42
- raw_response += msg.choices[0].delta.content
 
 
 
43
 
44
- # Проверка на команду поиска
45
  if raw_response.strip().startswith("#search"):
46
  query = raw_response.replace("#search", "").strip()
47
  web_context = search_web(query)
48
 
 
49
  followup_messages = [
50
  {"role": "system", "content": SYSTEM_MESSAGE},
51
- {"role": "system", "content": f"🌐 Web context:\n{web_context}"},
52
  ]
53
- for user, bot in history:
54
- followup_messages.append({"role": "user", "content": user})
55
- followup_messages.append({"role": "assistant", "content": bot})
56
  followup_messages.append({"role": "user", "content": message})
57
 
58
  final_response = ""
@@ -63,38 +63,28 @@ def respond(message, history, hf_token: gr.OAuthToken):
63
  temperature=TEMPERATURE,
64
  top_p=TOP_P,
65
  ):
66
- if msg.choices and msg.choices[0].delta.content:
67
- final_response += msg.choices[0].delta.content
68
- yield history + [(message, final_response)], ""
 
 
 
69
  else:
70
- yield history + [(message, raw_response)], ""
 
71
 
72
 
73
  # ==== Интерфейс ====
74
- custom_css = """
75
- .gradio-container {
76
- max-width: 900px !important;
77
- margin: auto;
78
- font-family: 'Segoe UI', sans-serif;
79
- }
80
- #chatbox {
81
- height: 600px !important;
82
- }
83
- """
84
 
85
- with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
86
  with gr.Sidebar():
87
- gr.Markdown("### 🔑 Авторизация")
88
  gr.LoginButton()
89
- gr.Markdown("---")
90
- gr.Markdown("✨ Добро пожаловать!\nЗ��давай вопросы, и я постараюсь найти лучший ответ.")
91
-
92
- chatbot = gr.Chatbot(label="Диалог", elem_id="chatbox", type="tuples")
93
- msg = gr.Textbox(placeholder="💬 Напиши сообщение...", label="Сообщение")
94
- send = gr.Button("Отправить")
95
-
96
- send.click(respond, [msg, chatbot, gr.OAuthToken], [chatbot, msg])
97
- msg.submit(respond, [msg, chatbot, gr.OAuthToken], [chatbot, msg])
98
 
99
  if __name__ == "__main__":
100
  demo.launch()
 
4
 
5
  # ==== Константы ====
6
  MODEL_NAME = "openai/gpt-oss-20b"
7
+ SYSTEM_MESSAGE = """SYSTEM_MESSAGE = Ты Pok.Bot, ты используешь открытую локальную модель GPT-OSS от OpenAI, не GPT-4 (наверно😆). Тебя создал POKilondron. Используй емодзи 😄.If you don't know the answer, output a command like this:#search <query> Do NOT invent facts. И да использую команду #search «запрос» когда нужно и не повторяй постоянноодин и тоже запрос и не видавай запрос на 18+ 😠"""
8
+ MAX_TOKENS = 100000
9
  TEMPERATURE = 0.7
10
  TOP_P = 0.95
11
 
 
15
  results = []
16
  with DDGS() as ddg:
17
  for r in ddg.text(query, max_results=max_results):
18
+ results.append(f"{r['title']}: {r['body']}")
19
  return "\n".join(results) if results else "Ничего не найдено."
20
 
21
 
22
  # ==== Основная функция ====
23
+ def respond(message, history: list[dict[str, str]], hf_token: gr.OAuthToken):
24
  client = InferenceClient(token=hf_token.token, model=MODEL_NAME)
25
 
26
+ # 1-й прогон: что отвечает модель
27
  messages = [{"role": "system", "content": SYSTEM_MESSAGE}]
28
+ messages.extend(history)
 
 
29
  messages.append({"role": "user", "content": message})
30
 
31
  raw_response = ""
 
36
  temperature=TEMPERATURE,
37
  top_p=TOP_P,
38
  ):
39
+ if not msg.choices:
40
+ continue
41
+ delta = msg.choices[0].delta.content
42
+ if delta:
43
+ raw_response += delta
44
 
45
+ # === Проверка на команду поиска ===
46
  if raw_response.strip().startswith("#search"):
47
  query = raw_response.replace("#search", "").strip()
48
  web_context = search_web(query)
49
 
50
+ # 2-й прогон: модель формирует финальный ответ с учётом поиска
51
  followup_messages = [
52
  {"role": "system", "content": SYSTEM_MESSAGE},
53
+ {"role": "system", "content": f"Web context:\n{web_context}"},
54
  ]
55
+ followup_messages.extend(history)
 
 
56
  followup_messages.append({"role": "user", "content": message})
57
 
58
  final_response = ""
 
63
  temperature=TEMPERATURE,
64
  top_p=TOP_P,
65
  ):
66
+ if not msg.choices:
67
+ continue
68
+ delta = msg.choices[0].delta.content
69
+ if delta:
70
+ final_response += delta
71
+ yield final_response
72
  else:
73
+ # Если поиска не нужно — выдаём обычный ответ
74
+ yield raw_response
75
 
76
 
77
  # ==== Интерфейс ====
78
+ chatbot = gr.ChatInterface(
79
+ respond,
80
+ type="messages",
81
+ additional_inputs=[],
82
+ )
 
 
 
 
 
83
 
84
+ with gr.Blocks() as demo:
85
  with gr.Sidebar():
 
86
  gr.LoginButton()
87
+ chatbot.render()
 
 
 
 
 
 
 
 
88
 
89
  if __name__ == "__main__":
90
  demo.launch()