Skip to content

Commit 6e58dbe

Browse files
authored
fix(js/ai/generate): Allow for model to be optional (#3912)
1 parent fe139d1 commit 6e58dbe

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

js/ai/src/generate.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import { Message } from './message.js';
4545
import {
4646
GenerateResponseChunkData,
4747
GenerateResponseData,
48+
ResolvedModel,
4849
resolveModel,
4950
type GenerateActionOptions,
5051
type GenerateRequest,
@@ -494,7 +495,10 @@ export async function toGenerateActionOptions<
494495
registry: Registry,
495496
options: GenerateOptions<O, CustomOptions>
496497
): Promise<GenerateActionOptions> {
497-
const resolvedModel = await resolveModel(registry, options.model);
498+
let resolvedModel: ResolvedModel<CustomOptions> | undefined;
499+
if (options.model) {
500+
resolvedModel = await resolveModel(registry, options.model);
501+
}
498502
const tools = await toolsToActionRefs(registry, options.tools);
499503
const resources = await resourcesToActionRefs(registry, options.resources);
500504
const messages: MessageData[] = messagesFromOptions(options);
@@ -513,15 +517,15 @@ export async function toGenerateActionOptions<
513517
}
514518

515519
const params: GenerateActionOptions = {
516-
model: resolvedModel.modelAction.__action.name,
520+
model: resolvedModel?.modelAction.__action.name,
517521
docs: options.docs,
518522
messages: messages,
519523
tools,
520524
resources,
521525
toolChoice: options.toolChoice,
522526
config: {
523-
version: resolvedModel.version,
524-
...stripUndefinedOptions(resolvedModel.config),
527+
version: resolvedModel?.version,
528+
...stripUndefinedOptions(resolvedModel?.config),
525529
...stripUndefinedOptions(options.config),
526530
},
527531
output: options.output && {

js/ai/src/model-types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ export const GenerateActionOutputConfig = z.object({
381381

382382
export const GenerateActionOptionsSchema = z.object({
383383
/** A model name (e.g. `vertexai/gemini-1.0-pro`). */
384-
model: z.string(),
384+
model: z.string().optional(),
385385
/** Retrieved documents to be used as context for this generation. */
386386
docs: z.array(DocumentDataSchema).optional(),
387387
/** Conversation history for multi-turn prompting when supported by the underlying model. */

js/ai/tests/generate/generate_test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { beforeEach, describe, it } from 'node:test';
2222
import {
2323
generate,
2424
generateStream,
25+
toGenerateActionOptions,
2526
toGenerateRequest,
2627
type GenerateOptions,
2728
} from '../../src/generate.js';
@@ -339,6 +340,21 @@ describe('toGenerateRequest', () => {
339340
}
340341
});
341342

343+
describe('toGenerateActionOptions', () => {
344+
const registry = new Registry();
345+
346+
it('should return action options with undefined model', async () => {
347+
const options: GenerateOptions = {
348+
prompt: 'hello',
349+
};
350+
const actionOptions = await toGenerateActionOptions(registry, options);
351+
assert.strictEqual(actionOptions.model, undefined);
352+
assert.deepStrictEqual(actionOptions.messages, [
353+
{ role: 'user', content: [{ text: 'hello' }] },
354+
]);
355+
});
356+
});
357+
342358
describe('generate', () => {
343359
let registry: Registry;
344360
var echoModel: ModelAction;

0 commit comments

Comments
 (0)