Iostream-Li's picture
Add files using upload-large-folder tool
ff78003 verified
/**
* External-Knowledge 路由层 — 把 KnowledgeQuery 分发到对应的 adapter。
*
* 用法:
* import { queryExternalKnowledge, getAdapterStatus } from
* "./capability/external-knowledge";
* const r = await queryExternalKnowledge({
* kind: "literature",
* capabilityId: "cap_drugclip_v1",
* params: { q: "EGFR fibrosis", top_k: 10 },
* });
*
* 启动 banner:
* import { logAdapterStatusBanner } from "./capability/external-knowledge";
* logAdapterStatusBanner(); // 一次性打印 7 行真/留接口分布
*/
import { causalAdapter } from "./causal.adapter.ts";
import { codeModelsAdapter } from "./code-models.adapter.ts";
import { dataAdapter } from "./data.adapter.ts";
import { drugAdapter } from "./drug.adapter.ts";
import { internalExperienceAdapter } from "./internal-experience.adapter.ts";
import { literatureAdapter } from "./literature.adapter.ts";
import { userUploadsAdapter } from "./user-uploads.adapter.ts";
import type {
KnowledgeAdapter,
KnowledgeKind,
KnowledgeQuery,
KnowledgeResult,
} from "./types.ts";
const ADAPTERS: Readonly<Record<KnowledgeKind, KnowledgeAdapter>> = {
literature: literatureAdapter,
causal_network: causalAdapter,
drug_network: drugAdapter,
internal_experience: internalExperienceAdapter,
code_models: codeModelsAdapter,
data: dataAdapter,
user_uploads: userUploadsAdapter,
};
export async function queryExternalKnowledge(
q: KnowledgeQuery,
): Promise<KnowledgeResult> {
const adapter = ADAPTERS[q.kind];
if (!adapter) {
throw new Error(`unknown knowledge kind: ${q.kind}`);
}
return adapter.query(q);
}
export function getAdapterStatus(): Array<{
kind: KnowledgeKind;
status: "real" | "interface_only";
}> {
return (Object.keys(ADAPTERS) as KnowledgeKind[]).map((k) => ({
kind: k,
status: ADAPTERS[k].status,
}));
}
/**
* 启动 banner — server 启动时打一次,让 ops 一眼看见 7 类的状态。
* 不带 logger 时 fallback 到 console.info(测试 env)。
*/
export function logAdapterStatusBanner(
log?: { info: (msg: string) => void },
): void {
const out = log ?? { info: (m: string) => console.info(m) };
out.info("[external-knowledge] adapter status:");
for (const { kind, status } of getAdapterStatus()) {
const tag = status === "real" ? "REAL" : "interface_only";
out.info(` - ${kind.padEnd(22)} ${tag}`);
}
}
export type { KnowledgeAdapter, KnowledgeKind, KnowledgeQuery, KnowledgeResult } from "./types.ts";
export { NotImplementedAdapter, KnowledgeBudgetExceeded } from "./errors.ts";
export { _setTelemetryTestHook, fingerprintParams } from "./telemetry.ts";
export { _resetBudgetCounters } from "./budget-guard.ts";
export { _clearLiteratureCache } from "./literature.adapter.ts";