AnatoliiG commited on
Commit
f34d9e8
·
1 Parent(s): da45e7a

fix message bug

Browse files
Files changed (2) hide show
  1. app.py +12 -1
  2. utils.py +29 -16
app.py CHANGED
@@ -9,6 +9,7 @@ from gradio import mount_gradio_app
9
  import config
10
  from model import engine
11
  from ui import create_ui
 
12
 
13
  # --- FastAPI Setup ---
14
  app = FastAPI()
@@ -29,7 +30,17 @@ async def chat_completions(request: Request):
29
 
30
  try:
31
  data = await request.json()
32
- messages = data.get("messages", [])
 
 
 
 
 
 
 
 
 
 
33
  stream = data.get("stream", True)
34
  temperature = data.get("temperature", config.DEFAULT_TEMP)
35
  max_tokens = data.get("max_tokens", config.DEFAULT_MAX_TOKENS)
 
9
  import config
10
  from model import engine
11
  from ui import create_ui
12
+ from utils import get_clean_text
13
 
14
  # --- FastAPI Setup ---
15
  app = FastAPI()
 
30
 
31
  try:
32
  data = await request.json()
33
+ raw_messages = data.get("messages", [])
34
+
35
+ messages = []
36
+ for msg in raw_messages:
37
+ messages.append(
38
+ {
39
+ "role": msg.get("role", "user"),
40
+ "content": get_clean_text(msg.get("content")),
41
+ }
42
+ )
43
+
44
  stream = data.get("stream", True)
45
  temperature = data.get("temperature", config.DEFAULT_TEMP)
46
  max_tokens = data.get("max_tokens", config.DEFAULT_MAX_TOKENS)
utils.py CHANGED
@@ -1,21 +1,34 @@
1
- def sanitize_content(content):
2
  """
3
- Гарантирует, что контент - это строка.
4
- Исправляет баг Gradio, когда текст приходит как список.
 
 
 
5
  """
6
- if isinstance(content, list):
7
- return "\n".join(str(item) for item in content)
8
- return str(content) if content is not None else ""
9
 
 
 
 
10
 
11
- def get_clean_text(content):
12
- """
13
- Извлекает текст из разных форматов Gradio 5 (словарь, список, строка).
14
- Решает проблему отображения {'text': ...}
15
- """
16
- # Если пришел словарь {'text': '...', 'type': 'text'}
17
- if isinstance(content, dict) and "text" in content:
18
- return str(content["text"])
 
 
 
 
 
 
 
 
19
 
20
- # Если пришла строка или список, используем вашу функцию из utils.py
21
- return sanitize_content(content)
 
1
+ def get_clean_text(content):
2
  """
3
+ Извлекает чистый текст из любого формата (str, dict, list).
4
+ Поддерживает:
5
+ - Простые строки
6
+ - Gradio формат: {'text': '...'}
7
+ - OpenAI/Zed формат: [{'type': 'text', 'text': '...'}]
8
  """
9
+ if content is None:
10
+ return ""
 
11
 
12
+ # 1. Если это уже строка — возвращаем как есть
13
+ if isinstance(content, str):
14
+ return content
15
 
16
+ # 2. Если это словарь (Gradio 5 или часть OpenAI message)
17
+ if isinstance(content, dict):
18
+ return content.get("text", "")
19
+
20
+ # 3. Если это список (Zed, VS Code, OpenAI Vision)
21
+ if isinstance(content, list):
22
+ text_parts = []
23
+ for item in content:
24
+ if isinstance(item, str):
25
+ text_parts.append(item)
26
+ elif isinstance(item, dict):
27
+ # Извлекаем 'text' если он есть, иначе игнорируем (например, картинки)
28
+ text_parts.append(item.get("text", ""))
29
+ else:
30
+ text_parts.append(str(item))
31
+ return "".join(text_parts)
32
 
33
+ # 4. Фолбэк для всего остального
34
+ return str(content)