initial commit
This commit is contained in:
52
backend/app/services/instruction_service.py
Normal file
52
backend/app/services/instruction_service.py
Normal file
@@ -0,0 +1,52 @@
|
||||
"""FluentGerman.ai — Instruction assembly service."""
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models import Instruction, InstructionType
|
||||
|
||||
|
||||
async def get_system_prompt(db: AsyncSession, user_id: int) -> str:
|
||||
"""Assemble the full system prompt from global + personal + homework instructions."""
|
||||
|
||||
# Global instructions (no user_id)
|
||||
result = await db.execute(
|
||||
select(Instruction).where(
|
||||
Instruction.user_id.is_(None),
|
||||
Instruction.type == InstructionType.GLOBAL,
|
||||
)
|
||||
)
|
||||
global_instructions = result.scalars().all()
|
||||
|
||||
# Personal + homework for this user
|
||||
result = await db.execute(
|
||||
select(Instruction).where(Instruction.user_id == user_id)
|
||||
)
|
||||
user_instructions = result.scalars().all()
|
||||
|
||||
parts: list[str] = []
|
||||
|
||||
if global_instructions:
|
||||
parts.append("=== TEACHING METHOD ===")
|
||||
for inst in global_instructions:
|
||||
parts.append(f"[{inst.title}]\n{inst.content}")
|
||||
|
||||
personal = [i for i in user_instructions if i.type == InstructionType.PERSONAL]
|
||||
if personal:
|
||||
parts.append("\n=== PERSONAL INSTRUCTIONS ===")
|
||||
for inst in personal:
|
||||
parts.append(f"[{inst.title}]\n{inst.content}")
|
||||
|
||||
homework = [i for i in user_instructions if i.type == InstructionType.HOMEWORK]
|
||||
if homework:
|
||||
parts.append("\n=== CURRENT HOMEWORK ===")
|
||||
for inst in homework:
|
||||
parts.append(f"[{inst.title}]\n{inst.content}")
|
||||
|
||||
if not parts:
|
||||
return (
|
||||
"You are a helpful German language tutor. Help the student learn German "
|
||||
"through conversation, corrections, and explanations."
|
||||
)
|
||||
|
||||
return "\n\n".join(parts)
|
||||
Reference in New Issue
Block a user