opencode-pollinations-plugin 5.3.1 → 5.3.3
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/index.js +20 -71
- package/dist/server/proxy.js +11 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -15,61 +15,19 @@ function log(msg) {
|
|
|
15
15
|
catch (e) { }
|
|
16
16
|
}
|
|
17
17
|
const TRACKING_PORT = 10001;
|
|
18
|
-
// ===
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const output = execSync(`netstat -ano | findstr :${port}`).toString();
|
|
27
|
-
const lines = output.trim().split('\n');
|
|
28
|
-
for (const line of lines) {
|
|
29
|
-
const parts = line.trim().split(/\s+/);
|
|
30
|
-
const pid = parts[parts.length - 1];
|
|
31
|
-
if (pid && /^\d+$/.test(pid) && pid !== '0') {
|
|
32
|
-
try {
|
|
33
|
-
execSync(`taskkill /PID ${pid} /F`);
|
|
34
|
-
log(`[Init] Killed Windows PID ${pid} on port ${port}`);
|
|
35
|
-
}
|
|
36
|
-
catch (e) { }
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
catch (e) { }
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
// Linux / macOS: lsof or fuser
|
|
44
|
-
try {
|
|
45
|
-
// Try lsof first (Cleaner)
|
|
46
|
-
const pid = execSync(`lsof -t -i:${port}`).toString().trim();
|
|
47
|
-
if (pid) {
|
|
48
|
-
execSync(`kill -9 ${pid}`);
|
|
49
|
-
log(`[Init] Killed PID ${pid} via lsof`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
catch (e) {
|
|
53
|
-
// Fallback to fuser (Linux specific but very effective)
|
|
54
|
-
if (process.platform === 'linux') {
|
|
55
|
-
try {
|
|
56
|
-
execSync(`fuser -k ${port}/tcp`);
|
|
57
|
-
log(`[Init] Cleaned port ${port} via fuser`);
|
|
58
|
-
}
|
|
59
|
-
catch (e2) { }
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch (e) {
|
|
65
|
-
// Ignored: Port likely already free
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
// === GESTION DU CYCLE DE VIE PROXY ===
|
|
18
|
+
// === ANTI-ZOMBIE (LINUX/MAC LEGACY STABLE) ===
|
|
19
|
+
try {
|
|
20
|
+
log(`[Init] Cleaning port ${TRACKING_PORT}...`);
|
|
21
|
+
execSync(`fuser -k ${TRACKING_PORT}/tcp || true`);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
// Ignore on non-Linux or if no process found
|
|
25
|
+
}
|
|
69
26
|
const startProxy = () => {
|
|
70
|
-
return new Promise(
|
|
27
|
+
return new Promise((resolve) => {
|
|
71
28
|
const server = http.createServer(async (req, res) => {
|
|
72
|
-
// ... (Request Handling
|
|
29
|
+
// ... (Request Handling) ...
|
|
30
|
+
// We reuse the existing logic structure but simplified startup
|
|
73
31
|
log(`[Proxy] Request: ${req.method} ${req.url}`);
|
|
74
32
|
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
75
33
|
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
@@ -84,7 +42,7 @@ const startProxy = () => {
|
|
|
84
42
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
85
43
|
res.end(JSON.stringify({
|
|
86
44
|
status: "ok",
|
|
87
|
-
version: "v5.3.
|
|
45
|
+
version: "v5.3.2",
|
|
88
46
|
mode: config.mode
|
|
89
47
|
}));
|
|
90
48
|
return;
|
|
@@ -111,29 +69,20 @@ const startProxy = () => {
|
|
|
111
69
|
res.writeHead(404);
|
|
112
70
|
res.end("Not Found");
|
|
113
71
|
});
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
});
|
|
120
|
-
server.on('error', (e) => {
|
|
121
|
-
log(`[Proxy] Fatal Bind Error: ${e}`);
|
|
122
|
-
resolve(0);
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
catch (e) {
|
|
72
|
+
server.listen(TRACKING_PORT, '127.0.0.1', () => {
|
|
73
|
+
log(`[Proxy] Started V5.3.2 (Legacy Port Logic) on port ${TRACKING_PORT}`);
|
|
74
|
+
resolve(TRACKING_PORT);
|
|
75
|
+
});
|
|
76
|
+
server.on('error', (e) => {
|
|
77
|
+
log(`[Proxy] Fatal Error: ${e}`);
|
|
126
78
|
resolve(0);
|
|
127
|
-
}
|
|
79
|
+
});
|
|
128
80
|
});
|
|
129
81
|
};
|
|
130
82
|
// === PLUGIN EXPORT ===
|
|
131
83
|
export const PollinationsPlugin = async (ctx) => {
|
|
132
|
-
log("Plugin Initializing V5.2
|
|
84
|
+
log("Plugin Initializing V5.3.2 (Rollback)...");
|
|
133
85
|
// START PROXY
|
|
134
|
-
// 1. Force Clean Port
|
|
135
|
-
freePort(TRACKING_PORT);
|
|
136
|
-
// 2. Start
|
|
137
86
|
const port = await startProxy();
|
|
138
87
|
const localBaseUrl = `http://127.0.0.1:${port}/v1`;
|
|
139
88
|
setGlobalClient(ctx.client);
|
package/dist/server/proxy.js
CHANGED
|
@@ -303,7 +303,11 @@ export async function handleChatCompletion(req, res, bodyRaw) {
|
|
|
303
303
|
delete proxyBody.stream_options;
|
|
304
304
|
// 3.6 STOP SEQUENCES (Prevent Looping - CRITICAL FIX)
|
|
305
305
|
// Inject explicit stop sequences to prevent "User:" hallucinations
|
|
306
|
-
|
|
306
|
+
// 3.6 STOP SEQUENCES (Prevent Looping - CRITICAL FIX)
|
|
307
|
+
// Inject explicit stop sequences to prevent "User:" hallucinations
|
|
308
|
+
// EXCEPTION: Azure OpenAI o1-preview/mini models do NOT support 'stop' param.
|
|
309
|
+
const isAzureO1 = actualModel.includes("o1") || actualModel.includes("azure");
|
|
310
|
+
if (!proxyBody.stop && !isAzureO1) {
|
|
307
311
|
proxyBody.stop = ["\nUser:", "\nModel:", "User:", "Model:"];
|
|
308
312
|
}
|
|
309
313
|
// 3.5 PREPARE SIGNATURE HASHING
|
|
@@ -327,6 +331,12 @@ export async function handleChatCompletion(req, res, bodyRaw) {
|
|
|
327
331
|
// A. AZURE/OPENAI FIXES
|
|
328
332
|
if (actualModel.includes("gpt") || actualModel.includes("openai") || actualModel.includes("azure")) {
|
|
329
333
|
proxyBody.tools = truncateTools(proxyBody.tools, 120);
|
|
334
|
+
if (actualModel.includes("o1") || actualModel.includes("azure")) {
|
|
335
|
+
if (proxyBody.stop)
|
|
336
|
+
delete proxyBody.stop; // Force remove if present
|
|
337
|
+
if (proxyBody.max_tokens)
|
|
338
|
+
delete proxyBody.max_tokens; // O1 uses max_completion_tokens
|
|
339
|
+
}
|
|
330
340
|
if (proxyBody.messages) {
|
|
331
341
|
proxyBody.messages.forEach((m) => {
|
|
332
342
|
if (m.tool_calls) {
|
package/package.json
CHANGED