genkit icon indicating copy to clipboard operation
genkit copied to clipboard

Store arbitrary context in Flow AsyncLocalStorage

Open mbleigh opened this issue 1 year ago • 0 comments

Because tools and flows are defined independently but are often interrelated in practice, it would be great to be able to set and retrieve arbitrary values from ALS. Something like:

import { setFlowContext, getFlowContext, defineFlow, defineTool, generate } from "genkit";

const findRestaurant = defineTool({
  name: 'findRestaurant',
  inputSchema: z.object({query: z.string()}),
  async ({query}) => {
    const userInfo = getFlowContext('userInfo');
    return searchRestaurants(query, zipcode: userInfo.zipcode);
  }
});

defineFlow({
  name: 'chatbotFlow',
  inputSchema: z.object({userInfo: UserInfoSchema}),
}, ({userInfo}) => {
  setFlowContext('userInfo', userInfo);
  generate({
    // ...
    tools: [findRestaurant],
  });
});

mbleigh avatar Sep 09 '24 16:09 mbleigh