Ctrl K
ComunidadGuías…

config.example.yaml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# DeltaLLM starter configuration
#
# This file is intentionally short:
# - the active settings are what a local, trial, or single-server instance needs
# - every setting you leave out uses its built-in default
# - optional features are listed, commented, under "Features" below
# - secrets come from environment variables, not hardcoded values
#
# Which features to turn on, what each needs, and ready-made profiles:
#   docs/deployment/feature-switches.md ("Choose what to turn on")
# Every general setting with its default:
#   docs/configuration/general-settings-reference.md
# A fuller single-server example (spend outbox for the Model Selector and Realtime, Batch API):
#   config.small-team.example.yaml
#
# Quick path:
# 1. Copy this file to config.yaml
# 2. Set the required environment variables from docs/getting-started/docker.md
# 3. Start DeltaLLM and verify /v1/models
# 4. After the first successful seed, you can set
#    general_settings.model_deployment_bootstrap_from_config: false
#    and manage deployments from the Admin UI or API

model_list:
  # Sample deployment used by the quickstart docs.
  # Keep this if you want to bootstrap one OpenAI-backed chat model on first start.
  - model_name: gpt-4o-mini
    deltallm_params:
      provider: openai
      model: openai/gpt-4o-mini
      api_key: os.environ/OPENAI_API_KEY
      api_base: https://api.openai.com/v1
      timeout: 60
      # Optional async Batch API chat execution control.
      # Missing chat_batching behaves like mode: concurrent.
      # For vLLM, concurrent is usually preferred because vLLM batches inside the engine.
      # chat_batching:
      #   mode: concurrent
      #   max_in_flight: 32
      # Use sync_microbatch only with a provider adapter that returns per-item results and usage.
      # chat_batching:
      #   mode: sync_microbatch
      #   upstream_max_batch_size: 8
      #   max_total_input_tokens: 32000
      #   # false is not supported until a provider adapter defines safe heterogeneous grouping.
      #   require_homogeneous_params: true

  # Mistral supports chat and embeddings. See docs/providers/mistral.md.
  # - model_name: mistral-chat
  #   deltallm_params:
  #     provider: mistral
  #     model: mistral-small-latest
  #     api_key: os.environ/MISTRAL_API_KEY
  #   model_info:
  #     mode: chat

  # Optional direct chat providers: deepseek, zai, qwen, tencent, minimax.
  # See docs/providers/compatible-chat.md for all five examples and regional bases.
  # - model_name: deepseek-chat
  #   deltallm_params:
  #     provider: deepseek
  #     model: deepseek-v4-flash
  #     api_key: os.environ/DEEPSEEK_API_KEY
  #   model_info:
  #     mode: chat
  #     # Configure verified token prices before enabling spend-based limits.

router_settings:
  routing_strategy: simple-shuffle
  # One retry on the same deployment, then fail over to the next one.
  num_retries: 1
  retry_after: 1
  timeout: 600
  # A deployment rests for cooldown_time seconds after more than allowed_fails
  # rate-limit, server, or timeout errors within five minutes. 0 would bench a
  # deployment on its first 429.
  cooldown_time: 60
  allowed_fails: 2
  # Treat unusable 200 answers (empty, bad tool-call JSON, unknown tool, non-JSON in JSON mode)
  # as failures that can retry or fall back. See docs/configuration/router.md.
  response_validation:
    enabled: true
    on_exhausted: return_response
    json_healing: false  # repair JSON-mode answers (code fences, extra text, trailing commas)
  # Set route-group workload mode explicitly. Older files that omit it infer one common
  # enabled-member mode (or chat when no member mode can be resolved) and log a warning.
  # route_groups:
  #   - key: search-embeddings
  #     mode: embedding
  #     strategy: weighted
  #     context:
  #       mode: smallest-sufficient
  #       unknown_capacity: allow
  #       safety_margin_tokens: 256
  #     members:
  #       - deployment_id: embeddings-primary
  #         weight: 3
  #       - deployment_id: embeddings-secondary
  #         weight: 1
  # Optional chat model router (issue #304). Before enabling, declare each member's
  # model_info.chat_capabilities and positive context capacity. The classifier also needs
  # explicit provider token prices and positive RPM/TPM limits; see docs/configuration/models.md.
  # The classifier is an independent concrete deployment; it need not be an answer member.
  # Requires general_settings.spend_ingestion_mode: outbox and its enabled healthy worker.
  # Selector cost is charged to customers; budgets remain soft checks, not spending holds.
  # Internal Batch chat selects per item and bypasses microbatch grouping.
  # Deterministic policy simulation does not execute the selector.
  # route_groups:
  #   - key: support-chat
  #     mode: chat
  #     strategy: least-busy
  #     context:
  #       mode: smallest-sufficient
  #       unknown_capacity: exclude
  #     selector:
  #       kind: llm-tier
  #       classifier_deployment_id: support-tiny-selector
  #       timeout_ms: 750
  #       max_input_chars: 8000
  #       default_lane: quality
  #       lanes:
  #         - id: economy
  #           rank: 0
  #           description: Routine extraction, formatting, and simple questions
  #         - id: quality
  #           rank: 1
  #           description: Complex reasoning, ambiguity, and advanced tool use
  #     members:
  #       - deployment_id: support-mini
  #         lane: economy
  #       - deployment_id: support-large
  #         lane: quality

general_settings:
  instance_name: DeltaLLM

  # Required secrets
  master_key: os.environ/DELTALLM_MASTER_KEY
  salt_key: os.environ/DELTALLM_SALT_KEY

  # Database and Redis
  # In Docker Compose, DATABASE_URL and REDIS_URL are wired automatically.
  database_url: os.environ/DATABASE_URL
  redis_url: os.environ/REDIS_URL

  # Admin session login
  # Set these only if you want an initial browser-login admin account created on boot.
  platform_bootstrap_admin_email: os.environ/PLATFORM_BOOTSTRAP_ADMIN_EMAIL
  platform_bootstrap_admin_password: os.environ/PLATFORM_BOOTSTRAP_ADMIN_PASSWORD

  # Recommended startup path:
  # - db_only: manage deployments from the Admin UI or API
  # - bootstrap_from_config: true so the sample model seeds on first boot
  #   After the first successful seed, set this back to false for steady-state use.
  model_deployment_source: db_only
  model_deployment_bootstrap_from_config: true

  # Check each deployment's provider every 5 minutes (a free model-list call, no tokens)
  # and rest unhealthy deployments before customer traffic finds them.
  background_health_checks: true
  health_check_interval: 300

  # Organization deletion requests. Startup fails while the deletion readiness check
  # finds missing migrations or unowned records, so enable only after it passes and
  # every API and worker replica reports the backend's current lifecycle
  # protocol version (v2 for this rollout).
  organization_deletion_requests_enabled: false

  # ---------------------------------------------------------------------------
  # Features. Off unless noted. Uncomment what you need; each line says what it
  # needs. Full table: docs/deployment/feature-switches.md
  # ---------------------------------------------------------------------------
  #
  # Durable spend and audit writes through a background worker (on by default once a
  # mode is outbox). Adds 10 PostgreSQL connections per process (telemetry pools of 5 + 5).
  # Required by the Model Selector and Realtime. Restart after changing.
  # spend_ingestion_mode: outbox
  # audit_ingestion_mode: outbox
  #
  # Response cache. Off by default: a hit is served without calling the provider and
  # is currently charged like a miss. Use redis when you run more than one process.
  # cache_enabled: true
  # cache_backend: redis
  # cache_ttl: 3600
  #
  # Batch API (/v1/batches). local storage works for one server only; use s3 when
  # more than one process or pod serves the API.
  # embeddings_batch_enabled: true
  # embeddings_batch_storage_backend: local
  #
  # Batch completion webhooks. The key encrypts callback URLs and signing secrets at
  # rest; it is read from the environment and unused until webhooks are on. Generate:
  #   python -c 'import base64,secrets; print(base64.urlsafe_b64encode(secrets.token_bytes(32)).decode())'
  # batch_webhook_enabled: true
  batch_webhook_encryption_key: os.environ/DELTALLM_BATCH_WEBHOOK_ENCRYPTION_KEY
  #
  # MCP servers with OAuth 2.0 (per user). The key encrypts user tokens and client
  # secrets at rest. It is required only when such a server exists. Generate it
  # like the webhook key. The connect flow also needs email_base_url (the public
  # gateway origin) for the redirect URL /mcp/oauth/callback.
  mcp_oauth_encryption_key: os.environ/DELTALLM_MCP_OAUTH_ENCRYPTION_KEY
  #
  # Accounting v2 signing secret, read from the environment; used only with
  # accounting_execution_mode: local_journal (docs/deployment/accounting-v2.md).
  accounting_rpc_signing_secret: os.environ/DELTALLM_ACCOUNTING_RPC_SIGNING_SECRET
  #
  # OpenAI Realtime sessions. Needs Redis and spend_ingestion_mode: outbox. Restart.
  # realtime:
  #   enabled: true
  #
  # Reject overload before prompt, guardrail, and budget work. Size the limits from
  # docs/deployment/ingress-admission.md first. Restart.
  # gateway_ingress_enabled: true
  #
  # Refuse requests that need Redis-backed limits while Redis is down (default
  # fail_open lets them through). Production uses fail_closed.
  # redis_degraded_mode: fail_closed
  #
  # Browser sessions end after 60 idle minutes or 12 hours from sign-in (defaults).
  # auth_session_ttl_hours: 12
  # auth_session_idle_timeout_minutes: 60

  # Email delivery is optional.
  # Enable this when you want invitations, password reset, test email, or governance notifications.
  # For local/dev, point SMTP at Mailpit/MailHog.
  # For production, use smtp, resend, or sendgrid with real credentials.
  # email_base_url must be the public app origin when email is enabled.
  #
  # email_enabled: true
  # email_provider: smtp
  # email_from_address: no-reply@example.com
  # email_reply_to: support@example.com
  # email_base_url: http://localhost:4002
  # email_worker_enabled: true
  # email_worker_batch_size: 10
  # email_worker_max_concurrency: 3
  # email_worker_delivery_lease_seconds: 60
  # email_worker_audit_lease_seconds: 30
  # email_worker_startup_timeout_seconds: 5
  # email_worker_shutdown_drain_timeout_seconds: 20
  # email_max_attempts: 5
  # email_retry_initial_seconds: 60
  # email_retry_max_seconds: 3600
  #
  # SMTP example
  # smtp_host: localhost
  # smtp_port: 1025
  # smtp_username: null
  # smtp_password: null
  # smtp_use_tls: false
  #
  # Resend example
  # email_provider: resend
  # resend_api_key: os.environ/RESEND_API_KEY
  #
  # SendGrid example
  # email_provider: sendgrid
  # sendgrid_api_key: os.environ/SENDGRID_API_KEY

  # SSO is optional.
  # Enable this only after Redis is configured because SSO callback state is stored server-side.
  # DeltaLLM keeps SSO disabled if Redis-backed state storage is unavailable.
  #
  # enable_sso: true
  # sso_provider: oidc
  # sso_client_id: os.environ/SSO_CLIENT_ID
  # sso_client_secret: os.environ/SSO_CLIENT_SECRET
  # sso_authorize_url: https://idp.example.com/oauth2/authorize
  # sso_token_url: https://idp.example.com/oauth2/token
  # sso_userinfo_url: https://idp.example.com/oauth2/userinfo
  # sso_redirect_uri: http://localhost:4002/auth/callback
  # sso_scope: openid email profile
  # Initial admin role for verified new SSO accounts. Manage existing roles in People & Access.
  # sso_admin_email_list:
  #   - admin@example.com
  # Create missing default memberships while preserving existing org/team roles.
  # sso_default_team_id: team-123
  # sso_state_ttl_seconds: 600
  # SSO logins never show the DeltaLLM MFA enrollment prompt.
  # For accounts that already have DeltaLLM MFA: "optional" also asks for the
  # DeltaLLM TOTP code after SSO, "trust_idp" trusts the identity provider's MFA.
  # sso_local_mfa: optional
  #
  # Optional sign-in restrictions. Off by default. Platform admins can also edit
  # them in Settings > Single sign-on. The master key always works.
  # password_login_enabled: false   # SSO-only sign-in; requires enable_sso: true
  # sso_sign_in:
  #   allow_new_accounts: false     # only existing accounts, listed admins, mapped groups
  #   allowed_email_domains:        # every SSO sign-in needs a verified email here
  #     - example.com
  #
  # Optional SSO group sync: map values of a token claim to platform admin,
  # organization roles, and team roles at each SSO sign-in. Off by default.
  # Platform admins can also edit it in Settings > Single sign-on.
  # sso_group_sync:
  #   enabled: true
  #   claim: deltallm_role
  #   admin_values: [admin]
  #   require_mapped_value: false
  #   remove_unlisted: false   # true: also remove access the IdP no longer grants
  #   mappings:
  #     - value: team-ml
  #       team_id: team_ml
  #       team_role: team_developer
  #
  # Optional self-service developer sandbox onboarding for first-time SSO users.
  # Defaults are applied only when the account is first provisioned; admins can
  # edit the seeded org, team, memberships, budgets, and limits later.
  #
  # self_registration:
  #   enabled: true
  #   mode: sso_allowed_domain
  #   allowed_domains:
  #     - example.com
  #   require_email_verification: true
  #   require_admin_approval: false
  #   default_org:
  #     id: org-sandbox
  #     name: Developer Sandbox
  #     max_budget: 100
  #     soft_budget: 80
  #     rpm_limit: 300
  #     tpm_limit: 500000
  #     rph_limit: 2000
  #     rpd_limit: 10000
  #     tpd_limit: 5000000
  #   default_team:
  #     id: team-self-serve
  #     alias: Self-Service Developers
  #     role: team_developer
  #     max_budget: 50
  #     soft_budget: 40
  #     rpm_limit: 150
  #     tpm_limit: 250000
  #     rph_limit: 1000
  #     rpd_limit: 5000
  #     tpd_limit: 2500000
  #     self_service_keys_enabled: true
  #     self_service_max_keys_per_user: 2
  #     self_service_budget_ceiling: 5
  #     self_service_require_expiry: true
  #     self_service_max_expiry_days: 14
  #   default_user:
  #     max_budget: 10
  #     soft_budget: 8
  #     rpm_limit: 30
  #     tpm_limit: 50000
  #     rph_limit: 200
  #     rpd_limit: 1000
  #     tpd_limit: 500000

  # Optional JWT bearer authentication for proxy requests.
  #
  # enable_jwt_auth: true
  # jwt_public_key_url: https://idp.example.com/.well-known/jwks.json
  # jwt_audience: deltallm
  # jwt_issuer: https://idp.example.com/

deltallm_settings:
  # Keep callback and guardrail config minimal in the starter file.
  # Request, token, spend, cache, and latency metrics are emitted natively.
  # Configure callbacks only for external sinks or custom integrations.
  success_callback: []
  failure_callback: []
  turn_off_message_logging: false

  # Optional S3 callback target for request logs or exports.
  #
  # callback_settings:
  #   s3:
  #     bucket: os.environ/DELTALLM_S3_BUCKET
  #     region: us-east-1
  #     prefix: deltallm-logs/

  # Optional built-in guardrail examples.
  # Uncomment these only after their provider-specific dependencies are configured.
  #
  # guardrails:
  #   - guardrail_name: presidio-pii
  #     deltallm_params:
  #       guardrail: src.guardrails.presidio.PresidioGuardrail
  #       mode: pre_call
  #       default_on: true
  #       default_action: block
  #       anonymize: true
  #       threshold: 0.5
  #       entities:
  #         - EMAIL_ADDRESS
  #         - PHONE_NUMBER
  #         - US_SSN
  #   - guardrail_name: lakera-prompt-injection
  #     deltallm_params:
  #       guardrail: src.guardrails.lakera.LakeraGuardrail
  #       mode: pre_call
  #       default_on: true
  #       default_action: block
  #       api_key: os.environ/LAKERA_API_KEY
  #       threshold: 0.5
  #       fail_open: false