@falai/agent 0.6.9 ā 0.8.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/README.md +78 -82
- package/dist/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/adapters/MemoryAdapter.js +3 -3
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.d.ts +1 -1
- package/dist/adapters/MongoAdapter.js +3 -3
- package/dist/adapters/MongoAdapter.js.map +1 -1
- package/dist/adapters/OpenSearchAdapter.js +7 -7
- package/dist/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +10 -10
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/adapters/PrismaAdapter.js +4 -4
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.d.ts +1 -1
- package/dist/adapters/RedisAdapter.js +3 -3
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +4 -4
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +12 -12
- package/dist/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +3 -3
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +3 -3
- package/dist/cjs/adapters/MongoAdapter.js.map +1 -1
- package/dist/cjs/adapters/OpenSearchAdapter.js +7 -7
- package/dist/cjs/adapters/OpenSearchAdapter.js.map +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +10 -10
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +4 -4
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +3 -3
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +4 -4
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +12 -12
- package/dist/cjs/adapters/SQLiteAdapter.js.map +1 -1
- package/dist/cjs/adapters/index.d.ts +1 -1
- package/dist/cjs/adapters/index.d.ts.map +1 -1
- package/dist/cjs/constants/index.d.ts +4 -4
- package/dist/cjs/constants/index.js +5 -5
- package/dist/cjs/core/Agent.d.ts +22 -22
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +168 -160
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/Events.d.ts +6 -6
- package/dist/cjs/core/Events.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts +13 -13
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +24 -24
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/ResponseEngine.d.ts +3 -8
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +8 -8
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/Route.d.ts +17 -17
- package/dist/cjs/core/Route.d.ts.map +1 -1
- package/dist/cjs/core/Route.js +33 -33
- package/dist/cjs/core/Route.js.map +1 -1
- package/dist/cjs/core/RoutingEngine.d.ts +31 -31
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
- package/dist/cjs/core/RoutingEngine.js +196 -196
- package/dist/cjs/core/RoutingEngine.js.map +1 -1
- package/dist/cjs/core/Step.d.ts +72 -0
- package/dist/cjs/core/Step.d.ts.map +1 -0
- package/dist/cjs/core/Step.js +150 -0
- package/dist/cjs/core/Step.js.map +1 -0
- package/dist/cjs/core/ToolExecutor.d.ts +5 -5
- package/dist/cjs/core/ToolExecutor.d.ts.map +1 -1
- package/dist/cjs/core/ToolExecutor.js +8 -8
- package/dist/cjs/core/ToolExecutor.js.map +1 -1
- package/dist/cjs/core/Transition.d.ts +14 -14
- package/dist/cjs/core/Transition.d.ts.map +1 -1
- package/dist/cjs/core/Transition.js +48 -19
- package/dist/cjs/core/Transition.js.map +1 -1
- package/dist/cjs/index.d.ts +7 -7
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -8
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +9 -9
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/ai.d.ts +2 -2
- package/dist/cjs/types/ai.d.ts.map +1 -1
- package/dist/cjs/types/history.d.ts +3 -3
- package/dist/cjs/types/history.d.ts.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -1
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/persistence.d.ts +5 -5
- package/dist/cjs/types/persistence.d.ts.map +1 -1
- package/dist/cjs/types/route.d.ts +57 -52
- package/dist/cjs/types/route.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +27 -27
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/session.js +48 -50
- package/dist/cjs/types/session.js.map +1 -1
- package/dist/cjs/types/tool.d.ts +13 -13
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/cjs/utils/id.d.ts +8 -3
- package/dist/cjs/utils/id.d.ts.map +1 -1
- package/dist/cjs/utils/id.js +16 -7
- package/dist/cjs/utils/id.js.map +1 -1
- package/dist/constants/index.d.ts +4 -4
- package/dist/constants/index.js +4 -4
- package/dist/core/Agent.d.ts +22 -22
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +170 -162
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/Events.d.ts +6 -6
- package/dist/core/Events.d.ts.map +1 -1
- package/dist/core/PersistenceManager.d.ts +13 -13
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +25 -25
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/ResponseEngine.d.ts +3 -8
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +8 -8
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/Route.d.ts +17 -17
- package/dist/core/Route.d.ts.map +1 -1
- package/dist/core/Route.js +33 -33
- package/dist/core/Route.js.map +1 -1
- package/dist/core/RoutingEngine.d.ts +31 -31
- package/dist/core/RoutingEngine.d.ts.map +1 -1
- package/dist/core/RoutingEngine.js +197 -197
- package/dist/core/RoutingEngine.js.map +1 -1
- package/dist/core/Step.d.ts +72 -0
- package/dist/core/Step.d.ts.map +1 -0
- package/dist/core/Step.js +146 -0
- package/dist/core/Step.js.map +1 -0
- package/dist/core/ToolExecutor.d.ts +5 -5
- package/dist/core/ToolExecutor.d.ts.map +1 -1
- package/dist/core/ToolExecutor.js +8 -8
- package/dist/core/ToolExecutor.js.map +1 -1
- package/dist/core/Transition.d.ts +14 -14
- package/dist/core/Transition.d.ts.map +1 -1
- package/dist/core/Transition.js +48 -19
- package/dist/core/Transition.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/types/agent.d.ts +9 -9
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/ai.d.ts +2 -2
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/history.d.ts +3 -3
- package/dist/types/history.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/persistence.d.ts +5 -5
- package/dist/types/persistence.d.ts.map +1 -1
- package/dist/types/route.d.ts +57 -52
- package/dist/types/route.d.ts.map +1 -1
- package/dist/types/session.d.ts +27 -27
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js +44 -46
- package/dist/types/session.js.map +1 -1
- package/dist/types/tool.d.ts +13 -13
- package/dist/types/tool.d.ts.map +1 -1
- package/dist/utils/id.d.ts +8 -3
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +14 -6
- package/dist/utils/id.js.map +1 -1
- package/docs/ADAPTERS.md +21 -21
- package/docs/AGENT.md +63 -61
- package/docs/API_REFERENCE.md +218 -220
- package/docs/ARCHITECTURE.md +99 -104
- package/docs/CONTEXT_MANAGEMENT.md +84 -91
- package/docs/CONTRIBUTING.md +3 -3
- package/docs/DOCS.md +18 -18
- package/docs/DOMAINS.md +18 -18
- package/docs/EXAMPLES.md +44 -44
- package/docs/GETTING_STARTED.md +63 -66
- package/docs/PERSISTENCE.md +70 -74
- package/docs/PROVIDERS.md +6 -6
- package/docs/README.md +6 -6
- package/docs/ROUTES.md +218 -220
- package/docs/STEPS.md +883 -0
- package/examples/business-onboarding.ts +85 -82
- package/examples/company-qna-agent.ts +69 -68
- package/examples/custom-database-persistence.ts +89 -91
- package/examples/declarative-agent.ts +33 -33
- package/examples/domain-scoping.ts +20 -20
- package/examples/extracted-data-modification.ts +93 -98
- package/examples/healthcare-agent.ts +90 -92
- package/examples/openai-agent.ts +30 -33
- package/examples/opensearch-persistence.ts +46 -48
- package/examples/persistent-onboarding.ts +67 -68
- package/examples/prisma-persistence.ts +111 -115
- package/examples/prisma-schema.example.prisma +3 -3
- package/examples/redis-persistence.ts +70 -76
- package/examples/route-transitions.ts +72 -48
- package/examples/rules-prohibitions.ts +31 -31
- package/examples/streaming-agent.ts +29 -29
- package/examples/travel-agent.ts +95 -110
- package/package.json +1 -1
- package/src/adapters/MemoryAdapter.ts +4 -4
- package/src/adapters/MongoAdapter.ts +4 -4
- package/src/adapters/OpenSearchAdapter.ts +8 -8
- package/src/adapters/PostgreSQLAdapter.ts +11 -11
- package/src/adapters/PrismaAdapter.ts +5 -5
- package/src/adapters/RedisAdapter.ts +4 -4
- package/src/adapters/SQLiteAdapter.ts +16 -16
- package/src/adapters/index.ts +1 -1
- package/src/constants/index.ts +4 -4
- package/src/core/Agent.ts +218 -214
- package/src/core/Events.ts +12 -12
- package/src/core/PersistenceManager.ts +32 -36
- package/src/core/ResponseEngine.ts +11 -17
- package/src/core/Route.ts +55 -49
- package/src/core/RoutingEngine.ts +252 -258
- package/src/core/Step.ts +197 -0
- package/src/core/ToolExecutor.ts +11 -11
- package/src/core/Transition.ts +72 -26
- package/src/index.ts +8 -8
- package/src/types/agent.ts +9 -9
- package/src/types/ai.ts +2 -2
- package/src/types/history.ts +3 -3
- package/src/types/index.ts +1 -1
- package/src/types/persistence.ts +6 -6
- package/src/types/route.ts +77 -61
- package/src/types/session.ts +75 -78
- package/src/types/tool.ts +17 -17
- package/src/utils/id.ts +15 -6
- package/dist/cjs/core/State.d.ts +0 -72
- package/dist/cjs/core/State.d.ts.map +0 -1
- package/dist/cjs/core/State.js +0 -148
- package/dist/cjs/core/State.js.map +0 -1
- package/dist/core/State.d.ts +0 -72
- package/dist/core/State.d.ts.map +0 -1
- package/dist/core/State.js +0 -144
- package/dist/core/State.js.map +0 -1
- package/docs/STATES.md +0 -888
- package/src/core/State.ts +0 -212
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Rules & Prohibitions Example
|
|
3
|
-
* Updated for v2 architecture with session
|
|
3
|
+
* Updated for v2 architecture with session step management
|
|
4
4
|
*
|
|
5
5
|
* Demonstrates how to use rules and prohibitions to control agent behavior
|
|
6
6
|
* in different conversation routes (e.g., WhatsApp bot with different styles)
|
|
@@ -12,14 +12,14 @@ import {
|
|
|
12
12
|
type MessageEventData,
|
|
13
13
|
EventKind,
|
|
14
14
|
EventSource,
|
|
15
|
-
|
|
15
|
+
END_ROUTE,
|
|
16
16
|
} from "../src";
|
|
17
17
|
import { OpenAIProvider } from "../src/providers/OpenAIProvider";
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Configuration for the AI provider
|
|
21
21
|
*/
|
|
22
|
-
const
|
|
22
|
+
const provider = new OpenAIProvider({
|
|
23
23
|
apiKey: process.env.OPENAI_API_KEY || "your-api-key-here",
|
|
24
24
|
model: "gpt-5",
|
|
25
25
|
});
|
|
@@ -32,7 +32,7 @@ const agent = new Agent({
|
|
|
32
32
|
description:
|
|
33
33
|
"A versatile customer service agent that adapts its behavior based on the conversation's context.",
|
|
34
34
|
goal: "Provide excellent customer service by following route-specific rules and prohibitions.",
|
|
35
|
-
|
|
35
|
+
provider,
|
|
36
36
|
debug: true,
|
|
37
37
|
});
|
|
38
38
|
|
|
@@ -99,26 +99,26 @@ agent.createRoute({
|
|
|
99
99
|
],
|
|
100
100
|
});
|
|
101
101
|
|
|
102
|
-
// Add a
|
|
102
|
+
// Add a stepful feedback flow to the Technical Support route
|
|
103
103
|
const techSupportRoute = agent
|
|
104
104
|
.getRoutes()
|
|
105
105
|
.find((r) => r.title === "Technical Support")!;
|
|
106
|
-
techSupportRoute.
|
|
107
|
-
.
|
|
108
|
-
|
|
106
|
+
techSupportRoute.initialStep
|
|
107
|
+
.nextStep({
|
|
108
|
+
instructions: "Provide step-by-step technical assistance.",
|
|
109
109
|
})
|
|
110
|
-
.
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
.nextStep({
|
|
111
|
+
instructions: "Ask for a rating of the support provided (1-5).",
|
|
112
|
+
collect: ["feedbackRating"],
|
|
113
113
|
})
|
|
114
|
-
.
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
.nextStep({
|
|
115
|
+
instructions: "Ask for any additional comments.",
|
|
116
|
+
collect: ["feedbackComments"],
|
|
117
117
|
})
|
|
118
|
-
.
|
|
119
|
-
|
|
118
|
+
.nextStep({
|
|
119
|
+
instructions: "Thank the user for their feedback.",
|
|
120
120
|
})
|
|
121
|
-
.
|
|
121
|
+
.nextStep({ step: END_ROUTE });
|
|
122
122
|
|
|
123
123
|
agent.createRoute({
|
|
124
124
|
title: "Emergency Support",
|
|
@@ -166,7 +166,7 @@ async function demonstrateRulesAndProhibitions() {
|
|
|
166
166
|
description:
|
|
167
167
|
"A versatile customer service agent that adapts its behavior based on the conversation's context.",
|
|
168
168
|
goal: "Provide excellent customer service by following route-specific rules and prohibitions.",
|
|
169
|
-
|
|
169
|
+
provider,
|
|
170
170
|
debug: true,
|
|
171
171
|
});
|
|
172
172
|
|
|
@@ -231,26 +231,26 @@ async function demonstrateRulesAndProhibitions() {
|
|
|
231
231
|
],
|
|
232
232
|
});
|
|
233
233
|
|
|
234
|
-
// Add a
|
|
234
|
+
// Add a stepful feedback flow to the Technical Support route
|
|
235
235
|
const techSupportRoute = agent
|
|
236
236
|
.getRoutes()
|
|
237
237
|
.find((r) => r.title === "Technical Support")!;
|
|
238
|
-
techSupportRoute.
|
|
239
|
-
.
|
|
240
|
-
|
|
238
|
+
techSupportRoute.initialStep
|
|
239
|
+
.nextStep({
|
|
240
|
+
instructions: "Provide step-by-step technical assistance.",
|
|
241
241
|
})
|
|
242
|
-
.
|
|
243
|
-
|
|
244
|
-
|
|
242
|
+
.nextStep({
|
|
243
|
+
instructions: "Ask for a rating of the support provided (1-5).",
|
|
244
|
+
collect: ["feedbackRating"],
|
|
245
245
|
})
|
|
246
|
-
.
|
|
247
|
-
|
|
248
|
-
|
|
246
|
+
.nextStep({
|
|
247
|
+
instructions: "Ask for any additional comments.",
|
|
248
|
+
collect: ["feedbackComments"],
|
|
249
249
|
})
|
|
250
|
-
.
|
|
251
|
-
|
|
250
|
+
.nextStep({
|
|
251
|
+
instructions: "Thank the user for their feedback.",
|
|
252
252
|
})
|
|
253
|
-
.
|
|
253
|
+
.nextStep({ step: END_ROUTE });
|
|
254
254
|
|
|
255
255
|
agent.createRoute({
|
|
256
256
|
title: "Emergency Support",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Example: Streaming Responses
|
|
3
|
-
* Updated for v2 architecture with session
|
|
3
|
+
* Updated for v2 architecture with session step management
|
|
4
4
|
*
|
|
5
5
|
* This example demonstrates how to use the respondStream method
|
|
6
6
|
* to stream AI responses in real-time for better user experience
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
OpenAIProvider,
|
|
15
15
|
GeminiProvider,
|
|
16
16
|
createSession,
|
|
17
|
-
|
|
17
|
+
END_ROUTE,
|
|
18
18
|
} from "../src/index";
|
|
19
19
|
|
|
20
20
|
// Custom context type
|
|
@@ -51,7 +51,7 @@ async function streamingWithAnthropic() {
|
|
|
51
51
|
streamingEnabled: true,
|
|
52
52
|
},
|
|
53
53
|
},
|
|
54
|
-
|
|
54
|
+
provider: provider,
|
|
55
55
|
});
|
|
56
56
|
|
|
57
57
|
// Add guidelines
|
|
@@ -73,10 +73,10 @@ async function streamingWithAnthropic() {
|
|
|
73
73
|
console.log("š¤ Streaming response from Claude...\n");
|
|
74
74
|
console.log("Response: ");
|
|
75
75
|
|
|
76
|
-
// Initialize session
|
|
76
|
+
// Initialize session step for streaming conversation
|
|
77
77
|
let session = createSession();
|
|
78
78
|
|
|
79
|
-
// Use respondStream for real-time streaming with session
|
|
79
|
+
// Use respondStream for real-time streaming with session step
|
|
80
80
|
let fullMessage = "";
|
|
81
81
|
for await (const chunk of agent.respondStream({ history, session })) {
|
|
82
82
|
// chunk.delta contains the new text
|
|
@@ -94,7 +94,7 @@ async function streamingWithAnthropic() {
|
|
|
94
94
|
console.log(
|
|
95
95
|
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
96
96
|
);
|
|
97
|
-
console.log(` -
|
|
97
|
+
console.log(` - Data:`, chunk.session?.data || "None");
|
|
98
98
|
console.log(` - Tool Calls: ${chunk.toolCalls?.length || 0}`);
|
|
99
99
|
|
|
100
100
|
// Update session with progress
|
|
@@ -127,7 +127,7 @@ async function streamingWithOpenAI() {
|
|
|
127
127
|
streamingEnabled: true,
|
|
128
128
|
},
|
|
129
129
|
},
|
|
130
|
-
|
|
130
|
+
provider: provider,
|
|
131
131
|
});
|
|
132
132
|
|
|
133
133
|
const history = [
|
|
@@ -142,7 +142,7 @@ async function streamingWithOpenAI() {
|
|
|
142
142
|
console.log("š¤ Streaming response from OpenAI...\n");
|
|
143
143
|
console.log("Response: ");
|
|
144
144
|
|
|
145
|
-
// Initialize session
|
|
145
|
+
// Initialize session step for streaming conversation
|
|
146
146
|
let session = createSession();
|
|
147
147
|
|
|
148
148
|
for await (const chunk of agent.respondStream({ history, session })) {
|
|
@@ -155,7 +155,7 @@ async function streamingWithOpenAI() {
|
|
|
155
155
|
console.log(
|
|
156
156
|
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
157
157
|
);
|
|
158
|
-
console.log(` -
|
|
158
|
+
console.log(` - Data:`, chunk.session?.data || "None");
|
|
159
159
|
|
|
160
160
|
// Update session with progress
|
|
161
161
|
session = chunk.session!;
|
|
@@ -187,7 +187,7 @@ async function streamingWithGemini() {
|
|
|
187
187
|
streamingEnabled: true,
|
|
188
188
|
},
|
|
189
189
|
},
|
|
190
|
-
|
|
190
|
+
provider: provider,
|
|
191
191
|
});
|
|
192
192
|
|
|
193
193
|
const history = [
|
|
@@ -202,7 +202,7 @@ async function streamingWithGemini() {
|
|
|
202
202
|
console.log("š¤ Streaming response from Gemini...\n");
|
|
203
203
|
console.log("Response: ");
|
|
204
204
|
|
|
205
|
-
// Initialize session
|
|
205
|
+
// Initialize session step for streaming conversation
|
|
206
206
|
let session = createSession();
|
|
207
207
|
|
|
208
208
|
for await (const chunk of agent.respondStream({ history, session })) {
|
|
@@ -215,7 +215,7 @@ async function streamingWithGemini() {
|
|
|
215
215
|
console.log(
|
|
216
216
|
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
217
217
|
);
|
|
218
|
-
console.log(` -
|
|
218
|
+
console.log(` - Data:`, chunk.session?.data || "None");
|
|
219
219
|
|
|
220
220
|
// Update session with progress
|
|
221
221
|
session = chunk.session!;
|
|
@@ -227,7 +227,7 @@ async function streamingWithGemini() {
|
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
async function streamingWithRoutes() {
|
|
230
|
-
console.log("\nš¤ Example 4: Streaming with Routes and
|
|
230
|
+
console.log("\nš¤ Example 4: Streaming with Routes and Steps\n");
|
|
231
231
|
|
|
232
232
|
const provider = new AnthropicProvider({
|
|
233
233
|
apiKey: process.env.ANTHROPIC_API_KEY || "",
|
|
@@ -244,7 +244,7 @@ async function streamingWithRoutes() {
|
|
|
244
244
|
streamingEnabled: true,
|
|
245
245
|
},
|
|
246
246
|
},
|
|
247
|
-
|
|
247
|
+
provider: provider,
|
|
248
248
|
});
|
|
249
249
|
|
|
250
250
|
// Create a route
|
|
@@ -254,8 +254,8 @@ async function streamingWithRoutes() {
|
|
|
254
254
|
conditions: ["User asks about product features or issues"],
|
|
255
255
|
});
|
|
256
256
|
|
|
257
|
-
supportRoute.
|
|
258
|
-
|
|
257
|
+
supportRoute.initialStep.nextStep({
|
|
258
|
+
instructions: "Understand the user's product question",
|
|
259
259
|
});
|
|
260
260
|
|
|
261
261
|
// Create a feedback route
|
|
@@ -266,7 +266,7 @@ async function streamingWithRoutes() {
|
|
|
266
266
|
title: "Collect Feedback",
|
|
267
267
|
description: "Collect user feedback on their support experience",
|
|
268
268
|
conditions: ["User wants to provide feedback"],
|
|
269
|
-
|
|
269
|
+
schema: {
|
|
270
270
|
type: "object",
|
|
271
271
|
properties: {
|
|
272
272
|
rating: { type: "number", minimum: 1, maximum: 5 },
|
|
@@ -276,15 +276,15 @@ async function streamingWithRoutes() {
|
|
|
276
276
|
},
|
|
277
277
|
steps: [
|
|
278
278
|
{
|
|
279
|
-
|
|
280
|
-
|
|
279
|
+
instructions: "How would you rate your support experience from 1 to 5?",
|
|
280
|
+
collect: ["rating"],
|
|
281
281
|
},
|
|
282
282
|
{
|
|
283
|
-
|
|
284
|
-
|
|
283
|
+
instructions: "Thanks for the rating! Any other comments?",
|
|
284
|
+
collect: ["comments"],
|
|
285
285
|
},
|
|
286
286
|
{
|
|
287
|
-
|
|
287
|
+
instructions: "We appreciate your feedback!",
|
|
288
288
|
},
|
|
289
289
|
],
|
|
290
290
|
});
|
|
@@ -301,7 +301,7 @@ async function streamingWithRoutes() {
|
|
|
301
301
|
console.log("š¤ Streaming response with route detection...\n");
|
|
302
302
|
console.log("Response: ");
|
|
303
303
|
|
|
304
|
-
// Initialize session
|
|
304
|
+
// Initialize session step for streaming conversation
|
|
305
305
|
let session = createSession();
|
|
306
306
|
|
|
307
307
|
for await (const chunk of agent.respondStream({ history, session })) {
|
|
@@ -315,14 +315,14 @@ async function streamingWithRoutes() {
|
|
|
315
315
|
console.log(
|
|
316
316
|
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
317
317
|
);
|
|
318
|
-
console.log(` -
|
|
318
|
+
console.log(` - Data:`, chunk.session?.data || "None");
|
|
319
319
|
|
|
320
320
|
// Check for route completion
|
|
321
321
|
if (chunk.isRouteComplete) {
|
|
322
322
|
console.log("\nā
Route complete!");
|
|
323
323
|
if (chunk.session?.currentRoute?.title === "Collect Feedback") {
|
|
324
324
|
await logFeedback(
|
|
325
|
-
agent.
|
|
325
|
+
agent.getData(chunk.session?.id) as {
|
|
326
326
|
rating: number;
|
|
327
327
|
comments: string;
|
|
328
328
|
}
|
|
@@ -357,7 +357,7 @@ async function streamingWithAbortSignal() {
|
|
|
357
357
|
streamingEnabled: true,
|
|
358
358
|
},
|
|
359
359
|
},
|
|
360
|
-
|
|
360
|
+
provider: provider,
|
|
361
361
|
});
|
|
362
362
|
|
|
363
363
|
const history = [
|
|
@@ -381,7 +381,7 @@ async function streamingWithAbortSignal() {
|
|
|
381
381
|
console.log("š¤ Streaming response (will abort after 3s)...\n");
|
|
382
382
|
console.log("Response: ");
|
|
383
383
|
|
|
384
|
-
// Initialize session
|
|
384
|
+
// Initialize session step for streaming conversation
|
|
385
385
|
let session = createSession();
|
|
386
386
|
|
|
387
387
|
for await (const chunk of agent.respondStream({
|
|
@@ -399,7 +399,7 @@ async function streamingWithAbortSignal() {
|
|
|
399
399
|
console.log(
|
|
400
400
|
` - Route: ${chunk.session?.currentRoute?.title || "None"}`
|
|
401
401
|
);
|
|
402
|
-
console.log(` -
|
|
402
|
+
console.log(` - Data:`, chunk.session?.data || "None");
|
|
403
403
|
|
|
404
404
|
// Update session with progress
|
|
405
405
|
session = chunk.session!;
|
|
@@ -453,7 +453,7 @@ async function main() {
|
|
|
453
453
|
console.log(" - Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GEMINI_API_KEY");
|
|
454
454
|
console.log(" - Streaming provides real-time responses for better UX");
|
|
455
455
|
console.log(" - Use AbortSignal to cancel long-running streams");
|
|
456
|
-
console.log(" - Access chunk.route and chunk.
|
|
456
|
+
console.log(" - Access chunk.route and chunk.step for flow information");
|
|
457
457
|
|
|
458
458
|
console.log("\n" + "=".repeat(60));
|
|
459
459
|
|