llm-agent-runtime 0.1.0 → 0.1.2

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/README.md CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  Reusable LangGraph agent runtime (intent routing, sticky flows, checkpointer, tool extractors).
4
4
 
5
- Usage docs deferred until the package is tested end-to-end.
5
+ See **llm-agent-runtime-usage-guide.pdf** in this folder for the usage guide.
@@ -4,6 +4,8 @@ export type AgentRuntime = {
4
4
  connect: () => Promise<void>;
5
5
  disconnect: () => Promise<void>;
6
6
  clearFlow: (threadId: string) => Promise<void>;
7
+ /** Clears LangGraph checkpoint thread (conversation memory). */
8
+ clearThread: (threadId: string) => Promise<void>;
7
9
  getCachedAnswer: (message: string) => Promise<string | undefined>;
8
10
  setCachedAnswer: (message: string, answer: string) => Promise<void>;
9
11
  /** Invalidate embedding cache after changing intent examples at runtime. */
@@ -1 +1 @@
1
- {"version":3,"file":"create-runtime.d.ts","sourceRoot":"","sources":["../src/create-runtime.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EAEb,MAAM,YAAY,CAAC;AAepB,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAClE,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,4EAA4E;IAC5E,0BAA0B,EAAE,MAAM,IAAI,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,YAAY,CAAC,CA6MvB"}
1
+ {"version":3,"file":"create-runtime.d.ts","sourceRoot":"","sources":["../src/create-runtime.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EAEb,MAAM,YAAY,CAAC;AAepB,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,gEAAgE;IAChE,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAClE,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,4EAA4E;IAC5E,0BAA0B,EAAE,MAAM,IAAI,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,YAAY,CAAC,CAsOvB"}
@@ -1,10 +1,12 @@
1
1
  import { createAgentFactory } from "./agent.js";
2
2
  import { createModels } from "./llm.js";
3
+ import { llmConfigFromEnv } from "./env-llm.js";
3
4
  import { createRedis } from "./redis.js";
4
5
  import { createAgentRunner } from "./services/agent-runner.js";
5
6
  import { createChatCache } from "./services/chat-cache.js";
6
7
  import { createConversationService } from "./services/conversation.js";
7
8
  import { createToolOutputExtractor, extractRawToolOutputs } from "./services/extract.js";
9
+ import { createCompleteOnFinalize, toolOutputMapToExtractors, } from "./services/simple-config.js";
8
10
  import { createFlowRouter, stickySetFromIntents, } from "./services/flow-router.js";
9
11
  import { createIntentEmbeddings } from "./services/intent-embeddings.js";
10
12
  import { createIntentRouter } from "./services/intent-router.js";
@@ -40,10 +42,23 @@ export async function createAgentRuntime(config) {
40
42
  };
41
43
  const stickyFlows = stickySetFromIntents(config.intents);
42
44
  const menuMap = config.menuMap ?? {};
43
- const created = createModels(config.llm);
45
+ const llm = config.llm ?? llmConfigFromEnv();
46
+ const created = createModels(llm);
44
47
  const chat = config.models?.chat ?? created.chat;
45
48
  const intentRouterModel = config.models?.intentRouter ?? created.intentRouter;
46
49
  const embeddings = config.models?.embeddings ?? created.embeddings;
50
+ const fromMap = config.toolOutputMap
51
+ ? toolOutputMapToExtractors(config.toolOutputMap)
52
+ : null;
53
+ const toolExtractors = config.toolExtractors ?? fromMap?.toolExtractors;
54
+ const initialToolOutputs = config.initialToolOutputs ?? fromMap?.initialToolOutputs;
55
+ const finalizeFlow = config.finalizeFlow ??
56
+ (config.completeOn?.length
57
+ ? createCompleteOnFinalize({
58
+ completeOn: config.completeOn,
59
+ toolOutputMap: config.toolOutputMap,
60
+ })
61
+ : undefined);
47
62
  // Redis client when redisUrl is set (flow state + optional answer cache)
48
63
  const redis = config.redisUrl
49
64
  ? createRedis(config.redisUrl)
@@ -91,12 +106,14 @@ export async function createAgentRuntime(config) {
91
106
  classifyIntentWithLlm: intentRouter.classifyIntentWithLlm,
92
107
  mergeIntentResults: intentRouter.mergeIntentResults,
93
108
  chatCache,
94
- finalizeFlow: config.finalizeFlow,
109
+ finalizeFlow,
95
110
  thresholds: config.thresholds,
96
111
  });
97
112
  const extractToolOutputs = config.extractToolOutputs ??
98
- (config.toolExtractors
99
- ? createToolOutputExtractor(config.toolExtractors, config.initialToolOutputs, { includeUnknown: config.includeUnknownToolOutputs ?? false })
113
+ (toolExtractors
114
+ ? createToolOutputExtractor(toolExtractors, initialToolOutputs, {
115
+ includeUnknown: config.includeUnknownToolOutputs ?? false,
116
+ })
100
117
  : extractRawToolOutputs);
101
118
  const buildSystemPrompt = config.buildSystemPrompt ??
102
119
  ((ctx) => {
@@ -190,6 +207,13 @@ export async function createAgentRuntime(config) {
190
207
  await redis?.disconnect();
191
208
  },
192
209
  clearFlow: chatCache.clearChatCacheFlowState,
210
+ clearThread: async (threadId) => {
211
+ const saver = agentFactory.checkpointer;
212
+ if (typeof saver.deleteThread === "function") {
213
+ await saver.deleteThread(threadId);
214
+ }
215
+ await chatCache.clearChatCacheFlowState(threadId);
216
+ },
193
217
  getCachedAnswer: chatCache.getCachedAnswer,
194
218
  setCachedAnswer: chatCache.setCachedAnswer,
195
219
  invalidateIntentEmbeddings: intentEmbeddings.invalidate,
@@ -0,0 +1,13 @@
1
+ import type { LlmConfig } from "./types.js";
2
+ /**
3
+ * Build LlmConfig from process.env (Xel / recharge defaults).
4
+ *
5
+ * Env knobs:
6
+ * - LLM_PROVIDER / EMBEDDINGS_PROVIDER — ollama | openai
7
+ * - OLLAMA_MODEL / OPENAI_MODEL
8
+ * - INTENT_ROUTER_MODEL / OPENAI_INTENT_ROUTER_MODEL
9
+ * - OLLAMA_EMBEDDINGS_MODEL / OPENAI_EMBEDDINGS_MODEL
10
+ * - OLLAMA_BASE_URL / OPENAI_API_KEY
11
+ */
12
+ export declare function llmConfigFromEnv(env?: NodeJS.ProcessEnv): LlmConfig;
13
+ //# sourceMappingURL=env-llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-llm.d.ts","sourceRoot":"","sources":["../src/env-llm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAezD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,SAAS,CA6BX"}
@@ -0,0 +1,44 @@
1
+ const asProvider = (value, fallback) => {
2
+ const normalized = value?.trim().toLowerCase();
3
+ if (normalized === "openai" ||
4
+ normalized === "gpt" ||
5
+ normalized === "chatgpt") {
6
+ return "openai";
7
+ }
8
+ if (normalized === "ollama")
9
+ return "ollama";
10
+ return fallback;
11
+ };
12
+ /**
13
+ * Build LlmConfig from process.env (Xel / recharge defaults).
14
+ *
15
+ * Env knobs:
16
+ * - LLM_PROVIDER / EMBEDDINGS_PROVIDER — ollama | openai
17
+ * - OLLAMA_MODEL / OPENAI_MODEL
18
+ * - INTENT_ROUTER_MODEL / OPENAI_INTENT_ROUTER_MODEL
19
+ * - OLLAMA_EMBEDDINGS_MODEL / OPENAI_EMBEDDINGS_MODEL
20
+ * - OLLAMA_BASE_URL / OPENAI_API_KEY
21
+ */
22
+ export function llmConfigFromEnv(env = process.env) {
23
+ const provider = asProvider(env.LLM_PROVIDER, "ollama");
24
+ const embeddingsProvider = asProvider(env.EMBEDDINGS_PROVIDER ?? env.LLM_PROVIDER, provider);
25
+ return {
26
+ provider,
27
+ embeddingsProvider,
28
+ model: provider === "openai"
29
+ ? (env.OPENAI_MODEL ?? "gpt-4o-mini")
30
+ : (env.OLLAMA_MODEL ?? "qwen2.5:7b"),
31
+ intentRouterModel: provider === "openai"
32
+ ? (env.OPENAI_INTENT_ROUTER_MODEL ??
33
+ env.OPENAI_MODEL ??
34
+ "gpt-4o-mini")
35
+ : (env.INTENT_ROUTER_MODEL ??
36
+ env.OLLAMA_INTENT_ROUTER_MODEL ??
37
+ "qwen2.5:7b"),
38
+ embeddingsModel: embeddingsProvider === "openai"
39
+ ? (env.OPENAI_EMBEDDINGS_MODEL ?? "text-embedding-3-small")
40
+ : (env.OLLAMA_EMBEDDINGS_MODEL ?? "mxbai-embed-large:latest"),
41
+ baseUrl: env.OLLAMA_BASE_URL,
42
+ apiKey: env.OPENAI_API_KEY,
43
+ };
44
+ }
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  export { createAgentRuntime, type AgentRuntime } from "./create-runtime.js";
2
2
  export { createModels } from "./llm.js";
3
+ export { llmConfigFromEnv } from "./env-llm.js";
3
4
  export { createRedis } from "./redis.js";
4
5
  export { extractRawToolOutputs, extractToolCallArgs, getToolCallsFromMessages, createToolOutputExtractor, } from "./services/extract.js";
6
+ export { toolOutputMapToExtractors, createCompleteOnFinalize, type ToolOutputMap, } from "./services/simple-config.js";
5
7
  export { isWizardInput } from "./services/flow-router.js";
6
8
  export { getLastMessageContent } from "./utils/message.js";
7
9
  export { normalize } from "./utils/normalize.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,KAAK,aAAa,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  export { createAgentRuntime } from "./create-runtime.js";
2
2
  export { createModels } from "./llm.js";
3
+ export { llmConfigFromEnv } from "./env-llm.js";
3
4
  export { createRedis } from "./redis.js";
4
5
  export { extractRawToolOutputs, extractToolCallArgs, getToolCallsFromMessages, createToolOutputExtractor, } from "./services/extract.js";
6
+ export { toolOutputMapToExtractors, createCompleteOnFinalize, } from "./services/simple-config.js";
5
7
  export { isWizardInput } from "./services/flow-router.js";
6
8
  export { getLastMessageContent } from "./utils/message.js";
7
9
  export { normalize } from "./utils/normalize.js";
@@ -0,0 +1,49 @@
1
+ import type { ToolExtractorMap } from "../types.js";
2
+ /**
3
+ * Simple tool → output key map.
4
+ *
5
+ * @example
6
+ * {
7
+ * create_campaign: "campaign",
8
+ * buy_airtime: "buyAirtime",
9
+ * propose_tickets: { as: "tickets", from: "tickets", initial: [] },
10
+ * }
11
+ */
12
+ export type ToolOutputMap = Record<string, string | {
13
+ /** Key written onto toolOutputs / extras. */
14
+ as: string;
15
+ /** Nested field on tool args (e.g. args.tickets). */
16
+ from?: string;
17
+ /** Seed value when nothing extracted yet. */
18
+ initial?: unknown;
19
+ }>;
20
+ export declare function resolveToolOutputKey(toolName: string, map: ToolOutputMap): string;
21
+ /** Build first-wins extractors + initial seed from a simple map. */
22
+ export declare function toolOutputMapToExtractors(map: ToolOutputMap): {
23
+ toolExtractors: ToolExtractorMap;
24
+ initialToolOutputs: () => Record<string, unknown>;
25
+ };
26
+ /**
27
+ * Default finalize: complete sticky flow when any listed tool produced output.
28
+ * `completeOn` is tool names (keys of toolOutputMap / LangChain tool name).
29
+ */
30
+ export declare function createCompleteOnFinalize(options: {
31
+ completeOn: string[];
32
+ toolOutputMap?: ToolOutputMap;
33
+ }): ({ flow, toolOutputs, }: {
34
+ threadId: string;
35
+ promptIntent: string;
36
+ flow: {
37
+ active: boolean;
38
+ intent: string | null;
39
+ };
40
+ toolOutputs: Record<string, unknown>;
41
+ }) => {
42
+ flowCompleted: boolean;
43
+ flow: {
44
+ active: boolean;
45
+ intent: string | null;
46
+ };
47
+ extras: Record<string, unknown>;
48
+ };
49
+ //# sourceMappingURL=simple-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-config.d.ts","sourceRoot":"","sources":["../../src/services/simple-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,MAAM,EACJ,MAAM,GACN;IACE,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CACJ,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,GACjB,MAAM,CAIR;AAED,oEAAoE;AACpE,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,aAAa,GAAG;IAC7D,cAAc,EAAE,gBAAgB,CAAC;IACjC,kBAAkB,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnD,CAkCA;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,IAGS,wBAGL;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;;;;;;;EA0BF"}
@@ -0,0 +1,70 @@
1
+ export function resolveToolOutputKey(toolName, map) {
2
+ const entry = map[toolName];
3
+ if (!entry)
4
+ return toolName;
5
+ return typeof entry === "string" ? entry : entry.as;
6
+ }
7
+ /** Build first-wins extractors + initial seed from a simple map. */
8
+ export function toolOutputMapToExtractors(map) {
9
+ const toolExtractors = {};
10
+ const initial = {};
11
+ for (const [toolName, entry] of Object.entries(map)) {
12
+ if (typeof entry === "string") {
13
+ toolExtractors[toolName] = (args, acc) => {
14
+ if (acc[entry] !== undefined)
15
+ return;
16
+ acc[entry] = args;
17
+ };
18
+ continue;
19
+ }
20
+ const key = entry.as;
21
+ if (entry.initial !== undefined && !(key in initial)) {
22
+ initial[key] = entry.initial;
23
+ }
24
+ toolExtractors[toolName] = (args, acc) => {
25
+ const current = acc[key];
26
+ if (Array.isArray(current) && current.length > 0)
27
+ return;
28
+ if (current !== undefined && !Array.isArray(current))
29
+ return;
30
+ acc[key] =
31
+ entry.from !== undefined
32
+ ? (args[entry.from] ?? entry.initial ?? [])
33
+ : args;
34
+ };
35
+ }
36
+ return {
37
+ toolExtractors,
38
+ initialToolOutputs: () => ({ ...initial }),
39
+ };
40
+ }
41
+ /**
42
+ * Default finalize: complete sticky flow when any listed tool produced output.
43
+ * `completeOn` is tool names (keys of toolOutputMap / LangChain tool name).
44
+ */
45
+ export function createCompleteOnFinalize(options) {
46
+ const { completeOn, toolOutputMap = {} } = options;
47
+ return ({ flow, toolOutputs, }) => {
48
+ const extras = {};
49
+ let flowCompleted = false;
50
+ for (const toolName of completeOn) {
51
+ const key = resolveToolOutputKey(toolName, toolOutputMap);
52
+ const value = toolOutputs[key];
53
+ const hit = Array.isArray(value)
54
+ ? value.length > 0
55
+ : value !== undefined && value !== null;
56
+ if (hit) {
57
+ flowCompleted = true;
58
+ extras[key] = value;
59
+ }
60
+ }
61
+ return {
62
+ flowCompleted,
63
+ flow: {
64
+ active: flow.active && !flowCompleted,
65
+ intent: flowCompleted ? null : flow.intent,
66
+ },
67
+ extras,
68
+ };
69
+ };
70
+ }
package/dist/types.d.ts CHANGED
@@ -2,6 +2,8 @@ import type { BaseChatModel } from "@langchain/core/language_models/chat_models"
2
2
  import type { Embeddings } from "@langchain/core/embeddings";
3
3
  import type { DynamicStructuredTool } from "@langchain/core/tools";
4
4
  import type { BaseCheckpointSaver } from "@langchain/langgraph-checkpoint";
5
+ import type { ToolOutputMap } from "./services/simple-config.js";
6
+ export type { ToolOutputMap };
5
7
  /** Intent catalog entry used for embedding routing + sticky-flow rules. */
6
8
  export type IntentDefinition = {
7
9
  name: string;
@@ -118,12 +120,19 @@ export type InvokeResult = {
118
120
  };
119
121
  export type AgentRuntimeConfig = {
120
122
  redisUrl?: string;
121
- llm: LlmConfig;
123
+ /**
124
+ * LLM config. Omit to use `llmConfigFromEnv()` (OLLAMA_* / OPENAI_* env vars).
125
+ */
126
+ llm?: LlmConfig;
122
127
  /** Intent catalog for embeddings + sticky flags. */
123
128
  intents: IntentDefinition[];
124
129
  /** Per-intent prompt + tools factory. */
125
130
  intentRegistry: IntentRegistry;
126
- /** Digit / short-code → intent (e.g. greeting menu "1" → create_campaign). */
131
+ /**
132
+ * Optional digit → intent routing (e.g. menu "1" → create_campaign).
133
+ * Prompt text alone cannot switch intent when the user types a number —
134
+ * keep this if you use a numbered menu. Safe to omit otherwise.
135
+ */
127
136
  menuMap?: Record<string, string>;
128
137
  /** Map legacy/alias names onto catalog intents. */
129
138
  intentAliases?: Record<string, string>;
@@ -133,19 +142,27 @@ export type AgentRuntimeConfig = {
133
142
  /** Custom system prompt builder; default uses intentRegistry[intent].prompt. */
134
143
  buildSystemPrompt?: (ctx: PromptContext) => string;
135
144
  /**
136
- * Per-tool extractors (Xel extractToolCall style).
137
- * Prefer this over a custom `extractToolOutputs` unless you need full control.
145
+ * Simple toolName output key map (preferred).
146
+ * @example { create_campaign: "campaign", buy_airtime: "buyAirtime" }
147
+ */
148
+ toolOutputMap?: ToolOutputMap;
149
+ /**
150
+ * Tool names that complete a sticky flow when they produce output.
151
+ * Library owns finalize logic — you only pass the list.
152
+ */
153
+ completeOn?: string[];
154
+ /**
155
+ * Per-tool extractors (advanced). Prefer `toolOutputMap` instead.
138
156
  */
139
157
  toolExtractors?: ToolExtractorMap;
140
158
  /** Seed object for tool extractors (e.g. () => ({ tickets: [] })). */
141
159
  initialToolOutputs?: () => Record<string, unknown>;
142
160
  /** If true, unknown tool names are kept as raw args. Default false when using toolExtractors. */
143
161
  includeUnknownToolOutputs?: boolean;
144
- /** Full custom extractor. Overrides toolExtractors when provided. */
162
+ /** Full custom extractor. Overrides toolOutputMap / toolExtractors when provided. */
145
163
  extractToolOutputs?: (messages: unknown[]) => Record<string, unknown>;
146
164
  /**
147
- * Decide when a sticky flow is done.
148
- * Default: never auto-complete (app must clear via finalize or clearFlow).
165
+ * Custom finalize. Prefer `completeOn` for the common case.
149
166
  */
150
167
  finalizeFlow?: (input: FinalizeFlowInput) => FinalizeFlowResult | Promise<FinalizeFlowResult>;
151
168
  /** Derive phone/session key for tools. Default: phoneKey ?? threadId. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,aAAa,GAAG;IAC1B,sBAAsB,EAAE,OAAO,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,qBAAqB,EAAE,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAE3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG;IACnD,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,oBAAoB,CAAC;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACzB,IAAI,CAAC;AAEV,mEAAmE;AACnE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,SAAS,CAAC;IACf,oDAAoD;IACpD,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,yCAAyC;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,MAAM,CAAC,CAAC;IACxE,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;IACnD;;;OAGG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,iGAAiG;IACjG,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9F,yEAAyE;IACzE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,KAAK,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,UAAU,CAAC,EAAE;QACX,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,mEAAmE;IACnE,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,aAAa,CAAC;QACrB,YAAY,CAAC,EAAE,aAAa,CAAC;QAC7B,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,CAAC;IACF,mEAAmE;IACnE,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "llm-agent-runtime",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Reusable LangGraph agent runtime: intent routing, sticky flows, Redis checkpointer, optional answer cache",
5
5
  "license": "ISC",
6
6
  "type": "module",