ai-model-advisor-mcp 2.2.1 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/build/server.d.ts +106 -0
- package/build/server.d.ts.map +1 -1
- package/build/server.js +55 -1
- package/build/server.js.map +1 -1
- package/build/tools/compare.js +2 -2
- package/build/tools/compare.js.map +1 -1
- package/build/tools/info.js +3 -3
- package/build/tools/info.js.map +1 -1
- package/build/tools/list.d.ts.map +1 -1
- package/build/tools/list.js +10 -2
- package/build/tools/list.js.map +1 -1
- package/build/tools/recommend.d.ts.map +1 -1
- package/build/tools/recommend.js +12 -5
- package/build/tools/recommend.js.map +1 -1
- package/build/tools/select.d.ts +113 -0
- package/build/tools/select.d.ts.map +1 -0
- package/build/tools/select.js +371 -0
- package/build/tools/select.js.map +1 -0
- package/package.json +3 -2
- package/build/data/fal-pricing.d.ts +0 -15
- package/build/data/fal-pricing.d.ts.map +0 -1
- package/build/data/fal-pricing.js +0 -145
- package/build/data/fal-pricing.js.map +0 -1
- package/build/data/fireworks-pricing.d.ts +0 -14
- package/build/data/fireworks-pricing.d.ts.map +0 -1
- package/build/data/fireworks-pricing.js +0 -57
- package/build/data/fireworks-pricing.js.map +0 -1
- package/build/data/replicate-pricing.d.ts +0 -16
- package/build/data/replicate-pricing.d.ts.map +0 -1
- package/build/data/replicate-pricing.js +0 -71
- package/build/data/replicate-pricing.js.map +0 -1
- package/build/data/together-pricing.d.ts +0 -14
- package/build/data/together-pricing.d.ts.map +0 -1
- package/build/data/together-pricing.js +0 -73
- package/build/data/together-pricing.js.map +0 -1
- package/build/providers/fal.d.ts +0 -3
- package/build/providers/fal.d.ts.map +0 -1
- package/build/providers/fal.js +0 -168
- package/build/providers/fal.js.map +0 -1
- package/build/providers/fireworks.d.ts +0 -3
- package/build/providers/fireworks.d.ts.map +0 -1
- package/build/providers/fireworks.js +0 -75
- package/build/providers/fireworks.js.map +0 -1
- package/build/providers/openrouter.d.ts +0 -3
- package/build/providers/openrouter.d.ts.map +0 -1
- package/build/providers/openrouter.js +0 -78
- package/build/providers/openrouter.js.map +0 -1
- package/build/providers/replicate.d.ts +0 -3
- package/build/providers/replicate.d.ts.map +0 -1
- package/build/providers/replicate.js +0 -129
- package/build/providers/replicate.js.map +0 -1
- package/build/providers/together.d.ts +0 -3
- package/build/providers/together.d.ts.map +0 -1
- package/build/providers/together.js +0 -93
- package/build/providers/together.js.map +0 -1
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { cached } from "../cache.js";
|
|
2
|
-
import { STATIC_FIREWORKS_PRICING } from "../data/fireworks-pricing.js";
|
|
3
|
-
// ─── Format pricing ─────────────────────────────────────────────────────────
|
|
4
|
-
function formatLLMPricing(inputPerMillion, outputPerMillion) {
|
|
5
|
-
if (inputPerMillion === 0 && outputPerMillion === 0)
|
|
6
|
-
return "FREE";
|
|
7
|
-
return `$${inputPerMillion.toFixed(2)}/$${outputPerMillion.toFixed(2)} per 1M tokens (in/out)`;
|
|
8
|
-
}
|
|
9
|
-
// ─── Provider ───────────────────────────────────────────────────────────────
|
|
10
|
-
async function fetchFireworksModels() {
|
|
11
|
-
const apiKey = process.env.FIREWORKS_API_KEY;
|
|
12
|
-
if (apiKey) {
|
|
13
|
-
try {
|
|
14
|
-
const response = await fetch("https://api.fireworks.ai/v1/models", {
|
|
15
|
-
headers: { Authorization: `Bearer ${apiKey}` },
|
|
16
|
-
});
|
|
17
|
-
if (!response.ok)
|
|
18
|
-
throw new Error(`Fireworks API error: ${response.status}`);
|
|
19
|
-
const data = await response.json();
|
|
20
|
-
const models = (data.data ?? data);
|
|
21
|
-
return models
|
|
22
|
-
.filter((m) => m.id.startsWith("accounts/"))
|
|
23
|
-
.map((m) => {
|
|
24
|
-
const inputPerM = m.pricing?.input ?? -1;
|
|
25
|
-
const outputPerM = m.pricing?.output ?? -1;
|
|
26
|
-
const staticPrice = STATIC_FIREWORKS_PRICING[m.id];
|
|
27
|
-
const effectiveInput = inputPerM >= 0 ? inputPerM : staticPrice?.input_per_million ?? -1;
|
|
28
|
-
const effectiveOutput = outputPerM >= 0 ? outputPerM : staticPrice?.output_per_million ?? -1;
|
|
29
|
-
return {
|
|
30
|
-
id: m.id,
|
|
31
|
-
name: m.id.split("/").pop()?.replace(/-/g, " ") || m.id,
|
|
32
|
-
provider: "fireworks",
|
|
33
|
-
description: "",
|
|
34
|
-
category: "llm",
|
|
35
|
-
pricing: {
|
|
36
|
-
unit: "token",
|
|
37
|
-
unitPrice: effectiveInput >= 0 ? effectiveInput / 1_000_000 : -1,
|
|
38
|
-
inputPrice: effectiveInput >= 0 ? effectiveInput / 1_000_000 : undefined,
|
|
39
|
-
outputPrice: effectiveOutput >= 0 ? effectiveOutput / 1_000_000 : undefined,
|
|
40
|
-
formatted: effectiveInput >= 0
|
|
41
|
-
? formatLLMPricing(effectiveInput, effectiveOutput)
|
|
42
|
-
: "Pricing unavailable",
|
|
43
|
-
},
|
|
44
|
-
capabilities: [],
|
|
45
|
-
addedDate: m.created ? new Date(m.created * 1000).toISOString() : undefined,
|
|
46
|
-
contextLength: m.context_length,
|
|
47
|
-
};
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
// Fall through to static data
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
// Fallback: return static pricing data as models
|
|
55
|
-
return Object.entries(STATIC_FIREWORKS_PRICING).map(([id, price]) => ({
|
|
56
|
-
id,
|
|
57
|
-
name: id.split("/").pop()?.replace(/-/g, " ") || id,
|
|
58
|
-
provider: "fireworks",
|
|
59
|
-
description: "",
|
|
60
|
-
category: "llm",
|
|
61
|
-
pricing: {
|
|
62
|
-
unit: "token",
|
|
63
|
-
unitPrice: price.input_per_million / 1_000_000,
|
|
64
|
-
inputPrice: price.input_per_million / 1_000_000,
|
|
65
|
-
outputPrice: price.output_per_million / 1_000_000,
|
|
66
|
-
formatted: formatLLMPricing(price.input_per_million, price.output_per_million),
|
|
67
|
-
},
|
|
68
|
-
capabilities: [],
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
export const fireworksProvider = {
|
|
72
|
-
name: "fireworks",
|
|
73
|
-
fetchModels: () => cached("fireworks", fetchFireworksModels),
|
|
74
|
-
};
|
|
75
|
-
//# sourceMappingURL=fireworks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fireworks.js","sourceRoot":"","sources":["../../src/providers/fireworks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,aAAa,EAAiB,MAAM,aAAa,CAAC;AAsG9E,eAAO,MAAM,kBAAkB,EAAE,aAGhC,CAAC"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { cached } from "../cache.js";
|
|
2
|
-
// ─── Capability derivation ──────────────────────────────────────────────────
|
|
3
|
-
function deriveCapabilities(m) {
|
|
4
|
-
const caps = [];
|
|
5
|
-
const params = m.supported_parameters ?? [];
|
|
6
|
-
const inp = m.architecture?.input_modalities ?? [];
|
|
7
|
-
const out = m.architecture?.output_modalities ?? [];
|
|
8
|
-
if (params.includes("tools") || params.includes("tool_choice"))
|
|
9
|
-
caps.push("tool_use");
|
|
10
|
-
if (params.includes("reasoning") || params.includes("include_reasoning"))
|
|
11
|
-
caps.push("reasoning");
|
|
12
|
-
if (params.includes("structured_outputs") || params.includes("response_format"))
|
|
13
|
-
caps.push("structured_output");
|
|
14
|
-
if (inp.includes("image"))
|
|
15
|
-
caps.push("vision");
|
|
16
|
-
if (inp.includes("audio"))
|
|
17
|
-
caps.push("audio_input");
|
|
18
|
-
if (out.includes("audio"))
|
|
19
|
-
caps.push("audio_output");
|
|
20
|
-
if (out.includes("image"))
|
|
21
|
-
caps.push("image_output");
|
|
22
|
-
if (inp.includes("file"))
|
|
23
|
-
caps.push("file_input");
|
|
24
|
-
return caps;
|
|
25
|
-
}
|
|
26
|
-
function deriveCategory(m) {
|
|
27
|
-
const modality = m.architecture?.modality ?? "";
|
|
28
|
-
if (modality.includes("->image"))
|
|
29
|
-
return "text-to-image";
|
|
30
|
-
if (modality.includes("->audio"))
|
|
31
|
-
return "text-to-speech";
|
|
32
|
-
return "llm";
|
|
33
|
-
}
|
|
34
|
-
// ─── Cost formatting ────────────────────────────────────────────────────────
|
|
35
|
-
function formatLLMPricing(promptCost, completionCost) {
|
|
36
|
-
const p = parseFloat(promptCost) * 1_000_000;
|
|
37
|
-
const c = parseFloat(completionCost) * 1_000_000;
|
|
38
|
-
if (p === 0 && c === 0)
|
|
39
|
-
return "FREE";
|
|
40
|
-
return `$${p.toFixed(2)}/$${c.toFixed(2)} per 1M tokens (in/out)`;
|
|
41
|
-
}
|
|
42
|
-
// ─── Provider ───────────────────────────────────────────────────────────────
|
|
43
|
-
async function fetchOpenRouterModels() {
|
|
44
|
-
const headers = { "Content-Type": "application/json" };
|
|
45
|
-
const apiKey = process.env.OPENROUTER_API_KEY;
|
|
46
|
-
if (apiKey)
|
|
47
|
-
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
48
|
-
const response = await fetch("https://openrouter.ai/api/v1/models", { headers });
|
|
49
|
-
if (!response.ok) {
|
|
50
|
-
throw new Error(`OpenRouter API error: ${response.status} ${response.statusText}`);
|
|
51
|
-
}
|
|
52
|
-
const data = await response.json();
|
|
53
|
-
const models = data.data;
|
|
54
|
-
return models.map((m) => ({
|
|
55
|
-
id: m.id,
|
|
56
|
-
name: m.name,
|
|
57
|
-
provider: "openrouter",
|
|
58
|
-
description: m.description ?? "",
|
|
59
|
-
category: deriveCategory(m),
|
|
60
|
-
pricing: {
|
|
61
|
-
unit: "token",
|
|
62
|
-
unitPrice: parseFloat(m.pricing.prompt),
|
|
63
|
-
inputPrice: parseFloat(m.pricing.prompt),
|
|
64
|
-
outputPrice: parseFloat(m.pricing.completion),
|
|
65
|
-
formatted: formatLLMPricing(m.pricing.prompt, m.pricing.completion),
|
|
66
|
-
},
|
|
67
|
-
capabilities: deriveCapabilities(m),
|
|
68
|
-
addedDate: m.created ? new Date(m.created * 1000).toISOString() : undefined,
|
|
69
|
-
contextLength: m.context_length,
|
|
70
|
-
maxOutputTokens: m.top_provider?.max_completion_tokens ?? undefined,
|
|
71
|
-
tags: m.supported_parameters,
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
|
-
export const openrouterProvider = {
|
|
75
|
-
name: "openrouter",
|
|
76
|
-
fetchModels: () => cached("openrouter", fetchOpenRouterModels),
|
|
77
|
-
};
|
|
78
|
-
//# sourceMappingURL=openrouter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replicate.d.ts","sourceRoot":"","sources":["../../src/providers/replicate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,aAAa,EAAiB,MAAM,aAAa,CAAC;AA0J9E,eAAO,MAAM,iBAAiB,EAAE,aAG/B,CAAC"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { cached } from "../cache.js";
|
|
2
|
-
import { STATIC_REPLICATE_PRICING } from "../data/replicate-pricing.js";
|
|
3
|
-
// ─── Category heuristics ────────────────────────────────────────────────────
|
|
4
|
-
function inferCategory(owner, name, desc) {
|
|
5
|
-
const text = `${owner}/${name} ${desc}`.toLowerCase();
|
|
6
|
-
if (text.includes("text-to-image") || text.includes("image generat") || text.includes("flux") || text.includes("stable-diffusion") || text.includes("sdxl") || text.includes("ideogram") || text.includes("recraft"))
|
|
7
|
-
return "text-to-image";
|
|
8
|
-
if (text.includes("image-to-video") || text.includes("i2v") || text.includes("video generat") || text.includes("text-to-video") || text.includes("wan-2") || text.includes("kling"))
|
|
9
|
-
return "text-to-video";
|
|
10
|
-
if (text.includes("text-to-speech") || text.includes("tts"))
|
|
11
|
-
return "text-to-speech";
|
|
12
|
-
if (text.includes("speech-to-text") || text.includes("whisper") || text.includes("transcri"))
|
|
13
|
-
return "speech-to-text";
|
|
14
|
-
if (text.includes("3d") || text.includes("mesh") || text.includes("point cloud"))
|
|
15
|
-
return "image-to-3d";
|
|
16
|
-
if (text.includes("image-to-image") || text.includes("upscal") || text.includes("inpaint") || text.includes("img2img"))
|
|
17
|
-
return "image-to-image";
|
|
18
|
-
if (text.includes("llm") || text.includes("language model") || text.includes("chat") || text.includes("instruct") || text.includes("llama") || text.includes("claude") || text.includes("deepseek"))
|
|
19
|
-
return "llm";
|
|
20
|
-
return "other";
|
|
21
|
-
}
|
|
22
|
-
// ─── Provider ───────────────────────────────────────────────────────────────
|
|
23
|
-
async function fetchReplicateModels() {
|
|
24
|
-
const apiKey = process.env.REPLICATE_API_TOKEN;
|
|
25
|
-
if (apiKey) {
|
|
26
|
-
try {
|
|
27
|
-
const allModels = [];
|
|
28
|
-
let url = "https://api.replicate.com/v1/models?limit=100";
|
|
29
|
-
// Paginate (cap at 3 pages = 300 models to avoid slow startup)
|
|
30
|
-
let pages = 0;
|
|
31
|
-
while (url && pages < 3) {
|
|
32
|
-
const response = await fetch(url, {
|
|
33
|
-
headers: { Authorization: `Bearer ${apiKey}` },
|
|
34
|
-
});
|
|
35
|
-
if (!response.ok)
|
|
36
|
-
break;
|
|
37
|
-
const data = (await response.json());
|
|
38
|
-
allModels.push(...data.results);
|
|
39
|
-
url = data.next ?? undefined;
|
|
40
|
-
pages++;
|
|
41
|
-
}
|
|
42
|
-
const models = allModels
|
|
43
|
-
.filter((m) => m.visibility === "public")
|
|
44
|
-
.map((m) => {
|
|
45
|
-
const id = `${m.owner}/${m.name}`;
|
|
46
|
-
const staticPrice = STATIC_REPLICATE_PRICING[id];
|
|
47
|
-
let pricing;
|
|
48
|
-
if (staticPrice) {
|
|
49
|
-
if (staticPrice.unit === "million_tokens") {
|
|
50
|
-
pricing = {
|
|
51
|
-
unit: "token",
|
|
52
|
-
unitPrice: staticPrice.unit_price / 1_000_000,
|
|
53
|
-
inputPrice: staticPrice.unit_price / 1_000_000,
|
|
54
|
-
outputPrice: (staticPrice.output_price ?? staticPrice.unit_price) / 1_000_000,
|
|
55
|
-
formatted: `$${staticPrice.unit_price.toFixed(2)}/$${(staticPrice.output_price ?? staticPrice.unit_price).toFixed(2)} per 1M tokens (in/out)`,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
pricing = {
|
|
60
|
-
unit: staticPrice.unit,
|
|
61
|
-
unitPrice: staticPrice.unit_price,
|
|
62
|
-
formatted: staticPrice.unit_price === 0
|
|
63
|
-
? "FREE"
|
|
64
|
-
: `$${staticPrice.unit_price.toFixed(4)} / ${staticPrice.unit}`,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
pricing = {
|
|
70
|
-
unit: "unknown",
|
|
71
|
-
unitPrice: -1,
|
|
72
|
-
formatted: "Pricing unavailable",
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
id,
|
|
77
|
-
name: m.name.replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()),
|
|
78
|
-
provider: "replicate",
|
|
79
|
-
description: m.description ?? "",
|
|
80
|
-
category: inferCategory(m.owner, m.name, m.description ?? ""),
|
|
81
|
-
pricing,
|
|
82
|
-
capabilities: [],
|
|
83
|
-
addedDate: m.latest_version?.created_at,
|
|
84
|
-
};
|
|
85
|
-
});
|
|
86
|
-
return models;
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
// Fall through to static data
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Fallback: return static pricing data as models
|
|
93
|
-
return Object.entries(STATIC_REPLICATE_PRICING).map(([id, price]) => {
|
|
94
|
-
const [owner, name] = id.split("/");
|
|
95
|
-
let pricing;
|
|
96
|
-
if (price.unit === "million_tokens") {
|
|
97
|
-
pricing = {
|
|
98
|
-
unit: "token",
|
|
99
|
-
unitPrice: price.unit_price / 1_000_000,
|
|
100
|
-
inputPrice: price.unit_price / 1_000_000,
|
|
101
|
-
outputPrice: (price.output_price ?? price.unit_price) / 1_000_000,
|
|
102
|
-
formatted: `$${price.unit_price.toFixed(2)}/$${(price.output_price ?? price.unit_price).toFixed(2)} per 1M tokens (in/out)`,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
pricing = {
|
|
107
|
-
unit: price.unit,
|
|
108
|
-
unitPrice: price.unit_price,
|
|
109
|
-
formatted: price.unit_price === 0
|
|
110
|
-
? "FREE"
|
|
111
|
-
: `$${price.unit_price.toFixed(4)} / ${price.unit}`,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
return {
|
|
115
|
-
id,
|
|
116
|
-
name: (name ?? id).replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()),
|
|
117
|
-
provider: "replicate",
|
|
118
|
-
description: "",
|
|
119
|
-
category: inferCategory(owner ?? "", name ?? "", ""),
|
|
120
|
-
pricing,
|
|
121
|
-
capabilities: [],
|
|
122
|
-
};
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
export const replicateProvider = {
|
|
126
|
-
name: "replicate",
|
|
127
|
-
fetchModels: () => cached("replicate", fetchReplicateModels),
|
|
128
|
-
};
|
|
129
|
-
//# sourceMappingURL=replicate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replicate.js","sourceRoot":"","sources":["../../src/providers/replicate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"together.d.ts","sourceRoot":"","sources":["../../src/providers/together.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,aAAa,EAAiB,MAAM,aAAa,CAAC;AAwH9E,eAAO,MAAM,gBAAgB,EAAE,aAG9B,CAAC"}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { cached } from "../cache.js";
|
|
2
|
-
import { STATIC_TOGETHER_PRICING } from "../data/together-pricing.js";
|
|
3
|
-
// ─── Category mapping ───────────────────────────────────────────────────────
|
|
4
|
-
function mapCategory(type) {
|
|
5
|
-
switch (type) {
|
|
6
|
-
case "chat":
|
|
7
|
-
case "language":
|
|
8
|
-
case "code":
|
|
9
|
-
return "llm";
|
|
10
|
-
case "image":
|
|
11
|
-
return "text-to-image";
|
|
12
|
-
case "embedding":
|
|
13
|
-
return "embedding";
|
|
14
|
-
case "moderation":
|
|
15
|
-
case "rerank":
|
|
16
|
-
return "other";
|
|
17
|
-
default:
|
|
18
|
-
return "llm";
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
// ─── Format pricing ─────────────────────────────────────────────────────────
|
|
22
|
-
function formatLLMPricing(inputPerMillion, outputPerMillion) {
|
|
23
|
-
if (inputPerMillion === 0 && outputPerMillion === 0)
|
|
24
|
-
return "FREE";
|
|
25
|
-
return `$${inputPerMillion.toFixed(2)}/$${outputPerMillion.toFixed(2)} per 1M tokens (in/out)`;
|
|
26
|
-
}
|
|
27
|
-
// ─── Provider ───────────────────────────────────────────────────────────────
|
|
28
|
-
async function fetchTogetherModels() {
|
|
29
|
-
const apiKey = process.env.TOGETHER_API_KEY;
|
|
30
|
-
// If we have an API key, fetch live data
|
|
31
|
-
if (apiKey) {
|
|
32
|
-
try {
|
|
33
|
-
const response = await fetch("https://api.together.xyz/v1/models", {
|
|
34
|
-
headers: { Authorization: `Bearer ${apiKey}` },
|
|
35
|
-
});
|
|
36
|
-
if (!response.ok)
|
|
37
|
-
throw new Error(`Together API error: ${response.status}`);
|
|
38
|
-
const models = (await response.json());
|
|
39
|
-
return models
|
|
40
|
-
.filter((m) => m.type !== "moderation" && m.type !== "rerank")
|
|
41
|
-
.map((m) => {
|
|
42
|
-
const inputPerM = m.pricing?.input ?? -1;
|
|
43
|
-
const outputPerM = m.pricing?.output ?? -1;
|
|
44
|
-
const inputPerToken = inputPerM >= 0 ? inputPerM / 1_000_000 : -1;
|
|
45
|
-
const outputPerToken = outputPerM >= 0 ? outputPerM / 1_000_000 : -1;
|
|
46
|
-
return {
|
|
47
|
-
id: m.id,
|
|
48
|
-
name: m.display_name || m.id.split("/").pop() || m.id,
|
|
49
|
-
provider: "together",
|
|
50
|
-
description: "",
|
|
51
|
-
category: mapCategory(m.type),
|
|
52
|
-
pricing: {
|
|
53
|
-
unit: "token",
|
|
54
|
-
unitPrice: inputPerToken,
|
|
55
|
-
inputPrice: inputPerToken,
|
|
56
|
-
outputPrice: outputPerToken,
|
|
57
|
-
formatted: inputPerM >= 0
|
|
58
|
-
? formatLLMPricing(inputPerM, outputPerM)
|
|
59
|
-
: "Pricing unavailable",
|
|
60
|
-
},
|
|
61
|
-
capabilities: [],
|
|
62
|
-
addedDate: m.created ? new Date(m.created * 1000).toISOString() : undefined,
|
|
63
|
-
contextLength: m.context_length,
|
|
64
|
-
licenseType: m.license,
|
|
65
|
-
};
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
// Fall through to static data
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
// Fallback: return static pricing data as models
|
|
73
|
-
return Object.entries(STATIC_TOGETHER_PRICING).map(([id, price]) => ({
|
|
74
|
-
id,
|
|
75
|
-
name: id.split("/").pop()?.replace(/-/g, " ") || id,
|
|
76
|
-
provider: "together",
|
|
77
|
-
description: "",
|
|
78
|
-
category: "llm",
|
|
79
|
-
pricing: {
|
|
80
|
-
unit: "token",
|
|
81
|
-
unitPrice: price.input_per_million / 1_000_000,
|
|
82
|
-
inputPrice: price.input_per_million / 1_000_000,
|
|
83
|
-
outputPrice: price.output_per_million / 1_000_000,
|
|
84
|
-
formatted: formatLLMPricing(price.input_per_million, price.output_per_million),
|
|
85
|
-
},
|
|
86
|
-
capabilities: [],
|
|
87
|
-
}));
|
|
88
|
-
}
|
|
89
|
-
export const togetherProvider = {
|
|
90
|
-
name: "together",
|
|
91
|
-
fetchModels: () => cached("together", fetchTogetherModels),
|
|
92
|
-
};
|
|
93
|
-
//# sourceMappingURL=together.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"together.js","sourceRoot":"","sources":["../../src/providers/together.ts"],"names":[],"mappings":"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"}
|