GenkitG
Genkit•2y ago•
4 replies
inadequate-blush

flow streaming

    menuSuggestionFlow := genkit.DefineStreamingFlow("menuSuggestionFlow",
        func(
            ctx context.Context,
            input string,
            callback func(context.Context, string) error,
        ) (string, error) {
            m := vertexai.Model("gemini-1.5-pro")
            if m == nil {
                return "", errors.New("menuSuggestionFlow: failed to find model")
            }

            resp, err := m.Generate(ctx,
                ai.NewGenerateRequest(
                    &ai.GenerationCommonConfig{Temperature: 1},
                    ai.NewUserTextMessage(fmt.Sprintf(`Suggest an item for the menu of a %s themed restaurant`, input))),
                func(ctx context.Context, grc *ai.GenerateResponseChunk) error {
                    chunk := grc.Text()
                    if callback != nil {
                        return callback(ctx, chunk)
                    }
                    return nil
                })
            if err != nil {
                return "", err
            }
            return resp.Text(), nil
        })


    suggestion, err := menuSuggestionFlow.Run(context.Background(), "French")
    if err != nil {
        log.Fatalf("Error while executing menuSuggestionFlow: %s", err)
    }
    log.Print(suggestion)

    menuSuggestionFlow.Stream(
        context.Background(),
        "French",
    )(func(sfv *genkit.StreamFlowValue[string, string], err error) bool {
        if !sfv.Done {
            // fmt.Print(sfv.Output)
            log.Printf("Chunk received. Length: %d, Content: '%s'", len(sfv.Output), sfv.Output)
            return true
        } else {
            return false
        }
    })
Was this page helpful?