Initial commit
This commit is contained in:
55
server/brain/ingest.py
Normal file
55
server/brain/ingest.py
Normal file
@@ -0,0 +1,55 @@
|
||||
"""
|
||||
brain/ingest.py — Thought ingestion pipeline.
|
||||
|
||||
Runs embedding generation and metadata extraction in parallel, then stores
|
||||
both in PostgreSQL. Returns the stored thought ID and a human-readable
|
||||
confirmation string suitable for sending back via Telegram.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def ingest_thought(content: str, user_id: str | None = None) -> dict:
|
||||
"""
|
||||
Full ingestion pipeline for one thought:
|
||||
1. Generate embedding + extract metadata (parallel)
|
||||
2. Store in PostgreSQL
|
||||
3. Return {id, metadata, confirmation}
|
||||
|
||||
Raises RuntimeError if Brain DB is not available.
|
||||
"""
|
||||
from .embeddings import get_embedding
|
||||
from .metadata import extract_metadata
|
||||
from .database import insert_thought
|
||||
|
||||
# Run embedding and metadata extraction in parallel
|
||||
embedding, metadata = await asyncio.gather(
|
||||
get_embedding(content),
|
||||
extract_metadata(content),
|
||||
)
|
||||
|
||||
thought_id = await insert_thought(content, embedding, metadata, user_id=user_id)
|
||||
|
||||
# Build a human-readable confirmation (like the Slack bot reply in the guide)
|
||||
thought_type = metadata.get("type", "other")
|
||||
tags = metadata.get("tags", [])
|
||||
people = metadata.get("people", [])
|
||||
actions = metadata.get("action_items", [])
|
||||
|
||||
lines = [f"✅ Captured as {thought_type}"]
|
||||
if tags:
|
||||
lines[0] += f" — {', '.join(tags)}"
|
||||
if people:
|
||||
lines.append(f"People: {', '.join(people)}")
|
||||
if actions:
|
||||
lines.append("Actions: " + "; ".join(actions))
|
||||
|
||||
return {
|
||||
"id": thought_id,
|
||||
"metadata": metadata,
|
||||
"confirmation": "\n".join(lines),
|
||||
}
|
||||
Reference in New Issue
Block a user