Skip to main content
Glama
firebase
by firebase
index.ts5.34 kB
/** * Copyright 2024 Bloom Labs Inc * 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 '@anthropic-ai/sdk'; import { genkitPluginV2, type GenkitPluginV2 } from 'genkit/plugin'; import { ActionMetadata, ModelReference, z } from 'genkit'; import { ModelAction } from 'genkit/model'; import { ActionType } from 'genkit/registry'; import { listActions } from './list.js'; import { AnthropicConfigSchemaType, ClaudeConfig, ClaudeModelName, KNOWN_CLAUDE_MODELS, KnownClaudeModels, claudeModel, claudeModelReference, } from './models.js'; import { InternalPluginOptions, PluginOptions, __testClient } from './types.js'; const PROMPT_CACHING_BETA_HEADER_VALUE = 'prompt-caching-2024-07-31'; /** * Gets or creates an Anthropic client instance. * Supports test client injection for internal testing. */ function getAnthropicClient(options?: PluginOptions): Anthropic { // Check for test client injection first (internal use only) const internalOptions = options as InternalPluginOptions | undefined; if (internalOptions?.[__testClient]) { return internalOptions[__testClient]; } // Production path: create real client const apiKey = options?.apiKey || process.env.ANTHROPIC_API_KEY; if (!apiKey) { throw new Error( 'Please pass in the API key or set the ANTHROPIC_API_KEY environment variable' ); } const defaultHeaders: Record<string, string> = {}; if (options?.cacheSystemPrompt) { defaultHeaders['anthropic-beta'] = PROMPT_CACHING_BETA_HEADER_VALUE; } return new Anthropic({ apiKey, defaultHeaders }); } /** * This module provides an interface to the Anthropic AI models through the Genkit plugin system. * It allows users to interact with various Claude models by providing an API key and optional configuration. * * The main export is the `anthropic` plugin, which can be configured with an API key either directly or through * environment variables. It initializes the Anthropic client and makes available the Claude models for use. * * Exports: * - anthropic: The main plugin function to interact with the Anthropic AI. * * Usage: * To use the Claude models, initialize the anthropic plugin inside `genkit()` and pass the configuration options. If no API key is provided in the options, the environment variable `ANTHROPIC_API_KEY` must be set. If you want to cache the system prompt, set `cacheSystemPrompt` to `true`. **Note:** Prompt caching is in beta and may change. To learn more, see https://docs.anthropic.com/en/docs/prompt-caching. * * Example: * ``` * import { anthropic } from '@genkit-ai/anthropic'; * import { genkit } from 'genkit'; * * const ai = genkit({ * plugins: [ * anthropic({ apiKey: 'your-api-key', cacheSystemPrompt: false }) * ... // other plugins * ] * }); * * // Access models via the plugin's model() method: * const model = anthropic.model('claude-sonnet-4'); * ``` */ function anthropicPlugin(options?: PluginOptions): GenkitPluginV2 { const client = getAnthropicClient(options); const defaultApiVersion = options?.apiVersion; let listActionsCache: ActionMetadata[] | null = null; return genkitPluginV2({ name: 'anthropic', init: async () => { const actions: ModelAction[] = []; for (const name of Object.keys(KNOWN_CLAUDE_MODELS)) { const action = claudeModel({ name, client, cacheSystemPrompt: options?.cacheSystemPrompt, defaultApiVersion, }); actions.push(action); } return actions; }, resolve: (actionType: ActionType, name: string) => { if (actionType === 'model') { // Strip the 'anthropic/' namespace prefix if present const modelName = name.startsWith('anthropic/') ? name.slice(10) : name; return claudeModel({ name: modelName, client, cacheSystemPrompt: options?.cacheSystemPrompt, defaultApiVersion, }); } return undefined; }, list: async () => { if (listActionsCache) return listActionsCache; listActionsCache = await listActions(client); return listActionsCache; }, }); } export type AnthropicPlugin = { (pluginOptions?: PluginOptions): GenkitPluginV2; model( name: KnownClaudeModels | (ClaudeModelName & {}), config?: ClaudeConfig ): ModelReference<AnthropicConfigSchemaType>; model(name: string, config?: any): ModelReference<z.ZodTypeAny>; }; /** * Anthropic AI plugin for Genkit. * Includes Claude models (3, 3.5, and 4 series). */ export const anthropic = anthropicPlugin as AnthropicPlugin; (anthropic as any).model = ( name: string, config?: any ): ModelReference<z.ZodTypeAny> => { return claudeModelReference(name, config); }; export default anthropic;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/firebase/genkit'

If you have feedback or need assistance with the MCP directory API, please join our Discord server