Generalize from health-specific to universal personal assistant

The app manages multiple life areas (health, finance, personal, work),
not just health. Updated all health-specific language throughout:

Backend:
- Default system prompt: general personal assistant (not health-only)
- AI tool descriptions: generic (not health records/medications)
- Memory categories: health, finance, personal, work, document_summary, other
  (replaces condition, medication, allergy, vital)
- PDF template: "Prepared for" (not "Patient"), "Key Information" (not "Health Profile")
- Renamed generate_health_pdf -> generate_pdf_report, health_report.html -> report.html
- Renamed run_daily_health_review -> run_daily_review
- Context assembly: "User Profile" (not "Health Profile")
- OpenAPI: generic descriptions

Frontend:
- Dashboard subtitle: "Your personal AI assistant"
- Memory categories: Health, Finance, Personal, Work
- Document types: Report, Contract, Receipt, Certificate (not lab_result, etc.)
- Updated en + ru translations throughout

Documentation:
- README: general personal assistant description
- Removed health-only feature descriptions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-19 15:15:39 +03:00
parent 03dc42e74a
commit b0790d719c
14 changed files with 63 additions and 64 deletions

View File

@@ -24,13 +24,13 @@ client = AsyncAnthropic(api_key=settings.ANTHROPIC_API_KEY)
AI_TOOLS = [
{
"name": "save_memory",
"description": "Save important health information to the user's memory. Use this when the user shares critical health data like conditions, medications, allergies, or important health facts.",
"description": "Save important information to the user's memory. Use this when the user shares critical personal data, facts, preferences, or key details they want to remember across conversations.",
"input_schema": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": ["condition", "medication", "allergy", "vital", "document_summary", "other"],
"enum": ["health", "finance", "personal", "work", "document_summary", "other"],
"description": "Category of the memory entry",
},
"title": {"type": "string", "description": "Short title for the memory entry"},
@@ -46,7 +46,7 @@ AI_TOOLS = [
},
{
"name": "search_documents",
"description": "Search the user's uploaded health documents for relevant information. Use this when you need to find specific health records, lab results, or consultation notes.",
"description": "Search the user's uploaded documents for relevant information. Use this when you need to find specific records, files, or notes the user has uploaded.",
"input_schema": {
"type": "object",
"properties": {
@@ -57,13 +57,13 @@ AI_TOOLS = [
},
{
"name": "get_memory",
"description": "Retrieve the user's stored health memories filtered by category. Use this to recall previously saved health information.",
"description": "Retrieve the user's stored memories filtered by category. Use this to recall previously saved information.",
"input_schema": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": ["condition", "medication", "allergy", "vital", "document_summary", "other"],
"enum": ["health", "finance", "personal", "work", "document_summary", "other"],
"description": "Optional category filter. Omit to get all memories.",
},
},
@@ -94,7 +94,7 @@ AI_TOOLS = [
},
{
"name": "generate_pdf",
"description": "Generate a PDF health report compilation from the user's data. Use this when the user asks for a document or summary of their health information.",
"description": "Generate a PDF report compilation from the user's data. Use this when the user asks for a document or summary of their stored information.",
"input_schema": {
"type": "object",
"properties": {
@@ -173,8 +173,8 @@ async def _execute_tool(
})
elif tool_name == "generate_pdf":
from app.services.pdf_service import generate_health_pdf
pdf = await generate_health_pdf(db, user_id, title=tool_input["title"])
from app.services.pdf_service import generate_pdf_report
pdf = await generate_pdf_report(db, user_id, title=tool_input["title"])
await db.commit()
return json.dumps({
"status": "generated",
@@ -213,7 +213,7 @@ async def assemble_context(
memories = await get_critical_memories(db, user_id)
if memories:
memory_lines = [f"- [{m.category}] {m.title}: {m.content}" for m in memories]
system_parts.append(f"---\nUser Health Profile:\n" + "\n".join(memory_lines))
system_parts.append(f"---\nUser Profile (Key Information):\n" + "\n".join(memory_lines))
# 5. Relevant document excerpts (based on user message keywords)
if user_message.strip():

View File

@@ -5,14 +5,14 @@ from sqlalchemy.ext.asyncio import AsyncSession
from app.models.context_file import ContextFile
DEFAULT_SYSTEM_PROMPT = """You are a personal AI health assistant. Your role is to:
- Help users understand their health data and medical documents
- Provide health-related recommendations based on uploaded information
- Schedule reminders for checkups, medications, and health-related activities
- Compile health summaries when requested
- Answer health questions clearly and compassionately
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, recommend consulting a healthcare professional.
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."""

View File

@@ -19,7 +19,7 @@ jinja_env = Environment(
)
async def generate_health_pdf(
async def generate_pdf_report(
db: AsyncSession,
user_id: uuid.UUID,
title: str,
@@ -53,7 +53,7 @@ async def generate_health_pdf(
})
# Render HTML
template = jinja_env.get_template("health_report.html")
template = jinja_env.get_template("report.html")
html = template.render(
title=title,
user_name=user.full_name or user.username,

View File

@@ -16,11 +16,11 @@ def start_scheduler():
replace_existing=True,
)
from app.workers.health_review import run_daily_health_review
from app.workers.health_review import run_daily_review
scheduler.add_job(
run_daily_health_review,
run_daily_review,
trigger=CronTrigger(hour=8, minute=0),
id="daily_health_review",
id="daily_review",
replace_existing=True,
)