OpenRouter

Traduction IA avec OpenRouter et Lingo.dev Compiler

Qu'est-ce qu'OpenRouter ?

OpenRouter est une plateforme qui fournit un accès à une grande variété de modèles d'IA provenant de différents fournisseurs via une API unifiée, permettant aux développeurs de comparer, changer et router les requêtes facilement. Elle se concentre sur la flexibilité, la transparence et offre aux utilisateurs plus de contrôle sur les modèles qu'ils utilisent et sur leur facturation.

Configuration de la clé API

OpenRouter nécessite une clé API pour authentifier les requêtes provenant de Lingo.dev Compiler. Choisissez la méthode de configuration qui correspond le mieux à votre flux de travail :

Option 1 : Variable d'environnement (Terminal)

Idéale pour les expérimentations rapides et les tests sans modifier de fichiers.

Définissez la clé directement dans votre session de terminal :

export OPENROUTER_API_KEY="votre-clé-api-ici"

Cette clé ne sera disponible que jusqu'à la fermeture de votre fenêtre de terminal.

Option 2 : Configuration de projet (.env)

Idéale pour la configuration spécifique à un projet et les environnements d'équipe où chaque projet peut utiliser des identifiants différents.

Créez un fichier .env à la racine de votre projet :

touch .env

Ajoutez la ligne suivante au fichier :

OPENROUTER_API_KEY="votre-clé-api-ici"

Lingo.dev Compiler vérifie les fichiers d'environnement dans cet ordre de priorité :

  1. .env.development (priorité la plus haute)
  2. .env.local
  3. .env (priorité la plus basse)

Les valeurs dans les fichiers de priorité supérieure remplacent celles des fichiers de priorité inférieure.

Option 3 : Configuration globale (Paramètres utilisateur)

Idéale pour les développeurs individuels qui souhaitent utiliser la même clé API pour tous leurs projets.

Créez un fichier de configuration dans votre répertoire personnel :

touch ~/.lingodotdevrc

Ajoutez le contenu suivant au fichier :

[llm]
openrouterApiKey="votre-clé-api-ici"

Cette configuration persiste à travers toutes les sessions de terminal et tous les projets sur votre machine.

Priorité de configuration

Lorsque plusieurs méthodes de configuration sont utilisées, Lingo.dev Compiler vérifie les clés API dans cet ordre :

  1. Variables d'environnement (priorité la plus haute)
  2. Fichiers .env du projet (dans leur propre ordre de priorité)
  3. Fichier de configuration utilisateur ~/.lingodotdevrc (priorité la plus basse)

La première clé API valide trouvée est utilisée.

Utilisation d'OpenRouter

Pour activer OpenRouter, définissez la propriété models dans les options du compilateur :

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);

Cette propriété accepte un objet où :

  • les clés sont des paires de locales source et cible, avec * représentant n'importe quelle locale
  • les valeurs sont des identifiants de modèles (par exemple, openrouter:anthropic/claude-3.5-sonnet)

Vous pouvez utiliser OpenRouter pour traduire :

  • entre toutes les locales
  • depuis une locale source spécifique
  • vers une locale cible spécifique
  • entre une locale source et une locale cible spécifiques

Traduction de toutes les locales

Utilisez le modèle générique *:* pour appliquer le même modèle OpenRouter à toutes les paires de traduction :

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Utiliser Claude 3.5 Sonnet pour toutes les paires de traduction
    "*:*": "openrouter:anthropic/claude-3.5-sonnet",
  },
});

Traduction depuis une locale source spécifique

Utilisez une locale source spécifique avec une cible générique pour appliquer un modèle à toutes les traductions depuis cette source :

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Utiliser Claude 3.5 Sonnet pour toutes les traductions depuis l'anglais
    "en:*": "openrouter:anthropic/claude-3.5-sonnet",
    // Utiliser GPT-4 Turbo pour les traductions de l'espagnol vers n'importe quelle langue
    "es:*": "openrouter:openai/gpt-4-turbo",
    // Solution de repli pour les autres langues source
    "*:*": "openrouter:meta-llama/llama-3.1-70b",
  },
});

Traduction vers une locale cible spécifique

Utilisez une source générique avec une locale cible spécifique pour appliquer un modèle à toutes les traductions vers cette cible :

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Utiliser un modèle spécialisé pour les traductions vers le japonais
    "*:ja": "openrouter:anthropic/claude-3-opus",
    // Utiliser Gemini Pro pour les traductions vers le chinois
    "*:zh": "openrouter:google/gemini-pro-1.5",
    // Utiliser Mistral Large pour les traductions vers le français
    "*:fr": "openrouter:mistralai/mistral-large",
    // Modèle par défaut pour les autres langues cibles
    "*:*": "openrouter:openai/gpt-3.5-turbo",
  },
});

Traduction entre locales spécifiques

Définissez des paires source-cible exactes pour un contrôle précis sur le modèle qui gère des combinaisons linguistiques spécifiques :

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Paires spécifiques avec modèles optimaux
    "en:es": "openrouter:openai/gpt-3.5-turbo", // Anglais vers espagnol
    "en:ja": "openrouter:anthropic/claude-3.5-sonnet", // Anglais vers japonais
    "en:zh": "openrouter:google/gemini-pro-1.5", // Anglais vers chinois
    "en:fr": "openrouter:mistralai/mistral-large", // Anglais vers français
    "es:en": "openrouter:meta-llama/llama-3.1-8b", // Espagnol vers anglais
    "fr:en": "openrouter:cohere/command-r-plus", // Français vers anglais
    "de:en": "openrouter:perplexity/llama-3.1-sonar-large", // Allemand vers anglais

    // Solution de repli pour les paires non spécifiées
    "*:*": "openrouter:openai/gpt-3.5-turbo",
  },
});