mirror of
https://github.com/tiennm99/ccs.git
synced 2026-10-17 04:14:32 +00:00
1 parent
7fb56d62e1
commit
d8210cf011
17 files changed
+889
-85
No files matched your search
@@ -0,0 +1,100 @@
|
||||
const http = require('node:http');
|
||||
const path = require('node:path');
|
||||
|
||||
const repoRoot = process.env.CCS_RUNTIME_PROBE_ROOT || process.cwd();
|
||||
const {
|
||||
closeOpenAICompatProxyServer,
|
||||
startOpenAICompatProxyServer,
|
||||
} = require(path.join(repoRoot, 'dist/proxy/server/proxy-server.js'));
|
||||
|
||||
function waitForListening(server) {
|
||||
if (server.listening) return Promise.resolve();
|
||||
return new Promise((resolve, reject) => {
|
||||
server.once('error', reject);
|
||||
server.once('listening', resolve);
|
||||
});
|
||||
}
|
||||
|
||||
function request(port, requestPath, options = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const req = http.request(
|
||||
{
|
||||
hostname: '127.0.0.1',
|
||||
port,
|
||||
path: requestPath,
|
||||
method: options.method || 'GET',
|
||||
headers: options.headers,
|
||||
agent: options.agent,
|
||||
},
|
||||
(res) => {
|
||||
let body = '';
|
||||
res.setEncoding('utf8');
|
||||
res.on('data', (chunk) => (body += chunk));
|
||||
res.on('end', () => resolve({ status: res.statusCode || 0, body }));
|
||||
}
|
||||
);
|
||||
req.once('error', reject);
|
||||
req.end(options.body);
|
||||
});
|
||||
}
|
||||
|
||||
async function startProbeServer() {
|
||||
const server = startOpenAICompatProxyServer({
|
||||
profile: {
|
||||
profileName: 'sentinel',
|
||||
settingsPath: '/tmp/sentinel.settings.json',
|
||||
baseUrl: process.env.CCS_RUNTIME_PROBE_UPSTREAM,
|
||||
apiKey: 'sentinel-api-key-not-real',
|
||||
provider: 'generic-chat-completion-api',
|
||||
model: 'sentinel-model',
|
||||
passthrough: false,
|
||||
},
|
||||
port: 0,
|
||||
authToken: 'sentinel-local-token',
|
||||
});
|
||||
await waitForListening(server);
|
||||
return server;
|
||||
}
|
||||
|
||||
async function runTransportProbe() {
|
||||
const server = await startProbeServer();
|
||||
const port = server.address().port;
|
||||
const response = await request(port, '/v1/messages', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'x-api-key': 'sentinel-local-token',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
model: 'sentinel-model',
|
||||
messages: [{ role: 'user', content: 'hi' }],
|
||||
}),
|
||||
});
|
||||
await closeOpenAICompatProxyServer(server, 250);
|
||||
const parsed = JSON.parse(response.body);
|
||||
console.log(
|
||||
JSON.stringify({
|
||||
status: response.status,
|
||||
text: parsed.content?.[0]?.text,
|
||||
error: parsed.error?.message,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
async function runShutdownProbe() {
|
||||
const server = await startProbeServer();
|
||||
const port = server.address().port;
|
||||
const agent = new http.Agent({ keepAlive: true });
|
||||
await request(port, '/health', { agent });
|
||||
const startedAt = Date.now();
|
||||
await closeOpenAICompatProxyServer(server, 250);
|
||||
const elapsedMs = Date.now() - startedAt;
|
||||
agent.destroy();
|
||||
console.log(JSON.stringify({ closed: !server.listening, elapsedMs }));
|
||||
}
|
||||
|
||||
const mode = process.env.CCS_RUNTIME_PROBE_MODE || 'transport';
|
||||
Promise.resolve(mode === 'shutdown' ? runShutdownProbe() : runTransportProbe()).catch((error) => {
|
||||
console.error(JSON.stringify({ name: error.name, message: error.message }));
|
||||
process.exitCode = 1;
|
||||
});
|
||||
Reference in new issue
Block a user