Configuracion

Configuracion

CC-Relay se configura mediante archivos YAML o TOML. Esta guia cubre todas las opciones de configuracion.

Ubicacion del Archivo de Configuracion

Ubicaciones predeterminadas (revisadas en orden):

  1. ./config.yaml o ./config.toml (directorio actual)
  2. ~/.config/cc-relay/config.yaml o ~/.config/cc-relay/config.toml
  3. Ruta especificada via flag --config

El formato se detecta automaticamente por la extension del archivo (.yaml, .yml o .toml).

Genera una configuracion predeterminada con:

cc-relay config init

Expansion de Variables de Entorno

CC-Relay soporta expansion de variables de entorno usando la sintaxis ${VAR_NAME} en ambos formatos YAML y TOML:

providers:
- name: "anthropic"
  type: "anthropic"
  keys:
    - key: "${ANTHROPIC_API_KEY}"  # Expandida al cargar
[[providers]]
name = "anthropic"
type = "anthropic"

[[providers.keys]]
key = "${ANTHROPIC_API_KEY}"  # Expandida al cargar

Referencia Completa de Configuracion

# ==========================================================================
# Configuracion del Servidor
# ==========================================================================
server:
# Direccion de escucha
listen: "127.0.0.1:8787"

# Timeout de solicitud en milisegundos (default: 600000 = 10 minutos)
timeout_ms: 600000

# Solicitudes concurrentes maximas (0 = ilimitado)
max_concurrent: 0

# Habilitar HTTP/2 para mejor rendimiento
enable_http2: true

# Configuracion de autenticacion
auth:
  # Requerir API key especifica para acceso al proxy
  api_key: "${PROXY_API_KEY}"

  # Permitir Bearer tokens de suscripcion de Claude Code
  allow_subscription: true

  # Bearer token especifico para validar (opcional)
  bearer_secret: "${BEARER_SECRET}"

# ==========================================================================
# Configuraciones de Proveedores
# ==========================================================================
providers:
# API Directa de Anthropic
- name: "anthropic"
  type: "anthropic"
  enabled: true
  base_url: "https://api.anthropic.com"  # Opcional, usa valor predeterminado

  keys:
    - key: "${ANTHROPIC_API_KEY}"
      rpm_limit: 60       # Solicitudes por minuto
      tpm_limit: 100000   # Tokens por minuto

  # Opcional: Especificar modelos disponibles
  models:
    - "claude-sonnet-4-5-20250514"
    - "claude-opus-4-5-20250514"
    - "claude-haiku-3-5-20241022"

# Z.AI / Zhipu GLM
- name: "zai"
  type: "zai"
  enabled: true
  base_url: "https://api.z.ai/api/anthropic"

  keys:
    - key: "${ZAI_API_KEY}"

  # Mapear nombres de modelos Claude a modelos Z.AI
  model_mapping:
    "claude-sonnet-4-5-20250514": "GLM-4.7"
    "claude-haiku-3-5-20241022": "GLM-4.5-Air"

  # Opcional: Especificar modelos disponibles
  models:
    - "GLM-4.7"
    - "GLM-4.5-Air"
    - "GLM-4-Plus"

# ==========================================================================
# Configuracion de Logging
# ==========================================================================
logging:
# Nivel de log: debug, info, warn, error
level: "info"

# Formato de log: json, text
format: "text"

# Habilitar salida con colores (para formato text)
pretty: true

# Opciones granulares de debug
debug_options:
  log_request_body: false
  log_response_headers: false
  log_tls_metrics: false
  max_body_log_size: 1000

# ==========================================================================
# Configuracion de Cache
# ==========================================================================
cache:
# Modo de cache: single, ha, disabled
mode: single

# Configuracion de modo unico (Ristretto)
ristretto:
  num_counters: 1000000  # 10x elementos maximos esperados
  max_cost: 104857600    # 100 MB
  buffer_items: 64       # Tamano del buffer de admision

# Configuracion de modo HA (Olric)
olric:
  embedded: true                 # Ejecutar nodo Olric embebido
  bind_addr: "0.0.0.0:3320"      # Puerto de cliente Olric
  dmap_name: "cc-relay"          # Nombre del mapa distribuido
  environment: lan               # local, lan, o wan
  peers:                         # Direcciones memberlist (bind_addr + 2)
    - "other-node:3322"
  replica_count: 2               # Copias por clave
  read_quorum: 1                 # Min. lecturas para exito
  write_quorum: 1                # Min. escrituras para exito
  member_count_quorum: 2         # Min. miembros del cluster
  leave_timeout: 5s              # Duracion del mensaje de salida

# ==========================================================================
# Configuracion de Routing
# ==========================================================================
routing:
# Estrategia: round_robin, weighted_round_robin, shuffle, failover (predeterminado)
strategy: failover

# Timeout para intentos de failover en milisegundos (predeterminado: 5000)
failover_timeout: 5000

# Habilitar headers de debug (X-CC-Relay-Strategy, X-CC-Relay-Provider)
debug: false
# ==========================================================================
# Server Configuration
# ==========================================================================
[server]
# Address to listen on
listen = "127.0.0.1:8787"

# Request timeout in milliseconds (default: 600000 = 10 minutes)
timeout_ms = 600000

# Maximum concurrent requests (0 = unlimited)
max_concurrent = 0

# Enable HTTP/2 for better performance
enable_http2 = true

# Authentication configuration
[server.auth]
# Require specific API key for proxy access
api_key = "${PROXY_API_KEY}"

# Allow Claude Code subscription Bearer tokens
allow_subscription = true

# Specific Bearer token to validate (optional)
bearer_secret = "${BEARER_SECRET}"

# ==========================================================================
# Provider Configurations
# ==========================================================================

# Anthropic Direct API
[[providers]]
name = "anthropic"
type = "anthropic"
enabled = true
base_url = "https://api.anthropic.com"  # Optional, uses default

[[providers.keys]]
key = "${ANTHROPIC_API_KEY}"
rpm_limit = 60       # Requests per minute
tpm_limit = 100000   # Tokens per minute

# Optional: Specify available models
models = [
"claude-sonnet-4-5-20250514",
"claude-opus-4-5-20250514",
"claude-haiku-3-5-20241022"
]

# Z.AI / Zhipu GLM
[[providers]]
name = "zai"
type = "zai"
enabled = true
base_url = "https://api.z.ai/api/anthropic"

[[providers.keys]]
key = "${ZAI_API_KEY}"

# Map Claude model names to Z.AI models
[providers.model_mapping]
"claude-sonnet-4-5-20250514" = "GLM-4.7"
"claude-haiku-3-5-20241022" = "GLM-4.5-Air"

# Optional: Specify available models
models = [
"GLM-4.7",
"GLM-4.5-Air",
"GLM-4-Plus"
]

# ==========================================================================
# Logging Configuration
# ==========================================================================
[logging]
# Log level: debug, info, warn, error
level = "info"

# Log format: json, text
format = "text"

# Enable colored output (for text format)
pretty = true

# Granular debug options
[logging.debug_options]
log_request_body = false
log_response_headers = false
log_tls_metrics = false
max_body_log_size = 1000

# ==========================================================================
# Cache Configuration
# ==========================================================================
[cache]
# Cache mode: single, ha, disabled
mode = "single"

# Single mode (Ristretto) configuration
[cache.ristretto]
num_counters = 1000000  # 10x expected max items
max_cost = 104857600    # 100 MB
buffer_items = 64       # Admission buffer size

# HA mode (Olric) configuration
[cache.olric]
embedded = true                 # Run embedded Olric node
bind_addr = "0.0.0.0:3320"      # Olric client port
dmap_name = "cc-relay"          # Distributed map name
environment = "lan"             # local, lan, or wan
peers = ["other-node:3322"]     # Memberlist addresses (bind_addr + 2)
replica_count = 2               # Copies per key
read_quorum = 1                 # Min reads for success
write_quorum = 1                # Min writes for success
member_count_quorum = 2         # Min cluster members
leave_timeout = "5s"            # Leave broadcast duration

# ==========================================================================
# Routing Configuration
# ==========================================================================
[routing]
# Strategy: round_robin, weighted_round_robin, shuffle, failover (default)
strategy = "failover"

# Timeout for failover attempts in milliseconds (default: 5000)
failover_timeout = 5000

# Enable debug headers (X-CC-Relay-Strategy, X-CC-Relay-Provider)
debug = false

Configuracion del Servidor

Direccion de Escucha

El campo listen especifica donde el proxy escucha solicitudes entrantes:

server:
listen: "127.0.0.1:8787"  # Solo local (recomendado)
# listen: "0.0.0.0:8787"  # Todas las interfaces (usar con precaucion)
[server]
listen = "127.0.0.1:8787"  # Solo local (recomendado)
# listen = "0.0.0.0:8787"  # Todas las interfaces (usar con precaucion)

Autenticacion

CC-Relay soporta multiples metodos de autenticacion:

Autenticacion con API Key

Requerir que los clientes proporcionen una API key especifica:

server:
auth:
  api_key: "${PROXY_API_KEY}"
[server.auth]
api_key = "${PROXY_API_KEY}"

Los clientes deben incluir el header: x-api-key: <tu-proxy-key>

Passthrough de Suscripcion Claude Code

Permitir que usuarios con suscripcion de Claude Code se conecten:

server:
auth:
  allow_subscription: true
[server.auth]
allow_subscription = true

Esto acepta tokens Authorization: Bearer de Claude Code.

Autenticacion Combinada

Permitir tanto API key como autenticacion de suscripcion:

server:
auth:
  api_key: "${PROXY_API_KEY}"
  allow_subscription: true
[server.auth]
api_key = "${PROXY_API_KEY}"
allow_subscription = true

Sin Autenticacion

Para deshabilitar autenticacion (no recomendado para produccion):

server:
auth: {}
# O simplemente omitir la seccion auth
# Omitir la seccion [server.auth] completamente
# o usar una seccion vacia:
[server]
# (sin bloque auth)

Soporte HTTP/2

Habilitar HTTP/2 para mejor rendimiento con solicitudes concurrentes:

server:
enable_http2: true
[server]
enable_http2 = true

Configuracion de Proveedores

Tipos de Proveedores

CC-Relay actualmente soporta dos tipos de proveedores:

TipoDescripcionURL Base Predeterminada
anthropicAPI Directa de Anthropichttps://api.anthropic.com
zaiZ.AI / Zhipu GLMhttps://api.z.ai/api/anthropic

Proveedor Anthropic

providers:
- name: "anthropic"
  type: "anthropic"
  enabled: true
  base_url: "https://api.anthropic.com"  # Opcional

  keys:
    - key: "${ANTHROPIC_API_KEY}"
      rpm_limit: 60
      tpm_limit: 100000

  models:
    - "claude-sonnet-4-5-20250514"
    - "claude-opus-4-5-20250514"
    - "claude-haiku-3-5-20241022"
[[providers]]
name = "anthropic"
type = "anthropic"
enabled = true
base_url = "https://api.anthropic.com"  # Opcional

[[providers.keys]]
key = "${ANTHROPIC_API_KEY}"
rpm_limit = 60
tpm_limit = 100000

models = [
"claude-sonnet-4-5-20250514",
"claude-opus-4-5-20250514",
"claude-haiku-3-5-20241022"
]

Proveedor Z.AI

Z.AI ofrece APIs compatibles con Anthropic con modelos GLM a menor costo:

providers:
- name: "zai"
  type: "zai"
  enabled: true
  base_url: "https://api.z.ai/api/anthropic"

  keys:
    - key: "${ZAI_API_KEY}"

  model_mapping:
    "claude-sonnet-4-5-20250514": "GLM-4.7"
    "claude-haiku-3-5-20241022": "GLM-4.5-Air"

  models:
    - "GLM-4.7"
    - "GLM-4.5-Air"
    - "GLM-4-Plus"
[[providers]]
name = "zai"
type = "zai"
enabled = true
base_url = "https://api.z.ai/api/anthropic"

[[providers.keys]]
key = "${ZAI_API_KEY}"

[providers.model_mapping]
"claude-sonnet-4-5-20250514" = "GLM-4.7"
"claude-haiku-3-5-20241022" = "GLM-4.5-Air"

models = [
"GLM-4.7",
"GLM-4.5-Air",
"GLM-4-Plus"
]

Multiples API Keys

Agrupar multiples API keys para mayor rendimiento:

providers:
- name: "anthropic"
  type: "anthropic"
  enabled: true

  keys:
    - key: "${ANTHROPIC_API_KEY_1}"
      rpm_limit: 60
      tpm_limit: 100000
    - key: "${ANTHROPIC_API_KEY_2}"
      rpm_limit: 60
      tpm_limit: 100000
    - key: "${ANTHROPIC_API_KEY_3}"
      rpm_limit: 60
      tpm_limit: 100000
[[providers]]
name = "anthropic"
type = "anthropic"
enabled = true

[[providers.keys]]
key = "${ANTHROPIC_API_KEY_1}"
rpm_limit = 60
tpm_limit = 100000

[[providers.keys]]
key = "${ANTHROPIC_API_KEY_2}"
rpm_limit = 60
tpm_limit = 100000

[[providers.keys]]
key = "${ANTHROPIC_API_KEY_3}"
rpm_limit = 60
tpm_limit = 100000

URL Base Personalizada

Sobreescribir el endpoint de API predeterminado:

providers:
- name: "anthropic-custom"
  type: "anthropic"
  base_url: "https://custom-endpoint.example.com"
[[providers]]
name = "anthropic-custom"
type = "anthropic"
base_url = "https://custom-endpoint.example.com"

Configuracion de Logging

Niveles de Log

NivelDescripcion
debugSalida detallada para desarrollo
infoMensajes de operacion normal
warnMensajes de advertencia
errorSolo mensajes de error

Formato de Log

logging:
format: "text"   # Legible por humanos (predeterminado)
# format: "json" # Legible por maquinas, para agregacion de logs
[logging]
format = "text"   # Legible por humanos (predeterminado)
# format = "json" # Legible por maquinas, para agregacion de logs

Opciones de Debug

Control detallado sobre el logging de debug:

logging:
level: "debug"
debug_options:
  log_request_body: true      # Registrar cuerpos de solicitud (redactados)
  log_response_headers: true  # Registrar headers de respuesta
  log_tls_metrics: true       # Registrar info de conexion TLS
  max_body_log_size: 1000     # Bytes maximos a registrar de cuerpos
[logging]
level = "debug"

[logging.debug_options]
log_request_body = true      # Registrar cuerpos de solicitud (redactados)
log_response_headers = true  # Registrar headers de respuesta
log_tls_metrics = true       # Registrar info de conexion TLS
max_body_log_size = 1000     # Bytes maximos a registrar de cuerpos

Configuracion de Cache

CC-Relay proporciona una capa de cache unificada con multiples opciones de backend para diferentes escenarios de implementacion.

Modos de Cache

ModoBackendDescripcion
singleRistrettoCache local en memoria de alto rendimiento (predeterminado)
haOlricCache distribuido para implementaciones de alta disponibilidad
disabledNoopModo de paso sin almacenamiento en cache

Modo Unico (Ristretto)

Ristretto es un cache en memoria concurrente de alto rendimiento. Este es el modo predeterminado para implementaciones de instancia unica.

cache:
mode: single
ristretto:
  num_counters: 1000000  # 10x elementos maximos esperados
  max_cost: 104857600    # 100 MB
  buffer_items: 64       # Tamano del buffer de admision
[cache]
mode = "single"

[cache.ristretto]
num_counters = 1000000  # 10x elementos maximos esperados
max_cost = 104857600    # 100 MB
buffer_items = 64       # Tamano del buffer de admision
CampoTipoPredeterminadoDescripcion
num_countersint641,000,000Numero de contadores de acceso de 4 bits. Recomendado: 10x elementos maximos esperados.
max_costint64104,857,600 (100 MB)Memoria maxima en bytes que el cache puede contener.
buffer_itemsint6464Numero de claves por buffer de Get. Controla el tamano del buffer de admision.

Modo HA (Olric) - Embebido

Para implementaciones multi-instancia que requieren estado de cache compartido, use el modo Olric embebido donde cada instancia de cc-relay ejecuta un nodo Olric.

cache:
mode: ha
olric:
  embedded: true
  bind_addr: "0.0.0.0:3320"
  dmap_name: "cc-relay"
  environment: lan
  peers:
    - "other-node:3322"  # Puerto memberlist = bind_addr + 2
  replica_count: 2
  read_quorum: 1
  write_quorum: 1
  member_count_quorum: 2
  leave_timeout: 5s
[cache]
mode = "ha"

[cache.olric]
embedded = true
bind_addr = "0.0.0.0:3320"
dmap_name = "cc-relay"
environment = "lan"
peers = ["other-node:3322"]  # Puerto memberlist = bind_addr + 2
replica_count = 2
read_quorum = 1
write_quorum = 1
member_count_quorum = 2
leave_timeout = "5s"
CampoTipoPredeterminadoDescripcion
embeddedboolfalseEjecutar nodo Olric embebido (true) vs. conectar a cluster externo (false).
bind_addrstringrequeridoDireccion para conexiones de cliente Olric (ej. “0.0.0.0:3320”).
dmap_namestring“cc-relay”Nombre del mapa distribuido. Todos los nodos deben usar el mismo nombre.
environmentstring“local”Preset de memberlist: “local”, “lan”, o “wan”.
peers[]string-Direcciones memberlist para descubrimiento de peers. Usa puerto bind_addr + 2.
replica_countint1Numero de copias por clave. 1 = sin replicacion.
read_quorumint1Lecturas exitosas minimas para respuesta.
write_quorumint1Escrituras exitosas minimas para respuesta.
member_count_quorumint321Miembros minimos del cluster requeridos para operar.
leave_timeoutduration5sTiempo para transmitir mensaje de salida antes de apagar.

Importante: Olric usa dos puertos - el puerto bind_addr para conexiones de cliente y bind_addr + 2 para gossip de memberlist. Asegurese de que ambos puertos esten abiertos en su firewall.

Modo HA (Olric) - Modo Cliente

Conecte a un cluster Olric externo en lugar de ejecutar nodos embebidos:

cache:
mode: ha
olric:
  embedded: false
  addresses:
    - "olric-node-1:3320"
    - "olric-node-2:3320"
  dmap_name: "cc-relay"
[cache]
mode = "ha"

[cache.olric]
embedded = false
addresses = ["olric-node-1:3320", "olric-node-2:3320"]
dmap_name = "cc-relay"
CampoTipoDescripcion
embeddedboolEstablecer en false para modo cliente.
addresses[]stringDirecciones del cluster Olric externo.
dmap_namestringNombre del mapa distribuido (debe coincidir con la configuracion del cluster).

Modo Deshabilitado

Deshabilitar el cache completamente para depuracion o cuando el cache se maneja en otro lugar:

cache:
mode: disabled
[cache]
mode = "disabled"

Para documentacion completa de cache incluyendo convenciones de claves de cache, estrategias de invalidacion de cache, guias de clustering HA y solucion de problemas, vea la documentacion del Sistema de Cache.

Configuracion de Routing

CC-Relay soporta multiples estrategias de routing para distribuir solicitudes entre proveedores.

# ==========================================================================
# Configuracion de Routing
# ==========================================================================
routing:
# Estrategia: round_robin, weighted_round_robin, shuffle, failover (predeterminado)
strategy: failover

# Timeout para intentos de failover en milisegundos (predeterminado: 5000)
failover_timeout: 5000

# Habilitar headers de debug (X-CC-Relay-Strategy, X-CC-Relay-Provider)
debug: false
# ==========================================================================
# Configuracion de Routing
# ==========================================================================
[routing]
# Estrategia: round_robin, weighted_round_robin, shuffle, failover (predeterminado)
strategy = "failover"

# Timeout para intentos de failover en milisegundos (predeterminado: 5000)
failover_timeout = 5000

# Habilitar headers de debug (X-CC-Relay-Strategy, X-CC-Relay-Provider)
debug = false

Estrategias de Routing

EstrategiaDescripcion
failoverIntentar proveedores en orden de prioridad, fallback en caso de fallo (predeterminado)
round_robinRotacion secuencial a traves de proveedores
weighted_round_robinDistribucion proporcional por peso
shuffleDistribucion aleatoria justa

Peso y Prioridad de Proveedor

El peso y la prioridad se configuran en la primera clave del proveedor:

providers:
- name: "anthropic"
  type: "anthropic"
  keys:
    - key: "${ANTHROPIC_API_KEY}"
      weight: 3      # Para weighted-round-robin (mayor = mas trafico)
      priority: 2    # Para failover (mayor = se intenta primero)
[[providers]]
name = "anthropic"
type = "anthropic"

[[providers.keys]]
key = "${ANTHROPIC_API_KEY}"
weight = 3      # Para weighted-round-robin (mayor = mas trafico)
priority = 2    # Para failover (mayor = se intenta primero)

Para configuracion detallada de routing incluyendo explicaciones de estrategias, cabeceras de depuracion y disparadores de failover, vea la documentacion de Routing.

Configuraciones de Ejemplo

Minima con Un Solo Proveedor

server:
listen: "127.0.0.1:8787"

providers:
- name: "anthropic"
  type: "anthropic"
  enabled: true
  keys:
    - key: "${ANTHROPIC_API_KEY}"
[server]
listen = "127.0.0.1:8787"

[[providers]]
name = "anthropic"
type = "anthropic"
enabled = true

[[providers.keys]]
key = "${ANTHROPIC_API_KEY}"

Configuracion Multi-Proveedor

server:
listen: "127.0.0.1:8787"
auth:
  allow_subscription: true

providers:
- name: "anthropic"
  type: "anthropic"
  enabled: true
  keys:
    - key: "${ANTHROPIC_API_KEY}"

- name: "zai"
  type: "zai"
  enabled: true
  keys:
    - key: "${ZAI_API_KEY}"
  model_mapping:
    "claude-sonnet-4-5-20250514": "GLM-4.7"

logging:
level: "info"
format: "text"
[server]
listen = "127.0.0.1:8787"

[server.auth]
allow_subscription = true

[[providers]]
name = "anthropic"
type = "anthropic"
enabled = true

[[providers.keys]]
key = "${ANTHROPIC_API_KEY}"

[[providers]]
name = "zai"
type = "zai"
enabled = true

[[providers.keys]]
key = "${ZAI_API_KEY}"

[providers.model_mapping]
"claude-sonnet-4-5-20250514" = "GLM-4.7"

[logging]
level = "info"
format = "text"

Desarrollo con Logging de Debug

server:
listen: "127.0.0.1:8787"

providers:
- name: "anthropic"
  type: "anthropic"
  enabled: true
  keys:
    - key: "${ANTHROPIC_API_KEY}"

logging:
level: "debug"
format: "text"
pretty: true
debug_options:
  log_request_body: true
  log_response_headers: true
  log_tls_metrics: true
[server]
listen = "127.0.0.1:8787"

[[providers]]
name = "anthropic"
type = "anthropic"
enabled = true

[[providers.keys]]
key = "${ANTHROPIC_API_KEY}"

[logging]
level = "debug"
format = "text"
pretty = true

[logging.debug_options]
log_request_body = true
log_response_headers = true
log_tls_metrics = true

Validar Configuracion

Valida tu archivo de configuracion:

cc-relay config validate

Consejo: Siempre valida los cambios de configuracion antes de desplegar. La recarga en caliente rechazara configuraciones invalidas, pero la validacion detecta errores antes de que lleguen a produccion.

Recarga en Caliente

CC-Relay detecta y aplica automaticamente los cambios de configuracion sin requerir un reinicio. Esto permite actualizaciones de configuracion sin tiempo de inactividad.

Como Funciona

CC-Relay usa fsnotify para monitorear el archivo de configuracion:

  1. Monitoreo de archivos: Se monitorea el directorio padre para detectar correctamente las escrituras atomicas (archivo temporal + renombrado usado por la mayoria de editores)
  2. Antirrebote: Multiples eventos de archivo rapidos se agrupan con un retardo de 100ms para manejar el comportamiento de guardado de editores
  3. Intercambio atomico: La nueva configuracion se carga e intercambia atomicamente usando sync/atomic.Pointer de Go
  4. Preservacion de solicitudes en curso: Las solicitudes en progreso continuan con la configuracion anterior; las nuevas solicitudes usan la configuracion actualizada

Eventos que Disparan la Recarga

EventoDispara Recarga
Escritura de archivoSi
Creacion de archivo (renombrado atomico)Si
Chmod de archivoNo (ignorado)
Otro archivo en el directorioNo (ignorado)

Registro

Cuando ocurre una recarga en caliente, veras mensajes de registro:

INF config file reloaded path=/path/to/config.yaml
INF config hot-reloaded successfully

Si la nueva configuracion es invalida:

ERR failed to reload config path=/path/to/config.yaml error="validation error"

Las configuraciones invalidas se rechazan y el proxy continua con la configuracion valida anterior.

Limitaciones

  • Direccion de escucha: Cambiar server.listen requiere reinicio
  • Direccion gRPC: Cambiar grpc.listen requiere reinicio

Opciones de configuracion que pueden recargarse en caliente:

  • Nivel y formato de registro
  • Estrategia de enrutamiento, timeout de failover, pesos y prioridades
  • Activacion de providers, base URL y mapeo de modelos
  • Estrategia de keypool, pesos de claves y limites por clave
  • Maximo de solicitudes concurrentes y tamano maximo del body
  • Intervalos de salud y umbrales del circuit breaker

Garantias de hot-reload

  • Las nuevas solicitudes usan la configuracion mas reciente tras la recarga.
  • Las solicitudes en curso continúan con la configuracion anterior.
  • La recarga se aplica de forma atomica a routing/providers/keypool.
  • Las configuraciones invalidas se rechazan y la anterior permanece activa.

Siguientes Pasos