3.6 KiB
3.6 KiB
Handoff — graphiti-neo4j-finalize
Implementation status
All structural tasks completed and statically verified in the sandbox:
| Task | Status | Notes |
|---|---|---|
| 1.1 — Config extensions | ✅ | GRAPHITI_LLM_PROVIDER, EMBEDDING_API_KEY, EMBEDDING_BASE_URL |
| 1.2 — Compose Neo4j | ✅ | neo4j:5-community + healthcheck + named volumes + depends_on |
1.3 — .env.example refresh |
✅ | Written via python3 heredoc (env-guard hook blocks cat > .env*) |
2.1 — _PassthroughReranker |
✅ | No-op replaced; injected explicitly to avoid default OpenAIRerankerClient fallback |
| 2.2 — Provider switch | ✅ | _build_llm_and_embedder() branches openai/gemini, raises on unknown |
2.3 — Drop reranker= kwarg |
✅ | _GraphNamespace.search signature cleaned |
3.1 — zep_tools.py cleanup |
✅ | reranker="cross_encoder" removed at line 504 |
3.2 — oasis_profile_generator.py cleanup |
✅ | reranker="rrf" removed at lines 324, 349 |
| 4.1 — Static verification | ✅ | grep clean; AST parse OK; compose YAML valid |
Reviewer-only smoke tasks (deferred — environment-dependent)
These tasks need either Docker or real LLM keys and could not be exercised in the autonomous sandbox. Please run before merging:
4.2 — Compose stack smoke (no LLM keys)
docker compose up -d
# Wait until both show running; neo4j shows healthy
docker compose ps
docker compose exec neo4j cypher-shell -u neo4j -p mirofish123 'RETURN 1'
curl localhost:5001/health
Expected: both services running, Neo4j healthy, /health returns {"status":"ok"}.
4.3 — Provider misconfiguration smoke
Set GRAPHITI_LLM_PROVIDER=invalid in .env, hit /api/graph/build once. Expected: backend logs contain a ValueError naming the offending value and listing ('openai', 'gemini').
4.4 — Qwen end-to-end (real keys required)
LLM_API_KEY=<qwen>
LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
LLM_MODEL_NAME=qwen-plus
EMBEDDING_API_KEY=<openai>
EMBEDDING_MODEL=text-embedding-3-small
# GRAPHITI_LLM_PROVIDER=openai (default)
Upload a small .txt, run ontology + graph build, verify graph data + report endpoints return non-empty payloads.
4.5 — Gemini regression (real Gemini key required)
GRAPHITI_LLM_PROVIDER=gemini
LLM_API_KEY=<gemini>
EMBEDDING_MODEL=text-embedding-004
Same upload+build flow; expect identical behaviour to pre-change implementation.
Notes for reviewers
- Default provider flipped from Gemini (de-facto) to OpenAI-compatible (documented). Existing Gemini deployments must add
GRAPHITI_LLM_PROVIDER=geminito.envafter pulling. Documented in the new.env.exampleand design.md migration section. - Reranker is still passthrough — same behavioural state as before (no real reranking). Update: this was deferred from this spec and has since shipped in follow-up spec
graphiti-ollama-reranker(ticket #39): the default is now an Ollama-backedCrossEncoderClient;RERANKER_PROVIDER=nonepreserves the passthrough behaviour described here. .env.examplewrite went through Python heredoc becausepre_tool_env_guard.shblockscat > .env*patterns. Worth confirming the file content is what you expect; the new content mirrors the README env section verbatim.
Spec artefacts
Everything is under .kiro/specs/graphiti-neo4j-finalize/:
requirements.md— 9 EARS requirement areasdesign.md— architecture + traceability matrixresearch.md— discovery findings (Graphiti 0.11.6 class signatures, env-guard scope)gap-analysis.md— pre-design gap reporttasks.md— task breakdown with completion status