diff --git a/agent-office/app/agents/music.py b/agent-office/app/agents/music.py index cd54366..9e05809 100644 --- a/agent-office/app/agents/music.py +++ b/agent-office/app/agents/music.py @@ -63,7 +63,9 @@ class MusicAgent(BaseAgent): approve_task(task_id, via="telegram") await self.transition("working", "작곡 중...", task_id) + asyncio.create_task(self._poll_composition(task_id, task)) + async def _poll_composition(self, task_id: str, task: dict) -> None: try: input_data = task["input_data"] payload = { diff --git a/agent-office/app/agents/stock.py b/agent-office/app/agents/stock.py index 6f8c441..effabb0 100644 --- a/agent-office/app/agents/stock.py +++ b/agent-office/app/agents/stock.py @@ -45,12 +45,16 @@ class StockAgent(BaseAgent): return {"ok": True, "message": "뉴스 수집 시작"} if command == "add_alert": + symbol = params.get("symbol") + target_price = params.get("target_price") + if not symbol or target_price is None: + return {"ok": False, "message": "symbol과 target_price는 필수입니다"} config = get_agent_config(self.agent_id) alerts = config["custom_config"].get("alerts", []) alerts.append({ - "symbol": params["symbol"], - "name": params.get("name", params["symbol"]), - "target_price": params["target_price"], + "symbol": symbol, + "name": params.get("name", symbol), + "target_price": target_price, "direction": params.get("direction", "above"), }) from ..db import update_agent_config diff --git a/agent-office/app/main.py b/agent-office/app/main.py index 99df65f..1928a71 100644 --- a/agent-office/app/main.py +++ b/agent-office/app/main.py @@ -1,6 +1,6 @@ import os import json -from fastapi import FastAPI, WebSocket, WebSocketDisconnect +from fastapi import FastAPI, HTTPException, WebSocket, WebSocketDisconnect from fastapi.middleware.cors import CORSMiddleware from .config import CORS_ALLOW_ORIGINS @@ -48,7 +48,10 @@ async def websocket_endpoint(ws: WebSocket): }, ensure_ascii=False)) while True: data = await ws.receive_text() - msg = json.loads(data) + try: + msg = json.loads(data) + except json.JSONDecodeError: + continue await _handle_ws_message(msg) except WebSocketDisconnect: pass @@ -86,7 +89,7 @@ def list_agents(): def agent_detail(agent_id: str): config = get_agent_config(agent_id) if not config: - return {"error": "Agent not found"}, 404 + raise HTTPException(status_code=404, detail="Agent not found") agent = get_agent(agent_id) state_info = {"state": agent.state, "detail": agent.state_detail} if agent else {} return {**config, **state_info} @@ -114,7 +117,7 @@ def pending_tasks(): def task_detail(task_id: str): task = get_task(task_id) if not task: - return {"error": "Task not found"}, 404 + raise HTTPException(status_code=404, detail="Task not found") return task @app.post("/api/agent-office/command") diff --git a/agent-office/requirements.txt b/agent-office/requirements.txt index accb774..0aed057 100644 --- a/agent-office/requirements.txt +++ b/agent-office/requirements.txt @@ -1,7 +1,5 @@ fastapi==0.115.6 uvicorn[standard]==0.30.6 -requests==2.32.3 apscheduler==3.10.4 -python-telegram-bot==21.5 websockets>=12.0 httpx>=0.27