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

يوفّر المكوّن الإضافي 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 Auth:

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.',
});