import type { ToolConfig } from '@/tools/types' export interface GuardrailsValidateInput { input: string validationType: 'json' | 'regex' | 'hallucination' | 'pii' regex?: string knowledgeBaseId?: string threshold?: string topK?: string model?: string apiKey?: string azureEndpoint?: string azureApiVersion?: string vertexProject?: string vertexLocation?: string vertexCredential?: string bedrockAccessKeyId?: string bedrockSecretKey?: string bedrockRegion?: string piiEntityTypes?: string[] piiMode?: string piiLanguage?: string _context?: { workflowId?: string workspaceId?: string } } export interface GuardrailsValidateOutput { success: boolean output: { passed: boolean validationType: string input?: string error?: string score?: number reasoning?: string detectedEntities?: any[] maskedText?: string } error?: string } export const guardrailsValidateTool: ToolConfig = { id: 'guardrails_validate', name: 'Guardrails Validate', description: 'Validate content using guardrails (JSON, regex, hallucination check, or PII detection)', version: '1.0.0', params: { input: { type: 'string', required: true, visibility: 'user-or-llm', description: 'Content to validate (from wired block)', }, validationType: { type: 'string', required: true, visibility: 'user-only', description: 'Type of validation: json, regex, hallucination, or pii', }, regex: { type: 'string', required: false, visibility: 'user-only', description: 'Regex pattern (required for regex validation)', }, knowledgeBaseId: { type: 'string', required: false, visibility: 'user-only', description: 'Knowledge base ID (required for hallucination check)', }, threshold: { type: 'string', required: false, visibility: 'user-only', description: 'Confidence threshold (0-10 scale, default: 3, scores below fail)', }, topK: { type: 'string', required: false, visibility: 'user-only', description: 'Number of chunks to retrieve from knowledge base (default: 10)', }, model: { type: 'string', required: false, visibility: 'user-only', description: 'LLM model for confidence scoring (default: gpt-4o-mini)', }, apiKey: { type: 'string', required: false, visibility: 'user-only', description: 'API key for LLM provider (optional if using hosted)', }, piiEntityTypes: { type: 'array', required: false, visibility: 'user-only', description: 'PII entity types to detect (empty = detect all)', }, piiMode: { type: 'string', required: false, visibility: 'user-only', description: 'PII action mode: block or mask (default: block)', }, piiLanguage: { type: 'string', required: false, visibility: 'user-only', description: 'Language for PII detection (default: en)', }, }, outputs: { passed: { type: 'boolean', description: 'Whether validation passed', }, validationType: { type: 'string', description: 'Type of validation performed', }, input: { type: 'string', description: 'Original input', }, error: { type: 'string', description: 'Error message if validation failed', optional: true, }, score: { type: 'number', description: 'Confidence score (0-10, 0=hallucination, 10=grounded, only for hallucination check)', optional: true, }, reasoning: { type: 'string', description: 'Reasoning for confidence score (only for hallucination check)', optional: true, }, detectedEntities: { type: 'array', description: 'Detected PII entities (only for PII detection)', optional: true, }, maskedText: { type: 'string', description: 'Text with PII masked (only for PII detection in mask mode)', optional: true, }, }, request: { url: '/api/guardrails/validate', method: 'POST', headers: () => ({ 'Content-Type': 'application/json', }), body: (params: GuardrailsValidateInput) => ({ input: params.input, validationType: params.validationType, regex: params.regex, knowledgeBaseId: params.knowledgeBaseId, threshold: params.threshold, topK: params.topK, model: params.model, apiKey: params.apiKey, azureEndpoint: params.azureEndpoint, azureApiVersion: params.azureApiVersion, vertexProject: params.vertexProject, vertexLocation: params.vertexLocation, vertexCredential: params.vertexCredential, bedrockAccessKeyId: params.bedrockAccessKeyId, bedrockSecretKey: params.bedrockSecretKey, bedrockRegion: params.bedrockRegion, piiEntityTypes: params.piiEntityTypes, piiMode: params.piiMode, piiLanguage: params.piiLanguage, workflowId: params._context?.workflowId, workspaceId: params._context?.workspaceId, }), }, transformResponse: async (response: Response): Promise => { const result = await response.json() if (!response.ok && !result.output) { return { success: true, output: { passed: false, validationType: 'unknown', input: '', error: result.error || `Validation failed with status ${response.status}`, }, } } return result }, }