26ce1241c6
Use the default headroom health probe instead of the goosed fetch adapter so active mode routes deepseek-no-think through the proxy, and add an E2E script that verifies goosed pong via headroom with fail-open portal checks. Co-authored-by: Cursor <cursoragent@cursor.com>
64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Start headroom proxy for local MeMind loopback dev.
|
|
*
|
|
* Usage:
|
|
* node scripts/start-headroom-proxy-local.mjs
|
|
*
|
|
* Requires:
|
|
* - headroom-ai installed (uv tool install headroom-ai[proxy])
|
|
* - deepseek-no-think compat proxy on :18036
|
|
*/
|
|
import { spawn } from 'node:child_process';
|
|
import {
|
|
resolveDeepseekNoThinkProxyBaseUrl,
|
|
} from '../deepseek-no-think-proxy.mjs';
|
|
import {
|
|
probeHeadroomProxyReachable,
|
|
resolveHeadroomProxyBaseUrl,
|
|
resolveHeadroomProxyPort,
|
|
resolveHeadroomUpstreamBaseUrl,
|
|
} from '../memind-headroom-policy.mjs';
|
|
|
|
const upstream = resolveHeadroomUpstreamBaseUrl();
|
|
const port = resolveHeadroomProxyPort();
|
|
const proxyBase = resolveHeadroomProxyBaseUrl();
|
|
|
|
async function main() {
|
|
const reachable = await probeHeadroomProxyReachable({ baseUrl: proxyBase });
|
|
if (reachable) {
|
|
console.log(`HEADROOM_LOCAL_ALREADY_RUNNING: ${proxyBase}`);
|
|
console.log(` upstream=${upstream}`);
|
|
return;
|
|
}
|
|
|
|
console.log('HEADROOM_LOCAL_START:');
|
|
console.log(` proxy=${proxyBase}`);
|
|
console.log(` upstream=${upstream}`);
|
|
console.log(` compat=${resolveDeepseekNoThinkProxyBaseUrl()}`);
|
|
console.log(' constraints: HEADROOM_OUTPUT_SHAPER=0, no wrap/learn');
|
|
|
|
const child = spawn(
|
|
'headroom',
|
|
['proxy', '--port', String(port), '--openai-api-url', upstream.replace(/\/v1\/?$/, '')],
|
|
{
|
|
stdio: 'inherit',
|
|
env: {
|
|
...process.env,
|
|
OPENAI_TARGET_API_URL: upstream,
|
|
HEADROOM_OUTPUT_SHAPER: '0',
|
|
MEMIND_HEADROOM_MODE: process.env.MEMIND_HEADROOM_MODE ?? 'shadow',
|
|
},
|
|
},
|
|
);
|
|
|
|
child.on('exit', (code, signal) => {
|
|
process.exit(code ?? (signal ? 1 : 0));
|
|
});
|
|
}
|
|
|
|
main().catch((error) => {
|
|
console.error(`HEADROOM_LOCAL_FAIL: ${error.message}`);
|
|
process.exit(1);
|
|
});
|