fix: прибрано повідомлення 'Обробляю фото' та оновлено обробку фото через Swapper vision-8b
This commit is contained in:
@@ -330,9 +330,6 @@ async def telegram_webhook(update: TelegramUpdate):
|
|||||||
# Build file URL
|
# Build file URL
|
||||||
file_url = f"https://api.telegram.org/file/bot{telegram_token}/{file_path}"
|
file_url = f"https://api.telegram.org/file/bot{telegram_token}/{file_path}"
|
||||||
|
|
||||||
# Send "Processing..." message
|
|
||||||
await send_telegram_message(chat_id, "📸 Обробляю фото через Vision-8b модель...")
|
|
||||||
|
|
||||||
# Send to Router with specialist_vision_8b model (Swapper)
|
# Send to Router with specialist_vision_8b model (Swapper)
|
||||||
router_request = {
|
router_request = {
|
||||||
"message": f"Опиши це зображення детально: {file_url}",
|
"message": f"Опиши це зображення детально: {file_url}",
|
||||||
@@ -937,9 +934,6 @@ async def helion_telegram_webhook(update: TelegramUpdate):
|
|||||||
# Build file URL
|
# Build file URL
|
||||||
file_url = f"https://api.telegram.org/file/bot{helion_token}/{file_path}"
|
file_url = f"https://api.telegram.org/file/bot{helion_token}/{file_path}"
|
||||||
|
|
||||||
# Send "Processing..." message
|
|
||||||
await send_telegram_message(chat_id, "📸 Обробляю фото через Vision-8b модель...", helion_token)
|
|
||||||
|
|
||||||
# Send to Router with specialist_vision_8b model (Swapper)
|
# Send to Router with specialist_vision_8b model (Swapper)
|
||||||
router_request = {
|
router_request = {
|
||||||
"message": f"Опиши це зображення детально, зосередься на технічних деталях EcoMiner/BioMiner якщо вони є: {file_url}",
|
"message": f"Опиши це зображення детально, зосередься на технічних деталях EcoMiner/BioMiner якщо вони є: {file_url}",
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ class RouterHandler:
|
|||||||
logger.error(f"❌ Error handling Telegram event: {e}", exc_info=True)
|
logger.error(f"❌ Error handling Telegram event: {e}", exc_info=True)
|
||||||
|
|
||||||
async def _handle_photo(self, event: TelegramUpdateEvent):
|
async def _handle_photo(self, event: TelegramUpdateEvent):
|
||||||
"""Обробити фото через Vision Encoder"""
|
"""Обробити фото через Swapper vision-8b модель"""
|
||||||
try:
|
try:
|
||||||
photo_info = event.metadata.get("photo", {})
|
photo_info = event.metadata.get("photo", {})
|
||||||
file_url = photo_info.get("file_url", "")
|
file_url = photo_info.get("file_url", "")
|
||||||
@@ -212,21 +212,54 @@ class RouterHandler:
|
|||||||
|
|
||||||
logger.info(f"🖼️ Processing photo: agent={event.agent_id}, url={file_url[:50]}...")
|
logger.info(f"🖼️ Processing photo: agent={event.agent_id}, url={file_url[:50]}...")
|
||||||
|
|
||||||
# TODO: Інтегрувати з multimodal LLM (GPT-4V, Claude Vision, LLaVA)
|
# Відправити до Router з specialist_vision_8b через Swapper
|
||||||
# Поки що Vision Encoder робить тільки embeddings, не опис
|
router_url = os.getenv("ROUTER_URL", "http://router:9102")
|
||||||
|
router_request = {
|
||||||
|
"message": f"Опиши це зображення детально: {file_url}",
|
||||||
|
"mode": "chat",
|
||||||
|
"agent": event.agent_id,
|
||||||
|
"metadata": {
|
||||||
|
"source": "telegram",
|
||||||
|
"chat_id": event.chat_id,
|
||||||
|
"file_url": file_url,
|
||||||
|
"has_image": True,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
# Заглушка для demonstration
|
# Override LLM to use specialist_vision_8b for image understanding
|
||||||
response_text = f"🖼️ Отримав зображення"
|
router_request["metadata"]["use_llm"] = "specialist_vision_8b"
|
||||||
if caption:
|
|
||||||
response_text += f" з підписом: \"{caption}\""
|
|
||||||
response_text += "\n\n⚠️ Аналіз зображень буде доступний після інтеграції multimodal LLM (GPT-4V/Claude Vision)."
|
|
||||||
|
|
||||||
# Відправити відповідь
|
try:
|
||||||
await telegram_listener.send_message(
|
async with httpx.AsyncClient(timeout=90.0) as client:
|
||||||
agent_id=event.agent_id,
|
response = await client.post(f"{router_url}/route", json=router_request)
|
||||||
chat_id=event.chat_id,
|
response.raise_for_status()
|
||||||
text=response_text
|
result = response.json()
|
||||||
)
|
|
||||||
|
if result.get("ok"):
|
||||||
|
answer_text = result.get("data", {}).get("text") or result.get("response", "")
|
||||||
|
if answer_text:
|
||||||
|
await telegram_listener.send_message(
|
||||||
|
agent_id=event.agent_id,
|
||||||
|
chat_id=event.chat_id,
|
||||||
|
text=f"✅ **Фото оброблено**\n\n{answer_text}"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
# Якщо помилка
|
||||||
|
error_msg = result.get("error", "Unknown error")
|
||||||
|
logger.error(f"Router error: {error_msg}")
|
||||||
|
await telegram_listener.send_message(
|
||||||
|
agent_id=event.agent_id,
|
||||||
|
chat_id=event.chat_id,
|
||||||
|
text=f"Вибач, не вдалося обробити фото: {error_msg}"
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error calling Router: {e}", exc_info=True)
|
||||||
|
await telegram_listener.send_message(
|
||||||
|
agent_id=event.agent_id,
|
||||||
|
chat_id=event.chat_id,
|
||||||
|
text="Вибач, не вдалося обробити фото. Переконайся, що Swapper Service з vision-8b моделлю запущений."
|
||||||
|
)
|
||||||
|
|
||||||
logger.info(f"✅ Photo response sent: agent={event.agent_id}, chat={event.chat_id}")
|
logger.info(f"✅ Photo response sent: agent={event.agent_id}, chat={event.chat_id}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user