Skip to content
Closed
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
192 changes: 192 additions & 0 deletions packages/ai-model-registry/scripts/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,16 @@ export const PROVIDER_ICON_MAP: Record<string, string> = {
xai: "xai",
"z-ai": "z-ai",
zai: "z-ai",
// Additional missing providers
"friendli-ai": "friendli",
replicate: "replicate",
baseten: "baseten",
databricks: "databricks",
snowflake: "snowflake",
gmi: "gmi",
siliconflow: "siliconflow",
ai21: "ai21",
"ai21-labs": "ai21",
};

/**
Expand Down Expand Up @@ -199,6 +209,27 @@ export const BRAND_NAME_MAP: Record<string, string> = {
vercel: "Vercel",
"weights-biases": "Weights & Biases",
xai: "XAI",
// Additional missing providers
hyperbolic: "Hyperbolic",
friendli: "FriendliAI",
perplexity: "Perplexity",
lambda: "Lambda",
cohere: "Cohere",
simplismart: "Simplismart",
replicate: "Replicate",
nebius: "Nebius",
minimax: "MiniMax",
"moonshot-ai": "Moonshot AI",
reka: "Reka AI",
baseten: "Baseten",
databricks: "Databricks",
snowflake: "Snowflake",
sambanova: "SambaNova",
parasail: "Parasail",
gmi: "GMI",
siliconflow: "SiliconFlow",
novita: "Novita",
ai21: "AI21 Labs",
};

/**
Expand Down Expand Up @@ -501,4 +532,165 @@ export const PROVIDERS_CONFIG: ProviderConfig[] = [
output: "inception",
transformer: "./transformers/inception.ts",
},
// Additional missing providers
{
doc: "https://hyperbolic.ai/docs",
env: ["HYPERBOLIC_API_KEY"],
name: "Hyperbolic",
npm: "@ai-sdk/openai-compatible",
output: "hyperbolic",
transformer: "./transformers/hyperbolic.ts",
},
{
doc: "https://docs.friendli.ai/",
env: ["FRIENDLI_API_KEY"],
name: "FriendliAI",
npm: "@ai-sdk/friendli",
output: "friendli",
transformer: "./transformers/friendli.ts",
},
{
doc: "https://docs.perplexity.ai/",
env: ["PERPLEXITY_API_KEY"],
name: "Perplexity",
npm: "@ai-sdk/perplexity",
output: "perplexity",
transformer: "./transformers/perplexity.ts",
},
{
doc: "https://docs.lambda.com/",
env: ["LAMBDA_API_KEY"],
name: "Lambda",
npm: "@ai-sdk/openai-compatible",
output: "lambda",
transformer: "./transformers/lambda.ts",
},
{
doc: "https://docs.cohere.com/",
env: ["COHERE_API_KEY"],
name: "Cohere",
npm: "@ai-sdk/cohere",
output: "cohere",
transformer: "./transformers/cohere.ts",
},
{
doc: "https://simplismart.ai/docs",
env: ["SIMPLISMART_API_KEY"],
name: "Simplismart",
npm: "@ai-sdk/openai-compatible",
output: "simplismart",
transformer: "./transformers/simplismart.ts",
},
{
doc: "https://replicate.com/docs",
env: ["REPLICATE_API_TOKEN"],
name: "Replicate",
npm: "@ai-sdk/replicate",
output: "replicate",
transformer: "./transformers/replicate.ts",
},
{
doc: "https://nebius.com/docs",
env: ["NEBIUS_API_KEY"],
name: "Nebius",
npm: "@ai-sdk/openai-compatible",
output: "nebius",
transformer: "./transformers/nebius.ts",
},
{
doc: "https://platform.minimax.chat/docs",
env: ["MINIMAX_API_KEY"],
name: "MiniMax",
npm: "@ai-sdk/minimax",
output: "minimax",
transformer: "./transformers/minimax.ts",
},
{
doc: "https://platform.moonshot.cn/docs",
env: ["MOONSHOT_API_KEY"],
name: "Moonshot AI",
npm: "@ai-sdk/moonshot",
output: "moonshot",
transformer: "./transformers/moonshot.ts",
},
{
doc: "https://docs.reka.ai/",
env: ["REKA_API_KEY"],
name: "Reka AI",
npm: "@ai-sdk/reka",
output: "reka",
transformer: "./transformers/reka.ts",
},
{
doc: "https://docs.baseten.co/",
env: ["BASETEN_API_KEY"],
name: "Baseten",
npm: "@ai-sdk/baseten",
output: "baseten",
transformer: "./transformers/baseten.ts",
},
{
doc: "https://docs.databricks.com/",
env: ["DATABRICKS_API_KEY", "DATABRICKS_HOST"],
name: "Databricks",
npm: "@ai-sdk/databricks",
output: "databricks",
transformer: "./transformers/databricks.ts",
},
{
doc: "https://docs.snowflake.com/",
env: ["SNOWFLAKE_ACCOUNT", "SNOWFLAKE_USERNAME", "SNOWFLAKE_PASSWORD"],
name: "Snowflake",
npm: "@ai-sdk/snowflake",
output: "snowflake",
transformer: "./transformers/snowflake.ts",
},
{
doc: "https://docs.sambanova.ai/",
env: ["SAMBANOVA_API_KEY"],
name: "SambaNova",
npm: "@ai-sdk/openai-compatible",
output: "sambanova",
transformer: "./transformers/sambanova.ts",
},
{
doc: "https://docs.parasail.ai/",
env: ["PARASAIL_API_KEY"],
name: "Parasail",
npm: "@ai-sdk/openai-compatible",
output: "parasail",
transformer: "./transformers/parasail.ts",
},
{
doc: "https://gmi.ai/docs",
env: ["GMI_API_KEY"],
name: "GMI",
npm: "@ai-sdk/openai-compatible",
output: "gmi",
transformer: "./transformers/gmi.ts",
},
{
doc: "https://siliconflow.com/docs",
env: ["SILICONFLOW_API_KEY"],
name: "SiliconFlow",
npm: "@ai-sdk/openai-compatible",
output: "siliconflow",
transformer: "./transformers/siliconflow.ts",
},
{
doc: "https://novita.ai/docs",
env: ["NOVITA_API_KEY"],
name: "Novita",
npm: "@ai-sdk/openai-compatible",
output: "novita",
transformer: "./transformers/novita.ts",
},
{
doc: "https://docs.ai21.com/",
env: ["AI21_API_KEY"],
name: "AI21 Labs",
npm: "@ai-sdk/ai21",
output: "ai21",
transformer: "./transformers/ai21.ts",
},
];
116 changes: 116 additions & 0 deletions packages/ai-model-registry/scripts/download/transformers/ai21.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import type { Model } from "../../../src/schema.js";

/**
* AI21 Labs model data structure
*/
interface AI21ModelData {
id: string;
name: string;
context_length: number;
max_tokens?: number;
pricing?: {
input?: number;
output?: number;
};
input_modalities?: string[];
output_modalities?: string[];
knowledge?: string;
release_date?: string;
}

/**
* Transforms AI21 Labs model data into the normalized structure.
* @param models Array of AI21 Labs model data
* @returns Array of normalized model objects
*/
export const transformAI21Models = (models: AI21ModelData[]): Model[] => {
return models.map((model) => ({
attachment: false,
cost: {
input: model.pricing?.input || null,
inputCacheHit: null,
output: model.pricing?.output || null,
},
extendedThinking: false,
id: model.id,
knowledge: model.knowledge || null,
lastUpdated: null,
limit: {
context: model.context_length,
output: model.max_tokens || null,
},
modalities: {
input: model.input_modalities || ["text"],
output: model.output_modalities || ["text"],
},
name: model.name,
openWeights: false,
provider: "AI21 Labs",
providerDoc: "https://docs.ai21.com/",
providerEnv: ["AI21_API_KEY"],
providerId: "ai21",
providerModelsDevId: "ai21",
providerNpm: "@ai-sdk/ai21",
reasoning: false,
releaseDate: model.release_date || null,
streamingSupported: true,
temperature: true,
toolCall: false,
vision: model.input_modalities?.includes("image") || false,
}));
};

/**
* Fetches AI21 Labs models using hardcoded data.
* @returns Promise that resolves to an array of transformed models
*/
export const fetchAI21Models = async (): Promise<Model[]> => {
console.log("[AI21 Labs] Using hardcoded model data");

const ai21Models: AI21ModelData[] = [
{
id: "j2-ultra",
name: "Jurassic-2 Ultra",
context_length: 8192,
max_tokens: 4096,
pricing: {
input: 0.15,
output: 0.15,
},
input_modalities: ["text"],
output_modalities: ["text"],
knowledge: "2023-12",
release_date: "2023-12-01",
},
{
id: "j2-mid",
name: "Jurassic-2 Mid",
context_length: 8192,
max_tokens: 4096,
pricing: {
input: 0.08,
output: 0.08,
},
input_modalities: ["text"],
output_modalities: ["text"],
knowledge: "2023-12",
release_date: "2023-12-01",
},
{
id: "j2-light",
name: "Jurassic-2 Light",
context_length: 8192,
max_tokens: 4096,
pricing: {
input: 0.03,
output: 0.03,
},
input_modalities: ["text"],
output_modalities: ["text"],
knowledge: "2023-12",
release_date: "2023-12-01",
},
];

return transformAI21Models(ai21Models);
};
Loading
Loading