المكوّن الإضافي Ollama

يوفّر المكوّن الإضافي Ollama واجهات لأي من النماذج اللغوية الكبيرة المحلية المتوافقة مع أولاما

تثبيت

npm i --save genkitx-ollama

الإعداد

يتطلب هذا المكوّن الإضافي أن تقوم أولاً بتثبيت خادم ollama وتشغيله. يمكنك متابعة التعليمات على الرابط: https://ollama.com/download

يمكنك استخدام Ollama CLI لتنزيل النموذج الذي يهمّك. بالنسبة مثال:

ollama pull gemma

لاستخدام هذا المكوّن الإضافي، حدده عند طلب configureGenkit().

import { ollama } from 'genkitx-ollama';

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

المصادقة

إذا كنت ترغب في الوصول إلى عمليات نشر ollama عن بُعد التي تتطلب رؤوسًا مخصصة (ثابتة، مثل مفاتيح واجهة برمجة التطبيقات أو الإعلانات الديناميكية، مثل عناوين المصادقة)، يمكنك تحديد هذه العناوين في المكوّن الإضافي للإعدادات ollama:

عناوين ثابتة:

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

ويمكنك أيضًا ضبط العناوين بشكل ديناميكي لكل طلب. إليك مثال على كيفية ضبط رمز مميّز للمعرّف باستخدام مكتبة مصادقة Google:

import { GoogleAuth } from 'google-auth-library';
import { ollama, OllamaPluginParams } from 'genkitx-ollama';
import { configureGenkit, isDevEnv } from '@genkit-ai/core';

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

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

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

export default configureGenkit({
  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;
}

الاستخدام

لا يصدِّر هذا المكوّن الإضافي مراجع النماذج بشكل ثابت. حدِّد أحد الخيارات التالية: النماذج التي قمت بتهيئتها باستخدام معرّف سلسلة:

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