El problema fundamental que Interfaze aborda es la ineficiencia y el costo asociado con el uso de modelos de lenguaje grandes (LLMs) generalistas para tareas determinísticas que requieren alta precisión y bajo costo computacional. Mientras que los LLMs son excelentes para la comprensión contextual y el razonamiento de alto nivel, su arquitectura basada en Transformers introduce latencia y un consumo de recursos significativo para operaciones repetitivas y de baja ambigüedad.

Históricamente, las redes neuronales convolucionales (CNNs) y profundas (DNNs) han demostrado ser extremadamente eficientes y precisas para tareas específicas como el reconocimiento óptico de caracteres (OCR) o la detección de objetos. Sin embargo, carecen de la flexibilidad y la capacidad de razonamiento de los Transformers. Interfaze propone una síntesis de estos paradigmas, combinando la especialización de las DNN/CNNs con la adaptabilidad de los Transformers, para ofrecer una solución que maximiza la precisión y minimiza el costo en un dominio específico de aplicaciones de IA.

Arquitectura del Sistema

La arquitectura de Interfaze se describe como un modelo híbrido que integra la especialización de los modelos DNN/CNN con la capacidad de los 'omni-transformers'. Esto implica que el sistema puede activar partes específicas del modelo para ejecutar una tarea determinada sin cargar el conjunto completo de pesos del Transformer, lo que resulta en una ejecución más rápida y económica. Por ejemplo, para tareas de OCR, se puede activar un encoder CNN especializado que procesa la imagen, extrae texto y metadatos como bounding boxes y scores de confianza. Estos resultados pueden luego ser pasados a capas de Transformer para un procesamiento adicional o para cumplir con un esquema de salida estructurado.

La plataforma expone una API compatible con el estándar Chat Completions de OpenAI, lo que permite a los desarrolladores integrar Interfaze utilizando SDKs existentes como OpenAI SDK, Vercel AI SDK o LangChain. La capacidad de especificar una <task> en el prompt del sistema (ej. <task>ocr</task>) sugiere un mecanismo de enrutamiento interno que dirige la solicitud a los componentes especializados del modelo. La salida estructurada se gestiona mediante esquemas JSON (ej. Zod en TypeScript), permitiendo la extracción de datos enriquecidos y tipados, mientras que los datos brutos (como bounding boxes de OCR o resultados de búsqueda web) se proporcionan a través de un campo precontext para una mayor granularidad.

Flujo de Procesamiento de Solicitud Híbrida

  1. 1 Cliente Envía solicitud a la API de Interfaze (compatible con OpenAI Chat Completions...
  2. 2 API Gateway Autenticación, validación de formato y enrutamiento inicial
  3. 3 Módulo de Enrutamiento Identifica la tarea (ej. OCR, STT) y el esquema de salida del prompt
  4. 4 Módulo Especializado (DNN/CNN) Procesa la entrada (imagen, audio) con pesos optimizados para la tarea
  5. 5 Extracción de Metadatos Genera bounding boxes, confianza, transcripciones, etc. (precontext)
  6. 6 Módulo Transformer Recibe salida del módulo especializado y genera respuesta estructurada según ...
  7. 7 API Gateway Serializa la respuesta (JSON) y la envía al cliente
CapaTecnologíaJustificación
compute DNN/CNN Procesamiento especializado de modalidades (visión, audio) para tareas determinísticas. Utilizado por su alta precisión y eficiencia en tareas específicas.
compute Transformer Models Capacidad de razonamiento, comprensión de lenguaje natural y estructuración de salida. Se utiliza para la flexibilidad y la interpretación de alto nivel.
networking OpenAI Chat Completions API Standard Interfaz de comunicación con el cliente. Permite la integración con SDKs y herramientas existentes del ecosistema de IA. vs API REST personalizada, gRPC baseURL: 'https://api.interfaze.ai/v1'
data-processing Zod (TypeScript) Definición y validación de esquemas de salida JSON. Asegura la tipificación y consistencia de los datos estructurados. vs JSON Schema, Pydantic (Python)

Trade-offs

Ganancias
  • Precisión en tareas determinísticas (OCR, STT, detección de objetos)
  • Costo computacional para tareas determinísticas
  • Velocidad de respuesta para tareas determinísticas
  • Salida estructurada y determinística
Costes
  • Flexibilidad para tareas no determinísticas o de razonamiento complejo
  • Capacidad de ejecutar múltiples tareas por solicitud en modo optimizado
import { z } from "zod";
import { zodResponseFormat } from "openai/helpers/zod";

const OCRObjectDetectionSchema = z.object({
  text: z.string().describe("all text in the image"),
  graphic_objects: z
    .array(
      z.object({
        description: z.string(),
        top_left_x: z.number(),
        top_left_y: z.number(),
        bottom_right_x: z.number(),
        bottom_right_y: z.number(),
      })
    )
    .describe("graphics objects found in the image"),
});

const response = await interfaze.chat.completions.create({
  model: "interfaze-beta",
  messages: [
    {
      role: "user",
      content: [
        { type: "text", text: "Extract the text and graphics from the image based on the schema." },
        {
          type: "image_url",
          image_url: {
            url: "https://r2public.jigsawstack.com/interfaze/examples/dense_text_ocr_figures.png",
          },
        },
      ],
    },
  ],
  response_format: zodResponseFormat(OCRObjectDetectionSchema, "ocr_object_detection_schema"),
});

console.log(response.choices[0].message.content);
//@ts-expect-error precontext is not typed
const precontext = response.precontext;
console.log("OCR bounding boxes + confidence:", precontext[0]?.result);
Ejemplo de cómo usar el SDK de OpenAI con Zod para definir y validar el esquema de salida JSON, y cómo Interfaze devuelve tanto la salida estructurada (`object`) como los metadatos brutos (`precontext`).
import { z } from "zod";
import { zodResponseFormat } from "openai/helpers/zod";

const response = await interfaze.chat.completions.create({
  model: "interfaze-beta",
  messages: [
    { role: "system", content: "<task>ocr</task>" },
    {
      role: "user",
      content: [
        { type: "text", text: "Extract all text from this image" },
        {
          type: "image_url",
          image_url: {
            url: "https://r2public.jigsawstack.com/interfaze/examples/handwriting.jpeg",
          },
        },
      ],
    },
  ],
  response_format: zodResponseFormat(z.any(), "empty_schema"),
});

console.log(response.choices[0].message.content);
Demuestra cómo se puede activar un módulo de tarea específico (ej. OCR puro) utilizando una etiqueta `<task>` en el prompt del sistema, optimizando el procesamiento para esa función.

Fundamentos Teóricos

La arquitectura híbrida de Interfaze se alinea con el concepto de 'especialización de expertos' o 'mixture of experts' (MoE), un principio que ha sido explorado en la literatura académica desde los años 90. Un trabajo seminal en esta área es el de Jacobs et al. (1991) con 'Adaptive Mixtures of Local Experts', que propuso combinar múltiples redes neuronales especializadas (expertos) con una red 'gating' que aprende a asignar la entrada al experto más adecuado. Este enfoque permite que diferentes partes del modelo se activen para diferentes tipos de entradas o tareas, mejorando la eficiencia y el rendimiento.

En el contexto de los Transformers, la idea de MoE ha resurgido con fuerza, especialmente en modelos a gran escala, para manejar la complejidad computacional y mejorar la capacidad de los modelos. Por ejemplo, el paper 'Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity' de Fedus et al. (2021) demuestra cómo la escasez condicional (activar solo un subconjunto de expertos por token) puede escalar los modelos a miles de millones de parámetros de manera eficiente. Interfaze parece aplicar una filosofía similar, pero a un nivel de arquitectura de sistema, donde 'expertos' podrían ser módulos DNN/CNN pre-entrenados para tareas específicas, orquestados por un Transformer o un mecanismo de enrutamiento inteligente.