المكوّن الإضافي 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.',
});