@falai/agent 0.9.0 → 0.9.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 +42 -34
- package/dist/cjs/src/core/Agent.d.ts +19 -5
- package/dist/cjs/src/core/Agent.d.ts.map +1 -1
- package/dist/cjs/src/core/Agent.js +79 -35
- package/dist/cjs/src/core/Agent.js.map +1 -1
- package/dist/cjs/src/core/ResponseModal.d.ts +9 -3
- package/dist/cjs/src/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/src/core/ResponseModal.js +121 -55
- package/dist/cjs/src/core/ResponseModal.js.map +1 -1
- package/dist/cjs/src/core/ResponsePipeline.d.ts +8 -4
- package/dist/cjs/src/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/cjs/src/core/ResponsePipeline.js +47 -19
- package/dist/cjs/src/core/ResponsePipeline.js.map +1 -1
- package/dist/cjs/src/core/Route.d.ts +12 -5
- package/dist/cjs/src/core/Route.d.ts.map +1 -1
- package/dist/cjs/src/core/Route.js +26 -5
- package/dist/cjs/src/core/Route.js.map +1 -1
- package/dist/cjs/src/core/RoutingEngine.d.ts +5 -0
- package/dist/cjs/src/core/RoutingEngine.d.ts.map +1 -1
- package/dist/cjs/src/core/RoutingEngine.js +37 -25
- package/dist/cjs/src/core/RoutingEngine.js.map +1 -1
- package/dist/cjs/src/core/SessionManager.d.ts +9 -1
- package/dist/cjs/src/core/SessionManager.d.ts.map +1 -1
- package/dist/cjs/src/core/SessionManager.js +27 -5
- package/dist/cjs/src/core/SessionManager.js.map +1 -1
- package/dist/cjs/src/core/Step.d.ts +60 -7
- package/dist/cjs/src/core/Step.d.ts.map +1 -1
- package/dist/cjs/src/core/Step.js +151 -4
- package/dist/cjs/src/core/Step.js.map +1 -1
- package/dist/cjs/src/core/ToolManager.d.ts +234 -0
- package/dist/cjs/src/core/ToolManager.d.ts.map +1 -0
- package/dist/cjs/src/core/ToolManager.js +1117 -0
- package/dist/cjs/src/core/ToolManager.js.map +1 -0
- package/dist/cjs/src/index.d.ts +2 -3
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +5 -3
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/types/agent.d.ts +1 -1
- package/dist/cjs/src/types/agent.d.ts.map +1 -1
- package/dist/cjs/src/types/index.d.ts +3 -2
- package/dist/cjs/src/types/index.d.ts.map +1 -1
- package/dist/cjs/src/types/index.js +3 -1
- package/dist/cjs/src/types/index.js.map +1 -1
- package/dist/cjs/src/types/route.d.ts +6 -4
- package/dist/cjs/src/types/route.d.ts.map +1 -1
- package/dist/cjs/src/types/tool.d.ts +84 -14
- package/dist/cjs/src/types/tool.d.ts.map +1 -1
- package/dist/cjs/src/types/tool.js +13 -0
- package/dist/cjs/src/types/tool.js.map +1 -1
- package/dist/src/core/Agent.d.ts +19 -5
- package/dist/src/core/Agent.d.ts.map +1 -1
- package/dist/src/core/Agent.js +79 -35
- package/dist/src/core/Agent.js.map +1 -1
- package/dist/src/core/ResponseModal.d.ts +9 -3
- package/dist/src/core/ResponseModal.d.ts.map +1 -1
- package/dist/src/core/ResponseModal.js +121 -55
- package/dist/src/core/ResponseModal.js.map +1 -1
- package/dist/src/core/ResponsePipeline.d.ts +8 -4
- package/dist/src/core/ResponsePipeline.d.ts.map +1 -1
- package/dist/src/core/ResponsePipeline.js +47 -19
- package/dist/src/core/ResponsePipeline.js.map +1 -1
- package/dist/src/core/Route.d.ts +12 -5
- package/dist/src/core/Route.d.ts.map +1 -1
- package/dist/src/core/Route.js +26 -5
- package/dist/src/core/Route.js.map +1 -1
- package/dist/src/core/RoutingEngine.d.ts +5 -0
- package/dist/src/core/RoutingEngine.d.ts.map +1 -1
- package/dist/src/core/RoutingEngine.js +37 -25
- package/dist/src/core/RoutingEngine.js.map +1 -1
- package/dist/src/core/SessionManager.d.ts +9 -1
- package/dist/src/core/SessionManager.d.ts.map +1 -1
- package/dist/src/core/SessionManager.js +27 -5
- package/dist/src/core/SessionManager.js.map +1 -1
- package/dist/src/core/Step.d.ts +60 -7
- package/dist/src/core/Step.d.ts.map +1 -1
- package/dist/src/core/Step.js +151 -4
- package/dist/src/core/Step.js.map +1 -1
- package/dist/src/core/ToolManager.d.ts +234 -0
- package/dist/src/core/ToolManager.d.ts.map +1 -0
- package/dist/src/core/ToolManager.js +1111 -0
- package/dist/src/core/ToolManager.js.map +1 -0
- package/dist/src/index.d.ts +2 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/types/agent.d.ts +1 -1
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +3 -2
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +1 -0
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/route.d.ts +6 -4
- package/dist/src/types/route.d.ts.map +1 -1
- package/dist/src/types/tool.d.ts +84 -14
- package/dist/src/types/tool.d.ts.map +1 -1
- package/dist/src/types/tool.js +12 -1
- package/dist/src/types/tool.js.map +1 -1
- package/docs/CONTRIBUTING.md +40 -0
- package/docs/README.md +12 -5
- package/docs/api/README.md +75 -45
- package/docs/api/overview.md +74 -32
- package/docs/core/agent/session-management.md +152 -5
- package/docs/core/ai-integration/response-processing.md +115 -4
- package/docs/core/conversation-flows/routes.md +130 -0
- package/docs/core/error-handling.md +638 -0
- package/docs/core/tools/tool-definition.md +684 -60
- package/docs/core/tools/tool-scoping.md +244 -53
- package/docs/guides/error-handling-patterns.md +578 -0
- package/docs/guides/getting-started/README.md +139 -28
- package/examples/advanced-patterns/knowledge-based-agent.ts +6 -6
- package/examples/advanced-patterns/persistent-onboarding.ts +30 -43
- package/examples/ai-providers/anthropic-integration.ts +9 -5
- package/examples/ai-providers/openai-integration.ts +11 -7
- package/examples/core-concepts/basic-agent.ts +106 -67
- package/examples/core-concepts/schema-driven-extraction.ts +10 -7
- package/examples/core-concepts/session-management.ts +71 -18
- package/examples/integrations/healthcare-integration.ts +15 -29
- package/examples/integrations/server-session-management.ts +3 -3
- package/examples/persistence/memory-sessions.ts +3 -3
- package/examples/tools/basic-tools.ts +293 -89
- package/examples/tools/data-enrichment-tools.ts +185 -75
- package/package.json +1 -1
- package/src/core/Agent.ts +98 -44
- package/src/core/ResponseModal.ts +148 -72
- package/src/core/ResponsePipeline.ts +82 -56
- package/src/core/Route.ts +39 -12
- package/src/core/RoutingEngine.ts +46 -42
- package/src/core/SessionManager.ts +39 -7
- package/src/core/Step.ts +198 -20
- package/src/core/ToolManager.ts +1394 -0
- package/src/index.ts +8 -3
- package/src/types/agent.ts +1 -1
- package/src/types/index.ts +13 -2
- package/src/types/route.ts +6 -4
- package/src/types/tool.ts +116 -25
- package/dist/cjs/src/core/ToolExecutor.d.ts +0 -45
- package/dist/cjs/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/cjs/src/core/ToolExecutor.js +0 -84
- package/dist/cjs/src/core/ToolExecutor.js.map +0 -1
- package/dist/src/core/ToolExecutor.d.ts +0 -45
- package/dist/src/core/ToolExecutor.d.ts.map +0 -1
- package/dist/src/core/ToolExecutor.js +0 -80
- package/dist/src/core/ToolExecutor.js.map +0 -1
- package/docs/core/tools/tool-execution.md +0 -815
- package/src/core/ToolExecutor.ts +0 -126
|
@@ -74,6 +74,8 @@ Routes are selected by the AI routing system based on user intent and conversati
|
|
|
74
74
|
|
|
75
75
|
Routes complete when all their required fields are present in the agent's collected data, regardless of which route collected the data. This enables flexible cross-route completion scenarios.
|
|
76
76
|
|
|
77
|
+
### Basic Route Completion
|
|
78
|
+
|
|
77
79
|
```typescript
|
|
78
80
|
// Route completion evaluation
|
|
79
81
|
const isComplete = bookingRoute.isComplete(agent.getCollectedData());
|
|
@@ -86,6 +88,134 @@ if (missingFields.length > 0) {
|
|
|
86
88
|
}
|
|
87
89
|
```
|
|
88
90
|
|
|
91
|
+
### Route Completion with Error Handling
|
|
92
|
+
|
|
93
|
+
Proper error handling ensures accurate route completion detection:
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
const checkRouteCompletion = async (route: Route, agent: Agent) => {
|
|
97
|
+
try {
|
|
98
|
+
const collectedData = agent.getCollectedData();
|
|
99
|
+
|
|
100
|
+
// Check data-based completion
|
|
101
|
+
if (route.isComplete(collectedData)) {
|
|
102
|
+
return { complete: true, reason: "all_required_data_collected" };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Check step-based completion (for routes with skipIf conditions)
|
|
106
|
+
const allStepsProcessed = route.steps.every(step => {
|
|
107
|
+
if (step.skipIf && step.skipIf(collectedData)) {
|
|
108
|
+
return true; // Step is skipped, counts as processed
|
|
109
|
+
}
|
|
110
|
+
return step.isCompleted;
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
if (allStepsProcessed) {
|
|
114
|
+
return { complete: true, reason: "all_steps_processed" };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Check for explicit route termination
|
|
118
|
+
if (route.hasExplicitEnd()) {
|
|
119
|
+
return { complete: true, reason: "explicit_end_route" };
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
complete: false,
|
|
124
|
+
missingFields: route.getMissingRequiredFields(collectedData),
|
|
125
|
+
progress: route.getCompletionProgress(collectedData)
|
|
126
|
+
};
|
|
127
|
+
} catch (error) {
|
|
128
|
+
console.error("Route completion check failed:", error);
|
|
129
|
+
return {
|
|
130
|
+
complete: false,
|
|
131
|
+
error: error.message,
|
|
132
|
+
fallback: true
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
// Usage with error handling
|
|
138
|
+
const completionResult = await checkRouteCompletion(bookingRoute, agent);
|
|
139
|
+
|
|
140
|
+
if (completionResult.error) {
|
|
141
|
+
console.warn("Completion check failed, assuming incomplete:", completionResult.error);
|
|
142
|
+
} else if (completionResult.complete) {
|
|
143
|
+
console.log(`Route completed: ${completionResult.reason}`);
|
|
144
|
+
} else {
|
|
145
|
+
console.log(`Route ${Math.round(completionResult.progress * 100)}% complete`);
|
|
146
|
+
console.log(`Missing: ${completionResult.missingFields.join(', ')}`);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Handling Routes with Conditional Steps
|
|
151
|
+
|
|
152
|
+
Routes with `skipIf` conditions require special completion logic:
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
const conditionalRoute = agent.createRoute({
|
|
156
|
+
title: "Conditional Booking",
|
|
157
|
+
requiredFields: ["destination", "dates", "passengers"]
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
const askDestination = conditionalRoute.initialStep.nextStep({
|
|
161
|
+
prompt: "Where would you like to go?",
|
|
162
|
+
collect: ["destination"],
|
|
163
|
+
skipIf: (data) => !!data.destination, // Skip if already collected
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const askDates = askDestination.nextStep({
|
|
167
|
+
prompt: "When would you like to travel?",
|
|
168
|
+
collect: ["dates"],
|
|
169
|
+
skipIf: (data) => !!data.dates,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
const confirmBooking = askDates.nextStep({
|
|
173
|
+
prompt: "Confirm your booking details",
|
|
174
|
+
requires: ["destination", "dates", "passengers"],
|
|
175
|
+
onComplete: () => ({ endRoute: true }) // Explicit route termination
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
// Completion detection handles skipped steps
|
|
179
|
+
const response = await agent.respond({
|
|
180
|
+
message: "I want to go to Paris on March 15th for 2 passengers",
|
|
181
|
+
sessionId: "user-123"
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// All steps may be skipped due to complete data extraction
|
|
185
|
+
// Route should still be marked as complete
|
|
186
|
+
console.log("Route complete:", response.isRouteComplete); // Should be true
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Error Recovery in Route Completion
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
const safeRouteCompletion = async (route: Route, agent: Agent) => {
|
|
193
|
+
const maxRetries = 3;
|
|
194
|
+
let attempt = 0;
|
|
195
|
+
|
|
196
|
+
while (attempt < maxRetries) {
|
|
197
|
+
try {
|
|
198
|
+
return await checkRouteCompletion(route, agent);
|
|
199
|
+
} catch (error) {
|
|
200
|
+
attempt++;
|
|
201
|
+
console.warn(`Route completion check attempt ${attempt} failed:`, error.message);
|
|
202
|
+
|
|
203
|
+
if (attempt >= maxRetries) {
|
|
204
|
+
// Final fallback - assume incomplete
|
|
205
|
+
return {
|
|
206
|
+
complete: false,
|
|
207
|
+
error: `Completion check failed after ${maxRetries} attempts: ${error.message}`,
|
|
208
|
+
fallback: true
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Brief delay before retry
|
|
213
|
+
await new Promise(resolve => setTimeout(resolve, 100 * attempt));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
```
|
|
218
|
+
|
|
89
219
|
## Route Transitions
|
|
90
220
|
|
|
91
221
|
Routes can automatically transition to other routes upon completion using the `onComplete` configuration. With agent-level data, the target route may already have some of its required data.
|