From 95d022ec64856078967f73aae643fc9d348fc765 Mon Sep 17 00:00:00 2001 From: Aaron Nelson Date: Wed, 29 Apr 2026 21:34:20 +0000 Subject: [PATCH] fix: FalkorDriver database=aaron, build indices on correct graph --- scripts/graphiti_service.py | 42 ++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/scripts/graphiti_service.py b/scripts/graphiti_service.py index 34ce287..0a6c680 100644 --- a/scripts/graphiti_service.py +++ b/scripts/graphiti_service.py @@ -64,7 +64,7 @@ async def lifespan(app: FastAPI): llm_client=get_llm_client(), embedder=SentenceTransformerEmbedder(), cross_encoder=BGERerankerClient(), - graph_driver=FalkorDriver(host=FALKORDB_HOST, port=FALKORDB_PORT), + graph_driver=FalkorDriver(host=FALKORDB_HOST, port=FALKORDB_PORT, database="aaron"), ) await graphiti_instance.build_indices_and_constraints() log.info(f"Graphiti ready — provider: {LLM_PROVIDER}, group: {GROUP_ID}") @@ -73,12 +73,25 @@ async def lifespan(app: FastAPI): app = FastAPI(title="Aaron AI Graphiti Sidecar", lifespan=lifespan) +class BulkEpisodeItem(BaseModel): + name: str + content: str + source_description: str = "" + timestamp: str | None = None + + +class BulkEpisodeRequest(BaseModel): + episodes: list[BulkEpisodeItem] + group_id: str | None = None + + class EpisodeRequest(BaseModel): name: str content: str source_description: str = "" timestamp: str | None = None group_id: str | None = None + custom_extraction_instructions: str | None = None @app.get("/health") async def health(): @@ -97,12 +110,39 @@ async def add_episode(req: EpisodeRequest): reference_time=ref_time, source_description=req.source_description, group_id=req.group_id or GROUP_ID, + custom_extraction_instructions=req.custom_extraction_instructions, ) return {"ok": True} except Exception as e: log.error(f"Episode ingestion failed: {e}") raise HTTPException(status_code=500, detail=str(e)) +@app.post("/episodes/bulk") +async def add_episodes_bulk(req: BulkEpisodeRequest): + g = await get_graphiti() + from graphiti_core.nodes import EpisodeType + from graphiti_core.utils.bulk_utils import RawEpisode + raw_episodes = [] + for ep in req.episodes: + ref_time = datetime.fromisoformat(ep.timestamp) if ep.timestamp else datetime.now() + raw_episodes.append(RawEpisode( + name=ep.name, + content=ep.content, + source_description=ep.source_description, + source=EpisodeType.text, + reference_time=ref_time, + )) + try: + result = await g.add_episode_bulk( + bulk_episodes=raw_episodes, + group_id=req.group_id or GROUP_ID, + ) + return {"ok": True, "count": len(raw_episodes)} + except Exception as e: + log.error(f"Bulk ingestion failed: {e}") + raise HTTPException(status_code=500, detail=str(e)) + + @app.get("/search") async def search(query: str, limit: int = 8, group_id: str | None = None): g = await get_graphiti()