feat(search): add semantic similar session matching via Voyage AI embeddings
Adds vector-based similar session discovery using the existing Voyage AI
embedding infrastructure and pgvector cosine similarity search.
- New AISessionEmbedding model with vector(1024) column
- session_embedding_service: generate + upsert embeddings, find similar sessions
- Embeddings generated on session create (from problem_summary/domain) and
updated on resolve (adds resolution_summary)
- GET /ai-sessions/{id}/similar endpoint returns top-N similar sessions
- Migration a7c9e3b1f402 creates ai_session_embeddings table
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -331,6 +331,13 @@ async def start_session(
|
||||
|
||||
await db.flush()
|
||||
|
||||
# Generate session embedding for similar-session matching (fire-and-forget)
|
||||
try:
|
||||
from app.services.session_embedding_service import generate_session_embedding
|
||||
await generate_session_embedding(session.id, db)
|
||||
except Exception:
|
||||
logger.warning("Failed to generate session embedding on create", exc_info=True)
|
||||
|
||||
return AISessionCreateResponse(
|
||||
session_id=session.id,
|
||||
status=session.status,
|
||||
@@ -492,6 +499,13 @@ async def resolve_session(
|
||||
|
||||
await db.flush()
|
||||
|
||||
# Update session embedding with resolution data for similar-session matching
|
||||
try:
|
||||
from app.services.session_embedding_service import generate_session_embedding
|
||||
await generate_session_embedding(session.id, db)
|
||||
except Exception:
|
||||
logger.warning("Failed to update session embedding on resolve", exc_info=True)
|
||||
|
||||
# Push documentation to PSA if ticket is linked
|
||||
psa_result = await _push_to_psa(session, user_id, db)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user