mojentic 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +459 -0
- package/dist/agents/async-aggregator-agent.d.ts +101 -0
- package/dist/agents/async-aggregator-agent.d.ts.map +1 -0
- package/dist/agents/async-aggregator-agent.js +160 -0
- package/dist/agents/async-aggregator-agent.js.map +1 -0
- package/dist/agents/async-dispatcher.d.ts +98 -0
- package/dist/agents/async-dispatcher.d.ts.map +1 -0
- package/dist/agents/async-dispatcher.js +173 -0
- package/dist/agents/async-dispatcher.js.map +1 -0
- package/dist/agents/async-llm-agent-with-memory.d.ts +95 -0
- package/dist/agents/async-llm-agent-with-memory.d.ts.map +1 -0
- package/dist/agents/async-llm-agent-with-memory.js +136 -0
- package/dist/agents/async-llm-agent-with-memory.js.map +1 -0
- package/dist/agents/async-llm-agent.d.ts +85 -0
- package/dist/agents/async-llm-agent.d.ts.map +1 -0
- package/dist/agents/async-llm-agent.js +87 -0
- package/dist/agents/async-llm-agent.js.map +1 -0
- package/dist/agents/base-agent.d.ts +59 -0
- package/dist/agents/base-agent.d.ts.map +1 -0
- package/dist/agents/base-agent.js +24 -0
- package/dist/agents/base-agent.js.map +1 -0
- package/dist/agents/base-async-agent.d.ts +42 -0
- package/dist/agents/base-async-agent.d.ts.map +1 -0
- package/dist/agents/base-async-agent.js +6 -0
- package/dist/agents/base-async-agent.js.map +1 -0
- package/dist/agents/event.d.ts +26 -0
- package/dist/agents/event.d.ts.map +1 -0
- package/dist/agents/event.js +13 -0
- package/dist/agents/event.js.map +1 -0
- package/dist/agents/index.d.ts +14 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +30 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/iterative-problem-solver.d.ts +83 -0
- package/dist/agents/iterative-problem-solver.d.ts.map +1 -0
- package/dist/agents/iterative-problem-solver.js +120 -0
- package/dist/agents/iterative-problem-solver.js.map +1 -0
- package/dist/agents/router.d.ts +44 -0
- package/dist/agents/router.d.ts.map +1 -0
- package/dist/agents/router.js +53 -0
- package/dist/agents/router.js.map +1 -0
- package/dist/agents/simple-recursive-agent.d.ts +182 -0
- package/dist/agents/simple-recursive-agent.d.ts.map +1 -0
- package/dist/agents/simple-recursive-agent.js +272 -0
- package/dist/agents/simple-recursive-agent.js.map +1 -0
- package/dist/context/index.d.ts +5 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +21 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/shared-working-memory.d.ts +76 -0
- package/dist/context/shared-working-memory.d.ts.map +1 -0
- package/dist/context/shared-working-memory.js +121 -0
- package/dist/context/shared-working-memory.js.map +1 -0
- package/dist/error.d.ts +93 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +149 -0
- package/dist/error.js.map +1 -0
- package/dist/examples/react/decisioning-agent.d.ts +48 -0
- package/dist/examples/react/decisioning-agent.d.ts.map +1 -0
- package/dist/examples/react/decisioning-agent.js +204 -0
- package/dist/examples/react/decisioning-agent.js.map +1 -0
- package/dist/examples/react/events.d.ts +77 -0
- package/dist/examples/react/events.d.ts.map +1 -0
- package/dist/examples/react/events.js +9 -0
- package/dist/examples/react/events.js.map +1 -0
- package/dist/examples/react/formatters.d.ts +23 -0
- package/dist/examples/react/formatters.d.ts.map +1 -0
- package/dist/examples/react/formatters.js +68 -0
- package/dist/examples/react/formatters.js.map +1 -0
- package/dist/examples/react/index.d.ts +12 -0
- package/dist/examples/react/index.d.ts.map +1 -0
- package/dist/examples/react/index.js +28 -0
- package/dist/examples/react/index.js.map +1 -0
- package/dist/examples/react/models.d.ts +57 -0
- package/dist/examples/react/models.d.ts.map +1 -0
- package/dist/examples/react/models.js +19 -0
- package/dist/examples/react/models.js.map +1 -0
- package/dist/examples/react/output-agent.d.ts +23 -0
- package/dist/examples/react/output-agent.d.ts.map +1 -0
- package/dist/examples/react/output-agent.js +28 -0
- package/dist/examples/react/output-agent.js.map +1 -0
- package/dist/examples/react/summarization-agent.d.ts +46 -0
- package/dist/examples/react/summarization-agent.d.ts.map +1 -0
- package/dist/examples/react/summarization-agent.js +102 -0
- package/dist/examples/react/summarization-agent.js.map +1 -0
- package/dist/examples/react/thinking-agent.d.ts +47 -0
- package/dist/examples/react/thinking-agent.d.ts.map +1 -0
- package/dist/examples/react/thinking-agent.js +127 -0
- package/dist/examples/react/thinking-agent.js.map +1 -0
- package/dist/examples/react/tool-call-agent.d.ts +25 -0
- package/dist/examples/react/tool-call-agent.d.ts.map +1 -0
- package/dist/examples/react/tool-call-agent.js +83 -0
- package/dist/examples/react/tool-call-agent.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/agent.d.ts +68 -0
- package/dist/llm/agent.d.ts.map +1 -0
- package/dist/llm/agent.js +85 -0
- package/dist/llm/agent.js.map +1 -0
- package/dist/llm/broker.d.ts +150 -0
- package/dist/llm/broker.d.ts.map +1 -0
- package/dist/llm/broker.js +355 -0
- package/dist/llm/broker.js.map +1 -0
- package/dist/llm/chat-session.d.ts +98 -0
- package/dist/llm/chat-session.d.ts.map +1 -0
- package/dist/llm/chat-session.js +156 -0
- package/dist/llm/chat-session.js.map +1 -0
- package/dist/llm/gateway.d.ts +28 -0
- package/dist/llm/gateway.d.ts.map +1 -0
- package/dist/llm/gateway.js +6 -0
- package/dist/llm/gateway.js.map +1 -0
- package/dist/llm/gateways/index.d.ts +9 -0
- package/dist/llm/gateways/index.d.ts.map +1 -0
- package/dist/llm/gateways/index.js +25 -0
- package/dist/llm/gateways/index.js.map +1 -0
- package/dist/llm/gateways/ollama.d.ts +30 -0
- package/dist/llm/gateways/ollama.d.ts.map +1 -0
- package/dist/llm/gateways/ollama.js +322 -0
- package/dist/llm/gateways/ollama.js.map +1 -0
- package/dist/llm/gateways/openai-messages-adapter.d.ts +29 -0
- package/dist/llm/gateways/openai-messages-adapter.d.ts.map +1 -0
- package/dist/llm/gateways/openai-messages-adapter.js +188 -0
- package/dist/llm/gateways/openai-messages-adapter.js.map +1 -0
- package/dist/llm/gateways/openai-model-registry.d.ts +82 -0
- package/dist/llm/gateways/openai-model-registry.d.ts.map +1 -0
- package/dist/llm/gateways/openai-model-registry.js +352 -0
- package/dist/llm/gateways/openai-model-registry.js.map +1 -0
- package/dist/llm/gateways/openai.d.ts +40 -0
- package/dist/llm/gateways/openai.d.ts.map +1 -0
- package/dist/llm/gateways/openai.js +469 -0
- package/dist/llm/gateways/openai.js.map +1 -0
- package/dist/llm/gateways/tokenizerGateway.d.ts +61 -0
- package/dist/llm/gateways/tokenizerGateway.d.ts.map +1 -0
- package/dist/llm/gateways/tokenizerGateway.js +75 -0
- package/dist/llm/gateways/tokenizerGateway.js.map +1 -0
- package/dist/llm/index.d.ts +11 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +27 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/models.d.ts +95 -0
- package/dist/llm/models.d.ts.map +1 -0
- package/dist/llm/models.js +50 -0
- package/dist/llm/models.js.map +1 -0
- package/dist/llm/tools/ask-user.d.ts +39 -0
- package/dist/llm/tools/ask-user.d.ts.map +1 -0
- package/dist/llm/tools/ask-user.js +111 -0
- package/dist/llm/tools/ask-user.js.map +1 -0
- package/dist/llm/tools/current-datetime.d.ts +17 -0
- package/dist/llm/tools/current-datetime.d.ts.map +1 -0
- package/dist/llm/tools/current-datetime.js +76 -0
- package/dist/llm/tools/current-datetime.js.map +1 -0
- package/dist/llm/tools/date-resolver.d.ts +17 -0
- package/dist/llm/tools/date-resolver.d.ts.map +1 -0
- package/dist/llm/tools/date-resolver.js +135 -0
- package/dist/llm/tools/date-resolver.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/append-task.d.ts +13 -0
- package/dist/llm/tools/ephemeral-task-manager/append-task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/append-task.js +54 -0
- package/dist/llm/tools/ephemeral-task-manager/append-task.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/clear-tasks.d.ts +13 -0
- package/dist/llm/tools/ephemeral-task-manager/clear-tasks.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/clear-tasks.js +37 -0
- package/dist/llm/tools/ephemeral-task-manager/clear-tasks.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/complete-task.d.ts +15 -0
- package/dist/llm/tools/ephemeral-task-manager/complete-task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/complete-task.js +56 -0
- package/dist/llm/tools/ephemeral-task-manager/complete-task.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/index.d.ts +44 -0
- package/dist/llm/tools/ephemeral-task-manager/index.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/index.js +73 -0
- package/dist/llm/tools/ephemeral-task-manager/index.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/insert-task-after.d.ts +13 -0
- package/dist/llm/tools/ephemeral-task-manager/insert-task-after.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/insert-task-after.js +59 -0
- package/dist/llm/tools/ephemeral-task-manager/insert-task-after.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/list-tasks.d.ts +14 -0
- package/dist/llm/tools/ephemeral-task-manager/list-tasks.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/list-tasks.js +45 -0
- package/dist/llm/tools/ephemeral-task-manager/list-tasks.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/prepend-task.d.ts +13 -0
- package/dist/llm/tools/ephemeral-task-manager/prepend-task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/prepend-task.js +54 -0
- package/dist/llm/tools/ephemeral-task-manager/prepend-task.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/start-task.d.ts +15 -0
- package/dist/llm/tools/ephemeral-task-manager/start-task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/start-task.js +56 -0
- package/dist/llm/tools/ephemeral-task-manager/start-task.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/task-list.d.ts +68 -0
- package/dist/llm/tools/ephemeral-task-manager/task-list.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/task-list.js +120 -0
- package/dist/llm/tools/ephemeral-task-manager/task-list.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/task.d.ts +21 -0
- package/dist/llm/tools/ephemeral-task-manager/task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/task.js +24 -0
- package/dist/llm/tools/ephemeral-task-manager/task.js.map +1 -0
- package/dist/llm/tools/file-manager.d.ts +127 -0
- package/dist/llm/tools/file-manager.d.ts.map +1 -0
- package/dist/llm/tools/file-manager.js +598 -0
- package/dist/llm/tools/file-manager.js.map +1 -0
- package/dist/llm/tools/index.d.ts +11 -0
- package/dist/llm/tools/index.d.ts.map +1 -0
- package/dist/llm/tools/index.js +27 -0
- package/dist/llm/tools/index.js.map +1 -0
- package/dist/llm/tools/tell-user.d.ts +31 -0
- package/dist/llm/tools/tell-user.d.ts.map +1 -0
- package/dist/llm/tools/tell-user.js +57 -0
- package/dist/llm/tools/tell-user.js.map +1 -0
- package/dist/llm/tools/tool-wrapper.d.ts +54 -0
- package/dist/llm/tools/tool-wrapper.d.ts.map +1 -0
- package/dist/llm/tools/tool-wrapper.js +91 -0
- package/dist/llm/tools/tool-wrapper.js.map +1 -0
- package/dist/llm/tools/tool.d.ts +70 -0
- package/dist/llm/tools/tool.d.ts.map +1 -0
- package/dist/llm/tools/tool.js +19 -0
- package/dist/llm/tools/tool.js.map +1 -0
- package/dist/llm/tools/web-search-tool.d.ts +35 -0
- package/dist/llm/tools/web-search-tool.d.ts.map +1 -0
- package/dist/llm/tools/web-search-tool.js +105 -0
- package/dist/llm/tools/web-search-tool.js.map +1 -0
- package/dist/llm/utils/image.d.ts +30 -0
- package/dist/llm/utils/image.d.ts.map +1 -0
- package/dist/llm/utils/image.js +65 -0
- package/dist/llm/utils/image.js.map +1 -0
- package/dist/tracer/eventStore.d.ts +101 -0
- package/dist/tracer/eventStore.d.ts.map +1 -0
- package/dist/tracer/eventStore.js +120 -0
- package/dist/tracer/eventStore.js.map +1 -0
- package/dist/tracer/index.d.ts +8 -0
- package/dist/tracer/index.d.ts.map +1 -0
- package/dist/tracer/index.js +24 -0
- package/dist/tracer/index.js.map +1 -0
- package/dist/tracer/nullTracer.d.ts +127 -0
- package/dist/tracer/nullTracer.d.ts.map +1 -0
- package/dist/tracer/nullTracer.js +148 -0
- package/dist/tracer/nullTracer.js.map +1 -0
- package/dist/tracer/tracerEvents.d.ts +209 -0
- package/dist/tracer/tracerEvents.d.ts.map +1 -0
- package/dist/tracer/tracerEvents.js +312 -0
- package/dist/tracer/tracerEvents.js.map +1 -0
- package/dist/tracer/tracerSystem.d.ts +149 -0
- package/dist/tracer/tracerSystem.d.ts.map +1 -0
- package/dist/tracer/tracerSystem.js +196 -0
- package/dist/tracer/tracerSystem.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-llm-agent-with-memory.js","sourceRoot":"","sources":["../../src/agents/async-llm-agent-with-memory.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uDAAuE;AAEvE,0CAAoD;AACpD,oCAA4C;AAc5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAsB,uBAAwB,SAAQ,+BAAa;IAC9C,MAAM,CAAsB;IAC5B,YAAY,CAAS;IAExC,YAAY,MAAqC;QAC/C,KAAK,CAAC;YACJ,GAAG,MAAM;YACT,2EAA2E;YAC3E,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED;;;;;;;;;OASG;IACO,+BAA+B;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAErD,OAAO;YACL,gBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9B,gBAAO,CAAC,IAAI,CACV,+BAA+B,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM;gBACzE,wFAAwF,CAC3F;YACD,gBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;SAChC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACO,KAAK,CAAC,0BAA0B,CAAI,OAAe;QAC3D,6DAA6D;QAC7D,MAAM,wBAAwB,GAAG;YAC/B,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAI,IAAI,CAAC,aAAa,EAAE,UAAsC;gBAC9D,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;oBAC3D,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;iBACxC;aACF;YACD,QAAQ,EAAE,CAAC,GAAG,CAAE,IAAI,CAAC,aAAa,EAAE,QAAqB,IAAI,EAAE,CAAC,CAAC;SAClE,CAAC;QAEF,qCAAqC;QACrC,MAAM,QAAQ,GAAiB;YAC7B,GAAG,IAAI,CAAC,+BAA+B,EAAE;YACzC,gBAAO,CAAC,IAAI,CAAC,OAAO,CAAC;SACtB,CAAC;QAEF,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAC7C,QAAQ,EACR,wBAAwB,CACzB,CAAC;QAEF,IAAI,IAAA,YAAI,EAAC,MAAM,CAAC,EAAE,CAAC;YACjB,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC;YAExC,sCAAsC;YACtC,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC9D,CAAC;YAED,qDAAqD;YACrD,6DAA6D;YAC7D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,EAAE,GAAG,kBAAkB,CAAC;YAEzE,OAAO,IAAA,UAAE,EAAC,qBAA0B,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,MAA0B,CAAC;IACpC,CAAC;CACF;AA7FD,0DA6FC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Async LLM Agent - Base class for agents that use LLMs to generate responses
|
|
3
|
+
*/
|
|
4
|
+
import { BaseAsyncAgent } from './base-async-agent';
|
|
5
|
+
import { Event } from './event';
|
|
6
|
+
import { LlmBroker } from '../llm/broker';
|
|
7
|
+
import { LlmTool } from '../llm/tools';
|
|
8
|
+
import { Result } from '../error';
|
|
9
|
+
/**
|
|
10
|
+
* Configuration for AsyncLlmAgent
|
|
11
|
+
*/
|
|
12
|
+
export interface AsyncLlmAgentConfig {
|
|
13
|
+
/** The LLM broker to use for generating responses */
|
|
14
|
+
broker: LlmBroker;
|
|
15
|
+
/** System prompt defining the agent's behavior and personality */
|
|
16
|
+
behaviour: string;
|
|
17
|
+
/** Optional JSON schema for structured output */
|
|
18
|
+
responseModel?: Record<string, unknown>;
|
|
19
|
+
/** Optional tools the agent can use */
|
|
20
|
+
tools?: LlmTool[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Base class for async agents that use an LLM to generate responses.
|
|
24
|
+
*
|
|
25
|
+
* This agent wraps an LLM broker and provides convenient methods for
|
|
26
|
+
* generating text or structured responses. Subclasses implement
|
|
27
|
+
* `receiveEventAsync` to define their event handling logic.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* class FactCheckerAgent extends AsyncLlmAgent {
|
|
32
|
+
* constructor(broker: LlmBroker) {
|
|
33
|
+
* super({
|
|
34
|
+
* broker,
|
|
35
|
+
* behaviour: 'You are a fact-checking assistant.',
|
|
36
|
+
* responseModel: factCheckSchema
|
|
37
|
+
* });
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* async receiveEventAsync(event: Event): Promise<Result<Event[], Error>> {
|
|
41
|
+
* if (isQuestionEvent(event)) {
|
|
42
|
+
* const result = await this.generateResponse<FactCheckResponse>(
|
|
43
|
+
* `Check facts about: ${event.question}`
|
|
44
|
+
* );
|
|
45
|
+
* if (isOk(result)) {
|
|
46
|
+
* return Ok([new FactCheckEvent({ facts: result.value.facts })]);
|
|
47
|
+
* }
|
|
48
|
+
* }
|
|
49
|
+
* return Ok([]);
|
|
50
|
+
* }
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare abstract class AsyncLlmAgent implements BaseAsyncAgent {
|
|
55
|
+
protected readonly broker: LlmBroker;
|
|
56
|
+
protected readonly behaviour: string;
|
|
57
|
+
protected readonly responseModel?: Record<string, unknown>;
|
|
58
|
+
protected readonly tools: LlmTool[];
|
|
59
|
+
constructor(config: AsyncLlmAgentConfig);
|
|
60
|
+
/**
|
|
61
|
+
* Add a tool to the agent's available tools.
|
|
62
|
+
*
|
|
63
|
+
* @param tool - The tool to add
|
|
64
|
+
*/
|
|
65
|
+
addTool(tool: LlmTool): void;
|
|
66
|
+
/**
|
|
67
|
+
* Generate a response from the LLM.
|
|
68
|
+
*
|
|
69
|
+
* If a responseModel is configured, returns structured output conforming to the schema.
|
|
70
|
+
* Otherwise, returns plain text.
|
|
71
|
+
*
|
|
72
|
+
* @param content - The user message content to send to the LLM
|
|
73
|
+
* @returns Result containing the LLM response or an error
|
|
74
|
+
*/
|
|
75
|
+
protected generateResponse<T = string>(content: string): Promise<Result<T, Error>>;
|
|
76
|
+
/**
|
|
77
|
+
* Process an incoming event and optionally produce new events.
|
|
78
|
+
* Must be implemented by subclasses.
|
|
79
|
+
*
|
|
80
|
+
* @param event - The event to process
|
|
81
|
+
* @returns Result containing array of new events or an error
|
|
82
|
+
*/
|
|
83
|
+
abstract receiveEventAsync(event: Event): Promise<Result<Event[], Error>>;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=async-llm-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-llm-agent.d.ts","sourceRoot":"","sources":["../../src/agents/async-llm-agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAY,MAAM,UAAU,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,MAAM,EAAE,SAAS,CAAC;IAClB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,8BAAsB,aAAc,YAAW,cAAc;IAC3D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBAExB,MAAM,EAAE,mBAAmB;IAOvC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI5B;;;;;;;;OAQG;cACa,gBAAgB,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAiBxF;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;CAC1E"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Async LLM Agent - Base class for agents that use LLMs to generate responses
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AsyncLlmAgent = void 0;
|
|
7
|
+
const models_1 = require("../llm/models");
|
|
8
|
+
const error_1 = require("../error");
|
|
9
|
+
/**
|
|
10
|
+
* Base class for async agents that use an LLM to generate responses.
|
|
11
|
+
*
|
|
12
|
+
* This agent wraps an LLM broker and provides convenient methods for
|
|
13
|
+
* generating text or structured responses. Subclasses implement
|
|
14
|
+
* `receiveEventAsync` to define their event handling logic.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* class FactCheckerAgent extends AsyncLlmAgent {
|
|
19
|
+
* constructor(broker: LlmBroker) {
|
|
20
|
+
* super({
|
|
21
|
+
* broker,
|
|
22
|
+
* behaviour: 'You are a fact-checking assistant.',
|
|
23
|
+
* responseModel: factCheckSchema
|
|
24
|
+
* });
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* async receiveEventAsync(event: Event): Promise<Result<Event[], Error>> {
|
|
28
|
+
* if (isQuestionEvent(event)) {
|
|
29
|
+
* const result = await this.generateResponse<FactCheckResponse>(
|
|
30
|
+
* `Check facts about: ${event.question}`
|
|
31
|
+
* );
|
|
32
|
+
* if (isOk(result)) {
|
|
33
|
+
* return Ok([new FactCheckEvent({ facts: result.value.facts })]);
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* return Ok([]);
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
class AsyncLlmAgent {
|
|
42
|
+
broker;
|
|
43
|
+
behaviour;
|
|
44
|
+
responseModel;
|
|
45
|
+
tools;
|
|
46
|
+
constructor(config) {
|
|
47
|
+
this.broker = config.broker;
|
|
48
|
+
this.behaviour = config.behaviour;
|
|
49
|
+
this.responseModel = config.responseModel;
|
|
50
|
+
this.tools = config.tools || [];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Add a tool to the agent's available tools.
|
|
54
|
+
*
|
|
55
|
+
* @param tool - The tool to add
|
|
56
|
+
*/
|
|
57
|
+
addTool(tool) {
|
|
58
|
+
this.tools.push(tool);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Generate a response from the LLM.
|
|
62
|
+
*
|
|
63
|
+
* If a responseModel is configured, returns structured output conforming to the schema.
|
|
64
|
+
* Otherwise, returns plain text.
|
|
65
|
+
*
|
|
66
|
+
* @param content - The user message content to send to the LLM
|
|
67
|
+
* @returns Result containing the LLM response or an error
|
|
68
|
+
*/
|
|
69
|
+
async generateResponse(content) {
|
|
70
|
+
const messages = [models_1.Message.system(this.behaviour), models_1.Message.user(content)];
|
|
71
|
+
if (this.responseModel) {
|
|
72
|
+
// Generate structured object
|
|
73
|
+
const result = await this.broker.generateObject(messages, this.responseModel);
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Generate text with optional tools
|
|
78
|
+
const result = await this.broker.generate(messages, this.tools);
|
|
79
|
+
if ((0, error_1.isOk)(result)) {
|
|
80
|
+
return (0, error_1.Ok)(result.value);
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.AsyncLlmAgent = AsyncLlmAgent;
|
|
87
|
+
//# sourceMappingURL=async-llm-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-llm-agent.js","sourceRoot":"","sources":["../../src/agents/async-llm-agent.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAMH,0CAAwC;AACxC,oCAA4C;AAgB5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAsB,aAAa;IACd,MAAM,CAAY;IAClB,SAAS,CAAS;IAClB,aAAa,CAA2B;IACxC,KAAK,CAAY;IAEpC,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAa;QACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,gBAAgB,CAAa,OAAe;QAC1D,MAAM,QAAQ,GAAG,CAAC,gBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,gBAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,6BAA6B;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAI,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACjF,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,IAAA,YAAI,EAAC,MAAM,CAAC,EAAE,CAAC;gBACjB,OAAO,IAAA,UAAE,EAAC,MAAM,CAAC,KAAU,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,MAA0B,CAAC;QACpC,CAAC;IACH,CAAC;CAUF;AAxDD,sCAwDC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base interface for synchronous agents
|
|
3
|
+
*
|
|
4
|
+
* Synchronous agents implement the `receiveEvent` method to process
|
|
5
|
+
* incoming events and return a list of new events. This is the simplest
|
|
6
|
+
* agent interface, suitable for agents that don't need to perform async
|
|
7
|
+
* operations.
|
|
8
|
+
*
|
|
9
|
+
* For agents that need to perform I/O, LLM calls, or other async operations,
|
|
10
|
+
* use `BaseAsyncAgent` instead.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* class MyAgent implements BaseAgent {
|
|
15
|
+
* receiveEvent(event: Event): Event[] {
|
|
16
|
+
* // Process event synchronously
|
|
17
|
+
* return [new MyResponseEvent({ data: process(event) })];
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { Event } from './event';
|
|
23
|
+
/**
|
|
24
|
+
* Base interface that synchronous agents must implement.
|
|
25
|
+
*
|
|
26
|
+
* Agents process events and optionally produce new events in response.
|
|
27
|
+
* Processing is synchronous, making this suitable for simple transformations
|
|
28
|
+
* and coordination logic that doesn't require async operations.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* class TransformAgent implements BaseAgent {
|
|
33
|
+
* receiveEvent(event: Event): Event[] {
|
|
34
|
+
* if (isDataEvent(event)) {
|
|
35
|
+
* const transformed = this.transform(event.data);
|
|
36
|
+
* return [new TransformedEvent({ data: transformed })];
|
|
37
|
+
* }
|
|
38
|
+
* return [];
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export interface BaseAgent {
|
|
44
|
+
/**
|
|
45
|
+
* Process an incoming event and optionally produce new events.
|
|
46
|
+
*
|
|
47
|
+
* This method is called when an event is routed to this agent.
|
|
48
|
+
* The agent should process the event synchronously and return
|
|
49
|
+
* new events to continue the workflow.
|
|
50
|
+
*
|
|
51
|
+
* Returning an empty array means the event was processed but
|
|
52
|
+
* produced no follow-up events.
|
|
53
|
+
*
|
|
54
|
+
* @param event - The event to process
|
|
55
|
+
* @returns Array of new events to dispatch (can be empty)
|
|
56
|
+
*/
|
|
57
|
+
receiveEvent(event: Event): Event[];
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=base-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;CACrC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base interface for synchronous agents
|
|
4
|
+
*
|
|
5
|
+
* Synchronous agents implement the `receiveEvent` method to process
|
|
6
|
+
* incoming events and return a list of new events. This is the simplest
|
|
7
|
+
* agent interface, suitable for agents that don't need to perform async
|
|
8
|
+
* operations.
|
|
9
|
+
*
|
|
10
|
+
* For agents that need to perform I/O, LLM calls, or other async operations,
|
|
11
|
+
* use `BaseAsyncAgent` instead.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* class MyAgent implements BaseAgent {
|
|
16
|
+
* receiveEvent(event: Event): Event[] {
|
|
17
|
+
* // Process event synchronously
|
|
18
|
+
* return [new MyResponseEvent({ data: process(event) })];
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
//# sourceMappingURL=base-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-agent.js","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base interface for asynchronous agents
|
|
3
|
+
*/
|
|
4
|
+
import { Event } from './event';
|
|
5
|
+
import { Result } from '../error';
|
|
6
|
+
/**
|
|
7
|
+
* Base interface that all async agents must implement.
|
|
8
|
+
*
|
|
9
|
+
* Agents process events and optionally produce new events in response.
|
|
10
|
+
* All processing is asynchronous, allowing agents to perform I/O operations
|
|
11
|
+
* like LLM calls without blocking.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* class MyAgent implements BaseAsyncAgent {
|
|
16
|
+
* async receiveEventAsync(event: Event): Promise<Result<Event[], Error>> {
|
|
17
|
+
* if (isQuestionEvent(event)) {
|
|
18
|
+
* const answer = await this.processQuestion(event.question);
|
|
19
|
+
* return Ok([new AnswerEvent({ answer })]);
|
|
20
|
+
* }
|
|
21
|
+
* return Ok([]);
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export interface BaseAsyncAgent {
|
|
27
|
+
/**
|
|
28
|
+
* Process an incoming event and optionally produce new events.
|
|
29
|
+
*
|
|
30
|
+
* This method is called by the dispatcher when an event is routed to this agent.
|
|
31
|
+
* The agent can perform asynchronous operations (LLM calls, database queries, etc.)
|
|
32
|
+
* and return new events to continue the workflow.
|
|
33
|
+
*
|
|
34
|
+
* Returning an empty array means the event was processed but produced no follow-up events.
|
|
35
|
+
* Returning an error Result indicates processing failure.
|
|
36
|
+
*
|
|
37
|
+
* @param event - The event to process
|
|
38
|
+
* @returns Result containing array of new events to dispatch, or an error
|
|
39
|
+
*/
|
|
40
|
+
receiveEventAsync(event: Event): Promise<Result<Event[], Error>>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=base-async-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-async-agent.d.ts","sourceRoot":"","sources":["../../src/agents/base-async-agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;CAClE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-async-agent.js","sourceRoot":"","sources":["../../src/agents/base-async-agent.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event system for agent communication
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Base event class for agent communication.
|
|
6
|
+
* Events are the primary mechanism for agents to communicate with each other.
|
|
7
|
+
*/
|
|
8
|
+
export interface Event {
|
|
9
|
+
/** Event type discriminator for type guards */
|
|
10
|
+
type?: string;
|
|
11
|
+
/** The type/class of the agent that created this event */
|
|
12
|
+
source: string;
|
|
13
|
+
/** Unique identifier linking related events in a conversation or workflow */
|
|
14
|
+
correlationId?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Special event that signals the dispatcher to stop processing
|
|
18
|
+
*/
|
|
19
|
+
export interface TerminateEvent extends Event {
|
|
20
|
+
type: 'terminate';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Type guard to check if an event is a TerminateEvent
|
|
24
|
+
*/
|
|
25
|
+
export declare function isTerminateEvent(event: Event): event is TerminateEvent;
|
|
26
|
+
//# sourceMappingURL=event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/agents/event.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,KAAK;IAC3C,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,cAAc,CAEtE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Event system for agent communication
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isTerminateEvent = isTerminateEvent;
|
|
7
|
+
/**
|
|
8
|
+
* Type guard to check if an event is a TerminateEvent
|
|
9
|
+
*/
|
|
10
|
+
function isTerminateEvent(event) {
|
|
11
|
+
return event.type === 'terminate';
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/agents/event.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAyBH,4CAEC;AALD;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAY;IAC3C,OAAQ,KAAwB,CAAC,IAAI,KAAK,WAAW,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent system for event-driven LLM workflows
|
|
3
|
+
*/
|
|
4
|
+
export * from './event';
|
|
5
|
+
export * from './base-agent';
|
|
6
|
+
export * from './base-async-agent';
|
|
7
|
+
export * from './async-llm-agent';
|
|
8
|
+
export * from './async-llm-agent-with-memory';
|
|
9
|
+
export * from './async-aggregator-agent';
|
|
10
|
+
export * from './async-dispatcher';
|
|
11
|
+
export * from './router';
|
|
12
|
+
export * from './iterative-problem-solver';
|
|
13
|
+
export * from './simple-recursive-agent';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent system for event-driven LLM workflows
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./event"), exports);
|
|
21
|
+
__exportStar(require("./base-agent"), exports);
|
|
22
|
+
__exportStar(require("./base-async-agent"), exports);
|
|
23
|
+
__exportStar(require("./async-llm-agent"), exports);
|
|
24
|
+
__exportStar(require("./async-llm-agent-with-memory"), exports);
|
|
25
|
+
__exportStar(require("./async-aggregator-agent"), exports);
|
|
26
|
+
__exportStar(require("./async-dispatcher"), exports);
|
|
27
|
+
__exportStar(require("./router"), exports);
|
|
28
|
+
__exportStar(require("./iterative-problem-solver"), exports);
|
|
29
|
+
__exportStar(require("./simple-recursive-agent"), exports);
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,+CAA6B;AAC7B,qDAAmC;AACnC,oDAAkC;AAClC,gEAA8C;AAC9C,2DAAyC;AACzC,qDAAmC;AACnC,2CAAyB;AACzB,6DAA2C;AAC3C,2DAAyC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IterativeProblemSolver - An agent that iteratively solves problems using available tools
|
|
3
|
+
*/
|
|
4
|
+
import { LlmBroker } from '../llm/broker';
|
|
5
|
+
import { LlmTool } from '../llm/tools';
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for IterativeProblemSolver
|
|
8
|
+
*/
|
|
9
|
+
export interface IterativeProblemSolverConfig {
|
|
10
|
+
broker: LlmBroker;
|
|
11
|
+
tools?: LlmTool[];
|
|
12
|
+
maxIterations?: number;
|
|
13
|
+
systemPrompt?: string;
|
|
14
|
+
temperature?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* An agent that iteratively attempts to solve a problem using available tools.
|
|
18
|
+
*
|
|
19
|
+
* This solver uses a chat-based approach to break down and solve complex problems.
|
|
20
|
+
* It continues attempting to solve the problem until it either succeeds,
|
|
21
|
+
* fails explicitly, or reaches the maximum number of iterations.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const broker = new LlmBroker('qwen3:32b', new OllamaGateway());
|
|
26
|
+
* const solver = new IterativeProblemSolver({
|
|
27
|
+
* broker,
|
|
28
|
+
* tools: [new DateResolverTool()],
|
|
29
|
+
* maxIterations: 5
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* const result = await solver.solve("What's the date next Friday?");
|
|
33
|
+
* console.log(result);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class IterativeProblemSolver {
|
|
37
|
+
private readonly chat;
|
|
38
|
+
private readonly maxIterations;
|
|
39
|
+
/**
|
|
40
|
+
* Create a new IterativeProblemSolver instance.
|
|
41
|
+
*
|
|
42
|
+
* @param config - Configuration options
|
|
43
|
+
*/
|
|
44
|
+
constructor(config: IterativeProblemSolverConfig);
|
|
45
|
+
/**
|
|
46
|
+
* Execute the problem-solving process.
|
|
47
|
+
*
|
|
48
|
+
* This method runs the iterative problem-solving process, continuing until one of
|
|
49
|
+
* these conditions is met:
|
|
50
|
+
* - The task is completed successfully ("DONE")
|
|
51
|
+
* - The task fails explicitly ("FAIL")
|
|
52
|
+
* - The maximum number of iterations is reached
|
|
53
|
+
*
|
|
54
|
+
* @param problem - The problem or request to be solved
|
|
55
|
+
* @returns A summary of the final result, excluding the process details
|
|
56
|
+
*/
|
|
57
|
+
solve(problem: string): Promise<string>;
|
|
58
|
+
/**
|
|
59
|
+
* Execute a single problem-solving step.
|
|
60
|
+
*
|
|
61
|
+
* This method sends a prompt to the chat session asking it to work on the user's request
|
|
62
|
+
* using available tools. The response should indicate success ("DONE") or failure ("FAIL").
|
|
63
|
+
*
|
|
64
|
+
* @param problem - The problem or request to be solved
|
|
65
|
+
* @returns The response from the chat session, indicating the step's outcome
|
|
66
|
+
*/
|
|
67
|
+
private step;
|
|
68
|
+
/**
|
|
69
|
+
* Get the current chat messages (for inspection/debugging).
|
|
70
|
+
*
|
|
71
|
+
* @returns Array of messages in the chat session
|
|
72
|
+
*/
|
|
73
|
+
getMessages(): import("..").LlmMessage[];
|
|
74
|
+
/**
|
|
75
|
+
* Clear the chat history except the system prompt.
|
|
76
|
+
*/
|
|
77
|
+
clear(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Clean up resources when done.
|
|
80
|
+
*/
|
|
81
|
+
dispose(): void;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=iterative-problem-solver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterative-problem-solver.d.ts","sourceRoot":"","sources":["../../src/agents/iterative-problem-solver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;;OAIG;gBACS,MAAM,EAAE,4BAA4B;IAmBhD;;;;;;;;;;;OAWG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB7C;;;;;;;;OAQG;YACW,IAAI;IAalB;;;;OAIG;IACH,WAAW;IAIX;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IterativeProblemSolver - An agent that iteratively solves problems using available tools
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.IterativeProblemSolver = void 0;
|
|
7
|
+
const chat_session_1 = require("../llm/chat-session");
|
|
8
|
+
/**
|
|
9
|
+
* An agent that iteratively attempts to solve a problem using available tools.
|
|
10
|
+
*
|
|
11
|
+
* This solver uses a chat-based approach to break down and solve complex problems.
|
|
12
|
+
* It continues attempting to solve the problem until it either succeeds,
|
|
13
|
+
* fails explicitly, or reaches the maximum number of iterations.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const broker = new LlmBroker('qwen3:32b', new OllamaGateway());
|
|
18
|
+
* const solver = new IterativeProblemSolver({
|
|
19
|
+
* broker,
|
|
20
|
+
* tools: [new DateResolverTool()],
|
|
21
|
+
* maxIterations: 5
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* const result = await solver.solve("What's the date next Friday?");
|
|
25
|
+
* console.log(result);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
class IterativeProblemSolver {
|
|
29
|
+
chat;
|
|
30
|
+
maxIterations;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new IterativeProblemSolver instance.
|
|
33
|
+
*
|
|
34
|
+
* @param config - Configuration options
|
|
35
|
+
*/
|
|
36
|
+
constructor(config) {
|
|
37
|
+
const { broker, tools = [], maxIterations = 3, systemPrompt = 'You are a problem-solving assistant that can solve complex problems step by step. ' +
|
|
38
|
+
'You analyze problems, break them down into smaller parts, and solve them systematically. ' +
|
|
39
|
+
'If you cannot solve a problem completely in one step, you make progress and identify what to do next.', temperature = 1.0, } = config;
|
|
40
|
+
this.maxIterations = maxIterations;
|
|
41
|
+
this.chat = new chat_session_1.ChatSession(broker, {
|
|
42
|
+
systemPrompt,
|
|
43
|
+
tools,
|
|
44
|
+
temperature,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Execute the problem-solving process.
|
|
49
|
+
*
|
|
50
|
+
* This method runs the iterative problem-solving process, continuing until one of
|
|
51
|
+
* these conditions is met:
|
|
52
|
+
* - The task is completed successfully ("DONE")
|
|
53
|
+
* - The task fails explicitly ("FAIL")
|
|
54
|
+
* - The maximum number of iterations is reached
|
|
55
|
+
*
|
|
56
|
+
* @param problem - The problem or request to be solved
|
|
57
|
+
* @returns A summary of the final result, excluding the process details
|
|
58
|
+
*/
|
|
59
|
+
async solve(problem) {
|
|
60
|
+
let iterationsRemaining = this.maxIterations;
|
|
61
|
+
let shouldContinue = true;
|
|
62
|
+
while (shouldContinue && iterationsRemaining > 0) {
|
|
63
|
+
const result = await this.step(problem);
|
|
64
|
+
if (result.toLowerCase().includes('fail')) {
|
|
65
|
+
shouldContinue = false;
|
|
66
|
+
}
|
|
67
|
+
else if (result.toLowerCase().includes('done')) {
|
|
68
|
+
shouldContinue = false;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
iterationsRemaining--;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const summary = await this.chat.send('Summarize the final result, and only the final result, without commenting on the process by which you achieved it.');
|
|
75
|
+
return summary;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Execute a single problem-solving step.
|
|
79
|
+
*
|
|
80
|
+
* This method sends a prompt to the chat session asking it to work on the user's request
|
|
81
|
+
* using available tools. The response should indicate success ("DONE") or failure ("FAIL").
|
|
82
|
+
*
|
|
83
|
+
* @param problem - The problem or request to be solved
|
|
84
|
+
* @returns The response from the chat session, indicating the step's outcome
|
|
85
|
+
*/
|
|
86
|
+
async step(problem) {
|
|
87
|
+
const prompt = `
|
|
88
|
+
Given the user request:
|
|
89
|
+
${problem}
|
|
90
|
+
|
|
91
|
+
Use the tools at your disposal to act on their request. You may wish to create a step-by-step plan for more complicated requests.
|
|
92
|
+
|
|
93
|
+
If you cannot provide an answer, say only "FAIL".
|
|
94
|
+
If you have the answer, say only "DONE".
|
|
95
|
+
`;
|
|
96
|
+
return this.chat.send(prompt);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get the current chat messages (for inspection/debugging).
|
|
100
|
+
*
|
|
101
|
+
* @returns Array of messages in the chat session
|
|
102
|
+
*/
|
|
103
|
+
getMessages() {
|
|
104
|
+
return this.chat.getMessages();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Clear the chat history except the system prompt.
|
|
108
|
+
*/
|
|
109
|
+
clear() {
|
|
110
|
+
this.chat.clear();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Clean up resources when done.
|
|
114
|
+
*/
|
|
115
|
+
dispose() {
|
|
116
|
+
this.chat.dispose();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.IterativeProblemSolver = IterativeProblemSolver;
|
|
120
|
+
//# sourceMappingURL=iterative-problem-solver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterative-problem-solver.js","sourceRoot":"","sources":["../../src/agents/iterative-problem-solver.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,sDAAkD;AAelD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,sBAAsB;IAChB,IAAI,CAAc;IAClB,aAAa,CAAS;IAEvC;;;;OAIG;IACH,YAAY,MAAoC;QAC9C,MAAM,EACJ,MAAM,EACN,KAAK,GAAG,EAAE,EACV,aAAa,GAAG,CAAC,EACjB,YAAY,GAAG,oFAAoF;YACjG,2FAA2F;YAC3F,uGAAuG,EACzG,WAAW,GAAG,GAAG,GAClB,GAAG,MAAM,CAAC;QAEX,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,0BAAW,CAAC,MAAM,EAAE;YAClC,YAAY;YACZ,KAAK;YACL,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,KAAK,CAAC,OAAe;QACzB,IAAI,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC;QAC7C,IAAI,cAAc,GAAG,IAAI,CAAC;QAE1B,OAAO,cAAc,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAExC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,cAAc,GAAG,KAAK,CAAC;YACzB,CAAC;iBAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjD,cAAc,GAAG,KAAK,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,mBAAmB,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAClC,oHAAoH,CACrH,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,IAAI,CAAC,OAAe;QAChC,MAAM,MAAM,GAAG;;EAEjB,OAAO;;;;;;CAMR,CAAC;QACE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;CACF;AA3GD,wDA2GC"}
|