Update app.py
Browse files
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 |
-
# Хак для файлов/видео/аудио
|
| 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"
|
| 114 |
-
question += "\nЕсли есть URL
|
| 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()
|
| 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]}...")
|