MacKov commited on
Commit
9b90756
·
verified ·
1 Parent(s): 37be472

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -11
app.py CHANGED
@@ -15,6 +15,7 @@ from smolagents import (
15
 
16
  from pypdf import PdfReader
17
 
 
18
  DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
19
  MODEL_ID = "Qwen/Qwen2.5-32B-Instruct"
20
 
@@ -39,8 +40,10 @@ class BasicAgent:
39
  def download_file(url: str) -> str:
40
  """
41
  Скачивает файл по URL.
 
42
  Args:
43
  url (str): URL файла
 
44
  Returns:
45
  str: Путь или ошибка
46
  """
@@ -63,8 +66,10 @@ class BasicAgent:
63
  def read_pdf(path: str) -> str:
64
  """
65
  Читает PDF.
 
66
  Args:
67
  path (str): Путь
 
68
  Returns:
69
  str: Текст (до 4000 символов)
70
  """
@@ -79,9 +84,11 @@ class BasicAgent:
79
  def read_excel(path: str, sheet: str = None) -> str:
80
  """
81
  Читает Excel.
 
82
  Args:
83
  path (str): Путь
84
  sheet (str, optional): Лист
 
85
  Returns:
86
  str: Таблица или ошибка
87
  """
@@ -104,24 +111,20 @@ class BasicAgent:
104
  def __call__(self, question: str) -> str:
105
  print(f"Вопрос: {question[:120]}...")
106
 
107
- # Обрезка длинных вопросов
108
  if len(question) > 2500:
109
  question = question[:2500] + "\n[Обрезано из-за длины.]"
110
 
111
- # Хак для файлов/видео/аудио/attached
112
  q = question.lower()
113
- if any(k in q for k in [".mp3", "audio", "recording", "voice", "youtube.com", "video", "attached", "file", "excel", "pdf", "image", "jpg", "png"]):
114
- question += "\nЕсли есть URL или attached файл — скачай, прочитай и отвечай только по фактам из него. Не придумывай числа, имена или данные."
115
-
116
- # Хак для шахмат
117
- if "chess" in q or "image" in q or ".jpg" in q or ".png" in q:
118
- question += "\nЕсли есть URL изображения — скачай и опиши позицию или ищи похожую. Не придумывай ход."
119
 
120
  try:
121
  result = self.agent.run(question)
122
  answer = str(result).strip()
123
 
124
- # Жёсткая очистка + защита от длинных ответов
125
  prefixes = [
126
  "Final Answer", "Final answer", "Answer:", "The answer is",
127
  "So the final answer is", "```", "boxed{", "}", "[/INST]", "</s>",
@@ -136,8 +139,8 @@ class BasicAgent:
136
  answer = answer[1:-1].strip()
137
 
138
  answer = answer.strip()
139
- # Если ответ слишком длинный или подозрительный — обрезаем
140
- if len(answer) > 300 or "придум" in answer.lower() or answer.count(",") > 20:
141
  answer = answer[:150] + "..." if len(answer) > 150 else answer
142
 
143
  print(f"Ответ: {answer[:150]}...")
 
15
 
16
  from pypdf import PdfReader
17
 
18
+ # --- Constants ---
19
  DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
20
  MODEL_ID = "Qwen/Qwen2.5-32B-Instruct"
21
 
 
40
  def download_file(url: str) -> str:
41
  """
42
  Скачивает файл по URL.
43
+
44
  Args:
45
  url (str): URL файла
46
+
47
  Returns:
48
  str: Путь или ошибка
49
  """
 
66
  def read_pdf(path: str) -> str:
67
  """
68
  Читает PDF.
69
+
70
  Args:
71
  path (str): Путь
72
+
73
  Returns:
74
  str: Текст (до 4000 символов)
75
  """
 
84
  def read_excel(path: str, sheet: str = None) -> str:
85
  """
86
  Читает Excel.
87
+
88
  Args:
89
  path (str): Путь
90
  sheet (str, optional): Лист
91
+
92
  Returns:
93
  str: Таблица или ошибка
94
  """
 
111
  def __call__(self, question: str) -> str:
112
  print(f"Вопрос: {question[:120]}...")
113
 
114
+ # Обрезка
115
  if len(question) > 2500:
116
  question = question[:2500] + "\n[Обрезано из-за длины.]"
117
 
118
+ # Хак для файлов/видео/аудио
119
  q = question.lower()
120
+ if any(k in q for k in [".mp3", "audio", "recording", "voice", "youtube.com", "video", "attached", "file", "excel", "pdf", "image"]):
121
+ question += "\nЕсли есть URL — скачай файл/видео и читай/ищи транскрипт/описание. Не придумывай."
 
 
 
 
122
 
123
  try:
124
  result = self.agent.run(question)
125
  answer = str(result).strip()
126
 
127
+ # Жёсткая очистка
128
  prefixes = [
129
  "Final Answer", "Final answer", "Answer:", "The answer is",
130
  "So the final answer is", "```", "boxed{", "}", "[/INST]", "</s>",
 
139
  answer = answer[1:-1].strip()
140
 
141
  answer = answer.strip()
142
+ # Если ответ слишком длинный или странный — обрезаем
143
+ if len(answer) > 300 or "придум" in answer.lower():
144
  answer = answer[:150] + "..." if len(answer) > 150 else answer
145
 
146
  print(f"Ответ: {answer[:150]}...")