UNPKG

@genkit-ai/anthropic

Version:

Genkit AI framework plugin for Anthropic APIs.

192 lines 6.14 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var models_exports = {}; __export(models_exports, { ADVANCED_MODEL_INFO: () => ADVANCED_MODEL_INFO, GENERIC_MODEL_INFO: () => GENERIC_MODEL_INFO, TEST_ONLY: () => TEST_ONLY, claudeModel: () => claudeModel, claudeModelReference: () => claudeModelReference, claudeRunner: () => claudeRunner, listKnownModels: () => listKnownModels }); module.exports = __toCommonJS(models_exports); var import_sdk = require("@anthropic-ai/sdk"); var import_genkit = require("genkit"); var import_model = require("genkit/model"); var import_plugin = require("genkit/plugin"); var import_runner = require("./runner/index.js"); var import_types = require("./types.js"); var import_utils = require("./utils.js"); function parseRetryAfterMs(value) { if (!value || !value.trim()) return void 0; const seconds = Number(value); if (!isNaN(seconds) && seconds >= 0) return seconds * 1e3; const date = new Date(value); if (!isNaN(date.getTime())) return Math.max(0, date.getTime() - Date.now()); return void 0; } const GENERIC_MODEL_INFO = { supports: { multiturn: true, tools: true, media: true, systemRole: true, output: ["text"] } }; const ADVANCED_MODEL_INFO = { supports: { multiturn: true, tools: true, media: true, systemRole: true, output: ["text", "json"], constrained: "all" } }; function commonRef(name, info, configSchema = import_types.AnthropicConfigSchema) { return (0, import_model.modelRef)({ name: `anthropic/${name}`, configSchema, info: info ?? GENERIC_MODEL_INFO }); } const KNOWN_MODELS = { "claude-opus-4-7": commonRef("claude-opus-4-7", ADVANCED_MODEL_INFO), "claude-opus-4-6": commonRef("claude-opus-4-6", ADVANCED_MODEL_INFO), "claude-opus-4-5": commonRef("claude-opus-4-5", ADVANCED_MODEL_INFO), "claude-haiku-4-5": commonRef("claude-haiku-4-5", ADVANCED_MODEL_INFO), "claude-sonnet-4-6": commonRef("claude-sonnet-4-6", ADVANCED_MODEL_INFO), "claude-sonnet-4-5": commonRef("claude-sonnet-4-5", ADVANCED_MODEL_INFO), "claude-opus-4-1": commonRef("claude-opus-4-1", ADVANCED_MODEL_INFO), "claude-sonnet-4": commonRef("claude-sonnet-4"), "claude-opus-4": commonRef("claude-opus-4") }; function listKnownModels(client, defaultApiVersion) { return Object.keys(KNOWN_MODELS).map( (name) => claudeModel({ name, client, defaultApiVersion }) ); } function claudeRunner(params, configSchema) { const { defaultApiVersion, ...runnerParams } = params; if (!runnerParams.client) { throw new Error("Anthropic client is required to create a runner"); } let stableRunner = null; let betaRunner = null; return async (request, { streamingRequested, sendChunk, abortSignal }) => { const normalizedRequest = request; const isBeta = (0, import_types.resolveBetaEnabled)( normalizedRequest.config, defaultApiVersion ); const runner = isBeta ? betaRunner ??= new import_runner.BetaRunner(runnerParams) : stableRunner ??= new import_runner.Runner(runnerParams); try { return await runner.run(normalizedRequest, { streamingRequested, sendChunk, abortSignal }); } catch (e) { if (e instanceof import_sdk.APIError) { let status = "UNKNOWN"; switch (e.status) { case 429: status = "RESOURCE_EXHAUSTED"; break; case 401: status = "UNAUTHENTICATED"; break; case 403: status = "PERMISSION_DENIED"; break; case 400: status = "INVALID_ARGUMENT"; break; case 500: status = "INTERNAL"; break; case 503: case 529: status = "UNAVAILABLE"; break; } const retryAfterHeader = e.headers?.get?.("retry-after"); const retryAfterMs = retryAfterHeader ? parseRetryAfterMs(retryAfterHeader) : void 0; const responseMetadata = retryAfterMs !== void 0 ? { retryAfterMs } : void 0; throw new import_genkit.GenkitError({ status, message: e.message, responseMetadata }); } throw e; } }; } function claudeModelReference(name, config = {}) { const modelName = (0, import_utils.checkModelName)(name); if ((0, import_utils.isKnownKey)(modelName, KNOWN_MODELS)) { return KNOWN_MODELS[modelName].withConfig(config); } return (0, import_model.modelRef)({ name: `anthropic/${modelName}`, config, configSchema: import_types.AnthropicConfigSchema, info: { ...GENERIC_MODEL_INFO } }); } function claudeModel(params) { const { name, client: runnerClient, defaultApiVersion: apiVersion } = params; const ref = claudeModelReference(name); return (0, import_plugin.model)( { name: ref.name, ...ref.info, configSchema: ref.configSchema }, claudeRunner( { name, client: runnerClient, defaultApiVersion: apiVersion }, ref.configSchema ) ); } const TEST_ONLY = { KNOWN_MODELS }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { ADVANCED_MODEL_INFO, GENERIC_MODEL_INFO, TEST_ONLY, claudeModel, claudeModelReference, claudeRunner, listKnownModels }); //# sourceMappingURL=models.js.map