Commit efbc2710 authored by ThinhNC's avatar ThinhNC

fix(ai-assistant): infer response types from Zod schemas

parent ab1b126a
import { Prisma, TransactionType } from '@prisma/client'; import { Prisma, TransactionType } from '@prisma/client';
import { z } from 'zod';
import { getAIProvider } from '../../common/ai/ai-provider.factory'; import { getAIProvider } from '../../common/ai/ai-provider.factory';
import { import {
AIContentPart, AIContentPart,
...@@ -37,7 +38,6 @@ import { ...@@ -37,7 +38,6 @@ import {
receiptResponseSchema, receiptResponseSchema,
recommendationsResponseSchema, recommendationsResponseSchema,
} from './ai-assistant-response.validation'; } from './ai-assistant-response.validation';
import type { AIResponseValidator } from './ai-assistant-response.validation';
const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000; const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
const DEFAULT_CONTEXT_DAYS = 90; const DEFAULT_CONTEXT_DAYS = 90;
...@@ -227,12 +227,12 @@ export class AIAssistantService { ...@@ -227,12 +227,12 @@ export class AIAssistantService {
); );
} }
private async generateWithContext<T>( private async generateWithContext<TSchema extends z.ZodTypeAny>(
context: ResolvedContext, context: ResolvedContext,
prompt: string, prompt: string,
responseJsonSchema: Record<string, unknown>, responseJsonSchema: Record<string, unknown>,
outputSchema: AIResponseValidator<T>, outputSchema: TSchema,
): Promise<AIServiceResult<T>> { ): Promise<AIServiceResult<z.output<TSchema>>> {
const response = await this.generate( const response = await this.generate(
{ {
systemInstruction: SYSTEM_INSTRUCTION, systemInstruction: SYSTEM_INSTRUCTION,
...@@ -259,9 +259,9 @@ export class AIAssistantService { ...@@ -259,9 +259,9 @@ export class AIAssistantService {
}; };
} }
private async generate<T>( private async generate<TSchema extends z.ZodTypeAny>(
request: AIGenerateRequest, request: AIGenerateRequest,
outputSchema: AIResponseValidator<T>, outputSchema: TSchema,
) { ) {
try { try {
const response = await getAIProvider().generateStructured(request); const response = await getAIProvider().generateStructured(request);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment