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.
Files changed (56) hide show
  1. package/README.md +17 -2
  2. package/build/server.d.ts +106 -0
  3. package/build/server.d.ts.map +1 -1
  4. package/build/server.js +55 -1
  5. package/build/server.js.map +1 -1
  6. package/build/tools/compare.js +2 -2
  7. package/build/tools/compare.js.map +1 -1
  8. package/build/tools/info.js +3 -3
  9. package/build/tools/info.js.map +1 -1
  10. package/build/tools/list.d.ts.map +1 -1
  11. package/build/tools/list.js +10 -2
  12. package/build/tools/list.js.map +1 -1
  13. package/build/tools/recommend.d.ts.map +1 -1
  14. package/build/tools/recommend.js +12 -5
  15. package/build/tools/recommend.js.map +1 -1
  16. package/build/tools/select.d.ts +113 -0
  17. package/build/tools/select.d.ts.map +1 -0
  18. package/build/tools/select.js +371 -0
  19. package/build/tools/select.js.map +1 -0
  20. package/package.json +3 -2
  21. package/build/data/fal-pricing.d.ts +0 -15
  22. package/build/data/fal-pricing.d.ts.map +0 -1
  23. package/build/data/fal-pricing.js +0 -145
  24. package/build/data/fal-pricing.js.map +0 -1
  25. package/build/data/fireworks-pricing.d.ts +0 -14
  26. package/build/data/fireworks-pricing.d.ts.map +0 -1
  27. package/build/data/fireworks-pricing.js +0 -57
  28. package/build/data/fireworks-pricing.js.map +0 -1
  29. package/build/data/replicate-pricing.d.ts +0 -16
  30. package/build/data/replicate-pricing.d.ts.map +0 -1
  31. package/build/data/replicate-pricing.js +0 -71
  32. package/build/data/replicate-pricing.js.map +0 -1
  33. package/build/data/together-pricing.d.ts +0 -14
  34. package/build/data/together-pricing.d.ts.map +0 -1
  35. package/build/data/together-pricing.js +0 -73
  36. package/build/data/together-pricing.js.map +0 -1
  37. package/build/providers/fal.d.ts +0 -3
  38. package/build/providers/fal.d.ts.map +0 -1
  39. package/build/providers/fal.js +0 -168
  40. package/build/providers/fal.js.map +0 -1
  41. package/build/providers/fireworks.d.ts +0 -3
  42. package/build/providers/fireworks.d.ts.map +0 -1
  43. package/build/providers/fireworks.js +0 -75
  44. package/build/providers/fireworks.js.map +0 -1
  45. package/build/providers/openrouter.d.ts +0 -3
  46. package/build/providers/openrouter.d.ts.map +0 -1
  47. package/build/providers/openrouter.js +0 -78
  48. package/build/providers/openrouter.js.map +0 -1
  49. package/build/providers/replicate.d.ts +0 -3
  50. package/build/providers/replicate.d.ts.map +0 -1
  51. package/build/providers/replicate.js +0 -129
  52. package/build/providers/replicate.js.map +0 -1
  53. package/build/providers/together.d.ts +0 -3
  54. package/build/providers/together.d.ts.map +0 -1
  55. package/build/providers/together.js +0 -93
  56. 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,3 +0,0 @@
1
- import type { ModelProvider } from "../types.js";
2
- export declare const openrouterProvider: ModelProvider;
3
- //# sourceMappingURL=openrouter.d.ts.map
@@ -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,3 +0,0 @@
1
- import type { ModelProvider } from "../types.js";
2
- export declare const replicateProvider: ModelProvider;
3
- //# sourceMappingURL=replicate.d.ts.map
@@ -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,3 +0,0 @@
1
- import type { ModelProvider } from "../types.js";
2
- export declare const togetherProvider: ModelProvider;
3
- //# sourceMappingURL=together.d.ts.map
@@ -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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"}