feat(tcs): establish five-domain mother brain runtime
This commit is contained in:
parent
828fa0b8e2
commit
55a4d77248
29 changed files with 904 additions and 12 deletions
77
server-tools/tcs-mother-brain/model-client.mjs
Normal file
77
server-tools/tcs-mother-brain/model-client.mjs
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
const DEFAULT_TIMEOUT_MS = 45_000;
|
||||
|
||||
function completionEndpoint(apiUrl) {
|
||||
const value = String(apiUrl || "").replace(/\/+$/, "");
|
||||
return /\/chat\/completions$/i.test(value) ? value : `${value}/chat/completions`;
|
||||
}
|
||||
|
||||
function extractJson(text) {
|
||||
const value = String(text || "").trim();
|
||||
if (!value) throw new Error("model_response_empty");
|
||||
try { return JSON.parse(value); } catch {}
|
||||
const fenced = value.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
||||
if (fenced) return JSON.parse(fenced[1]);
|
||||
const first = value.indexOf("{");
|
||||
const last = value.lastIndexOf("}");
|
||||
if (first >= 0 && last > first) return JSON.parse(value.slice(first, last + 1));
|
||||
throw new Error("model_response_not_json");
|
||||
}
|
||||
|
||||
export class DeepSeekJsonClient {
|
||||
constructor({
|
||||
apiKey = process.env.DEEPSEEK_API_KEY,
|
||||
apiUrl = process.env.DEEPSEEK_API_URL || "https://api.deepseek.com/v1",
|
||||
model = process.env.DEEPSEEK_MODEL || "deepseek-chat",
|
||||
fetchImpl = globalThis.fetch,
|
||||
timeoutMs = DEFAULT_TIMEOUT_MS,
|
||||
} = {}) {
|
||||
if (!apiKey) throw new Error("deepseek_api_key_missing");
|
||||
if (!fetchImpl) throw new Error("fetch_unavailable");
|
||||
this.apiKey = apiKey;
|
||||
this.apiUrl = apiUrl;
|
||||
this.model = model;
|
||||
this.fetchImpl = fetchImpl;
|
||||
this.timeoutMs = timeoutMs;
|
||||
}
|
||||
|
||||
async interpret(input) {
|
||||
const controller = new AbortController();
|
||||
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
||||
try {
|
||||
const response = await this.fetchImpl(completionEndpoint(this.apiUrl), {
|
||||
method: "POST",
|
||||
headers: {
|
||||
authorization: `Bearer ${this.apiKey}`,
|
||||
"content-type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
model: this.model,
|
||||
stream: false,
|
||||
temperature: 0.2,
|
||||
response_format: { type: "json_object" },
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content: "你是TCS母体大脑的有界语言理解器官。只输出一个JSON对象,不输出隐藏思维过程。不得把候选理解写成事实、不得发明现实权限或冰朔的新意志。",
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: JSON.stringify({
|
||||
instruction: "理解语言意图与因果关系。精确输出schema,event_id,event_sha256,summary,intent,causal_links,questions,novelty,correction_weight,evidence_weight,next_cognitive_action。causal_links与questions是字符串数组;三个weight是0到100整数;schema必须是guanghu.tcs-mother-interpretation/v1;id和sha必须原样复制。next_cognitive_action只能是COMPARE_WITH_MEMORY、REQUEST_EVIDENCE、REVIEW_CORRECTION、LINK_CROSS_DOMAIN、HOLD_CANDIDATE之一。",
|
||||
runtime_input: input,
|
||||
}),
|
||||
},
|
||||
],
|
||||
}),
|
||||
signal: controller.signal,
|
||||
});
|
||||
if (!response.ok) throw new Error(`model_http_${response.status}`);
|
||||
const payload = await response.json();
|
||||
return extractJson(payload?.choices?.[0]?.message?.content);
|
||||
} finally {
|
||||
clearTimeout(timer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { completionEndpoint, extractJson };
|
||||
Loading…
Reference in a new issue