OpenRouter

Traducción con IA mediante OpenRouter y Lingo.dev Compiler

¿Qué es OpenRouter?

OpenRouter es una plataforma que proporciona acceso a una amplia variedad de modelos de IA de diferentes proveedores a través de una API unificada, permitiendo a los desarrolladores comparar, cambiar y enrutar peticiones fácilmente. Se centra en la flexibilidad, transparencia y en dar a los usuarios más control sobre qué modelos utilizan y cómo se les factura.

Configuración de la clave API

OpenRouter requiere una clave API para autenticar las solicitudes desde Lingo.dev Compiler. Elige el método de configuración que mejor se adapte a tu flujo de trabajo:

Opción 1: Variable de entorno (Terminal)

Ideal para experimentos rápidos y pruebas sin modificar archivos.

Establece la clave directamente en tu sesión de terminal:

export OPENROUTER_API_KEY="tu-clave-api-aquí"

Esta clave solo estará disponible hasta que cierres la ventana de la terminal.

Opción 2: Configuración del proyecto (.env)

Ideal para configuración específica de proyectos y entornos de equipo donde cada proyecto puede usar diferentes credenciales.

Crea un archivo .env en la raíz de tu proyecto:

touch .env

Añade la siguiente línea al archivo:

OPENROUTER_API_KEY="tu-clave-api-aquí"

Lingo.dev Compiler verifica los archivos de entorno en este orden de prioridad:

  1. .env.development (prioridad más alta)
  2. .env.local
  3. .env (prioridad más baja)

Los valores en archivos de mayor prioridad sobrescriben a los de archivos de menor prioridad.

Opción 3: Configuración global (Ajustes de usuario)

Ideal para desarrolladores individuales que quieren usar la misma clave API en todos sus proyectos.

Crea un archivo de configuración en tu directorio principal:

touch ~/.lingodotdevrc

Añade el siguiente contenido al archivo:

[llm]
openrouterApiKey="tu-clave-api-aquí"

Esta configuración persiste en todas las sesiones de terminal y proyectos en tu máquina.

Prioridad de configuración

Cuando se utilizan múltiples métodos de configuración, Lingo.dev Compiler busca las claves API en este orden:

  1. Variables de entorno (prioridad más alta)
  2. Archivos .env del proyecto (en su propio orden de prioridad)
  3. Archivo de configuración de usuario ~/.lingodotdevrc (prioridad más baja)

Se utiliza la primera clave API válida que se encuentre.

Uso de OpenRouter

Para habilitar OpenRouter, establece la propiedad models en las opciones del compilador:

import react from "@vitejs/plugin-react";
import lingoCompiler from "lingo.dev/compiler";
import { type UserConfig } from "vite";

// https://vite.dev/config/
const viteConfig: UserConfig = {
  plugins: [react()],
};

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja"],
  rsc: false,
  useDirective: false,
  debug: false,
  models: {
    "*:*": "openrouter:anthropic/claude-3.5-sonnet",
  },
});

export default withLingo(viteConfig);

La propiedad acepta un objeto donde:

  • las claves son pares de locales de origen y destino, con * representando cualquier locale
  • los valores son identificadores de modelos (p. ej., openrouter:anthropic/claude-3.5-sonnet)

Puedes usar OpenRouter para traducir:

  • entre todos los locales
  • desde un locale de origen específico
  • a un locale de destino específico
  • entre un locale de origen y destino específicos

Traducción de todos los locales

Utiliza el patrón comodín *:* para aplicar el mismo modelo de OpenRouter a todos los pares de traducción:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Usar Claude 3.5 Sonnet para todos los pares de traducción
    "*:*": "openrouter:anthropic/claude-3.5-sonnet",
  },
});

Traducción desde un locale de origen específico

Utiliza un locale de origen específico con un comodín de destino para aplicar un modelo a todas las traducciones desde ese origen:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Usar Claude 3.5 Sonnet para todas las traducciones desde inglés
    "en:*": "openrouter:anthropic/claude-3.5-sonnet",
    // Usar GPT-4 Turbo para traducciones desde español a cualquier idioma
    "es:*": "openrouter:openai/gpt-4-turbo",
    // Fallback para otros idiomas de origen
    "*:*": "openrouter:meta-llama/llama-3.1-70b",
  },
});

Traducción a un idioma de destino específico

Utiliza un comodín de origen con un idioma de destino específico para aplicar un modelo a todas las traducciones a ese destino:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Usar modelo especializado para traducciones al japonés
    "*:ja": "openrouter:anthropic/claude-3-opus",
    // Usar Gemini Pro para traducciones al chino
    "*:zh": "openrouter:google/gemini-pro-1.5",
    // Usar Mistral Large para traducciones al francés
    "*:fr": "openrouter:mistralai/mistral-large",
    // Predeterminado para otros idiomas de destino
    "*:*": "openrouter:openai/gpt-3.5-turbo",
  },
});

Traducción entre idiomas específicos

Define pares exactos de origen-destino para un control preciso sobre qué modelo maneja combinaciones específicas de idiomas:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Pares específicos con modelos óptimos
    "en:es": "openrouter:openai/gpt-3.5-turbo", // Inglés a español
    "en:ja": "openrouter:anthropic/claude-3.5-sonnet", // Inglés a japonés
    "en:zh": "openrouter:google/gemini-pro-1.5", // Inglés a chino
    "en:fr": "openrouter:mistralai/mistral-large", // Inglés a francés
    "es:en": "openrouter:meta-llama/llama-3.1-8b", // Español a inglés
    "fr:en": "openrouter:cohere/command-r-plus", // Francés a inglés
    "de:en": "openrouter:perplexity/llama-3.1-sonar-large", // Alemán a inglés

    // Fallback para pares no especificados
    "*:*": "openrouter:openai/gpt-3.5-turbo",
  },
});