From 3499b3293d2915837cbba902f858435a0274bbed Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Wed, 26 Feb 2025 16:00:51 -0500 Subject: [PATCH 1/3] chore(js/ai): expose /util/model-runner action for the dev ui --- js/ai/src/generate/action.ts | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/js/ai/src/generate/action.ts b/js/ai/src/generate/action.ts index 7e8065c42..c6658d2c5 100644 --- a/js/ai/src/generate/action.ts +++ b/js/ai/src/generate/action.ts @@ -20,6 +20,7 @@ import { GenkitError, getStreamingCallback, runWithStreamingCallback, + sentinelNoopStreamingCallback, stripUndefinedProps, z, } from '@genkit-ai/core'; @@ -69,8 +70,41 @@ export type GenerateAction = Action< typeof GenerateResponseChunkSchema >; -/** Defines (registers) a utilty generate action. */ +/** Defines (registers) a utilty model runner action. */ export function defineGenerateAction(registry: Registry): GenerateAction { + defineAction( + registry, + { + actionType: 'util', + name: 'model-runner', + inputSchema: z.object({ + model: z.string().optional(), + request: GenerateRequestSchema, + }), + outputSchema: GenerateResponseSchema, + streamSchema: GenerateResponseChunkSchema, + }, + async (input, { sendChunk }) => { + const modelName = + input.model ?? + (await registry.lookupValue('defaultModel', 'defaultModel')); + const resolvedModel = await resolveModel(registry, modelName); + const modelAction = resolvedModel.modelAction; + + // TODO: add this to action run options object, sentinelNoopStreamingCallback is not + // exported publicly. + const isStreaming = sendChunk !== sentinelNoopStreamingCallback; + const modelFn = () => modelAction(input.request); + return isStreaming + ? runWithStreamingCallback( + registry, + (c: GenerateResponseChunk) => sendChunk(c.toJSON ? c.toJSON() : c), + modelFn + ) + : modelFn(); + } + ); + return defineAction( registry, { From dc9e09fe6a5de06d104e3f2634c89f73e6e6ff84 Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Wed, 26 Feb 2025 16:02:35 -0500 Subject: [PATCH 2/3] comment --- js/ai/src/generate/action.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/ai/src/generate/action.ts b/js/ai/src/generate/action.ts index c6658d2c5..2d1fbd303 100644 --- a/js/ai/src/generate/action.ts +++ b/js/ai/src/generate/action.ts @@ -70,7 +70,7 @@ export type GenerateAction = Action< typeof GenerateResponseChunkSchema >; -/** Defines (registers) a utilty model runner action. */ +/** Defines (registers) a utilty generate actions. */ export function defineGenerateAction(registry: Registry): GenerateAction { defineAction( registry, From 4edb1182a376bf627a3b9d197cdf087c0860bc30 Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Wed, 26 Feb 2025 16:06:37 -0500 Subject: [PATCH 3/3] Update js/ai/src/generate/action.ts Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- js/ai/src/generate/action.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/ai/src/generate/action.ts b/js/ai/src/generate/action.ts index 2d1fbd303..9646444e1 100644 --- a/js/ai/src/generate/action.ts +++ b/js/ai/src/generate/action.ts @@ -70,7 +70,7 @@ export type GenerateAction = Action< typeof GenerateResponseChunkSchema >; -/** Defines (registers) a utilty generate actions. */ +/** Defines (registers) the generate and model-runner actions. */ export function defineGenerateAction(registry: Registry): GenerateAction { defineAction( registry,