OpenRouter

AI-перевод с OpenRouter и Lingo.dev Compiler

Что такое OpenRouter?

OpenRouter — это платформа, предоставляющая доступ к широкому спектру моделей ИИ от различных поставщиков через единый API. Она позволяет разработчикам легко сравнивать, переключаться и маршрутизировать запросы. Основное внимание уделяется гибкости, прозрачности и предоставлению пользователям большего контроля над выбором моделей и способом их оплаты.

Настройка API-ключа

Для работы с Lingo.dev Compiler OpenRouter требует API-ключ для аутентификации запросов. Выберите метод настройки, который лучше всего подходит для вашего рабочего процесса:

Вариант 1: Переменная окружения (терминал)

Лучше всего подходит для быстрых экспериментов и тестирования без изменения файлов.

Установите ключ напрямую в вашей сессии терминала:

export OPENROUTER_API_KEY="your-api-key-here"

Этот ключ будет доступен только до закрытия окна терминала.

Вариант 2: Конфигурация проекта (.env)

Лучше всего подходит для конфигурации, специфичной для проекта, и командной работы, где каждый проект может использовать разные учетные данные.

Создайте файл .env в корневой папке вашего проекта:

touch .env

Добавьте следующую строку в файл:

OPENROUTER_API_KEY="your-api-key-here"

Lingo.dev Compiler проверяет файлы окружения в следующем порядке приоритета:

  1. .env.development (наивысший приоритет)
  2. .env.local
  3. .env (наименьший приоритет)

Значения в файлах с более высоким приоритетом переопределяют значения в файлах с более низким приоритетом.

Вариант 3: Глобальная конфигурация (настройки пользователя)

Лучше всего подходит для индивидуальных разработчиков, которые хотят использовать один и тот же API-ключ во всех своих проектах.

Создайте файл конфигурации в домашней директории:

touch ~/.lingodotdevrc

Добавьте следующий контент в файл:

[llm]
openrouterApiKey="your-api-key-here"

Эта конфигурация сохраняется для всех сессий терминала и проектов на вашем компьютере.

Приоритет конфигурации

Если используются несколько методов конфигурации, Lingo.dev Compiler проверяет API-ключи в следующем порядке:

  1. Переменные окружения (наивысший приоритет)
  2. Файлы .env проекта (в их собственном порядке приоритета)
  3. Файл конфигурации пользователя ~/.lingodotdevrc (наименьший приоритет)

Используется первый найденный действительный API-ключ.

Использование OpenRouter

Чтобы включить OpenRouter, установите свойство models в параметрах компилятора:

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

Свойство принимает объект, где:

  • ключи — это пары исходного и целевого языков, где * представляет любой язык
  • значения — это идентификаторы моделей (например, openrouter:anthropic/claude-3.5-sonnet)

Вы можете использовать OpenRouter для перевода:

  • между всеми языками
  • с конкретного исходного языка
  • на конкретный целевой язык
  • между конкретным исходным и целевым языками

Перевод всех языков

Используйте шаблон подстановки *:*, чтобы применить одну и ту же модель OpenRouter для всех пар перевода:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Использовать Claude 3.5 Sonnet для всех пар перевода
    "*:*": "openrouter:anthropic/claude-3.5-sonnet",
  },
});

Перевод с конкретного исходного языка

Используйте конкретный исходный язык с подстановкой для целевого, чтобы применить модель для всех переводов с этого языка:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Использовать Claude 3.5 Sonnet для всех переводов с английского
    "en:*": "openrouter:anthropic/claude-3.5-sonnet",
    // Использовать GPT-4 Turbo для переводов с испанского на любой язык
    "es:*": "openrouter:openai/gpt-4-turbo",
    // Резервная модель для других исходных языков
    "*:*": "openrouter:meta-llama/llama-3.1-70b",
  },
});

Перевод на конкретный целевой язык

Используйте универсальный источник с конкретным целевым языком, чтобы применить модель для всех переводов на этот язык:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Использовать специализированную модель для переводов на японский
    "*:ja": "openrouter:anthropic/claude-3-opus",
    // Использовать Gemini Pro для переводов на китайский
    "*:zh": "openrouter:google/gemini-pro-1.5",
    // Использовать Mistral Large для переводов на французский
    "*:fr": "openrouter:mistralai/mistral-large",
    // По умолчанию для других целевых языков
    "*:*": "openrouter:openai/gpt-3.5-turbo",
  },
});

Перевод между конкретными языками

Определите точные пары источник-цель для детального контроля над тем, какая модель обрабатывает определённые языковые комбинации:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Конкретные пары с оптимальными моделями
    "en:es": "openrouter:openai/gpt-3.5-turbo", // с английского на испанский
    "en:ja": "openrouter:anthropic/claude-3.5-sonnet", // с английского на японский
    "en:zh": "openrouter:google/gemini-pro-1.5", // с английского на китайский
    "en:fr": "openrouter:mistralai/mistral-large", // с английского на французский
    "es:en": "openrouter:meta-llama/llama-3.1-8b", // с испанского на английский
    "fr:en": "openrouter:cohere/command-r-plus", // с французского на английский
    "de:en": "openrouter:perplexity/llama-3.1-sonar-large", // с немецкого на английский

    // Резерв для неуказанных пар
    "*:*": "openrouter:openai/gpt-3.5-turbo",
  },
});