Ollama

Traducción de IA local con Ollama y Lingo.dev Compiler

¿Qué es Ollama?

Ollama te permite ejecutar modelos de lenguaje grandes localmente en tu máquina. Proporciona privacidad completa, cero costos de API y funciona sin conexión. Puedes elegir entre modelos como Llama, Mistral, Gemma y Qwen. Ollama funciona con Lingo.dev Compiler, permitiéndote traducir el contenido de tu aplicación utilizando modelos locales.

Primeros pasos

Paso 1. Instalar Ollama

macOS

brew install ollama

Linux

curl -fsSL https://ollama.com/install.sh | sh

Windows

  1. Navega a ollama.com/download.
  2. Descarga y ejecuta el instalador.

Paso 2. Iniciar Ollama

Si Ollama no está ejecutándose, inícialo con el siguiente comando:

ollama serve

Paso 2. Descargar un modelo

ollama pull llama3.1

Uso de Ollama

Para habilitar Ollama, 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: {
    "*:*": "ollama:llama3.1",
  },
});

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 modelo (p. ej., ollama:llama3.1)

Puedes usar Ollama 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 Ollama 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 Llama 3.1 para todos los pares de traducción
    "*:*": "ollama:llama3.1",
  },
});

Traducción desde un idioma de origen específico

Utiliza un idioma de origen específico con 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 Llama 3.1 70B para todas las traducciones desde inglés
    "en:*": "ollama:llama3.1:70b",
    // Usar Mixtral para traducciones desde español a cualquier idioma
    "es:*": "ollama:mixtral",
    // Fallback para otros idiomas de origen
    "*:*": "ollama:gemma2",
  },
});

Traducción a un idioma de destino específico

Utiliza un origen comodín con un idioma de destino específico para aplicar un modelo a todas las traducciones hacia 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": "ollama:qwen2",
    // Usar Mixtral para traducciones al chino
    "*:zh": "ollama:mixtral",
    // Usar Mistral para traducciones al alemán
    "*:de": "ollama:mistral",
    // Predeterminado para otros idiomas de destino
    "*:*": "ollama:llama3.1",
  },
});

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": "ollama:gemma2", // Inglés a español
    "en:ja": "ollama:qwen2", // Inglés a japonés
    "en:zh": "ollama:qwen2", // Inglés a chino
    "es:en": "ollama:llama3.1", // Español a inglés
    "fr:en": "ollama:mistral", // Francés a inglés
    "de:en": "ollama:phi3", // Alemán a inglés

    // Fallback para pares no especificados
    "*:*": "ollama:llama3.1",
  },
});