- questioner: createRole(adapter, questionerPrompt, schema, extract) + queue short-circuit + meta post-processing - answerer: createRole(adapter, answererPrompt, schema, extract) + empty-questions short-circuit - build.ts: use createLlmAdapter(extract.provider) as default LLM adapter for questioner/answerer Refs uncaged/nerve#277
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: "knowledge-extraction",
|
|
roles: {
|
|
questioner: createQuestionerRole(adapters?.questioner ?? llmAdapter, { extract }),
|
|
answerer: createAnswererRole(adapters?.answerer ?? llmAdapter, { extract }),
|
|
explorer: createExplorerRole(a("explorer"), { extract }),
|
|
},
|
|
moderator,
|
|
};
|
|
}
|