import type { AgentFn, WorkflowDefinition } from "@uncaged/nerve-core"; import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils"; import { createLlmAdapter } from "@uncaged/nerve-workflow-utils"; import { moderator } from "./moderator.js"; import type { WorkflowMeta } from "./moderator.js"; import { createAnswererRole } from "./roles/answerer.js"; import { createExplorerRole } from "./roles/explorer.js"; import { createQuestionerRole } from "./roles/questioner.js"; export type CreateKnowledgeExtractionDeps = { defaultAdapter: AgentFn; adapters?: Partial>; extract: LlmExtractorConfig; }; export function createKnowledgeExtractionWorkflow({ defaultAdapter, adapters, extract, }: CreateKnowledgeExtractionDeps): WorkflowDefinition { const a = (role: keyof WorkflowMeta) => adapters?.[role] ?? defaultAdapter; const llmAdapter = createLlmAdapter(extract.provider); return { name: "extract-knowledge", roles: { questioner: createQuestionerRole(adapters?.questioner ?? llmAdapter, { extract }), answerer: createAnswererRole(adapters?.answerer ?? llmAdapter, { extract }), explorer: createExplorerRole(a("explorer"), { extract }), }, moderator, }; }