@mini-passy/sdk 0.1.3 → 0.1.5
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/discovery.d.ts.map +1 -1
- package/dist/discovery.js +15 -6
- package/dist/discovery.js.map +1 -1
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +93 -9
- package/dist/proxy.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -4
- package/dist/server.js.map +1 -1
- package/package.json +50 -50
- package/.env.example +0 -38
package/dist/discovery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAuD3C,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CA6Df"}
|
package/dist/discovery.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import nodeHttps from "node:https";
|
|
2
|
+
import nodeHttp from "node:http";
|
|
1
3
|
// Simple fetch wrapper using Node's https/http
|
|
2
4
|
function fetchWithTimeout(url, options) {
|
|
3
5
|
return new Promise((resolve, reject) => {
|
|
4
6
|
const urlObj = new URL(url);
|
|
5
7
|
const isHttps = urlObj.protocol === "https:";
|
|
6
|
-
const httpModule = isHttps ?
|
|
8
|
+
const httpModule = isHttps ? nodeHttps : nodeHttp;
|
|
7
9
|
const reqOptions = {
|
|
8
10
|
hostname: urlObj.hostname,
|
|
9
11
|
port: urlObj.port || (isHttps ? 443 : 80),
|
|
@@ -16,9 +18,12 @@ function fetchWithTimeout(url, options) {
|
|
|
16
18
|
let data = "";
|
|
17
19
|
res.on("data", (chunk) => (data += chunk));
|
|
18
20
|
res.on("end", () => {
|
|
19
|
-
|
|
20
|
-
if (
|
|
21
|
-
console.log(`[fetch] Response
|
|
21
|
+
// Only log in debug mode to reduce console spam
|
|
22
|
+
if (process.env.DEBUG_DISCOVERY) {
|
|
23
|
+
console.log(`[fetch] Response status: ${res.statusCode}, data length: ${data.length}`);
|
|
24
|
+
if (data.length > 0) {
|
|
25
|
+
console.log(`[fetch] Response preview: ${data.substring(0, 200)}`);
|
|
26
|
+
}
|
|
22
27
|
}
|
|
23
28
|
resolve({
|
|
24
29
|
ok: res.statusCode >= 200 && res.statusCode < 300,
|
|
@@ -27,11 +32,11 @@ function fetchWithTimeout(url, options) {
|
|
|
27
32
|
});
|
|
28
33
|
});
|
|
29
34
|
req.on("error", (err) => {
|
|
30
|
-
console
|
|
35
|
+
// Silently handle errors - no console spam
|
|
31
36
|
reject(err);
|
|
32
37
|
});
|
|
33
38
|
req.on("timeout", () => {
|
|
34
|
-
|
|
39
|
+
// Silently handle timeout - no console spam
|
|
35
40
|
req.destroy();
|
|
36
41
|
reject(new Error("Timeout"));
|
|
37
42
|
});
|
|
@@ -52,6 +57,10 @@ export async function discoverProviders(providers) {
|
|
|
52
57
|
provider.openai = true;
|
|
53
58
|
provider.models = data.data?.map((m) => m.id) || [];
|
|
54
59
|
console.log(`[${name}] ✓ OpenAI format, ${provider.models.length} models`);
|
|
60
|
+
// Log first 20 models for debugging
|
|
61
|
+
if (provider.models.length > 0) {
|
|
62
|
+
console.log(`[${name}] Models: ${provider.models.slice(0, 20).join(", ")}${provider.models.length > 20 ? "..." : ""}`);
|
|
63
|
+
}
|
|
55
64
|
}
|
|
56
65
|
else {
|
|
57
66
|
console.log(`[${name}] OpenAI format returned non-OK status`);
|
package/dist/discovery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAmMlD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAChC,GAAG,EAAE,IAAI,CAAC,cAAc,GACvB,IAAI,CA2DN"}
|
package/dist/proxy.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import https from "node:https";
|
|
2
2
|
import httpModule from "node:http";
|
|
3
|
-
// Connection pooling agents
|
|
3
|
+
// Connection pooling agents for upstream calls
|
|
4
4
|
const httpsAgent = new https.Agent({
|
|
5
5
|
keepAlive: true,
|
|
6
6
|
maxSockets: 50,
|
|
@@ -39,15 +39,99 @@ function proxyRequest(provider, path, body, format, res) {
|
|
|
39
39
|
headers,
|
|
40
40
|
};
|
|
41
41
|
const upstream = requestModule.request(options, (upRes) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
// Detect whether the client requested streaming and whether the upstream
|
|
43
|
+
// is already sending SSE. We want to:
|
|
44
|
+
// - passthrough real SSE streams from providers like OpenAI, and
|
|
45
|
+
// - convert single JSON responses into OpenAI-style SSE when stream=true.
|
|
46
|
+
const wantsStream = Boolean(body.stream);
|
|
47
|
+
const upstreamContentType = upRes.headers["content-type"] || "";
|
|
48
|
+
const upstreamIsSSE = upstreamContentType.includes("text/event-stream");
|
|
49
|
+
// Case 1: Upstream is already streaming (OpenAI-style SSE) or client did not request stream.
|
|
50
|
+
// In this case we just proxy the response as-is and keep headers simple.
|
|
51
|
+
if (upstreamIsSSE || !wantsStream) {
|
|
52
|
+
const isStreaming = upstreamIsSSE || wantsStream;
|
|
53
|
+
res.writeHead(upRes.statusCode || 200, {
|
|
54
|
+
"Content-Type": isStreaming ? "text/event-stream" : "application/json",
|
|
55
|
+
...(isStreaming && {
|
|
56
|
+
"Cache-Control": "no-cache",
|
|
57
|
+
Connection: "keep-alive",
|
|
58
|
+
}),
|
|
59
|
+
});
|
|
60
|
+
upRes.pipe(res);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Case 2: Client requested stream=true but upstream responded with a single JSON body.
|
|
64
|
+
// To keep IDEs like Cursor compatible, we transform the JSON response into
|
|
65
|
+
// an OpenAI chat.completion.chunk SSE stream with a final [DONE] sentinel.
|
|
66
|
+
const chunks = [];
|
|
67
|
+
upRes.on("data", (chunk) => {
|
|
68
|
+
chunks.push(chunk);
|
|
69
|
+
});
|
|
70
|
+
upRes.on("end", () => {
|
|
71
|
+
const statusCode = upRes.statusCode || 200;
|
|
72
|
+
const rawBody = Buffer.concat(chunks).toString("utf8");
|
|
73
|
+
try {
|
|
74
|
+
const completion = JSON.parse(rawBody);
|
|
75
|
+
const baseId = completion.id ?? `chatcmpl-${Date.now()}`;
|
|
76
|
+
const baseCreated = completion.created ?? Math.floor(Date.now() / 1000);
|
|
77
|
+
const baseModel = completion.model ??
|
|
78
|
+
body.model ??
|
|
79
|
+
provider.name;
|
|
80
|
+
const firstChoice = completion.choices?.[0];
|
|
81
|
+
const messageContent = firstChoice?.message?.content ?? rawBody;
|
|
82
|
+
const finishReason = firstChoice?.finish_reason ?? "stop";
|
|
83
|
+
// First SSE chunk: delta with assistant role and content.
|
|
84
|
+
const deltaChunk = {
|
|
85
|
+
id: baseId,
|
|
86
|
+
object: "chat.completion.chunk",
|
|
87
|
+
created: baseCreated,
|
|
88
|
+
model: baseModel,
|
|
89
|
+
choices: [
|
|
90
|
+
{
|
|
91
|
+
index: 0,
|
|
92
|
+
delta: {
|
|
93
|
+
role: "assistant",
|
|
94
|
+
content: messageContent,
|
|
95
|
+
},
|
|
96
|
+
finish_reason: null,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
// Second SSE chunk: finish event (empty delta, finish_reason + usage if present).
|
|
101
|
+
const finishChunk = {
|
|
102
|
+
id: baseId,
|
|
103
|
+
object: "chat.completion.chunk",
|
|
104
|
+
created: baseCreated,
|
|
105
|
+
model: baseModel,
|
|
106
|
+
choices: [
|
|
107
|
+
{
|
|
108
|
+
index: 0,
|
|
109
|
+
delta: {},
|
|
110
|
+
finish_reason: finishReason,
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
};
|
|
114
|
+
if (completion.usage) {
|
|
115
|
+
finishChunk.usage = completion.usage;
|
|
116
|
+
}
|
|
117
|
+
const ssePayload = `data: ${JSON.stringify(deltaChunk)}\n\n` +
|
|
118
|
+
`data: ${JSON.stringify(finishChunk)}\n\n` +
|
|
119
|
+
"data: [DONE]\n\n";
|
|
120
|
+
res.writeHead(statusCode, {
|
|
121
|
+
"Content-Type": "text/event-stream",
|
|
122
|
+
"Cache-Control": "no-cache",
|
|
123
|
+
Connection: "keep-alive",
|
|
124
|
+
});
|
|
125
|
+
res.end(ssePayload);
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
// If anything goes wrong during transformation, fall back to JSON
|
|
129
|
+
// so the client at least receives a valid response.
|
|
130
|
+
console.error(`[${provider.name}] Failed to transform JSON response to SSE:`, err);
|
|
131
|
+
res.writeHead(statusCode, { "Content-Type": "application/json" });
|
|
132
|
+
res.end(rawBody);
|
|
133
|
+
}
|
|
49
134
|
});
|
|
50
|
-
upRes.pipe(res);
|
|
51
135
|
});
|
|
52
136
|
upstream.on("error", (err) => {
|
|
53
137
|
console.error(`[${provider.name}] Upstream error:`, err.message);
|
package/dist/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,UAAU,MAAM,WAAW,CAAC;AAGnC
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AA4LA,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CA6B7C"}
|
package/dist/server.js
CHANGED
|
@@ -3,6 +3,7 @@ import { loadEnv } from "./env.js";
|
|
|
3
3
|
import { discoverProviders } from "./discovery.js";
|
|
4
4
|
import { proxyWithFallback } from "./proxy.js";
|
|
5
5
|
const MAX_BODY_SIZE = 10 * 1024 * 1024; // 10MB
|
|
6
|
+
// API Key Validation - removed, now handled inline in createRequestHandler
|
|
6
7
|
function parseBody(req) {
|
|
7
8
|
return new Promise((resolve, reject) => {
|
|
8
9
|
const chunks = [];
|
|
@@ -37,12 +38,12 @@ function sendError(res, message, status = 500, code) {
|
|
|
37
38
|
error.code = code;
|
|
38
39
|
sendJson(res, error, status);
|
|
39
40
|
}
|
|
40
|
-
function createRequestHandler(env) {
|
|
41
|
+
function createRequestHandler(env, authKey) {
|
|
41
42
|
return async function handleRequest(req, res) {
|
|
42
43
|
const path = req.url || "/";
|
|
43
44
|
const method = req.method || "GET";
|
|
44
45
|
try {
|
|
45
|
-
// Health check
|
|
46
|
+
// Health check (no auth required)
|
|
46
47
|
if (path === "/health" && method === "GET") {
|
|
47
48
|
return sendJson(res, {
|
|
48
49
|
status: "ok",
|
|
@@ -55,7 +56,7 @@ function createRequestHandler(env) {
|
|
|
55
56
|
aliases: Array.from(env.aliases.keys()),
|
|
56
57
|
});
|
|
57
58
|
}
|
|
58
|
-
// List models (
|
|
59
|
+
// List models (no auth required)
|
|
59
60
|
if (path === "/v1/models" && method === "GET") {
|
|
60
61
|
const data = Array.from(env.aliases.values()).map((alias) => ({
|
|
61
62
|
id: alias.name,
|
|
@@ -65,6 +66,17 @@ function createRequestHandler(env) {
|
|
|
65
66
|
}));
|
|
66
67
|
return sendJson(res, { object: "list", data });
|
|
67
68
|
}
|
|
69
|
+
// API Key Validation for protected endpoints (only if AUTH_KEY is set)
|
|
70
|
+
if (authKey) {
|
|
71
|
+
const authHeader = req.headers["authorization"];
|
|
72
|
+
const token = authHeader?.replace("Bearer ", "");
|
|
73
|
+
if (!token) {
|
|
74
|
+
return sendError(res, "Missing API key. Provide Authorization: Bearer <token> header.", 401, "missing_api_key");
|
|
75
|
+
}
|
|
76
|
+
if (token !== authKey) {
|
|
77
|
+
return sendError(res, "Invalid API key", 401, "invalid_api_key");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
68
80
|
// Chat completions
|
|
69
81
|
if (path === "/v1/chat/completions" && method === "POST") {
|
|
70
82
|
const rawBody = await parseBody(req);
|
|
@@ -118,10 +130,12 @@ function createRequestHandler(env) {
|
|
|
118
130
|
};
|
|
119
131
|
}
|
|
120
132
|
export async function startServer(port) {
|
|
133
|
+
// Security: Get PASSY_AUTH_KEY from environment (optional - if not set, no auth required)
|
|
134
|
+
const AUTH_KEY = process.env.PASSY_AUTH_KEY;
|
|
121
135
|
// Load environment and discover providers
|
|
122
136
|
const env = loadEnv();
|
|
123
137
|
await discoverProviders(env.providers);
|
|
124
|
-
const server = http.createServer(createRequestHandler(env));
|
|
138
|
+
const server = http.createServer(createRequestHandler(env, AUTH_KEY));
|
|
125
139
|
return new Promise((resolve, reject) => {
|
|
126
140
|
server.on("error", (err) => {
|
|
127
141
|
reject(err);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAE/C,SAAS,SAAS,CAAC,GAAyB;IAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC/B,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;YAC1B,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,GAAwB,EAAE,IAAa,EAAE,MAAM,GAAG,GAAG;IACrE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,SAAS,CAChB,GAAwB,EACxB,OAAe,EACf,MAAM,GAAG,GAAG,EACZ,IAAa;IAEb,MAAM,KAAK,GAAqC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACnE,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAc;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
2
|
+
"name": "@mini-passy/sdk",
|
|
3
|
+
"version": "0.1.5",
|
|
4
|
+
"description": "Lightweight AI gateway SDK for routing LLM requests",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
".env.example"
|
|
15
|
+
],
|
|
16
|
+
"bin": {
|
|
17
|
+
"mini-passy": "dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc -p tsconfig.build.json",
|
|
21
|
+
"clean": "rm -rf dist",
|
|
22
|
+
"dev": "tsx src/index.ts",
|
|
23
|
+
"start": "node dist/index.js",
|
|
24
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18.0.0"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"dotenv": "^16.4.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/node": "^20.0.0",
|
|
34
|
+
"tsx": "^4.0.0",
|
|
35
|
+
"typescript": "^5.0.0"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"ai",
|
|
39
|
+
"llm",
|
|
40
|
+
"gateway",
|
|
41
|
+
"openai",
|
|
42
|
+
"anthropic",
|
|
43
|
+
"proxy",
|
|
44
|
+
"routing"
|
|
45
|
+
],
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "git+https://github.com/svliantiss/mini-passy.git"
|
|
50
|
+
}
|
|
51
|
+
}
|
package/.env.example
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Mini-Passy Environment Configuration
|
|
2
|
-
# Copy this file to .env and fill in your API keys
|
|
3
|
-
|
|
4
|
-
# Provider Configuration
|
|
5
|
-
# Format: PROVIDER_{NAME}_URL and PROVIDER_{NAME}_KEY
|
|
6
|
-
# The {NAME} can be any identifier (lowercase recommended)
|
|
7
|
-
|
|
8
|
-
PROVIDER_OPENAI_URL=https://api.openai.com
|
|
9
|
-
PROVIDER_OPENAI_KEY=sk-your-openai-key-here
|
|
10
|
-
|
|
11
|
-
PROVIDER_ANTHROPIC_URL=https://api.anthropic.com
|
|
12
|
-
PROVIDER_ANTHROPIC_KEY=sk-your-anthropic-key-here
|
|
13
|
-
|
|
14
|
-
# Example: Add Nebius provider
|
|
15
|
-
# PROVIDER_NEBIUS_URL=https://api.studio.nebius.ai
|
|
16
|
-
# PROVIDER_NEBIUS_KEY=your-nebius-key-here
|
|
17
|
-
|
|
18
|
-
# Model Aliases
|
|
19
|
-
# Format: ALIAS_{NAME}=provider:model
|
|
20
|
-
# Use the provider name from above (lowercase)
|
|
21
|
-
|
|
22
|
-
ALIAS_GPT4O=openai:gpt-4o
|
|
23
|
-
ALIAS_GPT4O_MINI=openai:gpt-4o-mini
|
|
24
|
-
ALIAS_CLAUDE_HAIKU=anthropic:claude-3-haiku-20240307
|
|
25
|
-
ALIAS_CLAUDE_SONNET=anthropic:claude-3-sonnet-20240229
|
|
26
|
-
|
|
27
|
-
# Example: Add alias for Nebius model
|
|
28
|
-
# ALIAS_LLAMA70B=nebius:meta-llama/Meta-Llama-3.1-70B-Instruct
|
|
29
|
-
|
|
30
|
-
# Fallback Configuration (optional)
|
|
31
|
-
# Format: ALIAS_{NAME}_FALLBACK=provider1,provider2
|
|
32
|
-
# If the primary provider fails, it will try these in order
|
|
33
|
-
|
|
34
|
-
# Example: Try nebius first, fall back to deepinfra
|
|
35
|
-
# ALIAS_LLAMA70B_FALLBACK=deepinfra
|
|
36
|
-
|
|
37
|
-
# Server Configuration
|
|
38
|
-
PORT=3333
|