This commit is contained in:
Danel Kungla
2025-09-20 18:12:15 +03:00
parent addd3a5dae
commit a52a9bec06
2 changed files with 31 additions and 20 deletions

View File

@@ -1,6 +1,6 @@
'use server';
import React, { useState } from 'react';
import React from 'react';
import { AccountWithParams } from '@/packages/features/accounts/src/types/accounts';
@@ -15,14 +15,14 @@ export default async function Recommendations({
account: AccountWithParams;
}) {
const { analyses, countryCode } = await loadAnalyses();
const [isLoadingTimeSlots, setIsLoadingTimeSlots] = useState(false);
const analysisResults = analysisResponses;
console.log('selectedDate', isLoadingTimeSlots);
const analysisRecommendations = await loadRecommendations(
analysisResults,
analyses,
account,
);
const orderAnalyses = analyses.filter((analysis) =>
analysisRecommendations.includes(analysis.title),
);

View File

@@ -1,6 +1,8 @@
import { cache } from 'react';
import { AccountWithParams } from '@/packages/features/accounts/src/types/accounts';
import { getSupabaseServerClient } from '@/packages/supabase/src/clients/server-client';
import { createServerClient } from '@supabase/ssr';
import OpenAI from 'openai';
import PersonalCode from '~/lib/utils';
@@ -75,18 +77,30 @@ async function recommendationsLoader(
if (!account?.personal_code) {
return [];
}
const supabaseClient = getSupabaseServerClient();
const client = new OpenAI();
const { gender } = PersonalCode.parsePersonalCode(account.personal_code);
console.log('analysisResponses', analysisResponses);
console.log('analyises', analyses);
const analysesRecommendationsPromptId =
'pmpt_68ca9c8bfa8c8193b27eadc6496c36440df449ece4f5a8dd';
const latestUniqueAnalysResponses =
getLatestUniqueAnalysResponses(analysisResponses);
// const latestResponseTime = getLatestResponseTime(latestUniqueAnalysResponses);
// const latestISO = latestResponseTime
// ? new Date(latestResponseTime).toISOString()
// : 'none';
// console.log('latestResponseTime', latestResponseTime);
const latestResponseTime = getLatestResponseTime(latestUniqueAnalysResponses);
const latestISO = latestResponseTime
? new Date(latestResponseTime).toISOString()
: 'none';
const previouslyRecommended = await supabaseClient
.schema('medreport')
.from('ai_responses')
.select('*')
.eq('account_id', account.id)
.eq('prompt_id', analysesRecommendationsPromptId)
.eq('latest_data_change', latestISO);
const openAIClient = new OpenAI();
const { gender, age } = PersonalCode.parsePersonalCode(account.personal_code);
const weight = account.accountParams?.weight || 'unknown';
console.log('analysisResponses', analysisResponses);
console.log('analyises', analyses);
const formattedAnalysisResponses = latestUniqueAnalysResponses.map(
({ name, value }) => ({ name, value }),
);
@@ -95,23 +109,20 @@ async function recommendationsLoader(
title,
}));
console.log('formattedAnalyses', JSON.stringify(formattedAnalyses));
console.log(
'latestUniqueAnalysResponses',
JSON.stringify(latestUniqueAnalysResponses),
);
const response = await client.responses.create({
const response = await openAIClient.responses.create({
model: 'gpt-5-mini',
store: false,
prompt: {
id: 'pmpt_68ca9c8bfa8c8193b27eadc6496c36440df449ece4f5a8dd',
id: analysesRecommendationsPromptId,
variables: {
analyses: JSON.stringify(formattedAnalyses),
results: JSON.stringify(formattedAnalysisResponses),
gender: gender.value,
age: age.toString(),
weight: weight.toString(),
},
},
max_output_tokens: 100,
});
const json = JSON.parse(response.output_text);