Genkit प्लगिन लिखना

Firebase Genkit की सुविधाओं को इस तरह डिज़ाइन किया गया है कि वे प्लगिन की मदद से ज़्यादा काम कर सकें. Genkit प्लगिन ऐसे मॉड्यूल होते हैं जिन्हें कॉन्फ़िगर किया जा सकता है जो मॉडल, रिट्रीवर, इंडेक्सर, ट्रेस स्टोर वगैरह मुहैया करा सकते हैं. आपने इसमें पहले से ही प्लगिन देखे हैं Genkit का इस्तेमाल करके:

import { configureGenkit } from '@genkit-ai/core';
import { vertexAI } from '@genkit-ai/vertexai';

configureGenkit({
  plugins: [vertexAI({ projectId: 'my-project' })],
});

Vertex AI प्लगिन, कॉन्फ़िगरेशन (जैसे, उपयोगकर्ता के Google Cloud) के हिसाब से काम करता है प्रोजेक्ट आईडी) और कई नए मॉडल, एम्बेडर वगैरह को Genkit रजिस्ट्री. रजिस्ट्री, Genkit के लोकल यूज़र इंटरफ़ेस (यूआई) को चलाने और इस्तेमाल करने में मदद करती है यह मॉडल, प्रॉम्प्ट वगैरह की जांच करता है. साथ ही, यह रनटाइम पर नाम वाली कार्रवाइयों का इस्तेमाल करती है.

प्लग इन बनाना

ऐसा हो सकता है कि आप एक प्लग इन बनाने के लिए एक नया NPM पैकेज बनाना चाहें:

mkdir genkitx-my-plugin
cd genkitx-my-plugin
npm init -y
npm i --save @genkit-ai/core
npm i --save-dev typescript
npx tsc --init

इसके बाद, अपने मुख्य एंट्री पॉइंट से प्लगिन तय और एक्सपोर्ट करें:

import { genkitPlugin } from '@genkit-ai/core';

interface MyPluginOptions {
  // add any plugin configuration here
}

export const myPlugin = genkitPlugin(
  'my-plugin',
  async (options: MyPluginOptions) => {
    // initialize your plugin here...
  }
);

प्लग इन के विकल्पों के बारे में दिशा-निर्देश

आम तौर पर, आपके प्लगिन में एक options आर्ग्युमेंट होना चाहिए, जिसमें काम करने के लिए ज़रूरी कोई भी प्लगिन-वाइ�� कॉन्फ़िगरेशन. ऐसे किसी भी प्लगिन विकल्प के लिए जो एपीआई पासकोड जैसे सीक्रेट वैल्यू की ज़रूरत होती है, तो आपको एक विकल्प और इसे कॉन्फ़िगर करने के लिए, डिफ़ॉल्ट एनवायरमेंट वैरिएबल:

import { genkitPlugin, GenkitError } from '@genkit-ai/core';

interface MyPluginOptions {
  apiKey?: string;
}

export const myPlugin = genkitPlugin(
  'my-plugin',
  async (options: MyPluginOptions) => {
    const apiKey = options.apiKey || process.env.MY_PLUGIN_API_KEY;
    if (!apiKey)
      throw new GenkitError({
        source: 'my-plugin',
        status: 'INVALID_ARGUMENT',
        message:
          'Must supply either `options.apiKey` or set `MY_PLUGIN_API_KEY` environment variable.',
      });
    // ... continue initialization
  }
);

अपना प्लगिन बनाना

एक प्लगिन, Genkit में कई नई चीज़ें चालू कर सकता है. उदाहरण के लिए, Vertex AI प्लगिन, कई नए मॉडल के साथ-साथ एक एम्बेडर को चालू करता है.

मॉडल प्लगिन

Genkit मॉडल के प्लगिन, Genkit रजिस्ट्री में एक या एक से ज़्यादा जनरेटिव एआई मॉडल जोड़ते हैं. मॉडल, किसी भी जनरेटिव एआई ऐसा मॉडल जो इनपुट के तौर पर प्रॉम्प्ट पाने और टेक्स्ट, मीडिया या डेटा को आउटपुट के तौर पर जनरेट करने की सुविधा देता है. आम तौर पर, कोई मॉडल प्लगिन अपने इनिशलाइज़ेशन फ़ंक्शन में एक या उससे ज़्यादा defineModel कॉल करेगा.

कस्टम मॉडल में आम तौर पर तीन क��म्पोनेंट होते हैं:

  1. मॉडल की क्षमताओं को तय करने वाला मेटाडेटा.
  2. मॉडल के साथ काम करने वाले किसी भी खास पैरामीटर वाला कॉन्फ़िगरेशन स्कीमा.
  3. यह फ़ंक्शन, GenerateRequest और GenerateResponse की वापसी होगी.

मॉडल प्लगिन बनाने के लिए, आपको @genkit-ai/ai पैकेज का इस्तेमाल करना होगा:

npm i --save @genkit-ai/ai

बड़े लेवल पर, मॉडल प्लगिन कुछ ऐसा दिख सकता है:

import { genkitPlugin, GenkitError } from '@genkit-ai/core';
import { defineModel, GenerationCommonConfigSchema } from '@genkit-ai/ai/model';
import { simulateSystemPrompt } from '@genkit-ai/ai/model/middleware';
import { z } from 'zod';

export const myPlugin = genkitPlugin('my-plugin', async (options: {apiKey?: string}) => {
  defineModel({
    // be sure to include your plugin as a provider prefix
    name: 'my-plugin/my-model',
    // label for your model as shown in Genkit Developer UI
    label: 'My Awesome Model',
    // optional list of supported versions of your model
    versions: ['my-model-001', 'my-model-001'],
    // model support attributes
    supports: {
      multiturn: true, // true if your model supports conversations
      media: true, // true if your model supports multimodal input
      tools: true, // true if your model supports tool/function calling
      systemRole: true, // true if your model supports the system role
      output: ['text', 'media', 'json'], // types of output your model supports
    },
    // Zod schema for your model's custom configuration
    configSchema: GenerationCommonConfigSchema.extend({
      safetySettings: z.object({...}),
    }),
    // list of middleware for your model to use
    use: [simulateSystemPrompt()]
  }, async request => {
    const myModelRequest = toMyModelRequest(request);
    const myModelResponse = await myModelApi(myModelRequest);
    return toGenerateResponse(myModelResponse);
  });
});

अनुरोधों और जवाबों में बदलाव करना

Genkit मॉडल प्लगिन का मुख्य काम, Google News Genkit के सामान्य फ़ॉर्मैट से GenerateRequest को ऐसे फ़ॉर्मैट में बदला गया जिसे मान्यता मिली है और आपके मॉडल के API द्वारा समर्थित होता है, और फिर अपने मॉडल को GenerateResponseData फ़ॉर्मैट में बनाना होगा. Genkit में इसका इस्तेमाल किया गया है.

कभी-कभी, इसके लिए मॉडल की सीमाओं से जुड़े काम करने के लिए, डेटा में बड़े बदलाव या उसमें बदलाव करना पड़ सकता है. उदाहरण के लिए, अगर आपका मॉडल मूल रूप से system मैसेज के साथ काम नहीं करता, तो हो सकता है कि आपको किसी प्रॉम्प्ट के सिस्टम मैसेज को उपयोगकर्ता/मॉडल मैसेज पेयर में बदलना पड़े.

मॉडल के रेफ़रंस

defineModel का इस्तेमाल करके मॉडल रजिस्टर करने के बाद, वह तब हमेशा उपलब्ध होता है, जब नाम से अनुरोध किया गया है. हालांकि, टाइपिंग और IDE के अपने-आप पूरे होने की सुविधा को बेहतर बनाने के लिए, अपने पैकेज से एक मॉडल संदर्भ निर्यात करें जिसमें मॉडल का इस्तेमाल करें, लेकिन उसे लागू न करें:

import { modelRef } from "@genkit-ai/ai/model";

export myModelRef = modelRef({
  name: "my-plugin/my-model",
  configSchema: MyConfigSchema,
  info: {
    // ... model-specific info
  },
})

generate() को कॉल करते समय, मॉडल रेफ़रंस और स्ट्रिंग मॉडल के नाम ��क-दूसरे की जगह पर इस्तेमाल किए जा सकते हैं:

import { myModelRef } from 'genkitx-my-plugin';
import { generate } from '@genkit-ai/ai';

generate({ model: myModelRef });
// is equivalent to
generate({ model: 'my-plugin/my-model' });

टेलीमेट्री प्लगिन

Genkit ��ेलीमेट्री प्लगिन लिखना देखें.

प्लग इन प्रकाशित करना

Genkit प्लगिन को सामान्य NPM पैकेज के तौर पर पब्लिश किया जा सकता है. बढ़ाने के लिए खोजने लायक बनाने और एक जैसा अनुभव देने की कोशिश करते हैं, तो आपके पैकेज का नाम रखा जाना चाहिए genkitx-{name} यह बताने के लिए कि यह Genkit प्लगिन है और आपको इस तरह शामिल करना चाहिए आपके package.json में मौजूद कई keywords आपके प्लगिन:

  • genkit-plugin: इस कीवर्ड को अपने पैकेज में हमेशा शामिल करें, ताकि यह बताया जा सके कि यह Genkit प्लगिन है.
  • genkit-model: अगर आपका पैकेज किसी मॉडल को परिभाषित करता है, तो इस कीवर्ड को शामिल करें.
  • genkit-retriever: अगर आपका पैकेज किसी रिट्रीवर को परिभाषित करता है, तो इस कीवर्ड को शामिल करें.
  • genkit-indexer: अगर आपका पैकेज किसी इंडेक्सर को तय करता है, तो इस कीवर्ड को शामिल करें.
  • genkit-embedder: अगर आपका पैकेज किसी इंडेक्सर को तय करता है, तो इस कीवर्ड को शामिल करें.
  • genkit-tracestore: अगर आपका पैकेज किसी ट्रेस स्टोर को तय करता है, तो इस कीवर्ड को शामिल करें.
  • genkit-statestore: अगर आपका पैकेज किसी स्टेट स्टोर के बारे में बताता है, तो यह कीवर्ड शामिल करें.
  • genkit-telemetry: अगर आपका पैकेज टेलीमेट्री की सेवा देने वाली कंपनी के बारे में बताता है, तो यह कीवर्ड शामिल करें.
  • genkit-deploy: अगर आपके पैकेज में, क्लाउड सेवा देने वाली कंपनियों पर Genkit ऐप्लिकेशन डिप्लॉय करने वाले हेल्पर शामिल हैं, तो इस कीवर्ड को शामिल करें.
  • genkit-flow: अगर आपका पैकेज Genkit के फ़्लो को बेहतर बनाता है, तो यह कीवर्ड शामिल करें.

रिट्रीवर, एम्बेडर, और मॉडल देने वाले प्लग इन का package.json ऐसा हो सकता है जो ऐसा दिखता है:

{
  "name": "genkitx-my-plugin",
  "keywords": ["genkit-plugin", "genkit-retriever", "genkit-embedder", "genkit-model"],
  // ... dependencies etc.
}