48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from config import FAST_MODEL
|
|
from format_prompts import FORMAT_PROMPTS
|
|
from llm_utils import run_ai
|
|
from models import ChatMessage, ChatRouteRequest, ChatRouteResponse
|
|
from prompts import chat_route_system_prompt
|
|
|
|
|
|
def classify_chat_route(request: ChatRouteRequest) -> ChatRouteResponse:
|
|
"""
|
|
Classify a chat message to route it to edit vs create workflows.
|
|
|
|
Returns ChatRouteResponse.
|
|
"""
|
|
# Build list of available document types for detection
|
|
available_types = sorted(list(FORMAT_PROMPTS.keys()))
|
|
types_list = ", ".join(available_types)
|
|
system_prompt = chat_route_system_prompt(types_list)
|
|
|
|
messages = [
|
|
ChatMessage(role="system", content=system_prompt),
|
|
*request.history[-6:],
|
|
ChatMessage(
|
|
role="user",
|
|
content=(
|
|
"Context:\n"
|
|
f"- has_files={request.has_files}\n"
|
|
f"- has_editable_html={request.has_editable_html}\n"
|
|
f"- has_create_session={request.has_create_session}\n"
|
|
f"- has_edit_session={request.has_edit_session}\n"
|
|
f"- last_route={request.last_route}\n\n"
|
|
f"- request_title={request.request_title}\n"
|
|
f"- title_context={request.title_context.model_dump() if request.title_context else None}\n\n"
|
|
f"Message: {request.message}"
|
|
),
|
|
),
|
|
]
|
|
result = run_ai(
|
|
FAST_MODEL,
|
|
messages,
|
|
ChatRouteResponse,
|
|
tag="chat_route",
|
|
log_label="chat-route",
|
|
log_exchange=True,
|
|
)
|
|
return result
|