Files
hive/core/framework/server/routes_messages.py
T
2026-04-09 18:22:16 -07:00

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)