@falai/agent 0.6.8 → 0.7.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 +62 -59
- package/dist/adapters/MemoryAdapter.js +2 -2
- package/dist/adapters/MemoryAdapter.js.map +1 -1
- package/dist/adapters/MongoAdapter.js +2 -2
- 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.js +9 -9
- package/dist/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/adapters/PrismaAdapter.js +3 -3
- package/dist/adapters/PrismaAdapter.js.map +1 -1
- package/dist/adapters/RedisAdapter.js +2 -2
- package/dist/adapters/RedisAdapter.js.map +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/adapters/SQLiteAdapter.js +11 -11
- 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.js +2 -2
- package/dist/cjs/adapters/MemoryAdapter.js.map +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +2 -2
- 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.js +9 -9
- package/dist/cjs/adapters/PostgreSQLAdapter.js.map +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +3 -3
- package/dist/cjs/adapters/PrismaAdapter.js.map +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +2 -2
- package/dist/cjs/adapters/RedisAdapter.js.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +3 -3
- package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +11 -11
- 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 +160 -152
- 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 +30 -30
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
- package/dist/cjs/core/RoutingEngine.js +192 -192
- 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 +8 -8
- 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 +162 -154
- 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 +30 -30
- package/dist/core/RoutingEngine.d.ts.map +1 -1
- package/dist/core/RoutingEngine.js +193 -193
- 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 +8 -8
- 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 +57 -55
- package/docs/API_REFERENCE.md +218 -220
- package/docs/ARCHITECTURE.md +99 -104
- package/docs/CONTEXT_MANAGEMENT.md +81 -88
- package/docs/DOCS.md +18 -18
- package/docs/DOMAINS.md +16 -16
- package/docs/EXAMPLES.md +43 -43
- package/docs/GETTING_STARTED.md +60 -63
- package/docs/PERSISTENCE.md +66 -70
- package/docs/PROVIDERS.md +2 -2
- package/docs/README.md +6 -6
- package/docs/ROUTES.md +218 -220
- package/docs/STEPS.md +883 -0
- package/examples/business-onboarding.ts +84 -81
- package/examples/company-qna-agent.ts +68 -67
- package/examples/custom-database-persistence.ts +87 -89
- package/examples/declarative-agent.ts +32 -32
- package/examples/domain-scoping.ts +18 -18
- package/examples/extracted-data-modification.ts +92 -97
- package/examples/healthcare-agent.ts +89 -91
- package/examples/openai-agent.ts +29 -32
- package/examples/opensearch-persistence.ts +43 -45
- package/examples/persistent-onboarding.ts +65 -66
- package/examples/prisma-persistence.ts +108 -112
- package/examples/prisma-schema.example.prisma +3 -3
- package/examples/redis-persistence.ts +67 -73
- package/examples/route-transitions.ts +71 -47
- package/examples/rules-prohibitions.ts +28 -28
- package/examples/streaming-agent.ts +24 -24
- package/examples/travel-agent.ts +94 -109
- package/package.json +1 -1
- package/src/adapters/MemoryAdapter.ts +3 -3
- package/src/adapters/MongoAdapter.ts +3 -3
- package/src/adapters/OpenSearchAdapter.ts +8 -8
- package/src/adapters/PostgreSQLAdapter.ts +10 -10
- package/src/adapters/PrismaAdapter.ts +4 -4
- package/src/adapters/RedisAdapter.ts +3 -3
- package/src/adapters/SQLiteAdapter.ts +15 -15
- package/src/adapters/index.ts +1 -1
- package/src/constants/index.ts +4 -4
- package/src/core/Agent.ts +210 -206
- 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 +244 -252
- 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 +8 -8
- 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,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Example: Company Q&A Agent (
|
|
2
|
+
* Example: Company Q&A Agent (Stepless, Knowledge-Based)
|
|
3
3
|
*
|
|
4
4
|
* This demonstrates:
|
|
5
|
-
* 1. Schema-first architecture for
|
|
5
|
+
* 1. Schema-first architecture for stepless Q&A routes (no schema)
|
|
6
6
|
* 2. Tools for context enrichment (not data extraction)
|
|
7
|
-
* 3. Session
|
|
7
|
+
* 3. Session step management even for stepless conversations
|
|
8
8
|
* 4. Always-on routing with context awareness
|
|
9
9
|
* 5. Three-phase pipeline: PREPARATION → ROUTING → RESPONSE
|
|
10
10
|
*/
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
EventSource,
|
|
16
16
|
createMessageEvent,
|
|
17
17
|
EventKind,
|
|
18
|
-
|
|
18
|
+
END_ROUTE,
|
|
19
19
|
OpenAIProvider,
|
|
20
20
|
} from "../src";
|
|
21
21
|
import type { Event } from "../src/types";
|
|
@@ -231,10 +231,10 @@ const agent = new Agent<CompanyContext>({
|
|
|
231
231
|
});
|
|
232
232
|
|
|
233
233
|
// ==============================================================================
|
|
234
|
-
// ROUTES:
|
|
234
|
+
// ROUTES: STEPLESS Q&A ROUTES (Schema-First Architecture)
|
|
235
235
|
// ==============================================================================
|
|
236
236
|
|
|
237
|
-
// Route 1: Company Information (
|
|
237
|
+
// Route 1: Company Information (stepless - no data extraction)
|
|
238
238
|
const companyInfoRoute = agent.createRoute({
|
|
239
239
|
title: "Company Information",
|
|
240
240
|
description: "Answer general questions about Acme Corp",
|
|
@@ -245,13 +245,13 @@ const companyInfoRoute = agent.createRoute({
|
|
|
245
245
|
"How many employees",
|
|
246
246
|
"Where is the headquarters",
|
|
247
247
|
],
|
|
248
|
-
// NO
|
|
249
|
-
// Just use initial
|
|
248
|
+
// NO schema - stepless Q&A route
|
|
249
|
+
// Just use initial step with instructions for response generation
|
|
250
250
|
});
|
|
251
251
|
|
|
252
|
-
// Initial
|
|
252
|
+
// Initial step: Answer from knowledge base (no data collecting needed)
|
|
253
253
|
|
|
254
|
-
// Route 2: Product Information (
|
|
254
|
+
// Route 2: Product Information (stepless)
|
|
255
255
|
const productInfoRoute = agent.createRoute({
|
|
256
256
|
title: "Product Information",
|
|
257
257
|
description: "Answer questions about products",
|
|
@@ -261,12 +261,12 @@ const productInfoRoute = agent.createRoute({
|
|
|
261
261
|
"What products do you offer",
|
|
262
262
|
"Tell me about your widgets",
|
|
263
263
|
],
|
|
264
|
-
// NO
|
|
264
|
+
// NO schema - just answering questions
|
|
265
265
|
});
|
|
266
266
|
|
|
267
|
-
// Initial
|
|
267
|
+
// Initial step is enough - no transitions needed for simple Q&A
|
|
268
268
|
|
|
269
|
-
// Route 3: Policy Questions (
|
|
269
|
+
// Route 3: Policy Questions (stepless)
|
|
270
270
|
const policyRoute = agent.createRoute({
|
|
271
271
|
title: "Policy Information",
|
|
272
272
|
description: "Answer questions about company policies",
|
|
@@ -276,12 +276,12 @@ const policyRoute = agent.createRoute({
|
|
|
276
276
|
"Shipping information",
|
|
277
277
|
"Warranty questions",
|
|
278
278
|
],
|
|
279
|
-
// NO
|
|
279
|
+
// NO schema
|
|
280
280
|
});
|
|
281
281
|
|
|
282
|
-
// Initial
|
|
282
|
+
// Initial step is enough - no extra setup needed
|
|
283
283
|
|
|
284
|
-
// Route 4: News & Updates (uses tool, but still
|
|
284
|
+
// Route 4: News & Updates (uses tool, but still stepless)
|
|
285
285
|
const newsRoute = agent.createRoute({
|
|
286
286
|
title: "Company News",
|
|
287
287
|
description: "Share latest company news and updates",
|
|
@@ -293,13 +293,13 @@ const newsRoute = agent.createRoute({
|
|
|
293
293
|
],
|
|
294
294
|
});
|
|
295
295
|
|
|
296
|
-
// Add tool to initial
|
|
297
|
-
const fetchNews = newsRoute.
|
|
298
|
-
|
|
296
|
+
// Add tool to initial step to fetch news
|
|
297
|
+
const fetchNews = newsRoute.initialStep.nextStep({
|
|
298
|
+
tool: fetchNewsTool,
|
|
299
299
|
});
|
|
300
300
|
|
|
301
|
-
const shareNews = fetchNews.
|
|
302
|
-
|
|
301
|
+
const shareNews = fetchNews.nextStep({
|
|
302
|
+
instructions: "Share the latest company news from context",
|
|
303
303
|
});
|
|
304
304
|
|
|
305
305
|
// Route 5: General FAQ Search (uses tool)
|
|
@@ -314,12 +314,12 @@ const faqRoute = agent.createRoute({
|
|
|
314
314
|
],
|
|
315
315
|
});
|
|
316
316
|
|
|
317
|
-
const searchFaqs = faqRoute.
|
|
318
|
-
|
|
317
|
+
const searchFaqs = faqRoute.initialStep.nextStep({
|
|
318
|
+
tool: searchKnowledgeTool,
|
|
319
319
|
});
|
|
320
320
|
|
|
321
|
-
const provideFaqAnswer = searchFaqs.
|
|
322
|
-
|
|
321
|
+
const provideFaqAnswer = searchFaqs.nextStep({
|
|
322
|
+
instructions: "Provide answer based on FAQ search results",
|
|
323
323
|
});
|
|
324
324
|
|
|
325
325
|
// Route 6: Fallback (generic response)
|
|
@@ -334,14 +334,14 @@ const fallbackRoute = agent.createRoute({
|
|
|
334
334
|
],
|
|
335
335
|
});
|
|
336
336
|
|
|
337
|
-
// Initial
|
|
337
|
+
// Initial step is enough for fallback conversations
|
|
338
338
|
|
|
339
|
-
// Route 7: Collect Feedback (
|
|
339
|
+
// Route 7: Collect Feedback (Stepful Example)
|
|
340
340
|
const feedbackRoute = agent.createRoute<FeedbackData>({
|
|
341
341
|
title: "Collect Feedback",
|
|
342
342
|
description: "Collect user feedback about their experience",
|
|
343
343
|
conditions: ["User wants to leave feedback", "User seems satisfied or upset"],
|
|
344
|
-
|
|
344
|
+
schema: {
|
|
345
345
|
type: "object",
|
|
346
346
|
properties: {
|
|
347
347
|
rating: {
|
|
@@ -358,33 +358,34 @@ const feedbackRoute = agent.createRoute<FeedbackData>({
|
|
|
358
358
|
},
|
|
359
359
|
required: ["rating", "comments"],
|
|
360
360
|
},
|
|
361
|
-
|
|
362
|
-
|
|
361
|
+
endStep: {
|
|
362
|
+
instructions:
|
|
363
|
+
"Thank the user warmly for their valuable feedback and let them know we appreciate their time",
|
|
363
364
|
},
|
|
364
365
|
});
|
|
365
366
|
|
|
366
|
-
feedbackRoute.
|
|
367
|
-
.
|
|
367
|
+
feedbackRoute.initialStep
|
|
368
|
+
.nextStep({
|
|
368
369
|
id: "ask_rating",
|
|
369
|
-
|
|
370
|
+
instructions:
|
|
370
371
|
"I'd love to hear your feedback. On a scale of 1 to 5, how would you rate your experience with me today?",
|
|
371
|
-
|
|
372
|
+
collect: ["rating"],
|
|
372
373
|
})
|
|
373
|
-
.
|
|
374
|
+
.nextStep({
|
|
374
375
|
id: "ask_comments",
|
|
375
|
-
|
|
376
|
+
instructions:
|
|
376
377
|
"Thanks for the rating! Do you have any specific comments or suggestions?",
|
|
377
|
-
|
|
378
|
-
|
|
378
|
+
collect: ["comments"],
|
|
379
|
+
requires: ["rating"],
|
|
379
380
|
})
|
|
380
|
-
.
|
|
381
|
+
.nextStep({
|
|
381
382
|
id: "ask_permission",
|
|
382
|
-
|
|
383
|
+
instructions:
|
|
383
384
|
"Thank you for the detailed feedback. Would it be okay if our team contacted you for more details?",
|
|
384
|
-
|
|
385
|
-
|
|
385
|
+
collect: ["contactPermission"],
|
|
386
|
+
requires: ["comments"],
|
|
386
387
|
})
|
|
387
|
-
.
|
|
388
|
+
.nextStep({ step: END_ROUTE }); // Uses route-level endStep configuration
|
|
388
389
|
|
|
389
390
|
// ==============================================================================
|
|
390
391
|
// USAGE EXAMPLES: Three-Phase Pipeline Demonstration
|
|
@@ -394,9 +395,9 @@ async function exampleConversations() {
|
|
|
394
395
|
let session = createSession();
|
|
395
396
|
|
|
396
397
|
// =========================================================================
|
|
397
|
-
// Example 1: Simple company info question (
|
|
398
|
+
// Example 1: Simple company info question (stepless)
|
|
398
399
|
// =========================================================================
|
|
399
|
-
console.log("\n=== EXAMPLE 1: Company Info (
|
|
400
|
+
console.log("\n=== EXAMPLE 1: Company Info (Stepless Q&A) ===");
|
|
400
401
|
const history1: Event[] = [
|
|
401
402
|
createMessageEvent(
|
|
402
403
|
EventSource.CUSTOMER,
|
|
@@ -415,12 +416,12 @@ async function exampleConversations() {
|
|
|
415
416
|
* 2. ROUTING: Framework routes to "Company Information" (score: 95)
|
|
416
417
|
* 3. RESPONSE: AI answers from context knowledge
|
|
417
418
|
* - Route: "Company Information"
|
|
418
|
-
* - Session: Updated with route/
|
|
419
|
-
* - No data extraction (
|
|
419
|
+
* - Session: Updated with route/step (even for stepless)
|
|
420
|
+
* - No data extraction (stepless route)
|
|
420
421
|
*/
|
|
421
422
|
|
|
422
423
|
// =========================================================================
|
|
423
|
-
// Example 2: Product question (
|
|
424
|
+
// Example 2: Product question (stepless)
|
|
424
425
|
// =========================================================================
|
|
425
426
|
console.log("\n=== EXAMPLE 2: Product Info ===");
|
|
426
427
|
const history2: Event[] = [
|
|
@@ -438,7 +439,7 @@ async function exampleConversations() {
|
|
|
438
439
|
// Route: "Product Information"
|
|
439
440
|
|
|
440
441
|
// =========================================================================
|
|
441
|
-
// Example 3: Policy question (
|
|
442
|
+
// Example 3: Policy question (stepless)
|
|
442
443
|
// =========================================================================
|
|
443
444
|
console.log("\n=== EXAMPLE 3: Policy Question ===");
|
|
444
445
|
const history3: Event[] = [
|
|
@@ -456,7 +457,7 @@ async function exampleConversations() {
|
|
|
456
457
|
// Route: "Policy Information"
|
|
457
458
|
|
|
458
459
|
// =========================================================================
|
|
459
|
-
// Example 4: News request (tool execution, but still
|
|
460
|
+
// Example 4: News request (tool execution, but still stepless)
|
|
460
461
|
// =========================================================================
|
|
461
462
|
console.log("\n=== EXAMPLE 4: Latest News ===");
|
|
462
463
|
const history4: Event[] = [
|
|
@@ -502,9 +503,9 @@ async function exampleConversations() {
|
|
|
502
503
|
// AI understands "it" refers to Acme Widget from context
|
|
503
504
|
|
|
504
505
|
// =========================================================================
|
|
505
|
-
// Example 6:
|
|
506
|
+
// Example 6: Stepful feedback collection
|
|
506
507
|
// =========================================================================
|
|
507
|
-
console.log("\n=== EXAMPLE 6:
|
|
508
|
+
console.log("\n=== EXAMPLE 6: Stepful Feedback Collection ===");
|
|
508
509
|
const feedbackHistory: Event[] = [
|
|
509
510
|
createMessageEvent(
|
|
510
511
|
EventSource.CUSTOMER,
|
|
@@ -522,7 +523,7 @@ async function exampleConversations() {
|
|
|
522
523
|
|
|
523
524
|
if (feedbackResponse.isRouteComplete) {
|
|
524
525
|
console.log("\n✅ Feedback collection complete!");
|
|
525
|
-
await processFeedback(agent.
|
|
526
|
+
await processFeedback(agent.getData(feedbackResponse.session?.id));
|
|
526
527
|
} else {
|
|
527
528
|
console.log("\n⏳ Feedback collection in progress...");
|
|
528
529
|
}
|
|
@@ -551,10 +552,10 @@ async function processFeedback(data: Partial<FeedbackData>) {
|
|
|
551
552
|
// ==============================================================================
|
|
552
553
|
|
|
553
554
|
/*
|
|
554
|
-
* 1. NO
|
|
555
|
-
* - Just use the initial
|
|
556
|
-
* - No
|
|
557
|
-
* - Perfect for
|
|
555
|
+
* 1. NO STEP MACHINES REQUIRED
|
|
556
|
+
* - Just use the initial step with a instructions description
|
|
557
|
+
* - No collect, no skipIf, no step transitions
|
|
558
|
+
* - Perfect for stepless question-answering
|
|
558
559
|
*
|
|
559
560
|
* 2. ROUTING STILL WORKS
|
|
560
561
|
* - Framework routes to most relevant Q&A route
|
|
@@ -563,7 +564,7 @@ async function processFeedback(data: Partial<FeedbackData>) {
|
|
|
563
564
|
*
|
|
564
565
|
* 3. TOOLS FOR CONTEXT ENRICHMENT
|
|
565
566
|
* - Tools fetch additional data (news, search results)
|
|
566
|
-
* - Updates context (not
|
|
567
|
+
* - Updates context (not collected data)
|
|
567
568
|
* - AI uses enriched context to answer
|
|
568
569
|
*
|
|
569
570
|
* 4. KNOWLEDGE IN CONTEXT
|
|
@@ -571,14 +572,14 @@ async function processFeedback(data: Partial<FeedbackData>) {
|
|
|
571
572
|
* - Use contextProvider for always-fresh data
|
|
572
573
|
* - Tools can augment context at runtime
|
|
573
574
|
*
|
|
574
|
-
* 5. MIX
|
|
575
|
-
* - Have Q&A routes (
|
|
576
|
-
* - AND booking/onboarding routes (
|
|
575
|
+
* 5. MIX STEPFUL & STEPLESS
|
|
576
|
+
* - Have Q&A routes (stepless)
|
|
577
|
+
* - AND booking/onboarding routes (stepful)
|
|
577
578
|
* - Framework handles both seamlessly
|
|
578
579
|
*
|
|
579
580
|
* 6. GUIDELINES FOR BEHAVIOR
|
|
580
581
|
* - Use guidelines for general behavioral rules
|
|
581
|
-
* - No need for complex
|
|
582
|
+
* - No need for complex step machines for simple policies
|
|
582
583
|
* - Keep it simple!
|
|
583
584
|
*
|
|
584
585
|
* ARCHITECTURE FOR Q&A:
|
|
@@ -591,21 +592,21 @@ async function processFeedback(data: Partial<FeedbackData>) {
|
|
|
591
592
|
* ↓
|
|
592
593
|
* Response (AI answers from context)
|
|
593
594
|
* ↓
|
|
594
|
-
* Done (no
|
|
595
|
+
* Done (no step tracking needed)
|
|
595
596
|
*
|
|
596
|
-
* vs.
|
|
597
|
+
* vs. STEPFUL FLOWS (booking, onboarding):
|
|
597
598
|
*
|
|
598
599
|
* User Intent
|
|
599
600
|
* ↓
|
|
600
601
|
* Routing
|
|
601
602
|
* ↓
|
|
602
|
-
*
|
|
603
|
+
* Step Machine (collect data step-by-step)
|
|
603
604
|
* ↓
|
|
604
|
-
* Tools (validate/enrich
|
|
605
|
+
* Tools (validate/enrich collected data)
|
|
605
606
|
* ↓
|
|
606
607
|
* Response (continue conversation)
|
|
607
608
|
* ↓
|
|
608
|
-
* Track Session (
|
|
609
|
+
* Track Session (collected data, current step)
|
|
609
610
|
*/
|
|
610
611
|
|
|
611
612
|
if (require.main === module) {
|