| import { AgentToolInterface } from '@gitroom/nestjs-libraries/chat/agent.tool.interface'; |
| import { createTool } from '@mastra/core/tools'; |
| import { Injectable } from '@nestjs/common'; |
| import { VideoManager } from '@gitroom/nestjs-libraries/videos/video.manager'; |
| import z from 'zod'; |
| import { ModuleRef } from '@nestjs/core'; |
| import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; |
|
|
| @Injectable() |
| export class VideoFunctionTool implements AgentToolInterface { |
| constructor( |
| private _videoManagerService: VideoManager, |
| private _moduleRef: ModuleRef |
| ) {} |
| name = 'videoFunctionTool'; |
|
|
| run() { |
| return createTool({ |
| id: 'videoFunctionTool', |
| description: `Sometimes when we want to generate videos we might need to get some additional information like voice_id, etc`, |
| mcp: { |
| annotations: { |
| title: 'Video Function Helper', |
| readOnlyHint: true, |
| destructiveHint: false, |
| idempotentHint: true, |
| openWorldHint: false, |
| }, |
| }, |
| inputSchema: z.object({ |
| identifier: z.string(), |
| functionName: z.string(), |
| }), |
| outputSchema: z.object({}).passthrough(), |
| execute: async (inputData, context) => { |
| checkAuth(inputData, context); |
| const videos = this._videoManagerService.getAllVideos(); |
| const findVideo = videos.find( |
| (p) => |
| p.identifier === inputData.identifier && |
| p.tools.some((p) => p.functionName === inputData.functionName) |
| ); |
|
|
| if (!findVideo) { |
| throw new Error('Function not found'); |
| } |
|
|
| const func = await this._moduleRef |
| |
| .get(findVideo.target, { strict: false }) |
| [inputData.functionName](); |
| return func; |
| }, |
| }); |
| } |
| } |
|
|