El problema fundamental que Wayfinder aborda es la optimización del costo y la latencia en arquitecturas que consumen modelos de lenguaje a gran escala. A medida que la adopción de LLMs se generaliza, la distinción entre prompts triviales (ej. "resume esto") y complejos (ej. "escribe un plan de proyecto con restricciones") se vuelve crítica. Enviar todas las solicitudes a modelos de "frontera" (cloud) resulta prohibitivamente caro y, a menudo, innecesariamente lento para tareas sencillas.
Wayfinder propone una solución a este dilema mediante un enrutamiento inteligente y determinista. En lugar de depender de un clasificador basado en LLMs (que introduce latencia, costo y no determinismo), Wayfinder analiza la estructura y el contenido léxico del prompt para inferir su complejidad. Esto permite dirigir prompts de baja complejidad a modelos locales o más económicos, y solo los de alta complejidad a modelos de cloud más potentes y costosos. La relevancia de esta solución radica en la creciente necesidad de eficiencia operativa y control de costos en sistemas distribuidos que integran LLMs, especialmente en entornos de hyperscaler donde cada milisegundo y cada token cuentan.
Arquitectura del Sistema
Wayfinder se compone de un núcleo de scoring, un gateway compatible con la API de OpenAI y herramientas de calibración. El núcleo de scoring es una biblioteca Python ligera y sin dependencias externas, que analiza el prompt para calcular una "puntuación de complejidad" entre 0.0 y 1.0. Este análisis se basa en características estructurales (longitud, número de encabezados, listas, bloques de código, tablas) y, opcionalmente, léxicas (términos de razonamiento, símbolos matemáticos, restricciones). La decisión de enrutamiento es determinista: el mismo prompt siempre produce la misma puntuación y, por lo tanto, la misma ruta.
El gateway actúa como un proxy HTTP que expone una API compatible con OpenAI (/v1/chat/completions, /v1/messages para Anthropic). Los clientes existentes (aplicaciones de chat, IDEs, frameworks de agentes) simplemente apuntan su base_url al gateway de Wayfinder. El gateway intercepta la solicitud, invoca el scorer para obtener la puntuación de complejidad y, basándose en un umbral configurable, reenvía la solicitud a uno de los backends configurados (ej. un modelo local como Ollama/vLLM o un modelo en la nube como OpenAI/Anthropic). Las claves de API se leen de variables de entorno en tiempo de solicitud y nunca se almacenan en disco. El sistema soporta múltiples niveles de enrutamiento (tiered routing) y un clasificador multinomial-logístico entrenable. También incluye mecanismos de fiabilidad como reintentos, circuit breakers, failover y un sistema de caché de respuestas exactas para prompts idénticos. Las respuestas incluyen headers x-wayfinder-router-* para visibilidad del enrutamiento.
Flujo de Enrutamiento de Prompts
- 1 Cliente LLM Envía solicitud de chat/completions a Wayfinder Gateway.
- 2 Wayfinder Gateway Recibe solicitud, extrae prompt y metadatos.
- 3 Scoring Core Calcula puntuación de complejidad (0.0-1.0) basada en estructura/léxico.
- 4 Decisión de Enrutamiento Compara puntuación con umbral configurado (ej. 0.5).
- 5 Backend Local (Ollama/vLLM) Si puntuación < umbral, reenvía a modelo local.
- 6 Backend Cloud (OpenAI/Anthropic) Si puntuación >= umbral, reenvía a modelo en la nube.
- 7 Backend Seleccionado Procesa el prompt y genera la respuesta.
- 8 Wayfinder Gateway Reenvía respuesta al cliente, añadiendo headers de enrutamiento.
| Capa | Tecnología | Justificación |
|---|---|---|
| orchestration | Wayfinder Router (Python) | Orquesta el enrutamiento de prompts entre diferentes modelos LLM, actuando como un proxy inteligente y determinista. vs RouteLLM (clasificador entrenado), NotDiamond / Martian (servicios aprendidos y alojados), OpenRouter (auto-router alojado), LiteLLM (proxy de proveedor) Configuración de umbral de complejidad, pesos de características, y definición de tiers de modelos. |
| compute | Ollama / vLLM / llama.cpp | Modelos LLM locales para procesamiento de prompts de baja complejidad, reduciendo latencia y costo. |
| compute | OpenAI / Anthropic / Groq / Together / Fireworks / DeepSeek | Modelos LLM en la nube para procesamiento de prompts de alta complejidad, ofreciendo mayor capacidad y calidad. Configuración de `base_url`, `model` y `api_key_env` para cada proveedor. |
| networking | HTTP/1.1 (OpenAI API compatible) | Protocolo de comunicación entre el cliente, el gateway de Wayfinder y los backends de modelos LLM. Uso de `base_url` para redirigir el tráfico a Wayfinder. |
| security | Variables de Entorno / Secret Stores (1Password, macOS Keychain, etc.) | Gestión segura de claves de API, leídas en tiempo de solicitud y nunca almacenadas en disco. `api_key_env` y `api_key_cmd` para integración con vaults de secretos. |
| cache | Caché de respuestas en memoria de Wayfinder | Almacena respuestas de prompts idénticos para reenvío instantáneo y gratuito, mejorando latencia y reduciendo costos. `enabled`, `ttl`, `max_entries`, `max_bytes`. |
Trade-offs
Ganancias
- ▲ Reducción de costos de inferencia
- ▲ Reducción de latencia para prompts simples
- ▲ Mayor control y observabilidad sobre el enrutamiento
- ▲ Determinismo en la decisión de enrutamiento
Costes
- △ Necesidad de calibración inicial y mantenimiento del umbral
- △ Overhead mínimo del gateway y el scoring
- △ Precisión limitada en prompts con dificultad puramente semántica sin indicadores estructurales
client = openai.OpenAI(base_url="http://localhost:8088/v1", api_key="unused")
client.chat.completions.create(model="auto", messages=[{"role": "user", "content": "..."}])from wayfinder_router import score_complexity, RoutingConfig, explain_score
result = score_complexity(prompt_text, config=RoutingConfig.binary(threshold=0.7))
print(result.recommendation, result.score, result.features)
for fc in explain_score(result.features, RoutingConfig().weights):
print(fc.name, fc.contribution)Fundamentos Teóricos
El concepto de enrutamiento basado en características y la optimización de recursos es un tema recurrente en la investigación de sistemas distribuidos y optimización de rendimiento. Aunque Wayfinder no cita directamente un paper fundacional, su enfoque resuena con principios de sistemas de colas y balanceo de carga adaptativo. La idea de clasificar la "dificultad" de una tarea antes de asignarla a un recurso se puede ver en algoritmos de scheduling en sistemas operativos y bases de datos, donde las tareas se priorizan o se dirigen a diferentes pools de recursos según su estimación de costo computacional.
La calibración del umbral de complejidad, utilizando un dataset etiquetado y optimizando una función objetivo (como "calidad recuperada × costo ahorrado"), se alinea con técnicas de aprendizaje automático supervisado y optimización convexa, específicamente la regresión logística con regularización L2. Esto permite al sistema aprender la política de enrutamiento óptima a partir de datos empíricos, un principio central en el diseño de sistemas adaptativos y auto-optimizables, como los descritos en trabajos sobre control de admisión y gestión de recursos en entornos cloud.