@spekoai/mcp 1.0.0 → 1.0.2
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/LICENSE +21 -0
- package/README.md +142 -36
- package/dist/index.d.ts +26 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +112 -25
- package/package.json +44 -40
- package/dist/data/benchmarks.d.ts +0 -124
- package/dist/data/benchmarks.d.ts.map +0 -1
- package/dist/data/benchmarks.js +0 -176
- package/dist/data/benchmarks.js.map +0 -1
- package/dist/data/templates.d.ts +0 -39
- package/dist/data/templates.d.ts.map +0 -1
- package/dist/data/templates.js +0 -385
- package/dist/data/templates.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/api-client.d.ts +0 -71
- package/dist/lib/api-client.d.ts.map +0 -1
- package/dist/lib/api-client.js +0 -282
- package/dist/lib/api-client.js.map +0 -1
- package/dist/lib/benchmark-utils.d.ts +0 -45
- package/dist/lib/benchmark-utils.d.ts.map +0 -1
- package/dist/lib/benchmark-utils.js +0 -244
- package/dist/lib/benchmark-utils.js.map +0 -1
- package/dist/lib/project-scanner.d.ts +0 -16
- package/dist/lib/project-scanner.d.ts.map +0 -1
- package/dist/lib/project-scanner.js +0 -154
- package/dist/lib/project-scanner.js.map +0 -1
- package/dist/lib/tier-gate.d.ts +0 -14
- package/dist/lib/tier-gate.d.ts.map +0 -1
- package/dist/lib/tier-gate.js +0 -27
- package/dist/lib/tier-gate.js.map +0 -1
- package/dist/tools/agent-crud.d.ts +0 -3
- package/dist/tools/agent-crud.d.ts.map +0 -1
- package/dist/tools/agent-crud.js +0 -114
- package/dist/tools/agent-crud.js.map +0 -1
- package/dist/tools/legacy.d.ts +0 -3
- package/dist/tools/legacy.d.ts.map +0 -1
- package/dist/tools/legacy.js +0 -354
- package/dist/tools/legacy.js.map +0 -1
- package/dist/tools/migrate.d.ts +0 -3
- package/dist/tools/migrate.d.ts.map +0 -1
- package/dist/tools/migrate.js +0 -145
- package/dist/tools/migrate.js.map +0 -1
- package/dist/tools/recommend.d.ts +0 -3
- package/dist/tools/recommend.d.ts.map +0 -1
- package/dist/tools/recommend.js +0 -163
- package/dist/tools/recommend.js.map +0 -1
- package/dist/tools/setup.d.ts +0 -3
- package/dist/tools/setup.d.ts.map +0 -1
- package/dist/tools/setup.js +0 -104
- package/dist/tools/setup.js.map +0 -1
package/dist/lib/api-client.d.ts
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
export type AgentPriority = "speed" | "quality" | "cost";
|
|
2
|
-
export interface AgentCreateInput {
|
|
3
|
-
name: string;
|
|
4
|
-
context: string;
|
|
5
|
-
systemPrompt?: string;
|
|
6
|
-
language?: string;
|
|
7
|
-
priority?: AgentPriority;
|
|
8
|
-
greeting?: string;
|
|
9
|
-
}
|
|
10
|
-
export interface AgentUpdateInput {
|
|
11
|
-
context?: string;
|
|
12
|
-
systemPrompt?: string;
|
|
13
|
-
language?: string;
|
|
14
|
-
priority?: AgentPriority;
|
|
15
|
-
greeting?: string;
|
|
16
|
-
}
|
|
17
|
-
export interface AgentRecord {
|
|
18
|
-
id: string;
|
|
19
|
-
name: string;
|
|
20
|
-
context: string;
|
|
21
|
-
systemPrompt: string;
|
|
22
|
-
language: string;
|
|
23
|
-
priority: string;
|
|
24
|
-
greeting?: string;
|
|
25
|
-
createdAt: string;
|
|
26
|
-
updatedAt: string;
|
|
27
|
-
[key: string]: unknown;
|
|
28
|
-
}
|
|
29
|
-
export interface AgentStatus {
|
|
30
|
-
agentId: string;
|
|
31
|
-
health: string;
|
|
32
|
-
recentCalls: number;
|
|
33
|
-
successRate?: number;
|
|
34
|
-
avgLatencyMs?: number;
|
|
35
|
-
mode?: string;
|
|
36
|
-
provider?: string;
|
|
37
|
-
lastCallAt?: string;
|
|
38
|
-
[key: string]: unknown;
|
|
39
|
-
}
|
|
40
|
-
export interface ApiResult<T> {
|
|
41
|
-
data: T;
|
|
42
|
-
meta: {
|
|
43
|
-
mode: "live" | "mock";
|
|
44
|
-
baseUrl: string;
|
|
45
|
-
warning?: string;
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
export interface SpekoApiClientOptions {
|
|
49
|
-
baseUrl?: string;
|
|
50
|
-
dashboardBaseUrl?: string;
|
|
51
|
-
apiKey?: string;
|
|
52
|
-
mockMode?: boolean;
|
|
53
|
-
fetchImpl?: typeof fetch;
|
|
54
|
-
allowMockFallback?: boolean;
|
|
55
|
-
}
|
|
56
|
-
export declare class SpekoApiClient {
|
|
57
|
-
private readonly baseUrl;
|
|
58
|
-
private readonly dashboardBaseUrl;
|
|
59
|
-
private readonly apiKey;
|
|
60
|
-
private readonly fetchImpl;
|
|
61
|
-
private readonly mockMode;
|
|
62
|
-
private readonly allowMockFallback;
|
|
63
|
-
constructor(options?: SpekoApiClientOptions);
|
|
64
|
-
getDashboardUrl(agentId: string): string;
|
|
65
|
-
private request;
|
|
66
|
-
private mockAgentFromInput;
|
|
67
|
-
createAgent(input: AgentCreateInput): Promise<ApiResult<AgentRecord>>;
|
|
68
|
-
updateAgent(agentId: string, input: AgentUpdateInput): Promise<ApiResult<AgentRecord>>;
|
|
69
|
-
getAgentStatus(agentId: string): Promise<ApiResult<AgentStatus>>;
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api-client.js
DELETED
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
const DEFAULT_API_BASE_URL = "https://api.speko.ai";
|
|
2
|
-
const DEFAULT_DASHBOARD_BASE_URL = "https://app.speko.ai";
|
|
3
|
-
function makeSyntheticId(prefix) {
|
|
4
|
-
const random = Math.random().toString(36).slice(2, 10);
|
|
5
|
-
return `${prefix}_${random}`;
|
|
6
|
-
}
|
|
7
|
-
function nowIso() {
|
|
8
|
-
return new Date().toISOString();
|
|
9
|
-
}
|
|
10
|
-
function normalizeAgentRecord(input, fallbackName, fallbackContext) {
|
|
11
|
-
const source = (input ?? {});
|
|
12
|
-
const id = typeof source.id === "string" ? source.id : makeSyntheticId("ag");
|
|
13
|
-
const createdAt = typeof source.created_at === "string"
|
|
14
|
-
? source.created_at
|
|
15
|
-
: typeof source.createdAt === "string"
|
|
16
|
-
? source.createdAt
|
|
17
|
-
: nowIso();
|
|
18
|
-
const updatedAt = typeof source.updated_at === "string"
|
|
19
|
-
? source.updated_at
|
|
20
|
-
: typeof source.updatedAt === "string"
|
|
21
|
-
? source.updatedAt
|
|
22
|
-
: createdAt;
|
|
23
|
-
return {
|
|
24
|
-
...source,
|
|
25
|
-
id,
|
|
26
|
-
name: typeof source.name === "string" ? source.name : fallbackName,
|
|
27
|
-
context: typeof source.context === "string" ? source.context : fallbackContext,
|
|
28
|
-
systemPrompt: typeof source.system_prompt === "string"
|
|
29
|
-
? source.system_prompt
|
|
30
|
-
: typeof source.systemPrompt === "string"
|
|
31
|
-
? source.systemPrompt
|
|
32
|
-
: "",
|
|
33
|
-
language: typeof source.language === "string" ? source.language : "auto",
|
|
34
|
-
priority: typeof source.priority === "string" ? source.priority : "quality",
|
|
35
|
-
greeting: typeof source.greeting === "string" ? source.greeting : undefined,
|
|
36
|
-
createdAt,
|
|
37
|
-
updatedAt,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function normalizeStatus(input, agentId) {
|
|
41
|
-
const source = (input ?? {});
|
|
42
|
-
const metrics = source.metrics ?? {};
|
|
43
|
-
const health = typeof source.health === "string"
|
|
44
|
-
? source.health
|
|
45
|
-
: typeof source.status === "string"
|
|
46
|
-
? source.status
|
|
47
|
-
: "unknown";
|
|
48
|
-
const recentCalls = typeof source.recent_calls === "number"
|
|
49
|
-
? source.recent_calls
|
|
50
|
-
: typeof source.recentCalls === "number"
|
|
51
|
-
? source.recentCalls
|
|
52
|
-
: typeof metrics.recent_calls === "number"
|
|
53
|
-
? metrics.recent_calls
|
|
54
|
-
: 0;
|
|
55
|
-
return {
|
|
56
|
-
...source,
|
|
57
|
-
agentId,
|
|
58
|
-
health,
|
|
59
|
-
recentCalls,
|
|
60
|
-
successRate: typeof source.success_rate === "number"
|
|
61
|
-
? source.success_rate
|
|
62
|
-
: typeof source.successRate === "number"
|
|
63
|
-
? source.successRate
|
|
64
|
-
: typeof metrics.success_rate === "number"
|
|
65
|
-
? metrics.success_rate
|
|
66
|
-
: undefined,
|
|
67
|
-
avgLatencyMs: typeof source.avg_latency_ms === "number"
|
|
68
|
-
? source.avg_latency_ms
|
|
69
|
-
: typeof source.avgLatencyMs === "number"
|
|
70
|
-
? source.avgLatencyMs
|
|
71
|
-
: typeof metrics.avg_latency_ms === "number"
|
|
72
|
-
? metrics.avg_latency_ms
|
|
73
|
-
: undefined,
|
|
74
|
-
mode: typeof source.mode === "string" ? source.mode : undefined,
|
|
75
|
-
provider: typeof source.provider === "string" ? source.provider : undefined,
|
|
76
|
-
lastCallAt: typeof source.last_call_at === "string"
|
|
77
|
-
? source.last_call_at
|
|
78
|
-
: typeof source.lastCallAt === "string"
|
|
79
|
-
? source.lastCallAt
|
|
80
|
-
: undefined,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
export class SpekoApiClient {
|
|
84
|
-
baseUrl;
|
|
85
|
-
dashboardBaseUrl;
|
|
86
|
-
apiKey;
|
|
87
|
-
fetchImpl;
|
|
88
|
-
mockMode;
|
|
89
|
-
allowMockFallback;
|
|
90
|
-
constructor(options = {}) {
|
|
91
|
-
this.baseUrl = (options.baseUrl ?? process.env.SPEKO_API_URL ?? DEFAULT_API_BASE_URL).replace(/\/+$/, "");
|
|
92
|
-
this.dashboardBaseUrl = (options.dashboardBaseUrl ?? process.env.SPEKO_DASHBOARD_URL ?? DEFAULT_DASHBOARD_BASE_URL).replace(/\/+$/, "");
|
|
93
|
-
this.apiKey =
|
|
94
|
-
options.apiKey ??
|
|
95
|
-
process.env.SPEKO_API_KEY ??
|
|
96
|
-
process.env.SPEKO_KEY ??
|
|
97
|
-
"";
|
|
98
|
-
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
99
|
-
this.mockMode = options.mockMode ?? (process.env.SPEKO_MCP_MOCK_API === "1" || !this.apiKey);
|
|
100
|
-
this.allowMockFallback = options.allowMockFallback ?? true;
|
|
101
|
-
}
|
|
102
|
-
getDashboardUrl(agentId) {
|
|
103
|
-
return `${this.dashboardBaseUrl}/agents/${agentId}`;
|
|
104
|
-
}
|
|
105
|
-
async request(path, init) {
|
|
106
|
-
const response = await this.fetchImpl(`${this.baseUrl}${path}`, {
|
|
107
|
-
...init,
|
|
108
|
-
headers: {
|
|
109
|
-
"Content-Type": "application/json",
|
|
110
|
-
...(this.apiKey ? { Authorization: `Bearer ${this.apiKey}` } : {}),
|
|
111
|
-
...(init.headers ?? {}),
|
|
112
|
-
},
|
|
113
|
-
});
|
|
114
|
-
if (!response.ok) {
|
|
115
|
-
const body = await response.text();
|
|
116
|
-
throw new Error(`Speko API ${response.status}: ${body || response.statusText}`);
|
|
117
|
-
}
|
|
118
|
-
if (response.status === 204) {
|
|
119
|
-
return {};
|
|
120
|
-
}
|
|
121
|
-
return (await response.json());
|
|
122
|
-
}
|
|
123
|
-
mockAgentFromInput(input, agentId = makeSyntheticId("ag")) {
|
|
124
|
-
return {
|
|
125
|
-
id: agentId,
|
|
126
|
-
name: "name" in input && typeof input.name === "string" ? input.name : `speko-agent-${agentId.slice(-6)}`,
|
|
127
|
-
context: typeof input.context === "string" ? input.context : "",
|
|
128
|
-
systemPrompt: typeof input.systemPrompt === "string" ? input.systemPrompt : "",
|
|
129
|
-
language: typeof input.language === "string" ? input.language : "auto",
|
|
130
|
-
priority: typeof input.priority === "string" ? input.priority : "quality",
|
|
131
|
-
greeting: typeof input.greeting === "string" ? input.greeting : undefined,
|
|
132
|
-
createdAt: nowIso(),
|
|
133
|
-
updatedAt: nowIso(),
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
async createAgent(input) {
|
|
137
|
-
if (this.mockMode) {
|
|
138
|
-
return {
|
|
139
|
-
data: this.mockAgentFromInput(input),
|
|
140
|
-
meta: {
|
|
141
|
-
mode: "mock",
|
|
142
|
-
baseUrl: this.baseUrl,
|
|
143
|
-
warning: "SPEKO_API_KEY is not set. Get your API key at https://app.speko.ai/",
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
const payload = {
|
|
148
|
-
name: input.name,
|
|
149
|
-
context: input.context,
|
|
150
|
-
system_prompt: input.systemPrompt,
|
|
151
|
-
language: input.language ?? "auto",
|
|
152
|
-
priority: input.priority ?? "quality",
|
|
153
|
-
greeting: input.greeting,
|
|
154
|
-
};
|
|
155
|
-
try {
|
|
156
|
-
const response = await this.request("/v1/agents", {
|
|
157
|
-
method: "POST",
|
|
158
|
-
body: JSON.stringify(payload),
|
|
159
|
-
});
|
|
160
|
-
const data = normalizeAgentRecord(response, input.name, input.context);
|
|
161
|
-
return {
|
|
162
|
-
data,
|
|
163
|
-
meta: {
|
|
164
|
-
mode: "live",
|
|
165
|
-
baseUrl: this.baseUrl,
|
|
166
|
-
},
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
if (!this.allowMockFallback) {
|
|
171
|
-
throw error;
|
|
172
|
-
}
|
|
173
|
-
return {
|
|
174
|
-
data: this.mockAgentFromInput(input),
|
|
175
|
-
meta: {
|
|
176
|
-
mode: "mock",
|
|
177
|
-
baseUrl: this.baseUrl,
|
|
178
|
-
warning: `Live API create failed. Returned synthetic agent. ${error.message}`,
|
|
179
|
-
},
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
async updateAgent(agentId, input) {
|
|
184
|
-
if (this.mockMode) {
|
|
185
|
-
return {
|
|
186
|
-
data: this.mockAgentFromInput(input, agentId),
|
|
187
|
-
meta: {
|
|
188
|
-
mode: "mock",
|
|
189
|
-
baseUrl: this.baseUrl,
|
|
190
|
-
warning: "SPEKO_API_KEY is not set. Get your API key at https://app.speko.ai/",
|
|
191
|
-
},
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
const payload = {
|
|
195
|
-
...(input.context !== undefined ? { context: input.context } : {}),
|
|
196
|
-
...(input.systemPrompt !== undefined ? { system_prompt: input.systemPrompt } : {}),
|
|
197
|
-
...(input.language !== undefined ? { language: input.language } : {}),
|
|
198
|
-
...(input.priority !== undefined ? { priority: input.priority } : {}),
|
|
199
|
-
...(input.greeting !== undefined ? { greeting: input.greeting } : {}),
|
|
200
|
-
};
|
|
201
|
-
try {
|
|
202
|
-
const response = await this.request(`/v1/agents/${agentId}`, {
|
|
203
|
-
method: "PATCH",
|
|
204
|
-
body: JSON.stringify(payload),
|
|
205
|
-
});
|
|
206
|
-
return {
|
|
207
|
-
data: normalizeAgentRecord(response, `speko-agent-${agentId.slice(-6)}`, input.context ?? ""),
|
|
208
|
-
meta: {
|
|
209
|
-
mode: "live",
|
|
210
|
-
baseUrl: this.baseUrl,
|
|
211
|
-
},
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
catch (error) {
|
|
215
|
-
if (!this.allowMockFallback) {
|
|
216
|
-
throw error;
|
|
217
|
-
}
|
|
218
|
-
return {
|
|
219
|
-
data: this.mockAgentFromInput(input, agentId),
|
|
220
|
-
meta: {
|
|
221
|
-
mode: "mock",
|
|
222
|
-
baseUrl: this.baseUrl,
|
|
223
|
-
warning: `Live API update failed. Returned synthetic update. ${error.message}`,
|
|
224
|
-
},
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
async getAgentStatus(agentId) {
|
|
229
|
-
if (this.mockMode) {
|
|
230
|
-
return {
|
|
231
|
-
data: {
|
|
232
|
-
agentId,
|
|
233
|
-
health: "unknown",
|
|
234
|
-
recentCalls: 0,
|
|
235
|
-
successRate: 1,
|
|
236
|
-
avgLatencyMs: 0,
|
|
237
|
-
mode: "unknown",
|
|
238
|
-
provider: "unknown",
|
|
239
|
-
},
|
|
240
|
-
meta: {
|
|
241
|
-
mode: "mock",
|
|
242
|
-
baseUrl: this.baseUrl,
|
|
243
|
-
warning: "SPEKO_API_KEY is not set. Get your API key at https://app.speko.ai/",
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
try {
|
|
248
|
-
const response = await this.request(`/v1/agents/${agentId}/status`, {
|
|
249
|
-
method: "GET",
|
|
250
|
-
});
|
|
251
|
-
return {
|
|
252
|
-
data: normalizeStatus(response, agentId),
|
|
253
|
-
meta: {
|
|
254
|
-
mode: "live",
|
|
255
|
-
baseUrl: this.baseUrl,
|
|
256
|
-
},
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
catch (statusError) {
|
|
260
|
-
if (!this.allowMockFallback) {
|
|
261
|
-
throw statusError;
|
|
262
|
-
}
|
|
263
|
-
return {
|
|
264
|
-
data: {
|
|
265
|
-
agentId,
|
|
266
|
-
health: "unknown",
|
|
267
|
-
recentCalls: 0,
|
|
268
|
-
successRate: 0,
|
|
269
|
-
avgLatencyMs: 0,
|
|
270
|
-
mode: "unknown",
|
|
271
|
-
provider: "unknown",
|
|
272
|
-
},
|
|
273
|
-
meta: {
|
|
274
|
-
mode: "mock",
|
|
275
|
-
baseUrl: this.baseUrl,
|
|
276
|
-
warning: `Live API status failed. Returned synthetic status. ${statusError.message}`,
|
|
277
|
-
},
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
//# sourceMappingURL=api-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { type BenchmarkEntry } from "../data/benchmarks.js";
|
|
2
|
-
export type ScoreWeights = {
|
|
3
|
-
latency: number;
|
|
4
|
-
quality: number;
|
|
5
|
-
cost: number;
|
|
6
|
-
};
|
|
7
|
-
export type ProviderCategory = "stt" | "llm" | "tts";
|
|
8
|
-
export type ParsedProviderModel = {
|
|
9
|
-
provider: string;
|
|
10
|
-
model?: string;
|
|
11
|
-
};
|
|
12
|
-
export type ParsedCombo = {
|
|
13
|
-
stt: ParsedProviderModel;
|
|
14
|
-
llm: ParsedProviderModel;
|
|
15
|
-
tts: ParsedProviderModel;
|
|
16
|
-
};
|
|
17
|
-
export declare const DEFAULT_WEIGHTS: ScoreWeights;
|
|
18
|
-
export declare const DATA_SOURCE_UPDATED_AT = "2026-02-15T00:00:00Z";
|
|
19
|
-
export type ToolOutputFormat = "markdown" | "json";
|
|
20
|
-
export declare function resolveLanguage(input: string): string | null;
|
|
21
|
-
export declare function getLanguageSuggestions(input: string): string[];
|
|
22
|
-
export declare function resolveProvider(input: string): string | null;
|
|
23
|
-
export declare function describeParsedCombo(combo: ParsedCombo): string;
|
|
24
|
-
export declare function parseComboMatches(combo: string): {
|
|
25
|
-
parsed: ParsedCombo;
|
|
26
|
-
entries: BenchmarkEntry[];
|
|
27
|
-
} | null;
|
|
28
|
-
export declare function getProviderModels(provider: string, category: ProviderCategory): string[];
|
|
29
|
-
export declare function isModelKnown(provider: string, category: ProviderCategory, model: string): boolean;
|
|
30
|
-
export declare function formatToolResponse(format: ToolOutputFormat, markdown: string, jsonPayload: unknown): {
|
|
31
|
-
content: Array<{
|
|
32
|
-
type: "text";
|
|
33
|
-
text: string;
|
|
34
|
-
}>;
|
|
35
|
-
};
|
|
36
|
-
export declare function listKnownProviders(category?: ProviderCategory): string[];
|
|
37
|
-
export declare function makeProviderMatch(input: string, provider: string): boolean;
|
|
38
|
-
export declare function getUseCaseWeights(useCase: string): ScoreWeights;
|
|
39
|
-
export declare function resolveUseCase(input: string): string;
|
|
40
|
-
export declare function getObjectiveWeights(optimizeFor: "balanced" | "latency" | "quality" | "cost", useCase: string): ScoreWeights;
|
|
41
|
-
export declare function rankBenchmarks(entries: BenchmarkEntry[], weights: ScoreWeights): Array<BenchmarkEntry & {
|
|
42
|
-
score: number;
|
|
43
|
-
}>;
|
|
44
|
-
export declare function clampMaxResults(value: number): number;
|
|
45
|
-
//# sourceMappingURL=benchmark-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark-utils.d.ts","sourceRoot":"","sources":["../../src/lib/benchmark-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACrD,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,mBAAmB,CAAC;IACzB,GAAG,EAAE,mBAAmB,CAAC;IACzB,GAAG,EAAE,mBAAmB,CAAC;CAC1B,CAAC;AAKF,eAAO,MAAM,eAAe,EAAE,YAAqD,CAAC;AACpF,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,CAAC;AA+EnD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuB5D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAU9D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D;AAuBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAI9D;AA2BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,GAAG,IAAI,CAgB1G;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAKxF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGjG;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,OAAO,GACnB;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CASpD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAGxE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI1E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAG/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBpD;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,EACxD,OAAO,EAAE,MAAM,GACd,YAAY,CAKd;AAaD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EAAE,EACzB,OAAO,EAAE,YAAY,GACpB,KAAK,CAAC,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAS3C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import { BENCHMARK_DATA, PROVIDER_INFO, SUPPORTED_LANGUAGES, USE_CASE_PRIORITIES, } from "../data/benchmarks.js";
|
|
2
|
-
const MAX_RESULTS = 10;
|
|
3
|
-
const MIN_PROVIDER_INPUT_LENGTH = 3;
|
|
4
|
-
const MIN_LANGUAGE_PREFIX_LENGTH = 3;
|
|
5
|
-
export const DEFAULT_WEIGHTS = { latency: 70, quality: 70, cost: 60 };
|
|
6
|
-
export const DATA_SOURCE_UPDATED_AT = "2026-02-15T00:00:00Z";
|
|
7
|
-
const LANGUAGE_ALIASES = {
|
|
8
|
-
english: ["en", "eng", "american", "us", "gb"],
|
|
9
|
-
thai: ["th", "thai", "thai language"],
|
|
10
|
-
vietnamese: ["vi", "viet", "vietnamese"],
|
|
11
|
-
indonesian: ["id", "ind"],
|
|
12
|
-
filipino: ["tl", "filipino", "tagalog", "ph"],
|
|
13
|
-
japanese: ["ja", "jp", "nihongo"],
|
|
14
|
-
korean: ["ko", "kr", "hangul", "korean"],
|
|
15
|
-
cantonese: ["zh-yue", "cantonese", "kantonees", "cn-cant"],
|
|
16
|
-
mandarin: ["zh", "zh-cn", "zh-hans", "mandarin"],
|
|
17
|
-
malay: ["ms", "ms-my", "malay"],
|
|
18
|
-
};
|
|
19
|
-
const PROVIDER_ALIASES = {
|
|
20
|
-
Deepgram: ["deepgram", "deep gram"],
|
|
21
|
-
AssemblyAI: ["assemblyai", "assembly ai", "assembly"],
|
|
22
|
-
OpenAI: ["openai", "open ai", "open-ai", "gpt", "chatgpt"],
|
|
23
|
-
Speechmatics: ["speechmatics", "speech-matics", "speech matics"],
|
|
24
|
-
Google: ["google", "gemini"],
|
|
25
|
-
Anthropic: ["anthropic", "claude", "claude ai"],
|
|
26
|
-
Groq: ["groq", "llama", "llama 4", "llama-4", "llama4"],
|
|
27
|
-
Cartesia: ["cartesia", "cartes ia"],
|
|
28
|
-
ElevenLabs: ["elevenlabs", "eleven labs", "eleven", "eleven-labs"],
|
|
29
|
-
PlayHT: ["playht", "play ht", "play-ht"],
|
|
30
|
-
Rime: ["rime", "rime ai"],
|
|
31
|
-
};
|
|
32
|
-
const USE_CASE_ALIASES = {
|
|
33
|
-
"customer-support": ["customer support", "support", "cs", "customer"],
|
|
34
|
-
sales: ["sale", "sales", "revenue"],
|
|
35
|
-
"debt-collections": ["debt collection", "collections", "collection", "collections team"],
|
|
36
|
-
scheduling: ["schedule", "calendar", "appointments", "booking"],
|
|
37
|
-
"healthcare-triage": ["healthcare", "medical", "triage", "doctor", "clinic"],
|
|
38
|
-
"insurance-claims": ["claims", "insurance", "insurance claim", "claims ops"],
|
|
39
|
-
"lead-qualification": ["lead qualify", "leads", "qualification", "lead"],
|
|
40
|
-
"appointment-reminders": ["reminder", "appointment", "notification", "nudge"],
|
|
41
|
-
"banking-faq": ["banking", "faq", "finance", "compliance"],
|
|
42
|
-
"recruitment-screening": ["recruiting", "recruitment", "screening", "hiring", "interviews"],
|
|
43
|
-
};
|
|
44
|
-
const ALL_PROVIDERS = Object.keys(PROVIDER_ALIASES);
|
|
45
|
-
const normalizeTerm = (value) => value.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim().replace(/\s+/g, " ");
|
|
46
|
-
const normalizeUseCase = (useCase) => normalizeTerm(useCase).replace(/\s+/g, "-");
|
|
47
|
-
const normalizeProviderInput = (input) => normalizeTerm(input);
|
|
48
|
-
const PROVIDER_ALIAS_CATALOG = Object.entries(PROVIDER_ALIASES)
|
|
49
|
-
.flatMap(([provider, aliases]) => {
|
|
50
|
-
const allAliases = [...new Set([provider, ...aliases].map(normalizeProviderInput))].filter(Boolean);
|
|
51
|
-
return allAliases.map((alias) => ({ provider, alias }));
|
|
52
|
-
})
|
|
53
|
-
.sort((a, b) => b.alias.length - a.alias.length);
|
|
54
|
-
function resolveProviderMatch(input) {
|
|
55
|
-
const normalized = normalizeProviderInput(input);
|
|
56
|
-
if (!normalized || normalized.length < MIN_PROVIDER_INPUT_LENGTH)
|
|
57
|
-
return null;
|
|
58
|
-
for (const candidate of PROVIDER_ALIAS_CATALOG) {
|
|
59
|
-
if (candidate.alias.length < MIN_PROVIDER_INPUT_LENGTH)
|
|
60
|
-
continue;
|
|
61
|
-
if (candidate.alias === normalized ||
|
|
62
|
-
candidate.alias.startsWith(normalized) ||
|
|
63
|
-
normalized.startsWith(`${candidate.alias} `)) {
|
|
64
|
-
return {
|
|
65
|
-
provider: candidate.provider,
|
|
66
|
-
matchedAlias: candidate.alias,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
export function resolveLanguage(input) {
|
|
73
|
-
const normalized = normalizeTerm(input);
|
|
74
|
-
if (!normalized)
|
|
75
|
-
return null;
|
|
76
|
-
const direct = SUPPORTED_LANGUAGES.find((lang) => normalizeTerm(lang) === normalized);
|
|
77
|
-
if (direct)
|
|
78
|
-
return direct;
|
|
79
|
-
const canonical = Object.keys(LANGUAGE_ALIASES).find((lang) => {
|
|
80
|
-
const aliases = LANGUAGE_ALIASES[lang];
|
|
81
|
-
return aliases.some((alias) => normalized === normalizeTerm(alias));
|
|
82
|
-
});
|
|
83
|
-
if (canonical) {
|
|
84
|
-
return SUPPORTED_LANGUAGES.find((lang) => normalizeTerm(lang) === canonical) ?? canonical;
|
|
85
|
-
}
|
|
86
|
-
if (normalized.length >= MIN_LANGUAGE_PREFIX_LENGTH) {
|
|
87
|
-
const startsWith = SUPPORTED_LANGUAGES.find((lang) => normalizeTerm(lang).startsWith(normalized) || normalized.startsWith(normalizeTerm(lang)));
|
|
88
|
-
if (startsWith)
|
|
89
|
-
return startsWith;
|
|
90
|
-
}
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
export function getLanguageSuggestions(input) {
|
|
94
|
-
const normalized = normalizeTerm(input);
|
|
95
|
-
if (!normalized)
|
|
96
|
-
return SUPPORTED_LANGUAGES.slice(0, 5);
|
|
97
|
-
const exact = SUPPORTED_LANGUAGES.filter((lang) => normalizeTerm(lang).includes(normalized) || normalized.includes(normalizeTerm(lang)));
|
|
98
|
-
const byAlias = SUPPORTED_LANGUAGES.filter((lang) => (LANGUAGE_ALIASES[normalizeTerm(lang)] ?? []).some((alias) => normalizeTerm(alias).includes(normalized)));
|
|
99
|
-
return [...new Set([...exact, ...byAlias])].slice(0, 5);
|
|
100
|
-
}
|
|
101
|
-
export function resolveProvider(input) {
|
|
102
|
-
const resolved = resolveProviderMatch(input);
|
|
103
|
-
return resolved ? resolved.provider : null;
|
|
104
|
-
}
|
|
105
|
-
function parseProviderWithModel(input) {
|
|
106
|
-
const normalized = normalizeProviderInput(input);
|
|
107
|
-
if (!normalized)
|
|
108
|
-
return null;
|
|
109
|
-
const resolved = resolveProviderMatch(input);
|
|
110
|
-
if (!resolved)
|
|
111
|
-
return null;
|
|
112
|
-
const normalizedRemainder = normalized.slice(resolved.matchedAlias.length).trim();
|
|
113
|
-
if (!normalizedRemainder)
|
|
114
|
-
return { provider: resolved.provider };
|
|
115
|
-
const originalTrimmed = input.trim();
|
|
116
|
-
const aliasWords = resolved.matchedAlias.split(/\s+/).length;
|
|
117
|
-
const inputWords = originalTrimmed.split(/\s+/);
|
|
118
|
-
const originalModel = inputWords.slice(aliasWords).join(" ").trim();
|
|
119
|
-
return {
|
|
120
|
-
provider: resolved.provider,
|
|
121
|
-
model: originalModel || normalizedRemainder,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
export function describeParsedCombo(combo) {
|
|
125
|
-
const stringifyPart = ({ provider, model }) => `${provider}${model ? ` ${model}` : ""}`;
|
|
126
|
-
return `${stringifyPart(combo.stt)} + ${stringifyPart(combo.llm)} + ${stringifyPart(combo.tts)}`;
|
|
127
|
-
}
|
|
128
|
-
function parseComboInput(desc) {
|
|
129
|
-
const parts = desc
|
|
130
|
-
.split(/\s*(?:\+|,|->)\s*/)
|
|
131
|
-
.map((part) => part.trim())
|
|
132
|
-
.filter(Boolean);
|
|
133
|
-
if (parts.length !== 3)
|
|
134
|
-
return null;
|
|
135
|
-
const [sttInput, llmInput, ttsInput] = parts;
|
|
136
|
-
const stt = parseProviderWithModel(sttInput);
|
|
137
|
-
const llm = parseProviderWithModel(llmInput);
|
|
138
|
-
const tts = parseProviderWithModel(ttsInput);
|
|
139
|
-
if (!stt || !llm || !tts)
|
|
140
|
-
return null;
|
|
141
|
-
return { stt, llm, tts };
|
|
142
|
-
}
|
|
143
|
-
function normalizeModel(model) {
|
|
144
|
-
return normalizeTerm(model).replace(/\s+/g, "-");
|
|
145
|
-
}
|
|
146
|
-
function modelMatches(modelA, modelB) {
|
|
147
|
-
return normalizeModel(modelA) === normalizeModel(modelB);
|
|
148
|
-
}
|
|
149
|
-
export function parseComboMatches(combo) {
|
|
150
|
-
const parsed = parseComboInput(combo);
|
|
151
|
-
if (!parsed)
|
|
152
|
-
return null;
|
|
153
|
-
const entries = BENCHMARK_DATA.filter((entry) => {
|
|
154
|
-
return (makeProviderMatch(parsed.stt.provider, entry.stt) &&
|
|
155
|
-
(!parsed.stt.model || modelMatches(entry.sttModel, parsed.stt.model)) &&
|
|
156
|
-
makeProviderMatch(parsed.llm.provider, entry.llm) &&
|
|
157
|
-
(!parsed.llm.model || modelMatches(entry.llmModel, parsed.llm.model)) &&
|
|
158
|
-
makeProviderMatch(parsed.tts.provider, entry.tts) &&
|
|
159
|
-
(!parsed.tts.model || modelMatches(entry.ttsModel, parsed.tts.model)));
|
|
160
|
-
});
|
|
161
|
-
return { parsed, entries };
|
|
162
|
-
}
|
|
163
|
-
export function getProviderModels(provider, category) {
|
|
164
|
-
const resolved = resolveProvider(provider);
|
|
165
|
-
if (!resolved)
|
|
166
|
-
return [];
|
|
167
|
-
const categoryMap = PROVIDER_INFO[category];
|
|
168
|
-
return categoryMap[resolved]?.models ?? [];
|
|
169
|
-
}
|
|
170
|
-
export function isModelKnown(provider, category, model) {
|
|
171
|
-
const supported = getProviderModels(provider, category);
|
|
172
|
-
return supported.some((knownModel) => modelMatches(knownModel, model));
|
|
173
|
-
}
|
|
174
|
-
export function formatToolResponse(format, markdown, jsonPayload) {
|
|
175
|
-
return {
|
|
176
|
-
content: [
|
|
177
|
-
{
|
|
178
|
-
type: "text",
|
|
179
|
-
text: format === "json" ? JSON.stringify(jsonPayload, null, 2) : markdown,
|
|
180
|
-
},
|
|
181
|
-
],
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
export function listKnownProviders(category) {
|
|
185
|
-
const providers = category ? Object.keys(PROVIDER_INFO[category]) : ALL_PROVIDERS;
|
|
186
|
-
return [...providers].sort((a, b) => a.localeCompare(b));
|
|
187
|
-
}
|
|
188
|
-
export function makeProviderMatch(input, provider) {
|
|
189
|
-
const normalizedInput = resolveProvider(input);
|
|
190
|
-
if (!normalizedInput)
|
|
191
|
-
return false;
|
|
192
|
-
return normalizeTerm(normalizedInput) === normalizeTerm(provider);
|
|
193
|
-
}
|
|
194
|
-
export function getUseCaseWeights(useCase) {
|
|
195
|
-
const normalizedUseCase = resolveUseCase(useCase);
|
|
196
|
-
return USE_CASE_PRIORITIES[normalizedUseCase] || DEFAULT_WEIGHTS;
|
|
197
|
-
}
|
|
198
|
-
export function resolveUseCase(input) {
|
|
199
|
-
const normalized = normalizeUseCase(input);
|
|
200
|
-
if (USE_CASE_PRIORITIES[normalized])
|
|
201
|
-
return normalized;
|
|
202
|
-
const direct = Object.entries(USE_CASE_ALIASES).find(([useCase, aliases]) => useCase === normalized ||
|
|
203
|
-
aliases.some((alias) => {
|
|
204
|
-
const normalizedAlias = normalizeUseCase(alias);
|
|
205
|
-
return (normalizedAlias === normalized ||
|
|
206
|
-
normalizedAlias.startsWith(normalized) ||
|
|
207
|
-
normalized.startsWith(normalizedAlias));
|
|
208
|
-
}));
|
|
209
|
-
return direct ? direct[0] : normalized;
|
|
210
|
-
}
|
|
211
|
-
export function getObjectiveWeights(optimizeFor, useCase) {
|
|
212
|
-
if (optimizeFor === "latency")
|
|
213
|
-
return { latency: 100, quality: 30, cost: 30 };
|
|
214
|
-
if (optimizeFor === "quality")
|
|
215
|
-
return { latency: 30, quality: 100, cost: 30 };
|
|
216
|
-
if (optimizeFor === "cost")
|
|
217
|
-
return { latency: 30, quality: 30, cost: 100 };
|
|
218
|
-
return getUseCaseWeights(useCase);
|
|
219
|
-
}
|
|
220
|
-
function scoreBenchmark(entry, weights) {
|
|
221
|
-
const latencyScore = Math.max(0, 100 - (entry.latencyMs - 100) * 0.5);
|
|
222
|
-
const qualityScore = (entry.quality / 5) * 100;
|
|
223
|
-
const costScore = Math.max(0, 100 - entry.costPerMin * 5000);
|
|
224
|
-
return Math.round(((latencyScore * weights.latency + qualityScore * weights.quality + costScore * weights.cost) /
|
|
225
|
-
(weights.latency + weights.quality + weights.cost)) *
|
|
226
|
-
10) / 10;
|
|
227
|
-
}
|
|
228
|
-
export function rankBenchmarks(entries, weights) {
|
|
229
|
-
return entries
|
|
230
|
-
.map((entry) => ({ ...entry, score: scoreBenchmark(entry, weights) }))
|
|
231
|
-
.sort((a, b) => {
|
|
232
|
-
if (b.score !== a.score)
|
|
233
|
-
return b.score - a.score;
|
|
234
|
-
if (a.latencyMs !== b.latencyMs)
|
|
235
|
-
return a.latencyMs - b.latencyMs;
|
|
236
|
-
if (b.quality !== a.quality)
|
|
237
|
-
return b.quality - a.quality;
|
|
238
|
-
return a.costPerMin - b.costPerMin;
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
export function clampMaxResults(value) {
|
|
242
|
-
return Math.max(1, Math.min(Math.floor(value), MAX_RESULTS));
|
|
243
|
-
}
|
|
244
|
-
//# sourceMappingURL=benchmark-utils.js.map
|