45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
# Migrate active memory facts into Qdrant
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
|
|
from sqlalchemy import select
|
|
|
|
from app.config import get_settings
|
|
from app.db.base import SessionLocal, init_db
|
|
from app.db.models import MemoryFact, SessionSummary
|
|
from app.rag.ingest import index_memory_fact, index_session_summary
|
|
from app.rag.store import ensure_collections
|
|
|
|
|
|
async def main() -> None:
|
|
settings = get_settings()
|
|
if not settings.rag_enabled:
|
|
print("RAG disabled; set RAG_ENABLED=true")
|
|
return
|
|
init_db()
|
|
ensure_collections()
|
|
db = SessionLocal()
|
|
try:
|
|
facts = db.scalars(select(MemoryFact).where(MemoryFact.active.is_(True))).all()
|
|
for fact in facts:
|
|
await index_memory_fact(
|
|
fact_id=int(fact.id),
|
|
user_id=int(fact.user_id),
|
|
content=fact.content,
|
|
category=fact.category,
|
|
importance=int(fact.importance),
|
|
active=bool(fact.active),
|
|
)
|
|
summaries = db.scalars(select(SessionSummary)).all()
|
|
for row in summaries:
|
|
if row.summary:
|
|
await index_session_summary(row.session_id, row.summary)
|
|
print(f"Indexed {len(facts)} facts and {len(summaries)} summaries")
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|