phase 1-6 implemented

This commit is contained in:
dimitar committed 2026-03-10 04:14:03 +01:00
1 parent 22c274bb83
commit 2c4927478a
73 files changed
+9702 -2354

No files matched your search

+40 -30
View File
@@ -1,42 +1,52 @@
import type { AIContext } from './ai-context';
import { formatGoalForPrompt } from './ai-context';
import type { AIContext } from "./ai-context";
import type { FitnessProfile } from "../database/types";
import { formatGoalForPrompt } from "./ai-context";
/**
* Build enhanced AI prompt with comprehensive user context
* Includes profile, goals, progress, and recommendation history
*/
export function buildEnhancedPrompt(context: AIContext): string {
const { profile, activeGoals, completedGoals, recentRecommendations, progressSummary } = context;
const {
profile,
activeGoals,
completedGoals,
recentRecommendations,
progressSummary,
} = context;
// Build goals section
const activeGoalsText =
activeGoals.length > 0
? activeGoals.map((g) => `- ${formatGoalForPrompt(g)}`).join('\n')
: '- No active goals set';
// Build goals section
const activeGoalsText =
activeGoals.length > 0
? activeGoals.map((g) => `- ${formatGoalForPrompt(g)}`).join("\n")
: "- No active goals set";
const completedGoalsText =
completedGoals.length > 0
? completedGoals.slice(0, 3).map((g) => g.title).join(', ')
: 'None yet';
const completedGoalsText =
completedGoals.length > 0
? completedGoals
.slice(0, 3)
.map((g) => g.title)
.join(", ")
: "None yet";
// Build context about recent recommendations
const recommendationContextText =
recentRecommendations.length > 0
? `The user has received ${recentRecommendations.length} recommendations in the past week. Consider their progress and avoid repetitive advice.`
: 'This is a new user or they haven\'t received recent recommendations. Provide comprehensive guidance.';
// Build context about recent recommendations
const recommendationContextText =
recentRecommendations.length > 0
? `The user has received ${recentRecommendations.length} recommendations in the past week. Consider their progress and avoid repetitive advice.`
: "This is a new user or they haven't received recent recommendations. Provide comprehensive guidance.";
return `You are a professional fitness trainer and nutritionist with access to the user's complete fitness journey.
return `You are a professional fitness trainer and nutritionist with access to the user's complete fitness journey.
## User Profile
- Height: ${profile.height || 'Not specified'} cm
- Weight: ${profile.weight || 'Not specified'} kg
- Age: ${profile.age || 'Not specified'}
- Gender: ${profile.gender || 'Not specified'}
- Primary Goal: ${profile.fitnessGoals?.[0] || 'General fitness'}
- Activity Level: ${profile.activityLevel || 'Not specified'}
- Medical Conditions: ${profile.medicalConditions || 'None'}
- Allergies: ${profile.allergies || 'None'}
- Injuries: ${profile.injuries || 'None'}
- Height: ${profile.height || "Not specified"} cm
- Weight: ${profile.weight || "Not specified"} kg
- Age: ${profile.age || "Not specified"}
- Gender: ${profile.gender || "Not specified"}
- Primary Goal: ${profile.fitnessGoals?.[0] || "General fitness"}
- Activity Level: ${profile.activityLevel || "Not specified"}
- Medical Conditions: ${profile.medicalConditions || "None"}
- Allergies: ${profile.allergies || "None"}
- Injuries: ${profile.injuries || "None"}
## Active Goals (${activeGoals.length})
${activeGoalsText}
@@ -45,7 +55,7 @@ ${activeGoalsText}
- Goals Completed: ${progressSummary.goalsCompleted}
- Active Goals: ${progressSummary.goalsActive}
- Average Progress on Active Goals: ${progressSummary.averageProgress.toFixed(1)}%
${completedGoals.length > 0 ? `- Recently Completed: ${completedGoalsText}` : ''}
${completedGoals.length > 0 ? `- Recently Completed: ${completedGoalsText}` : ""}
## Recommendation History
${recommendationContextText}
@@ -70,8 +80,8 @@ Respond in the following JSON format ONLY, no other text. Do not use markdown fo
* Build basic prompt for users without complete context
* Fallback when goals or other data is missing
*/
export function buildBasicPrompt(profile: any): string {
return `You are a professional fitness trainer and nutritionist.
export function buildBasicPrompt(profile: FitnessProfile): string {
return `You are a professional fitness trainer and nutritionist.
Generate a detailed daily recommendation for a user with the following profile:
- Height: ${profile.height} cm
- Weight: ${profile.weight} kg