import uuid from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models.context_file import ContextFile DEFAULT_SYSTEM_PROMPT = """You are a personal AI assistant helping users manage different areas of their life. Your role is to: - Help users organize and understand their uploaded documents and data - Provide recommendations and insights based on stored information - Schedule reminders for important events, deadlines, and recurring activities - Compile summaries and reports when requested - Answer questions clearly and helpfully Always be empathetic, accurate, and clear. When uncertain about specialized topics, recommend consulting a relevant professional. You can communicate in English and Russian based on the user's preference.""" async def get_primary_context(db: AsyncSession) -> ContextFile | None: result = await db.execute( select(ContextFile).where(ContextFile.type == "primary", ContextFile.user_id.is_(None)) ) return result.scalar_one_or_none() async def get_personal_context(db: AsyncSession, user_id: uuid.UUID) -> ContextFile | None: result = await db.execute( select(ContextFile).where(ContextFile.type == "personal", ContextFile.user_id == user_id) ) return result.scalar_one_or_none() async def upsert_personal_context( db: AsyncSession, user_id: uuid.UUID, content: str ) -> ContextFile: ctx = await get_personal_context(db, user_id) if ctx: ctx.content = content ctx.version = ctx.version + 1 ctx.updated_by = user_id else: ctx = ContextFile( type="personal", user_id=user_id, content=content, version=1, updated_by=user_id, ) db.add(ctx) await db.flush() return ctx async def upsert_primary_context( db: AsyncSession, content: str, admin_user_id: uuid.UUID ) -> ContextFile: ctx = await get_primary_context(db) if ctx: ctx.content = content ctx.version = ctx.version + 1 ctx.updated_by = admin_user_id else: ctx = ContextFile( type="primary", user_id=None, content=content, version=1, updated_by=admin_user_id, ) db.add(ctx) await db.flush() return ctx