Skip to content

Commit 8c00dfd

Browse files
authored
fix: render prompt metadata along with generateoptions (#3400)
1 parent 1a3fbb0 commit 8c00dfd

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

js/ai/src/generate.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,12 @@ export interface GenerateOptions<
170170
context?: ActionContext;
171171
/** Abort signal for the generate request. */
172172
abortSignal?: AbortSignal;
173+
/**
174+
* Additional metadata describing the GenerateOptions, used by tooling. If
175+
* this is an instance of a rendered dotprompt, will contain any prompt
176+
* metadata contained in the original frontmatter.
177+
**/
178+
metadata?: Record<string, any>;
173179
}
174180

175181
export async function toGenerateRequest(

js/ai/src/prompt.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,11 @@ function definePromptAsync<
330330
...resolvedOptions?.config,
331331
...renderOptions?.config,
332332
},
333+
metadata: resolvedOptions.metadata?.metadata
334+
? {
335+
prompt: resolvedOptions.metadata?.metadata,
336+
}
337+
: undefined,
333338
});
334339

335340
// Fix for issue #3348: Preserve AbortSignal object
@@ -828,6 +833,18 @@ function loadPrompt(
828833
delete promptMetadata.input.schema.description;
829834
}
830835

836+
const metadata = {
837+
...promptMetadata.metadata,
838+
type: 'prompt',
839+
prompt: {
840+
...promptMetadata,
841+
template: parsedPrompt.template,
842+
},
843+
};
844+
if (promptMetadata.raw?.['metadata']) {
845+
metadata['metadata'] = { ...promptMetadata.raw?.['metadata'] };
846+
}
847+
831848
return {
832849
name: registryDefinitionKey(name, variant ?? undefined, ns),
833850
model: promptMetadata.model,
@@ -841,14 +858,7 @@ function loadPrompt(
841858
input: {
842859
jsonSchema: promptMetadata.input?.schema,
843860
},
844-
metadata: {
845-
...promptMetadata.metadata,
846-
type: 'prompt',
847-
prompt: {
848-
...promptMetadata,
849-
template: parsedPrompt.template,
850-
},
851-
},
861+
metadata,
852862
maxTurns: promptMetadata.raw?.['maxTurns'],
853863
toolChoice: promptMetadata.raw?.['toolChoice'],
854864
returnToolRequests: promptMetadata.raw?.['returnToolRequests'],

js/genkit/tests/prompts_test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,6 +1145,11 @@ describe('prompt', () => {
11451145
returnToolRequests: true,
11461146
toolChoice: 'required',
11471147
tools: ['toolA', 'toolB'],
1148+
metadata: {
1149+
prompt: {
1150+
foo: 'bar',
1151+
},
1152+
},
11481153
});
11491154
});
11501155

0 commit comments

Comments
 (0)