feat(05-04): add query_model_direct() for @mention support
Add direct model query function to orchestrator that: - Takes single model, message, optional discussion context, and project name - Builds context from discussion history when available - Uses system prompt indicating this is a direct message - Handles errors gracefully (returns error message string) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
a59321cc3b
commit
5934d21256
1 changed files with 52 additions and 0 deletions
|
|
@ -107,6 +107,58 @@ def build_context(discussion: Discussion) -> list[dict]:
|
|||
return messages
|
||||
|
||||
|
||||
async def query_model_direct(
|
||||
model: str,
|
||||
message: str,
|
||||
discussion: Discussion | None,
|
||||
project_name: str,
|
||||
) -> str:
|
||||
"""Query a single model directly with optional discussion context.
|
||||
|
||||
Used for @mention messages where user addresses a specific model.
|
||||
If a discussion is provided, includes full context so the model
|
||||
can reference prior responses.
|
||||
|
||||
Args:
|
||||
model: Model short name (e.g., "claude", "gpt", "gemini").
|
||||
message: The direct message to the model.
|
||||
discussion: Optional Discussion object for context (with eager-loaded rounds/messages).
|
||||
project_name: Project name for context.
|
||||
|
||||
Returns:
|
||||
The model's response text, or error message if the query fails.
|
||||
"""
|
||||
client = get_ai_client()
|
||||
|
||||
# Build system prompt indicating this is a direct message
|
||||
system_prompt = f"""You are participating in a discussion about: {project_name}
|
||||
|
||||
This is a direct message to you specifically. The user has chosen to address you
|
||||
directly for your unique perspective.
|
||||
|
||||
Respond helpfully and concisely."""
|
||||
|
||||
# Build messages with optional discussion context
|
||||
if discussion is not None:
|
||||
messages = build_context(discussion)
|
||||
# Add the direct message
|
||||
messages.append({"role": "user", "content": f"[Direct to you]: {message}"})
|
||||
else:
|
||||
messages = [{"role": "user", "content": message}]
|
||||
|
||||
try:
|
||||
response = await client.complete(
|
||||
model=model,
|
||||
messages=messages,
|
||||
system_prompt=system_prompt,
|
||||
)
|
||||
logger.info("Direct query to %s successful", model)
|
||||
return response
|
||||
except Exception as e:
|
||||
logger.error("Direct query to %s failed: %s", model, e)
|
||||
return f"[Error: {e}]"
|
||||
|
||||
|
||||
async def run_discussion_round(
|
||||
discussion: Discussion,
|
||||
models: list[str],
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue