feat: inject PSA ticket context into copilot system prompt (Task 10)
When a copilot conversation has an associated session with a linked PSA ticket, fetch the ticket context and append it to the system prompt. Failure is non-critical — errors are logged and the copilot proceeds without context rather than failing the request. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -180,6 +180,40 @@ async def send_message(
|
|||||||
system_prompt += _build_flow_context(tree, conversation.current_node_id)
|
system_prompt += _build_flow_context(tree, conversation.current_node_id)
|
||||||
system_prompt += build_rag_context(rag_results)
|
system_prompt += build_rag_context(rag_results)
|
||||||
|
|
||||||
|
# Inject PSA ticket context if session has a linked ticket
|
||||||
|
if conversation.session_id:
|
||||||
|
try:
|
||||||
|
from app.models.session import Session as SessionModel
|
||||||
|
session_result = await db.execute(
|
||||||
|
select(SessionModel).where(SessionModel.id == conversation.session_id)
|
||||||
|
)
|
||||||
|
session = session_result.scalar_one_or_none()
|
||||||
|
if session and session.psa_ticket_id:
|
||||||
|
try:
|
||||||
|
from app.services.psa.registry import get_provider_for_account
|
||||||
|
from app.services.psa.ticket_context import format_ticket_context_for_prompt
|
||||||
|
|
||||||
|
provider = await get_provider_for_account(conversation.account_id, db)
|
||||||
|
connection_id = str(session.psa_connection_id) if session.psa_connection_id else None
|
||||||
|
ticket_ctx = await provider.get_ticket_context(
|
||||||
|
ticket_id=int(session.psa_ticket_id),
|
||||||
|
connection_id=connection_id,
|
||||||
|
)
|
||||||
|
system_prompt += "\n\n" + format_ticket_context_for_prompt(ticket_ctx)
|
||||||
|
except Exception as psa_err:
|
||||||
|
logger.warning(
|
||||||
|
"Failed to fetch PSA ticket context for copilot (session=%s, ticket=%s): %s",
|
||||||
|
conversation.session_id,
|
||||||
|
session.psa_ticket_id,
|
||||||
|
psa_err,
|
||||||
|
)
|
||||||
|
except Exception as session_err:
|
||||||
|
logger.warning(
|
||||||
|
"Failed to look up session for copilot PSA context (session_id=%s): %s",
|
||||||
|
conversation.session_id,
|
||||||
|
session_err,
|
||||||
|
)
|
||||||
|
|
||||||
# Build messages for AI
|
# Build messages for AI
|
||||||
ai_messages = []
|
ai_messages = []
|
||||||
for msg in conversation.messages:
|
for msg in conversation.messages:
|
||||||
|
|||||||
Reference in New Issue
Block a user