Skip to content
Open
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"databricks:generate": "bun ./packages/core/script/generate-databricks.ts",
"helicone:generate": "bun ./packages/core/script/generate-helicone.ts",
"venice:sync": "bun ./packages/core/script/sync-models.ts venice",
"rodiumai:sync": "bun ./packages/core/script/sync-models.ts rodiumai",
"vercel:generate": "bun ./packages/core/script/sync-models.ts vercel",
"wandb:generate": "bun ./packages/core/script/generate-wandb.ts",
"digitalocean:generate": "bun ./packages/core/script/generate-digitalocean.ts",
Expand Down
3 changes: 3 additions & 0 deletions packages/core/src/family.ts
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,9 @@ export const ModelFamilyValues = [
"auto",
"model-router",

// RodiumAi smart routing tiers
"rodium-smart",

// V0
"v0",

Expand Down
13 changes: 8 additions & 5 deletions packages/core/src/sync/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { openrouter } from "./providers/openrouter.js";
import { ovhcloud } from "./providers/ovhcloud.js";
import { vercel } from "./providers/vercel.js";
import { venice } from "./providers/venice.js";
import { rodiumai } from "./providers/rodiumai.js";
import { xai } from "./providers/xai.js";

const ExistingModelType = AuthoredModelShape.partial()
Expand Down Expand Up @@ -84,6 +85,7 @@ export const providers: {
ovhcloud: SyncProvider<any>;
vercel: SyncProvider<any>;
venice: SyncProvider<any>;
rodiumai: SyncProvider<any>;
xai: SyncProvider<any>;
} = {
baseten,
Expand All @@ -93,11 +95,12 @@ export const providers: {
ovhcloud,
vercel,
venice,
rodiumai,
xai,
};

export const groups = {
aggregators: ["openrouter", "vercel"],
aggregators: ["openrouter", "rodiumai", "vercel"],
cloudflare: ["cloudflare-workers-ai"],
direct: ["baseten", "google", "ovhcloud", "venice", "xai"],
} as const;
Expand Down Expand Up @@ -229,7 +232,7 @@ export async function syncProvider<SourceModel>(
}

for (const [relativePath, file] of desired) {
const filePath = path.join(provider.modelsDir, relativePath);
const filePath = path.join(provider.modelsDir, ...relativePath.split("/"));
const current = existing.get(relativePath);

if (current === undefined) {
Expand Down Expand Up @@ -282,7 +285,7 @@ export async function syncProvider<SourceModel>(
continue;
}

const filePath = path.join(provider.modelsDir, relativePath);
const filePath = path.join(provider.modelsDir, ...relativePath.split("/"));
files.push({ status: "deleted", path: filePath });
if (options.dryRun) {
console.log(`Would remove ${relativePath}`);
Expand Down Expand Up @@ -413,7 +416,7 @@ async function readModelMetadata(modelsDir: string) {
absolute: true,
followSymlinks: true,
})) {
const modelID = path.relative(metadataDir, modelPath).slice(0, -5);
const modelID = path.relative(metadataDir, modelPath).slice(0, -5).replaceAll("\\", "/");
const toml = Bun.TOML.parse(
await Bun.file(modelPath).text(),
) as Record<string, unknown>;
Expand Down Expand Up @@ -522,7 +525,7 @@ async function tomlFiles(root: string, dir = "") {
const result: Array<{ file: string; symlink: boolean }> = [];

for (const entry of await readdir(path.join(root, dir), { withFileTypes: true })) {
const file = path.join(dir, entry.name);
const file = path.join(dir, entry.name).replaceAll("\\", "/");
if (entry.isDirectory()) {
result.push(...await tomlFiles(root, file));
} else if (entry.name.endsWith(".toml") && (entry.isFile() || entry.isSymbolicLink())) {
Expand Down
Loading