Problem
All query matching is substring-based (T.isInfixOf). An agent asking "how does authentication work" won't match a node labeled "LoginService" — no textual overlap. Memory agents need semantic similarity search.
Solution
Implement hybrid search combining:
- Text matching (current): substring score
- Embedding similarity: cosine similarity between query and node embeddings
- Community proximity: bonus for nodes in same community as top matches
New modules:
- Domain.Embedding — EmbeddingVector type, cosineSimilarity, euclideanDistance
- UseCase.SemanticSearch — hybridSearch, semanticSearchNodes
- Infrastructure.Embedding.OpenAI — OpenAI embeddings API client
- Infrastructure.Embedding.Local — Local sentence-transformers (future)
Scoring formula:
totalScore = textScore * 1.0 + embScore * 0.7 + commScore * 0.3
New MCP tool:
{
"name": "search_semantic",
"description": "Search nodes using hybrid text + semantic similarity",
"inputSchema": {
"query": "Search query",
"mode": "hybrid|text|embedding",
"limit": 10
}
}
Acceptance Criteria
Files to Create/Modify
- src/Graphos/Domain/Embedding.hs (NEW)
- src/Graphos/Domain/Types/Node.hs — add nodeEmbedding field
- src/Graphos/UseCase/SemanticSearch.hs (NEW)
- src/Graphos/Infrastructure/Embedding/OpenAI.hs (NEW)
- src/Graphos/Infrastructure/Server/MCP.hs — add search_semantic tool
Effort: 3-5 days
Priority: Critical
See: docs/proposals/memory-agent/05-technical-specifications.md (Spec 2, 3)
Problem
All query matching is substring-based (T.isInfixOf). An agent asking "how does authentication work" won't match a node labeled "LoginService" — no textual overlap. Memory agents need semantic similarity search.
Solution
Implement hybrid search combining:
New modules:
Scoring formula:
New MCP tool:
{ "name": "search_semantic", "description": "Search nodes using hybrid text + semantic similarity", "inputSchema": { "query": "Search query", "mode": "hybrid|text|embedding", "limit": 10 } }Acceptance Criteria
Files to Create/Modify
Effort: 3-5 days
Priority: Critical
See: docs/proposals/memory-agent/05-technical-specifications.md (Spec 2, 3)