@relayplane/proxy 0.2.1 → 1.1.1
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/dist/__tests__/model-suggestions.test.d.ts +2 -0
- package/dist/__tests__/model-suggestions.test.d.ts.map +1 -0
- package/dist/__tests__/model-suggestions.test.js +67 -0
- package/dist/__tests__/model-suggestions.test.js.map +1 -0
- package/dist/__tests__/routing-aliases.test.d.ts +2 -0
- package/dist/__tests__/routing-aliases.test.d.ts.map +1 -0
- package/dist/__tests__/routing-aliases.test.js +81 -0
- package/dist/__tests__/routing-aliases.test.js.map +1 -0
- package/dist/cli.js +0 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +637 -0
- package/dist/server.js.map +1 -0
- package/dist/standalone-proxy.d.ts +22 -0
- package/dist/standalone-proxy.d.ts.map +1 -1
- package/dist/standalone-proxy.js +121 -11
- package/dist/standalone-proxy.js.map +1 -1
- package/dist/{brain-client.d.ts → swarm-client.d.ts} +8 -8
- package/dist/{brain-client.d.ts.map → swarm-client.d.ts.map} +1 -1
- package/dist/{brain-client.js → swarm-client.js} +7 -7
- package/dist/{brain-client.js.map → swarm-client.js.map} +1 -1
- package/dist/utils/model-suggestions.d.ts +28 -0
- package/dist/utils/model-suggestions.d.ts.map +1 -0
- package/dist/utils/model-suggestions.js +50 -0
- package/dist/utils/model-suggestions.js.map +1 -0
- package/package.json +16 -14
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Swarm API Client
|
|
3
3
|
*
|
|
4
|
-
* Calls the RelayPlane
|
|
4
|
+
* Calls the RelayPlane Swarm API for intelligent routing decisions.
|
|
5
5
|
* Only used for Pro/Trial users with valid API keys.
|
|
6
6
|
*
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
|
-
* Route request to
|
|
10
|
+
* Route request to Swarm API
|
|
11
11
|
*/
|
|
12
12
|
export interface BrainRouteRequest {
|
|
13
13
|
taskType: string;
|
|
@@ -21,7 +21,7 @@ export interface BrainRouteRequest {
|
|
|
21
21
|
prioritizeQuality?: boolean;
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
* Route response from
|
|
24
|
+
* Route response from Swarm API
|
|
25
25
|
*/
|
|
26
26
|
export interface BrainRouteResponse {
|
|
27
27
|
success: boolean;
|
|
@@ -59,7 +59,7 @@ export declare function getApiKey(): string | null;
|
|
|
59
59
|
*/
|
|
60
60
|
export declare function setApiKey(apiKey: string): void;
|
|
61
61
|
/**
|
|
62
|
-
* Get routing recommendation from
|
|
62
|
+
* Get routing recommendation from Swarm API
|
|
63
63
|
*
|
|
64
64
|
* Falls back to static routing if Brain is unavailable.
|
|
65
65
|
*/
|
|
@@ -67,7 +67,7 @@ export declare function getRouteRecommendation(request: BrainRouteRequest): Prom
|
|
|
67
67
|
/**
|
|
68
68
|
* Get routing recommendation for a request
|
|
69
69
|
*
|
|
70
|
-
* Analyzes the request and calls
|
|
70
|
+
* Analyzes the request and calls Swarm API to get the optimal model.
|
|
71
71
|
*/
|
|
72
72
|
export declare function getBrainRouting(inputTokens: number, outputTokens: number, currentModel: string, hasTools?: boolean, hasVision?: boolean): Promise<{
|
|
73
73
|
model: string;
|
|
@@ -75,7 +75,7 @@ export declare function getBrainRouting(inputTokens: number, outputTokens: numbe
|
|
|
75
75
|
isBrain: boolean;
|
|
76
76
|
}>;
|
|
77
77
|
/**
|
|
78
|
-
* Get provider status from
|
|
78
|
+
* Get provider status from Swarm API
|
|
79
79
|
*/
|
|
80
80
|
export declare function getProviderStatus(): Promise<Array<{
|
|
81
81
|
provider: string;
|
|
@@ -84,4 +84,4 @@ export declare function getProviderStatus(): Promise<Array<{
|
|
|
84
84
|
latencyP99Ms: number;
|
|
85
85
|
successRate: number;
|
|
86
86
|
}> | null>;
|
|
87
|
-
//# sourceMappingURL=
|
|
87
|
+
//# sourceMappingURL=swarm-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"swarm-client.d.ts","sourceRoot":"","sources":["../src/swarm-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;YAC5C,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;QACH,WAAW,CAAC,EAAE;YACZ,sBAAsB,EAAE,MAAM,CAAC;YAC/B,iBAAiB,EAAE,MAAM,CAAC;SAC3B,CAAC;KACH,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAQxC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAWzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAmB9C;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAwCpC;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,QAAQ,GAAE,OAAe,EACzB,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA4B9D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,GAAG,IAAI,CAAC,CAwBT"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Swarm API Client
|
|
4
4
|
*
|
|
5
|
-
* Calls the RelayPlane
|
|
5
|
+
* Calls the RelayPlane Swarm API for intelligent routing decisions.
|
|
6
6
|
* Only used for Pro/Trial users with valid API keys.
|
|
7
7
|
*
|
|
8
8
|
* @packageDocumentation
|
|
@@ -103,7 +103,7 @@ function setApiKey(apiKey) {
|
|
|
103
103
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
* Get routing recommendation from
|
|
106
|
+
* Get routing recommendation from Swarm API
|
|
107
107
|
*
|
|
108
108
|
* Falls back to static routing if Brain is unavailable.
|
|
109
109
|
*/
|
|
@@ -148,12 +148,12 @@ async function getRouteRecommendation(request) {
|
|
|
148
148
|
/**
|
|
149
149
|
* Get routing recommendation for a request
|
|
150
150
|
*
|
|
151
|
-
* Analyzes the request and calls
|
|
151
|
+
* Analyzes the request and calls Swarm API to get the optimal model.
|
|
152
152
|
*/
|
|
153
153
|
async function getBrainRouting(inputTokens, outputTokens, currentModel, hasTools = false, hasVision = false) {
|
|
154
154
|
// Infer task type
|
|
155
155
|
const taskType = (0, telemetry_js_1.inferTaskType)(inputTokens, outputTokens, currentModel, hasTools);
|
|
156
|
-
// Try
|
|
156
|
+
// Try Swarm API
|
|
157
157
|
const brainResponse = await getRouteRecommendation({
|
|
158
158
|
taskType,
|
|
159
159
|
estimatedInputTokens: inputTokens,
|
|
@@ -177,7 +177,7 @@ async function getBrainRouting(inputTokens, outputTokens, currentModel, hasTools
|
|
|
177
177
|
};
|
|
178
178
|
}
|
|
179
179
|
/**
|
|
180
|
-
* Get provider status from
|
|
180
|
+
* Get provider status from Swarm API
|
|
181
181
|
*/
|
|
182
182
|
async function getProviderStatus() {
|
|
183
183
|
if (!hasBrainAccess()) {
|
|
@@ -202,4 +202,4 @@ async function getProviderStatus() {
|
|
|
202
202
|
return null;
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
|
-
//# sourceMappingURL=
|
|
205
|
+
//# sourceMappingURL=swarm-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"swarm-client.js","sourceRoot":"","sources":["../src/swarm-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model suggestion utilities for improved error messages
|
|
3
|
+
*
|
|
4
|
+
* Uses Levenshtein distance to suggest similar model names when a
|
|
5
|
+
* requested model doesn't exist.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Suggest similar models based on Levenshtein distance
|
|
9
|
+
*
|
|
10
|
+
* @param requested - The model name that was requested but not found
|
|
11
|
+
* @param available - List of available/valid model names
|
|
12
|
+
* @param max - Maximum number of suggestions to return (default: 3)
|
|
13
|
+
* @returns Array of suggested model names, sorted by similarity
|
|
14
|
+
*/
|
|
15
|
+
export declare function suggestModels(requested: string, available: string[], max?: number): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Build an error response for model-not-found errors with suggestions
|
|
18
|
+
*
|
|
19
|
+
* @param requestedModel - The model name that was requested
|
|
20
|
+
* @param availableModels - List of available model names
|
|
21
|
+
* @returns Error response object with suggestions
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildModelNotFoundError(requestedModel: string, availableModels: string[]): {
|
|
24
|
+
error: string;
|
|
25
|
+
suggestions?: string[];
|
|
26
|
+
hint?: string;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=model-suggestions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-suggestions.d.ts","sourceRoot":"","sources":["../../src/utils/model-suggestions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAAE,EACnB,GAAG,SAAI,GACN,MAAM,EAAE,CAYV;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EAAE,GACxB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAiBA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Model suggestion utilities for improved error messages
|
|
4
|
+
*
|
|
5
|
+
* Uses Levenshtein distance to suggest similar model names when a
|
|
6
|
+
* requested model doesn't exist.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.suggestModels = suggestModels;
|
|
10
|
+
exports.buildModelNotFoundError = buildModelNotFoundError;
|
|
11
|
+
const fastest_levenshtein_1 = require("fastest-levenshtein");
|
|
12
|
+
/**
|
|
13
|
+
* Suggest similar models based on Levenshtein distance
|
|
14
|
+
*
|
|
15
|
+
* @param requested - The model name that was requested but not found
|
|
16
|
+
* @param available - List of available/valid model names
|
|
17
|
+
* @param max - Maximum number of suggestions to return (default: 3)
|
|
18
|
+
* @returns Array of suggested model names, sorted by similarity
|
|
19
|
+
*/
|
|
20
|
+
function suggestModels(requested, available, max = 3) {
|
|
21
|
+
const requestedLower = requested.toLowerCase();
|
|
22
|
+
return available
|
|
23
|
+
.map((model) => ({
|
|
24
|
+
model,
|
|
25
|
+
dist: (0, fastest_levenshtein_1.distance)(requestedLower, model.toLowerCase()),
|
|
26
|
+
}))
|
|
27
|
+
.filter(({ dist }) => dist <= 4) // Within 4 edits
|
|
28
|
+
.sort((a, b) => a.dist - b.dist)
|
|
29
|
+
.slice(0, max)
|
|
30
|
+
.map(({ model }) => model);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build an error response for model-not-found errors with suggestions
|
|
34
|
+
*
|
|
35
|
+
* @param requestedModel - The model name that was requested
|
|
36
|
+
* @param availableModels - List of available model names
|
|
37
|
+
* @returns Error response object with suggestions
|
|
38
|
+
*/
|
|
39
|
+
function buildModelNotFoundError(requestedModel, availableModels) {
|
|
40
|
+
const suggestions = suggestModels(requestedModel, availableModels);
|
|
41
|
+
const response = {
|
|
42
|
+
error: `Model '${requestedModel}' does not exist`,
|
|
43
|
+
};
|
|
44
|
+
if (suggestions.length > 0) {
|
|
45
|
+
response.suggestions = suggestions;
|
|
46
|
+
response.hint = `Did you mean '${suggestions[0]}'?`;
|
|
47
|
+
}
|
|
48
|
+
return response;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=model-suggestions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-suggestions.js","sourceRoot":"","sources":["../../src/utils/model-suggestions.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAYH,sCAgBC;AASD,0DAwBC;AA3DD,6DAA+C;AAE/C;;;;;;;GAOG;AACH,SAAgB,aAAa,CAC3B,SAAiB,EACjB,SAAmB,EACnB,GAAG,GAAG,CAAC;IAEP,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAE/C,OAAO,SAAS;SACb,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,KAAK;QACL,IAAI,EAAE,IAAA,8BAAQ,EAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;KACpD,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,iBAAiB;SACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;SAC/B,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACb,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,uBAAuB,CACrC,cAAsB,EACtB,eAAyB;IAMzB,MAAM,WAAW,GAAG,aAAa,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAEnE,MAAM,QAAQ,GAIV;QACF,KAAK,EAAE,UAAU,cAAc,kBAAkB;KAClD,CAAC;IAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;QACnC,QAAQ,CAAC,IAAI,GAAG,iBAAiB,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@relayplane/proxy",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "RelayPlane proxy server - intelligent AI model routing with observability",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
8
8
|
"relayplane-proxy": "dist/cli.js"
|
|
9
9
|
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"start": "node dist/cli.js",
|
|
14
|
+
"test": "vitest run",
|
|
15
|
+
"test:watch": "vitest",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
10
18
|
"keywords": [
|
|
11
19
|
"relayplane",
|
|
12
20
|
"ai",
|
|
@@ -23,14 +31,15 @@
|
|
|
23
31
|
"author": "RelayPlane",
|
|
24
32
|
"license": "MIT",
|
|
25
33
|
"dependencies": {
|
|
26
|
-
"@relayplane/core": "^0.1.1"
|
|
34
|
+
"@relayplane/core": "^0.1.1",
|
|
35
|
+
"fastest-levenshtein": "^1.0.16"
|
|
27
36
|
},
|
|
28
37
|
"optionalDependencies": {
|
|
29
|
-
"@relayplane/ledger": "^0.1.0",
|
|
30
38
|
"@relayplane/auth-gate": "^0.1.0",
|
|
39
|
+
"@relayplane/explainability": "^0.1.0",
|
|
40
|
+
"@relayplane/ledger": "^0.1.0",
|
|
31
41
|
"@relayplane/policy-engine": "^0.1.0",
|
|
32
|
-
"@relayplane/routing-engine": "^0.1.0"
|
|
33
|
-
"@relayplane/explainability": "^0.1.0"
|
|
42
|
+
"@relayplane/routing-engine": "^0.1.0"
|
|
34
43
|
},
|
|
35
44
|
"devDependencies": {
|
|
36
45
|
"typescript": "^5.3.3",
|
|
@@ -45,12 +54,5 @@
|
|
|
45
54
|
"files": [
|
|
46
55
|
"dist",
|
|
47
56
|
"README.md"
|
|
48
|
-
]
|
|
49
|
-
|
|
50
|
-
"build": "tsc",
|
|
51
|
-
"dev": "tsc --watch",
|
|
52
|
-
"start": "node dist/cli.js",
|
|
53
|
-
"test": "vitest run",
|
|
54
|
-
"test:watch": "vitest"
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
+
]
|
|
58
|
+
}
|