provisioning/schemas/platform/validators/ai-service-validator.ncl

73 lines
3.2 KiB
Plaintext
Raw Normal View History

# AI Service Validator
let ai_service_schema = import "../schemas/ai-service.ncl" in
let constraints = import "../constraints/constraints.toml" in
{
validate_ai_service_config | ai_service_schema.AiServiceConfig -> Array String = fun config =>
let errors = [] in
# Server port validation
let errors = if config.server.port < 1024 || config.server.port > 65535
then errors @ ["Server port must be between 1024 and 65535"]
else errors in
# Server workers validation
let errors = if config.server.workers < constraints.ai_service.workers.min
then errors @ ["Workers below minimum (#{constraints.ai_service.workers.min})"]
else if config.server.workers > constraints.ai_service.workers.max
then errors @ ["Workers above maximum (#{constraints.ai_service.workers.max})"]
else errors in
# RAG integration validation
let errors = if config.rag.enabled == true
then
let e = [] in
let e = if std.array.length config.rag.rag_service_url == 0
then e @ ["RAG service URL cannot be empty when enabled"]
else e in
let e = if config.rag.timeout < 1000
then e @ ["RAG timeout must be at least 1000ms"]
else e in
errors @ e
else errors in
# MCP integration validation
let errors = if config.mcp.enabled == true
then
let e = [] in
let e = if std.array.length config.mcp.mcp_service_url == 0
then e @ ["MCP service URL cannot be empty when enabled"]
else e in
let e = if config.mcp.timeout < 1000
then e @ ["MCP timeout must be at least 1000ms"]
else e in
errors @ e
else errors in
# DAG configuration validation
let errors = if config.dag.max_concurrent_tasks < constraints.ai_service.max_concurrent_tasks.min
then errors @ ["Max concurrent tasks below minimum (#{constraints.ai_service.max_concurrent_tasks.min})"]
else if config.dag.max_concurrent_tasks > constraints.ai_service.max_concurrent_tasks.max
then errors @ ["Max concurrent tasks above maximum (#{constraints.ai_service.max_concurrent_tasks.max})"]
else errors in
let errors = if config.dag.task_timeout < 1000
then errors @ ["Task timeout must be at least 1000ms"]
else errors in
let errors = if config.dag.retry_attempts < 0 || config.dag.retry_attempts > 20
then errors @ ["Retry attempts must be between 0 and 20"]
else errors in
# At least one integration should be enabled in production
let errors =
let rag_enabled = config.rag.enabled in
let mcp_enabled = config.mcp.enabled in
if !rag_enabled && !mcp_enabled
then errors @ ["At least one integration (RAG or MCP) should be enabled"]
else errors in
errors,
}