Genkit 1.0 সামগ্রিক কার্যকারিতা উন্নত করে এমন অনেক বৈশিষ্ট্য বর্ধিতকরণ প্রবর্তন করে; এটা কিছু ব্রেকিং পরিবর্তন আছে. আপনি যদি Genkit 0.9 এর সাথে অ্যাপ্লিকেশনগুলি তৈরি করে থাকেন, আপনি Genkit এর সর্বশেষ সংস্করণে আপগ্রেড করার সময় আপনাকে আপনার অ্যাপ্লিকেশন কোড আপডেট করতে হবে। এই নির্দেশিকাটি সবচেয়ে উল্লেখযোগ্য পরিবর্তনগুলির রূপরেখা দেয় এবং ব্যাখ্যা করে যে কীভাবে আপনার বিদ্যমান অ্যাপ্লিকেশনগুলিকে মসৃণভাবে স্থানান্তর করা যায়।
বিটা API
আমরা একটি অস্থির, বিটা এপিআই চ্যানেল প্রবর্তন করছি এবং সেশন, চ্যাট এবং জেনকিট ক্লায়েন্ট এপিআইগুলিকে বিটাতে পরিমার্জন করা চালিয়ে যাচ্ছি। আরও নির্দিষ্টভাবে, নিম্নলিখিত ফাংশনগুলি বর্তমানে beta
নামস্থানে রয়েছে:
-
ai.chat
-
ai.createSession
-
ai.loadSession
-
ai.currentSession
-
ai.defineFormat
-
ai.defineInterrupt
পুরাতন:
import { genkit } from 'genkit';
const ai = genkit({...})
const session = ai.createSession({ ... })
নতুন:
import { genkit } from 'genkit/beta';
const ai = genkit({...})
const session = ai.createSession({ ... })
পুরাতন:
import { runFlow, streamFlow } from 'genkit/client';
নতুন:
import { runFlow, streamFlow } from 'genkit/beta/client';
নতুন @genkit-ai/express
প্যাকেজ পেশ করা হচ্ছে
এই নতুন প্যাকেজটিতে Genkit এর সাথে একটি Express.js সার্ভার তৈরি করা সহজ করার জন্য ইউটিলিটি রয়েছে। আপনি এই পৃষ্ঠায় এই সম্পর্কে আরো বিস্তারিত জানতে পারেন.
startFlowServer
genkit অবজেক্টের অংশ থেকে এই নতুন @genkit-ai/express
প্যাকেজে চলে গেছে; startFlowServer ব্যবহার করতে, আপনাকে অবশ্যই আপনার আমদানি আপডেট করতে হবে।
পুরাতন:
const ai = genkit({ ... });
ai.startFlowServer({
flows: [myFlow1, myFlow2],
});
নতুন:
import { startFlowServer } from '@genkit-ai/express';
startFlowServer({
flows: [myFlow1, myFlow2],
});
প্রবাহে পরিবর্তন
1.0-এ প্রবাহে বেশ কিছু পরিবর্তন রয়েছে:
-
ai.defineStreamingFlow
ai.defineFlow
এ একীভূত করা হয়েছে, -
onFlow
onCallGenkit
দ্বারা প্রতিস্থাপিত হয়েছে, -
run
ai.run
এ চলে গেছে, - auth এর সাথে কাজ করার জন্য পরিবর্তন আছে।
কাস্টম ট্রেস ব্লকের জন্য run
ফাংশন genkit
অবজেক্টের অংশে চলে গেছে; পরিবর্তে এটি আহ্বান করতে ai.run
ব্যবহার করুন।
পুরাতন:
ai.defineFlow({name: 'banana'}, async (input) => {
const step = await run('myCode', async () => {
return 'something'
});
})
নতুন:
ai.defineFlow({name: 'banana'}, async (input) => {
const step = await ai.run('myCode', async () => {
return 'something'
});
})
ai.defineStreamingFlow
সরানো হয়েছে; পরিবর্তে ai.defineFlow
ব্যবহার করুন। এছাড়াও, streamingCallback
ফ্লো ফাংশনের দ্বিতীয় আর্গুমেন্টের ভিতরে একটি ক্ষেত্রে চলে গেছে এবং এখন sendChunk
বলা হয়।
পুরাতন:
const flow = ai.defineStreamingFlow({name: 'banana'}, async (input, streamingCallback) => {
streamingCallback({chunk: 1});
})
const {stream} = await flow()
for await (const chunk of stream) {
// ...
}
নতুন:
const flow = ai.defineFlow({name: 'banana'}, async (input, {context, sendChunk}) => {
sendChunk({chunk: 1});
})
const {stream, output} = flow.stream(input);
for await (const chunk of stream) {
// ...
}
FlowAuth auth এখন প্রসঙ্গ বলা হয়। আপনি প্রসঙ্গ ভিতরে একটি ক্ষেত্র হিসাবে auth অ্যাক্সেস করতে পারেন:
পুরাতন:
ai.defineFlow({name: 'banana'}, async (input) => {
const auth = getFlowAuth();
// ...
})
নতুন:
ai.defineFlow({name: 'banana'}, async (input, { context }) => {
const auth = context.auth;
})
onFlow
firebase-functions/https
প্যাকেজে সরানো হয়েছে এবং এর নাম পরিবর্তন করে onCallGenkit
করা হয়েছে। নিম্নলিখিত স্নিপেট এটি কিভাবে ব্যবহার করবেন তার একটি উদাহরণ দেখায়।
পুরাতন
import { onFlow } from "@genkit-ai/firebase/functions";
export const generatePoem = onFlow(
ai,
{
name: "jokeTeller",
inputSchema: z.string().nullable(),
outputSchema: z.string(),
streamSchema: z.string(),
},
async (type, streamingCallback) => {
const { stream, response } = await ai.generateStream(
`Tell me a longish ${type ?? "dad"} joke.`
);
for await (const chunk of stream) {
streamingCallback(chunk.text);
}
return (await response).text;
}
);
নতুন:
import { onCallGenkit } from "firebase-functions/https";
import { defineSecret } from "firebase-functions/params";
import { genkit, z } from "genkit";
const apiKey = defineSecret("GOOGLE_GENAI_API_KEY");
const ai = genkit({
plugins: [googleAI()],
model: gemini15Flash,
});
export const jokeTeller = ai.defineFlow(
{
name: "jokeTeller",
inputSchema: z.string().nullable(),
outputSchema: z.string(),
streamSchema: z.string(),
},
async (type, { sendChunk }) => {
const { stream, response } = ai.generateStream(
`Tell me a longish ${type ?? "dad"} joke.`
);
for await (const chunk of stream) {
sendChunk(chunk.text);
}
return (await response).text;
}
);
export const tellJoke = onCallGenkit({ secrets: [apiKey] }, jokeTeller);
defineFlow
থেকে প্রমাণীকরণ নীতিগুলি সরানো হয়েছে। প্রমাণীকরণ নীতিগুলি পরিচালনা করা এখন সার্ভার-নির্ভর।
পুরাতন:
export const simpleFlow = ai.defineFlow(
{
name: 'simpleFlow',
authPolicy: (auth, input) => {
// auth policy
},
},
async (input) => {
// Flow logic here...
}
);
নিম্নলিখিত স্নিপেটটি এক্সপ্রেস-এ প্রমাণীকরণ পরিচালনার একটি উদাহরণ দেখায়।
নতুন:
import { UserFacingError } from 'genkit';
import { ContextProvider, RequestData } from 'genkit/context';
import { expressHandler, startFlowServer } from '@genkit-ai/express';
const context: ContextProvider<Context> = (req: RequestData) => {
return {
auth: parseAuthToken(req.headers['authorization']),
};
};
export const simpleFlow = ai.defineFlow(
{
name: 'simpleFlow',
},
async (input, { context }) => {
if (!context.auth) {
throw new UserFacingError("UNAUTHORIZED", "Authorization required.");
}
if (input.uid !== context.auth.uid) {
throw new UserFacingError("UNAUTHORIZED", "You may only summarize your own profile data.");
}
// Flow logic here...
}
);
const app = express();
app.use(express.json());
app.post(
'/simpleFlow',
expressHandler(simpleFlow, { context })
);
app.listen(8080);
// or
startFlowServer(
flows: [withContextProvider(simpleFlow, context)],
port: 8080
);
আরো বিস্তারিত জানার জন্য, প্রমাণীকরণ ডকুমেন্টেশন পড়ুন।
নিম্নলিখিত স্নিপেটটি ফায়ারবেসের জন্য ক্লাউড ফাংশনে প্রমাণীকরণ পরিচালনার একটি উদাহরণ দেখায়:
import { genkit } from 'genkit';
import { onCallGenkit } from 'firebase-functions/https';
const ai = genkit({ ... });;
const simpleFlow = ai.defineFlow({
name: 'simpleFlow',
}, async (input) => {
// Flow logic here...
});
export const selfSummary = onCallGenkit({
authPolicy: (auth, data) => auth?.token?.['email_verified'] && auth?.token?.['admin'],
}, simpleFlow);
প্রম্পট
আমরা প্রম্পটে বেশ কিছু পরিবর্তন ও উন্নতি করেছি।
আপনি প্রম্পট এবং সিস্টেম বার্তাগুলির জন্য পৃথক টেমপ্লেট সংজ্ঞায়িত করতে পারেন:
const hello = ai.definePrompt({
name: 'hello',
system: 'talk like a pirate.',
prompt: 'hello {{ name }}',
input: {
schema: z.object({
name: z.string()
})
}
});
const { text } = await hello({name: 'Genkit'});
বিকল্পভাবে, আপনি বার্তা ক্ষেত্রে বহু-বার্তা প্রম্পট সংজ্ঞায়িত করতে পারেন:
const hello = ai.definePrompt({
name: 'hello',
messages: '{{ role "system" }} talk like a pirate. {{ role "user" }} hello {{ name }}',
input: {
schema: z.object({
name: z.string()
})
}
});
প্রম্পট টেমপ্লেটের পরিবর্তে আপনি একটি ফাংশন ব্যবহার করতে পারেন:
ai.definePrompt({
name: 'hello',
prompt: async (input, { context }) => {
return `hello ${input.name}`
},
input: {
schema: z.object({
name: z.string()
})
}
});
আপনি প্রম্পটের মধ্যে থেকে প্রসঙ্গ (প্রমাণ তথ্য সহ) অ্যাক্সেস করতে পারেন:
const hello = ai.definePrompt({
name: 'hello',
messages: 'hello {{ @auth.email }}',
});
স্ট্রিমিং ফাংশন একটি await
প্রয়োজন হয় না
পুরাতন:
const { stream, response } = await ai.generateStream(`hi`);
const { stream, output } = await myflow.stream(`hi`);
নতুন:
const { stream, response } = ai.generateStream(`hi`);
const { stream, output } = myflow.stream(`hi`);
এম্বেড একটি নতুন রিটার্ন টাইপ আছে
আমরা মাল্টিমডাল এম্বেডিংয়ের জন্য সমর্থন যোগ করেছি। শুধুমাত্র একটি এম্বেডিং ভেক্টর ফেরত দেওয়ার পরিবর্তে, এম্বেড এমবেডিং বস্তুর একটি অ্যারে প্রদান করে, যার প্রতিটিতে একটি এমবেডিং ভেক্টর এবং মেটাডেটা থাকে।
পুরাতন:
const response = await ai.embed({embedder, content, options}); // returns number[]
নতুন:
const response = await ai.embed({embedder, content, options}); // returns Embedding[]
const firstEmbeddingVector = response[0].embedding; // is number[]