0.5 থেকে স্থানান্তর

Genkit 0.9 বৈশিষ্ট্য বর্ধনের পাশাপাশি সামগ্রিক কার্যকারিতা উন্নত করে এমন অনেকগুলি ব্রেকিং পরিবর্তনগুলি প্রবর্তন করে। আপনি যদি Genkit 0.5 এর সাথে অ্যাপ্লিকেশনগুলি তৈরি করে থাকেন, আপনি সর্বশেষ সংস্করণে আপগ্রেড করার সময় আপনার অ্যাপ্লিকেশন কোড আপডেট করতে হবে৷ এই নির্দেশিকাটি সবচেয়ে উল্লেখযোগ্য পরিবর্তনগুলির রূপরেখা দেয় এবং আপনার বিদ্যমান অ্যাপ্লিকেশনগুলিকে মসৃণভাবে স্থানান্তর করার জন্য পদক্ষেপগুলি অফার করে৷

কুইকস্টার্ট গাইড

নিম্নলিখিত পদক্ষেপগুলি আপনাকে দ্রুত Genkit 0.5 থেকে Genkit 0.9-এ স্থানান্তরিত করতে সাহায্য করবে৷ নীচের বিশদ চেঞ্জলগে এই পরিবর্তনগুলি সম্পর্কে আরও তথ্য পড়ুন।

1. নতুন CLI ইনস্টল করুন

  • পুরানো CLI আনইনস্টল করুন

    npm uninstall -g genkit && npm uninstall genkit
  • নতুন CLI ইনস্টল করুন

    npm i -D genkit-cli

2. আপনার নির্ভরতা আপডেট করুন

  • পৃথক Genkit কোর প্যাকেজ সরান

    npm uninstall @genkit-ai/ai @genkit-ai/core @genkit-ai/dotprompt @genkit-ai/flow
  • নতুন একত্রিত genkit প্যাকেজ ইনস্টল করুন

    npm i --save genkit
  • সমস্ত প্লাগইন সংস্করণ আপগ্রেড করুন (নিচে উদাহরণ)

    npm upgrade @genkit-ai/firebase
    

3. আপনার আমদানি পরিবর্তন করুন

  • পৃথক Genkit কোর প্যাকেজের জন্য আমদানি সরান

    import {  } from '@genkit-ai/ai';
    import {  } from '@genkit-ai/core';
    import {  } from '@genkit-ai/flow';
    
  • জোড আমদানি সরান

    import * as z from 'zod';
    
  • genkit থেকে genkit এবং zod আমদানি করুন

    import { z, genkit } from 'genkit';
    

4. আপনার কোড আপডেট করুন

কনফিগারজেনকিট ব্লকগুলি সরান

Genkit-এর জন্য কনফিগারেশন এখন প্রতি উদাহরণে করা হয়। টেলিমেট্রি এবং লগিং বিশ্বব্যাপী এবং Genkit উদাহরণ থেকে আলাদাভাবে কনফিগার করা হয়েছে।

  • configureGenkit ai = genkit({...}) ব্লক দিয়ে প্রতিস্থাপন করুন। শুধুমাত্র প্লাগইন কনফিগারেশন রাখুন।

    import { genkit } from 'genkit';
    
    const ai = genkit({ plugins: [...]});
    
  • EnableFirebaseTelemetry বা enableGoogleCloudTelemetry ব্যবহার করে টেলিমেট্রি কনফিগার করুন

    ফায়ারবেসের জন্য:

    import { enableFirebaseTelemetry } from '@genkit-ai/firebase';
    
    enableFirebaseTelemetry({...});
    

    গুগল ক্লাউডের জন্য:

    import { enableGoogleCloudTelemetry } from '@genkit-ai/google-cloud';
    
    enableGoogleCloudTelemetry({...});
    
  • আপনার লগিং লেভেল স্বাধীনভাবে সেট করুন

    import { logger } from 'genkit/logging';
    
    logger.setLogLevel('debug');
    

কিভাবে টেলিমেট্রি এবং লগিং কনফিগার করতে হয় সে সম্পর্কে আরো বিস্তারিত জানার জন্য মনিটরিং এবং লগিং ডকুমেন্টেশন দেখুন।

কিভাবে একটি Genkit ইনস্ট্যান্স কনফিগার করতে হয় সে সম্পর্কে আরো বিস্তারিত জানার জন্য শুরু করুন ডকুমেন্টেশন দেখুন।

genkit ইন্সট্যান্স থেকে কল করার জন্য Genkit অ্যাকশন মাইগ্রেট করুন

ক্রিয়াগুলি (প্রবাহ, সরঞ্জাম, পুনরুদ্ধারকারী, সূচক, ইত্যাদি) প্রতি উদাহরণে সংজ্ঞায়িত করা হয়। আপনার পরিবর্তন করতে হবে এমন সমস্ত বৈশিষ্ট্যগুলির জন্য চেঞ্জলগ পড়ুন, তবে এখানে কিছু সাধারণের একটি উদাহরণ রয়েছে৷

import { genkit } from 'genkit';
import { onFlow } from '@genkit-ai/firebase/functions';

const ai = genkit({ plugins: [...]});

// Flows and tools are defined on the specific genkit instance
// and are directly callable.
const sampleFlow = ai.defineFlow(...);
const sampleTool = ai.defineTool(...);

async function callMyFlow() {
  // Previously, text output could accessed via .text()
  // Now it is either .output() or .text
  return await sampleFlow().output();
}

// onFlow now takes the Genkit instance as first argument
// This registers the flow as a callable firebase function
onFlow(ai, ...);
const flows = [ sampleFlow, ... ];
// Start the flow server to make the registered flows callable over HTTP
ai.startFlowServer({flows});

5. এটি চালান

# run the DevUI and your js code
genkit start -- <command to run node>
# run a defined flow
genkit flow:run <flowName>

চেঞ্জলগ

1. CLI পরিবর্তন

কমান্ড-লাইন ইন্টারফেস (CLI) Genkit 0.9-এ উল্লেখযোগ্য আপডেট হয়েছে। Genkit শুরু করার কমান্ড পরিবর্তিত হয়েছে, এবং CLI কে তার নিজস্ব স্বতন্ত্র প্যাকেজে বিভক্ত করা হয়েছে, যা আপনাকে এখন আলাদাভাবে ইনস্টল করতে হবে।

CLI ইনস্টল করতে:

npm i -g genkit-cli

genkit start কমান্ডে কিছু পরিবর্তন করা হয়েছে:

আপনার Genkit অ্যাপ্লিকেশন কোড + Dev UI একসাথে শুরু করে:

genkit start -- [start command]
genkit start -- tsx src/index.ts
genkit start -- go run main.go

ঘড়ি মোড পাশাপাশি সমর্থিত:

genkit start -- tsx --watch src/index.ts

Genkit dev মোডে শুধুমাত্র আপনার অ্যাপ্লিকেশন কোড শুরু হয়:

genkit start --noui -- <start command>
genkit start --noui -- tsx src/index.ts

শুধুমাত্র Dev UI শুরু করে:

genkit start

পূর্বে, genkit start কমান্ডটি Dev UI এবং আপনার অ্যাপ্লিকেশন কোড একসাথে শুরু করবে। আপনার যদি এই কমান্ডের উপর নির্ভরশীল কোনো CI/CD পাইপলাইন থাকে, তাহলে আপনাকে পাইপলাইন আপডেট করতে হতে পারে।

কোন প্রবাহ নিবন্ধিত হয়েছে তা নির্ধারণ করতে Dev UI সরাসরি ফ্লো সার্ভারের সাথে ইন্টারঅ্যাক্ট করবে এবং আপনাকে নমুনা ইনপুটগুলির সাথে সরাসরি সেগুলি আহ্বান করার অনুমতি দেবে।

2. সরলীকৃত প্যাকেজ এবং আমদানি

পূর্বে, জেনকিট লাইব্রেরিগুলিকে কয়েকটি মডিউলে বিভক্ত করা হয়েছিল, যেগুলি আপনাকে পৃথকভাবে ইনস্টল এবং আমদানি করতে হবে। এই মডিউলগুলি এখন একক আমদানিতে একত্রিত হয়েছে। উপরন্তু, Zod মডিউল এখন Genkit দ্বারা পুনরায় রপ্তানি করা হয়.

পুরাতন:

npm i @genkit-ai/core @genkit-ai/ai @genkit-ai/flow @genkit-ai/dotprompt

নতুন:

npm i genkit

পুরাতন:

import {  } from '@genkit-ai/ai';
import {  } from '@genkit-ai/core';
import {  } from '@genkit-ai/flow';
import * as z from 'zod';

নতুন:

import { genkit, z } from 'genkit';

জেনকিট প্লাগইনগুলি এখনও ইনস্টল করা এবং পৃথকভাবে আমদানি করা আবশ্যক।

3. জেনকিট কনফিগার করা হচ্ছে

পূর্বে, configureGenkit ফাংশন কল করে বিশ্বব্যাপী একবার Genkit আরম্ভ করা হয়েছিল। জেনকিট সংস্থানগুলি (প্রবাহ, সরঞ্জাম, প্রম্পট, ইত্যাদি) সমস্ত স্বয়ংক্রিয়ভাবে এই বিশ্ব কনফিগারেশনের সাথে সংযুক্ত হবে।

Genkit 0.9 Genkit দৃষ্টান্তগুলি প্রবর্তন করে, যার প্রতিটি একটি কনফিগারেশন এনক্যাপসুলেট করে। নিম্নলিখিত উদাহরণ দেখুন:

পুরাতন:

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

configureGenkit({
  telemetry: {
    instrumentation: ...,
    logger: ...
  }
});

নতুন:

import { genkit } from 'genkit';
import { logger } from 'genkit/logging';
import { enableFirebaseTelemetry } from '@genkit-ai/firebase';

logger.setLogLevel('debug');
enableFirebaseTelemetry({...});

const ai = genkit({ ... });

আসুন এটি ভেঙে দেওয়া যাক:

  • configureGenkit() genkit() দিয়ে প্রতিস্থাপন করা হয়েছে, এবং এটি বিশ্বব্যাপী কনফিগারেশন সেট আপ করার পরিবর্তে একটি কনফিগার করা Genkit উদাহরণ প্রদান করে।
  • জেনকিট ইনিশিয়ালাইজেশন ফাংশনটি এখন genkit প্যাকেজে রয়েছে।
  • লগিং এবং টেলিমেট্রি এখনও তাদের নিজস্ব সুস্পষ্ট পদ্ধতি ব্যবহার করে বিশ্বব্যাপী কনফিগার করা হয়েছে। এই কনফিগারেশনগুলি সমস্ত Genkit দৃষ্টান্ত জুড়ে সমানভাবে প্রযোজ্য।

4. প্রবাহ সংজ্ঞায়িত করা এবং স্পষ্টভাবে ফ্লো সার্ভার শুরু করা

এখন আপনার কাছে একটি কনফিগার করা Genkit উদাহরণ রয়েছে, আপনাকে আপনার প্রবাহগুলি সংজ্ঞায়িত করতে হবে। সমস্ত মূল বিকাশকারী-মুখী API পদ্ধতি যেমন defineFlow , defineTool , এবং onFlow এখন এই উদাহরণের মাধ্যমে আহ্বান করা হয়েছে৷

এটি আগের পদ্ধতি থেকে আলাদা, যেখানে প্রবাহ এবং সরঞ্জামগুলি বিশ্বব্যাপী নিবন্ধিত হয়েছিল।

পুরাতন:

import { defineFlow, defineTool, onFlow } from '@genkit-ai/core';

defineFlow(...);
defineTool(...);

onFlow(...);

নতুন:

// Define tools and flows
const sampleFlow = ai.defineFlow(...);
const sampleTool = ai.defineTool(...);

// onFlow now takes the Genkit instance as first argument
// This registers the flow as a callable firebase function
onFlow(ai, ...);  

const flows = [ sampleFlow, ... ];
// Start the flow server to make the registered flows callable over HTTP
ai.startFlowServer({flows});

এখন পর্যন্ত, আপনি যে সমস্ত প্রবাহগুলি উপলব্ধ করতে চান সেগুলিকে উপরের flows অ্যারেতে স্পষ্টভাবে নিবন্ধিত হতে হবে।

5. টুল এবং প্রম্পটগুলি অবশ্যই স্থিরভাবে সংজ্ঞায়িত করা উচিত

Genkit-এর পূর্ববর্তী সংস্করণগুলিতে, আপনি সরাসরি একটি প্রবাহের মধ্যে থেকে রানটাইমে সরঞ্জাম এবং প্রম্পটকে গতিশীলভাবে সংজ্ঞায়িত করতে পারেন।

Genkit 0.9 এ, এই আচরণটি আর অনুমোদিত নয়। পরিবর্তে, আপনাকে প্রবাহের নির্বাহের বাইরে সমস্ত ক্রিয়া এবং প্রবাহকে সংজ্ঞায়িত করতে হবে (অর্থাৎ স্থিরভাবে)।

এই পরিবর্তনটি কার্যকর করা থেকে ক্রিয়া সংজ্ঞাগুলির একটি কঠোর বিচ্ছেদ কার্যকর করে৷

যদি আপনার কোনো কোড গতিশীলভাবে সংজ্ঞায়িত করা হয়, তাহলে তাদের রিফ্যাক্টর করা দরকার। অন্যথায়, ফ্লো চালানোর সময় রানটাইমে একটি ত্রুটি নিক্ষেপ করা হবে।

❌ করবেন না:

const flow = defineFlow({...}, async (input) => {
  const tool = defineTool({...});
  await tool(...);
});

✅ করুন:

const tool = ai.defineTool({...});

const flow = ai.defineFlow({...}, async (input) => {
  await tool(...);
});

6. স্ট্রিমিং প্রবাহের জন্য নতুন API

Genkit 0.9-এ, আমরা একটি স্ট্রিমিং প্রবাহ সংজ্ঞায়িত করার জন্য এবং এটি চালু করার জন্য সিনট্যাক্সকে সরলীকৃত করেছি।

প্রথমে, defineFlow এবং defineStreamingFlow আলাদা করা হয়েছে। যদি আপনার কাছে স্ট্রিম করার উদ্দেশ্যে একটি প্রবাহ থাকে, তাহলে আপনাকে defineStreamingFlow এর মাধ্যমে সংজ্ঞায়িত করার জন্য আপনার কোড আপডেট করতে হবে।

দ্বিতীয়ত, পৃথক stream() এবং response() ফাংশন কল করার পরিবর্তে, স্ট্রীম এবং প্রতিক্রিয়া উভয়ই এখন প্রবাহ থেকে সরাসরি ফিরে আসা মান। এই পরিবর্তনটি ফ্লো স্ট্রিমিংকে সহজ করে।

পুরাতন:

import { defineFlow, streamFlow } from '@genkit-ai/flow';

const myStreamingFlow = defineFlow(...);
const { stream, output } = await streamFlow(myStreamingFlow, ...);

for await (const chunk of stream()) {
  console.log(chunk);
}

console.log(await output());

নতুন:

const myStreamingFlow = ai.defineStreamingFlow(...);
const { stream, response } = await myStreamingFlow(...);

for await (const chunk of stream) {
  console.log(chunk);
}

console.log(await response);

7. GenerateResponse ক্লাস পদ্ধতি গেটার বৈশিষ্ট্য দ্বারা প্রতিস্থাপিত

পূর্বে, আপনি output() বা text() মত ক্লাস পদ্ধতি ব্যবহার করে স্ট্রাকচার্ড আউটপুট বা প্রতিক্রিয়ার পাঠ্য অ্যাক্সেস করতেন।

Genkit 0.9-এ, সেই পদ্ধতিগুলি গেটার বৈশিষ্ট্য দ্বারা প্রতিস্থাপিত হয়েছে। এটি প্রতিক্রিয়াগুলির সাথে কাজ করা সহজ করে তোলে।

পুরাতন:

const response = await generate({ prompt: 'hi' });
console.log(response.text());

নতুন:

const response = await ai.generate('hi');
console.log(response.text);

একই output প্রযোজ্য:

পুরাতন:

console.log(response.output());

নতুন:

console.log(response.output);

8. প্রার্থী প্রজন্ম নির্মূল

Genkit 0.9 candidates অ্যাট্রিবিউট সরিয়ে প্রতিক্রিয়া পরিচালনাকে সহজ করে। পূর্বে, প্রতিক্রিয়াগুলিতে একাধিক প্রার্থী থাকতে পারে, যা আপনাকে স্পষ্টভাবে পরিচালনা করতে হবে। এখন, শুধুমাত্র প্রথম প্রার্থীকে সরাসরি ফ্ল্যাট প্রতিক্রিয়ায় ফেরত দেওয়া হয়।

প্রার্থীদের সরাসরি অ্যাক্সেস করে এমন কোনও কোড আর কাজ করবে না।

পুরাতন:

const response = await generate({
 messages: [ { role: 'user', content: ...} ]
});
console.log(response.candidates); // previously you could access candidates directly

নতুন:

const response = await ai.generate({
 messages: [ { role: 'user', content: ...} ]
});
console.log(response.message); // single candidate is returned directly in a flat response

9. API জেনারেট করুন - মাল্টি-টার্ন এনহান্সমেন্ট

মাল্টি-টার্ন কথোপকথনের জন্য, পুরানো toHistory() পদ্ধতিটি messages দ্বারা প্রতিস্থাপিত হয়েছে, আরও সহজ করে যে কীভাবে কথোপকথনের ইতিহাস পরিচালনা করা হয়।

পুরাতন:

const history = response.toHistory();

নতুন:

const response = await ai.generate({
 messages: [ { role: 'user', content: ...} ]
});
const history = response.messages;

10. স্ট্রীমলাইনড চ্যাট API

Genkit 0.9-এ, চ্যাট API সহজতর সেশন পরিচালনা এবং মিথস্ক্রিয়া করার জন্য পুনরায় ডিজাইন করা হয়েছে। সিঙ্ক্রোনাস এবং স্ট্রিমিং চ্যাট অভিজ্ঞতা উভয়ের জন্য আপনি কীভাবে এটিকে ব্যবহার করতে পারেন তা এখানে রয়েছে:

import { genkit } from 'genkit';
import { gemini15Flash, googleAI } from '@genkit-ai/googleai';

const ai = genkit({
 plugins: [googleAI()],
 model: gemini15Flash,
});

const session = ai.createSession({ store: firestoreSessionStore() });
const chat = await session.chat({ system: 'talk like a pirate' });

let response = await chat.send('hi, my name is Pavel');
console.log(response.text()); // "hi Pavel, I'm llm"

// continue the conversation
response = await chat.send("what's my name");
console.log(response.text()); // "Pavel"

// can stream
const { response, stream } = await chat.sendStream('bye');
for await (const chunk of stream) {
 console.log(chunk.text());
}
console.log((await response).text());

// can load session from the store
const prevSession = await ai.loadSession(session.id, { store });
const prevChat = await prevSession.chat();
await prevChat.send('bye');