From 945dc09f480be15adafa49478bb38d35ae430aeb Mon Sep 17 00:00:00 2001 From: Nevo David Date: Mon, 9 Feb 2026 12:42:36 +0700 Subject: [PATCH] feat: fix ai agent --- .../src/chat/load.tools.service.ts | 2 +- .../chat/tools/generate.video.options.tool.ts | 12 +++++--- .../src/chat/tools/generate.video.tool.ts | 1 - .../chat/tools/integration.trigger.tool.ts | 1 - .../chat/tools/integration.validation.tool.ts | 4 +-- .../src/chat/validation.schemas.helper.ts | 30 +++++++++++++++++++ 6 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 libraries/nestjs-libraries/src/chat/validation.schemas.helper.ts diff --git a/libraries/nestjs-libraries/src/chat/load.tools.service.ts b/libraries/nestjs-libraries/src/chat/load.tools.service.ts index 15679f4b..d5908905 100644 --- a/libraries/nestjs-libraries/src/chat/load.tools.service.ts +++ b/libraries/nestjs-libraries/src/chat/load.tools.service.ts @@ -85,7 +85,7 @@ export class LoadToolsService { )} `; }, - model: openai('gpt-4.1'), + model: openai('gpt-5.2'), tools, memory: new Memory({ storage: pStore, diff --git a/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts b/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts index 7879c97c..453b7660 100644 --- a/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts +++ b/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts @@ -1,7 +1,10 @@ -import { AgentToolInterface, ToolReturn } from '@gitroom/nestjs-libraries/chat/agent.tool.interface'; +import { + AgentToolInterface, + ToolReturn, +} from '@gitroom/nestjs-libraries/chat/agent.tool.interface'; import { createTool } from '@mastra/core/tools'; import { Injectable } from '@nestjs/common'; -import { validationMetadatasToSchemas } from 'class-validator-jsonschema'; +import { getValidationSchemas } from '@gitroom/nestjs-libraries/chat/validation.schemas.helper'; import { VideoManager } from '@gitroom/nestjs-libraries/videos/video.manager'; import z from 'zod'; import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; @@ -42,7 +45,7 @@ export class GenerateVideoOptionsTool implements AgentToolInterface { type: p.identifier, output: 'vertical|horizontal', tools: p.tools, - customParams: validationMetadatasToSchemas()[p.dto.name], + customParams: getValidationSchemas()[p.dto.name], }; }), }, @@ -50,13 +53,14 @@ export class GenerateVideoOptionsTool implements AgentToolInterface { 2 ) ); + return { video: videos.map((p) => { return { type: p.identifier, output: 'vertical|horizontal', tools: p.tools, - customParams: validationMetadatasToSchemas()[p.dto.name], + customParams: getValidationSchemas()[p.dto.name], }; }), }; diff --git a/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts b/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts index 35740a1e..c8d4eb35 100644 --- a/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts +++ b/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts @@ -6,7 +6,6 @@ import { IntegrationManager, socialIntegrationList, } from '@gitroom/nestjs-libraries/integrations/integration.manager'; -import { validationMetadatasToSchemas } from 'class-validator-jsonschema'; import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service'; import { RefreshToken } from '@gitroom/nestjs-libraries/integrations/social.abstract'; import { timer } from '@gitroom/helpers/utils/timer'; diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts b/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts index 9de31dc2..b03e7c5b 100644 --- a/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts +++ b/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts @@ -6,7 +6,6 @@ import { IntegrationManager, socialIntegrationList, } from '@gitroom/nestjs-libraries/integrations/integration.manager'; -import { validationMetadatasToSchemas } from 'class-validator-jsonschema'; import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service'; import { RefreshToken } from '@gitroom/nestjs-libraries/integrations/social.abstract'; import { timer } from '@gitroom/helpers/utils/timer'; diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts b/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts index 9d1e618c..1e1e28a0 100644 --- a/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts +++ b/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts @@ -6,7 +6,7 @@ import { IntegrationManager, socialIntegrationList, } from '@gitroom/nestjs-libraries/integrations/integration.manager'; -import { validationMetadatasToSchemas } from 'class-validator-jsonschema'; +import { getValidationSchemas } from '@gitroom/nestjs-libraries/chat/validation.schemas.helper'; import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; @Injectable() @@ -88,7 +88,7 @@ export class IntegrationValidationTool implements AgentToolInterface { const maxLength = integration.maxLength(context.isPremium); const schemas = !integration.dto ? false - : validationMetadatasToSchemas()[integration.dto.name]; + : getValidationSchemas()[integration.dto.name]; const tools = this._integrationManager.getAllTools(); const rules = this._integrationManager.getAllRulesDescription(); diff --git a/libraries/nestjs-libraries/src/chat/validation.schemas.helper.ts b/libraries/nestjs-libraries/src/chat/validation.schemas.helper.ts new file mode 100644 index 00000000..45a98bbe --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/validation.schemas.helper.ts @@ -0,0 +1,30 @@ +import { + validationMetadatasToSchemas, + targetConstructorToSchema, +} from 'class-validator-jsonschema'; +import { ValidationTypes } from 'class-validator'; +// @ts-ignore +import { defaultMetadataStorage } from 'class-transformer/cjs/storage'; + +export function getValidationSchemas() { + return validationMetadatasToSchemas({ + classTransformerMetadataStorage: defaultMetadataStorage, + additionalConverters: { + [ValidationTypes.NESTED_VALIDATION]: (meta, options) => { + if (typeof meta.target === 'function') { + const typeMeta = options.classTransformerMetadataStorage + ? options.classTransformerMetadataStorage.findTypeMetadata( + meta.target, + meta.propertyName + ) + : null; + if (typeMeta) { + const childType = typeMeta.typeFunction(); + return targetConstructorToSchema(childType, options); + } + } + return {}; + }, + }, + }); +}