import { Post, RestController } from '@/decorators'; import { AIRequest } from '@/requests'; import { AIService } from '@/services/ai.service'; import { NodeTypes } from '@/NodeTypes'; import { FailedDependencyError } from '@/errors/response-errors/failed-dependency.error'; @RestController('/ai') export class AIController { constructor( private readonly aiService: AIService, private readonly nodeTypes: NodeTypes, ) {} /** * Suggest a solution for a given error using the AI provider. */ @Post('/debug-error') async debugError(req: AIRequest.DebugError): Promise<{ message: string }> { const { error } = req.body; let nodeType; if (error.node?.type) { nodeType = this.nodeTypes.getByNameAndVersion(error.node.type, error.node.typeVersion); } try { const message = await this.aiService.debugError(error, nodeType); return { message, }; } catch (aiServiceError) { throw new FailedDependencyError( (aiServiceError as Error).message || 'Failed to debug error due to an issue with an external dependency. Please try again later.', ); } } /** * Generate CURL request and additional HTTP Node metadata for given service and request */ @Post('/generate-curl') async generateCurl(req: AIRequest.GenerateCurl): Promise<{ curl: string; metadata?: object }> { const { service, request } = req.body; try { return await this.aiService.generateCurl(service, request); } catch (aiServiceError) { throw new FailedDependencyError( (aiServiceError as Error).message || 'Failed to generate HTTP Request Node parameters due to an issue with an external dependency. Please try again later.', ); } } }