المكوّن الإضافي 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) => ({
    Authorization: `Bearer ${await getIdToken(params.serverAddress)}`,
  }),
} as OllamaPluginParams;

export default configureGenkit({
  plugins: [
    ollama(isDevEnv() ? ollamaDev: ollamaProd),
  ],
});

export async function getIdToken(url: string): Promise<string> {
  const auth = getAuthClient();
  const client = await auth.getIdTokenClient(url);
  return client.idTokenProvider.fetchIdToken(url);
}

let auth: GoogleAuth;
function getAuthClient() {
  // Lazy load GoogleAuth client.
  if (!auth) {
    auth = new GoogleAuth();
  }
  return auth;
}

الاستخدام

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

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