Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion js/plugins/anthropic/src/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,14 @@ export const KNOWN_CLAUDE_MODELS: Record<
),
'claude-opus-4-5': commonRef(
'claude-opus-4-5',
AnthropicThinkingConfigSchema,
AnthropicThinkingConfigSchema.extend({
output_config: z
.object({
effort: z.enum(['low', 'medium', 'high']).optional(),
})
.passthrough()
.optional(),
}),
{
supports: {
multiturn: true,
Expand Down
8 changes: 7 additions & 1 deletion js/plugins/anthropic/src/runner/beta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ const BETA_APIS = [
// 'context-management-2025-06-27',
// 'model-context-window-exceeded-2025-08-26',
// 'skills-2025-10-02',
// 'effort-param-2025-11-24',
'effort-2025-11-24',
// 'advanced-tool-use-2025-11-20',
'structured-outputs-2025-11-13',
];
Expand Down Expand Up @@ -308,6 +308,9 @@ export class BetaRunner extends BaseRunner<BetaRunnerTypes> {
};

if (betaSystem !== undefined) body.system = betaSystem;
if (request.config?.output_config !== undefined)
body.output_config = request.config
.output_config as BetaMessageCreateParamsNonStreaming['output_config'];
if (request.config?.stopSequences !== undefined)
body.stop_sequences = request.config.stopSequences;
if (request.config?.temperature !== undefined)
Expand Down Expand Up @@ -379,6 +382,9 @@ export class BetaRunner extends BaseRunner<BetaRunnerTypes> {
};

if (betaSystem !== undefined) body.system = betaSystem;
if (request.config?.output_config !== undefined)
body.output_config = request.config
.output_config as BetaMessageCreateParamsStreaming['output_config'];
if (request.config?.stopSequences !== undefined)
body.stop_sequences = request.config.stopSequences;
if (request.config?.temperature !== undefined)
Expand Down
1 change: 1 addition & 0 deletions js/testapps/anthropic/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"start:beta": "node lib/beta/basic.js",
"dev:stable": "genkit start -- npx tsx --watch src/stable/basic.ts",
"dev:beta": "genkit start -- npx tsx --watch src/beta/basic.ts",
"dev:beta:effort": "genkit start -- npx tsx --watch src/beta/effort.ts",
"dev:stable:text-plain": "genkit start -- npx tsx --watch src/stable/text-plain.ts",
"dev:stable:webp": "genkit start -- npx tsx --watch src/stable/webp.ts",
"dev:stable:pdf": "genkit start -- npx tsx --watch src/stable/pdf.ts",
Expand Down
79 changes: 79 additions & 0 deletions js/testapps/anthropic/src/beta/effort.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/**
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { anthropic } from '@genkit-ai/anthropic';
import { genkit } from 'genkit';

const ai = genkit({
plugins: [
// Default all flows in this sample to the beta surface
anthropic({
apiVersion: 'beta',
cacheSystemPrompt: true,
apiKey: process.env.ANTHROPIC_API_KEY,
}),
],
});

const betaOpus45 = anthropic.model('claude-opus-4-5', { apiVersion: 'beta' });

ai.defineFlow('anthropic-beta-low-effort', async () => {
const { text } = await ai.generate({
model: betaOpus45,
prompt: `Create me a Mathematics class using the programming language Python.`,
config: {
maxOutputTokens: 4096,
temperature: 0.6,
output_config: {
effort: 'low',
},
},
});

return text;
});

ai.defineFlow('anthropic-beta-medium-effort', async () => {
const { text } = await ai.generate({
model: betaOpus45,
prompt: `Create me a Mathematics class using the programming language Python.`,
config: {
maxOutputTokens: 4096,
temperature: 0.6,
output_config: {
effort: 'medium',
},
},
});

return text;
});

ai.defineFlow('anthropic-beta-high-effort', async () => {
const { text } = await ai.generate({
model: betaOpus45,
prompt: `Create me a Mathematics class using the programming language Python.`,
config: {
maxOutputTokens: 4096,
temperature: 0.6,
output_config: {
effort: 'high',
},
},
});

return text;
});