59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""Home-message bootstrap routes.
|
|
|
|
- POST /api/messages/new -- classify a message, create a fresh queen session
|
|
"""
|
|
|
|
from aiohttp import web
|
|
|
|
from framework.agents.queen.queen_profiles import ensure_default_queens, select_queen
|
|
from framework.host.event_bus import AgentEvent, EventType
|
|
from framework.server.routes_queens import _stop_live_sessions
|
|
|
|
|
|
async def handle_new_message(request: web.Request) -> web.Response:
|
|
"""POST /api/messages/new -- bootstrap a fresh queen DM from a home prompt."""
|
|
manager = request.app["manager"]
|
|
body = await request.json() if request.can_read_body else {}
|
|
message = body.get("message")
|
|
if not isinstance(message, str) or not message.strip():
|
|
return web.json_response({"error": "message is required"}, status=400)
|
|
message = message.strip()
|
|
|
|
ensure_default_queens()
|
|
|
|
# Build LLM for classification
|
|
llm = manager.build_llm()
|
|
|
|
# Run queen selection - this is the slow part we can't avoid
|
|
queen_id = await select_queen(message, llm)
|
|
|
|
await _stop_live_sessions(manager)
|
|
|
|
# Create session with pre-bound queen
|
|
session = await manager.create_session(
|
|
initial_prompt=message,
|
|
queen_name=queen_id,
|
|
initial_phase="independent",
|
|
)
|
|
|
|
await session.event_bus.publish(
|
|
AgentEvent(
|
|
type=EventType.CLIENT_INPUT_RECEIVED,
|
|
stream_id="queen",
|
|
node_id="queen",
|
|
execution_id=session.id,
|
|
data={"content": message, "image_count": 0},
|
|
)
|
|
)
|
|
return web.json_response(
|
|
{
|
|
"queen_id": queen_id,
|
|
"session_id": session.id,
|
|
}
|
|
)
|
|
|
|
|
|
def register_routes(app: web.Application) -> None:
|
|
"""Register home-message routes."""
|
|
app.router.add_post("/api/messages/new", handle_new_message)
|