Align WorkflowDefinition name, nerve.yaml, role prompts, and lockfile path with extract-knowledge. Refs #285 Made-with: Cursor
34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
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<Record<keyof WorkflowMeta, AgentFn>>;
|
|
extract: LlmExtractorConfig;
|
|
};
|
|
|
|
export function createKnowledgeExtractionWorkflow({
|
|
defaultAdapter,
|
|
adapters,
|
|
extract,
|
|
}: CreateKnowledgeExtractionDeps): WorkflowDefinition<WorkflowMeta> {
|
|
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,
|
|
};
|
|
}
|