Ollama

Traduction IA locale avec Ollama et Lingo.dev Compiler

Qu'est-ce qu'Ollama ?

Ollama vous permet d'exécuter des modèles de langage de grande taille localement sur votre machine. Il offre une confidentialité totale, aucun coût d'API et fonctionne hors ligne. Vous pouvez choisir parmi des modèles comme Llama, Mistral, Gemma et Qwen. Ollama fonctionne avec Lingo.dev Compiler, vous permettant de traduire le contenu de votre application en utilisant des modèles locaux.

Mise en route

Étape 1. Installer Ollama

macOS

brew install ollama

Linux

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

Windows

  1. Accédez à ollama.com/download.
  2. Téléchargez et exécutez l'installateur.

Étape 2. Démarrer Ollama

Si Ollama n'est pas déjà en cours d'exécution, démarrez-le avec la commande suivante :

ollama serve

Étape 2. Télécharger un modèle

ollama pull llama3.1

Utilisation d'Ollama

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

export default withLingo(viteConfig);

La 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èle (par exemple, ollama:llama3.1)

Vous pouvez utiliser Ollama 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 Ollama à toutes les paires de traduction :

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Utiliser Llama 3.1 pour toutes les paires de traduction
    "*:*": "ollama:llama3.1",
  },
});

Traduction à partir d'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 provenant de cette source :

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // Utiliser Llama 3.1 70B pour toutes les traductions depuis l'anglais
    "en:*": "ollama:llama3.1:70b",
    // Utiliser Mixtral pour les traductions de l'espagnol vers n'importe quelle langue
    "es:*": "ollama:mixtral",
    // Solution de repli pour les autres langues sources
    "*:*": "ollama:gemma2",
  },
});

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": "ollama:qwen2",
    // Utiliser Mixtral pour les traductions vers le chinois
    "*:zh": "ollama:mixtral",
    // Utiliser Mistral pour les traductions vers l'allemand
    "*:de": "ollama:mistral",
    // Modèle par défaut pour les autres langues cibles
    "*:*": "ollama:llama3.1",
  },
});

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": "ollama:gemma2", // Anglais vers espagnol
    "en:ja": "ollama:qwen2", // Anglais vers japonais
    "en:zh": "ollama:qwen2", // Anglais vers chinois
    "es:en": "ollama:llama3.1", // Espagnol vers anglais
    "fr:en": "ollama:mistral", // Français vers anglais
    "de:en": "ollama:phi3", // Allemand vers anglais

    // Solution de repli pour les paires non spécifiées
    "*:*": "ollama:llama3.1",
  },
});