@genkit-ai/anthropic
Version:
Genkit AI framework plugin for Anthropic APIs.
192 lines • 6.14 kB
JavaScript
;
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