Plug-in Ollama

Le plug-in Ollama fournit des interfaces à tous les LLM locaux compatibles avec Ollama.

Installation

npm i --save genkitx-ollama

Configuration

Pour utiliser ce plug-in, vous devez d'abord installer et exécuter le serveur Ollama. Vous pouvez suivre les instructions sur la page Télécharger Ollama.

Vous pouvez utiliser la CLI Ollama pour télécharger le modèle qui vous intéresse. Exemple :

ollama pull gemma

Pour utiliser ce plug-in, spécifiez-le lorsque vous initialisez Genkit:

import { genkit } from 'genkit';
import { ollama } from 'genkitx-ollama';

const ai = genkit({
  plugins: [
    ollama({
      models: [
        {
          name: 'gemma',
          type: 'generate', // type: 'chat' | 'generate' | undefined
        },
      ],
      serverAddress: 'http://127.0.0.1:11434', // default local address
    }),
  ],
});

Authentification

Si vous souhaitez accéder à des déploiements distants d'Ollama qui nécessitent des en-têtes personnalisés (statiques, tels que des clés API, ou dynamiques, tels que des en-têtes d'authentification), vous pouvez les spécifier dans le plug-in de configuration d'Ollama:

En-têtes statiques:

ollama({
  models: [{ name: 'gemma'}],
  requestHeaders: {
    'api-key': 'API Key goes here'
  },
  serverAddress: 'https://my-deployment',
}),

Vous pouvez également définir dynamiquement des en-têtes par requête. Voici un exemple d'utilisation de la bibliothèque Google Auth pour définir un jeton d'ID:

import { GoogleAuth } from 'google-auth-library';
import { ollama } from 'genkitx-ollama';
import { genkit } from 'genkit';

const ollamaCommon = { models: [{ name: 'gemma:2b' }] };

const ollamaDev = {
  ...ollamaCommon,
  serverAddress: 'http://127.0.0.1:11434',
};

const ollamaProd = {
  ...ollamaCommon,
  serverAddress: 'https://my-deployment',
  requestHeaders: async (params) => {
    const headers = await fetchWithAuthHeader(params.serverAddress);
    return { Authorization: headers['Authorization'] };
  },
};

const ai = genkit({
  plugins: [
    ollama(isDevEnv() ? ollamaDev : ollamaProd),
  ],
});

// Function to lazily load GoogleAuth client
let auth: GoogleAuth;
function getAuthClient() {
  if (!auth) {
    auth = new GoogleAuth();
  }
  return auth;
}

// Function to fetch headers, reusing tokens when possible
async function fetchWithAuthHeader(url: string) {
  const client = await getIdTokenClient(url);
  const headers = await client.getRequestHeaders(url); // Auto-manages token refresh
  return headers;
}

async function getIdTokenClient(url: string) {
  const auth = getAuthClient();
  const client = await auth.getIdTokenClient(url);
  return client;
}

Utilisation

Ce plug-in n'exporte pas de manière statique les références de modèle. Spécifiez l'un des modèles que vous avez configurés à l'aide d'un identifiant de chaîne:

const llmResponse = await ai.generate({
  model: 'ollama/gemma',
  prompt: 'Tell me a joke.',
});

Intégrateurs

Le plug-in Ollama est compatible avec les représentations vectorielles continues, qui peuvent être utilisées pour les recherches de similarité et d'autres tâches de traitement du langage naturel.

const ai = genkit({
  plugins: [
    ollama({
      serverAddress: 'http://localhost:11434',
      embedders: [{ name: 'nomic-embed-text', dimensions: 768 }],
    }),
  ],
});

async function getEmbeddings() {
  const embeddings = (await ai.embed({
      embedder: 'ollama/nomic-embed-text',
      content: 'Some text to embed!',
  })
  )[0].embedding;

  return embeddings;
}

getEmbeddings().then((e) => console.log(e))