@falai/agent 0.7.0 → 0.8.1
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 +23 -30
- package/dist/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/adapters/MemoryAdapter.js +1 -1
- package/dist/adapters/MongoAdapter.d.ts +1 -1
- package/dist/adapters/MongoAdapter.js +1 -1
- package/dist/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/adapters/PostgreSQLAdapter.js +1 -1
- package/dist/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/adapters/PrismaAdapter.js +1 -1
- package/dist/adapters/RedisAdapter.d.ts +1 -1
- package/dist/adapters/RedisAdapter.js +1 -1
- package/dist/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/adapters/SQLiteAdapter.js +1 -1
- package/dist/cjs/adapters/MemoryAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MemoryAdapter.js +1 -1
- package/dist/cjs/adapters/MongoAdapter.d.ts +1 -1
- package/dist/cjs/adapters/MongoAdapter.js +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PostgreSQLAdapter.js +1 -1
- package/dist/cjs/adapters/PrismaAdapter.d.ts +1 -1
- package/dist/cjs/adapters/PrismaAdapter.js +1 -1
- package/dist/cjs/adapters/RedisAdapter.d.ts +1 -1
- package/dist/cjs/adapters/RedisAdapter.js +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.d.ts +1 -1
- package/dist/cjs/adapters/SQLiteAdapter.js +1 -1
- package/dist/cjs/core/Agent.d.ts +8 -8
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +10 -10
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/PersistenceManager.d.ts +10 -10
- package/dist/cjs/core/PersistenceManager.d.ts.map +1 -1
- package/dist/cjs/core/PersistenceManager.js +9 -9
- package/dist/cjs/core/PersistenceManager.js.map +1 -1
- package/dist/cjs/core/RoutingEngine.d.ts +5 -5
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
- package/dist/cjs/core/RoutingEngine.js +5 -5
- package/dist/cjs/core/RoutingEngine.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/types/agent.d.ts +3 -3
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/session.d.ts +9 -9
- package/dist/cjs/types/session.d.ts.map +1 -1
- package/dist/cjs/types/session.js +2 -2
- package/dist/cjs/types/session.js.map +1 -1
- package/dist/core/Agent.d.ts +8 -8
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +10 -10
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/PersistenceManager.d.ts +10 -10
- package/dist/core/PersistenceManager.d.ts.map +1 -1
- package/dist/core/PersistenceManager.js +9 -9
- package/dist/core/PersistenceManager.js.map +1 -1
- package/dist/core/RoutingEngine.d.ts +5 -5
- package/dist/core/RoutingEngine.d.ts.map +1 -1
- package/dist/core/RoutingEngine.js +5 -5
- package/dist/core/RoutingEngine.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/types/agent.d.ts +3 -3
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/session.d.ts +9 -9
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js +2 -2
- package/dist/types/session.js.map +1 -1
- package/docs/ADAPTERS.md +1 -1
- package/docs/AGENT.md +9 -9
- package/docs/API_REFERENCE.md +15 -15
- package/docs/CONTEXT_MANAGEMENT.md +6 -6
- package/docs/CONTRIBUTING.md +3 -3
- package/docs/DOMAINS.md +2 -2
- package/docs/EXAMPLES.md +1 -1
- package/docs/GETTING_STARTED.md +3 -3
- package/docs/PERSISTENCE.md +11 -11
- package/docs/PROVIDERS.md +4 -4
- package/examples/business-onboarding.ts +1 -1
- package/examples/company-qna-agent.ts +1 -1
- package/examples/custom-database-persistence.ts +8 -8
- package/examples/declarative-agent.ts +1 -1
- package/examples/domain-scoping.ts +2 -2
- package/examples/extracted-data-modification.ts +1 -1
- package/examples/healthcare-agent.ts +1 -1
- package/examples/openai-agent.ts +1 -1
- package/examples/opensearch-persistence.ts +4 -4
- package/examples/persistent-onboarding.ts +2 -2
- package/examples/prisma-persistence.ts +4 -4
- package/examples/redis-persistence.ts +5 -5
- package/examples/route-transitions.ts +4 -4
- package/examples/rules-prohibitions.ts +3 -3
- package/examples/streaming-agent.ts +5 -5
- package/examples/travel-agent.ts +1 -1
- package/package.json +1 -1
- package/src/adapters/MemoryAdapter.ts +1 -1
- package/src/adapters/MongoAdapter.ts +1 -1
- package/src/adapters/PostgreSQLAdapter.ts +1 -1
- package/src/adapters/PrismaAdapter.ts +1 -1
- package/src/adapters/RedisAdapter.ts +1 -1
- package/src/adapters/SQLiteAdapter.ts +1 -1
- package/src/core/Agent.ts +23 -23
- package/src/core/PersistenceManager.ts +13 -13
- package/src/core/RoutingEngine.ts +15 -13
- package/src/index.ts +1 -1
- package/src/types/agent.ts +3 -3
- package/src/types/session.ts +15 -15
package/docs/PERSISTENCE.md
CHANGED
|
@@ -98,7 +98,7 @@ interface BookingData {
|
|
|
98
98
|
|
|
99
99
|
const agent = new Agent({
|
|
100
100
|
name: "My Agent",
|
|
101
|
-
|
|
101
|
+
provider: new GeminiProvider({ apiKey: "..." }),
|
|
102
102
|
// ✨ Just add this!
|
|
103
103
|
persistence: {
|
|
104
104
|
adapter: new PrismaAdapter({ prisma }),
|
|
@@ -219,7 +219,7 @@ Enable automatic message persistence:
|
|
|
219
219
|
```typescript
|
|
220
220
|
const agent = new Agent({
|
|
221
221
|
name: "My Agent",
|
|
222
|
-
|
|
222
|
+
provider: provider,
|
|
223
223
|
persistence: {
|
|
224
224
|
adapter: new PrismaAdapter({ prisma }),
|
|
225
225
|
autoSave: true, // Default: true
|
|
@@ -235,7 +235,7 @@ The most powerful pattern - auto-sync context with database:
|
|
|
235
235
|
```typescript
|
|
236
236
|
const agent = new Agent({
|
|
237
237
|
name: "Smart Assistant",
|
|
238
|
-
|
|
238
|
+
provider: provider,
|
|
239
239
|
context: {
|
|
240
240
|
userId: "user_123",
|
|
241
241
|
sessionId: session.id,
|
|
@@ -270,7 +270,7 @@ await agent.updateContext({ preferences: { theme: "dark" } });
|
|
|
270
270
|
|
|
271
271
|
## Session Step Integration
|
|
272
272
|
|
|
273
|
-
The new architecture automatically saves and loads `
|
|
273
|
+
The new architecture automatically saves and loads `SessionState<TData>` which includes:
|
|
274
274
|
|
|
275
275
|
- **Current route and step** - Track conversation progress
|
|
276
276
|
- **Collected data** - All data collected via `schema` and `collect` fields
|
|
@@ -280,7 +280,7 @@ The new architecture automatically saves and loads `SessionStep<TData>` which in
|
|
|
280
280
|
### How It Works
|
|
281
281
|
|
|
282
282
|
1. **Auto-Save**: When `autoSave: true`, session step is automatically persisted after each `respond()` call
|
|
283
|
-
2. **Conversion**: `
|
|
283
|
+
2. **Conversion**: `SessionState` is automatically converted to `SessionData` for storage
|
|
284
284
|
3. **Recovery**: Load session step from database to resume conversations
|
|
285
285
|
|
|
286
286
|
### Create Session with Step
|
|
@@ -303,14 +303,14 @@ const { sessionData, sessionStep } =
|
|
|
303
303
|
|
|
304
304
|
```typescript
|
|
305
305
|
// Manual save (not needed if autoSave: true)
|
|
306
|
-
await persistence.
|
|
306
|
+
await persistence.saveSessionState(sessionId, sessionStep);
|
|
307
307
|
```
|
|
308
308
|
|
|
309
309
|
### Load Session Step
|
|
310
310
|
|
|
311
311
|
```typescript
|
|
312
312
|
// Load session step from database
|
|
313
|
-
const sessionStep = await persistence.
|
|
313
|
+
const sessionStep = await persistence.loadSessionState<YourDataType>(sessionId);
|
|
314
314
|
|
|
315
315
|
// Load message history
|
|
316
316
|
const history = await persistence.loadSessionHistory(sessionId);
|
|
@@ -374,10 +374,10 @@ const { sessionData, sessionStep } =
|
|
|
374
374
|
});
|
|
375
375
|
|
|
376
376
|
// Save session step (NEW!)
|
|
377
|
-
await persistence.
|
|
377
|
+
await persistence.saveSessionState(sessionId, sessionStep);
|
|
378
378
|
|
|
379
379
|
// Load session step (NEW!)
|
|
380
|
-
const sessionStep = await persistence.
|
|
380
|
+
const sessionStep = await persistence.loadSessionState<YourDataType>(sessionId);
|
|
381
381
|
|
|
382
382
|
// Create session (legacy)
|
|
383
383
|
await persistence.createSession({
|
|
@@ -478,7 +478,7 @@ import { PrismaClient } from "@prisma/client";
|
|
|
478
478
|
const prisma = new PrismaClient();
|
|
479
479
|
const agent = new Agent({
|
|
480
480
|
name: "Assistant",
|
|
481
|
-
|
|
481
|
+
provider: provider,
|
|
482
482
|
persistence: {
|
|
483
483
|
adapter: new PrismaAdapter({ prisma }),
|
|
484
484
|
},
|
|
@@ -531,7 +531,7 @@ await persistence.saveMessage({
|
|
|
531
531
|
2. ✅ **Enable `autoSave: true`** - Automatically persist session step after each response
|
|
532
532
|
3. ✅ **Define extraction schemas** - Use `schema` in routes for structured data collection
|
|
533
533
|
4. ✅ **Pass session step** - Always pass `session` parameter to `agent.respond()`
|
|
534
|
-
5. ✅ **Load session step** - Use `
|
|
534
|
+
5. ✅ **Load session step** - Use `loadSessionState()` to resume conversations
|
|
535
535
|
6. ✅ **Store collected data** - Leverage `collectedData.data` for user input tracking
|
|
536
536
|
7. ✅ **Index frequently queried fields** - Add database indexes on `userId`, `status`, etc.
|
|
537
537
|
8. ✅ **Use cascading deletes** - Clean up messages automatically when deleting sessions
|
package/docs/PROVIDERS.md
CHANGED
|
@@ -385,7 +385,7 @@ import {
|
|
|
385
385
|
// Use Anthropic (Claude)
|
|
386
386
|
const claudeAgent = new Agent({
|
|
387
387
|
name: "Claude Assistant",
|
|
388
|
-
|
|
388
|
+
provider: new AnthropicProvider({
|
|
389
389
|
apiKey: process.env.ANTHROPIC_API_KEY!,
|
|
390
390
|
model: "claude-sonnet-4-5",
|
|
391
391
|
}),
|
|
@@ -394,7 +394,7 @@ const claudeAgent = new Agent({
|
|
|
394
394
|
// Use Gemini
|
|
395
395
|
const geminiAgent = new Agent({
|
|
396
396
|
name: "Gemini Assistant",
|
|
397
|
-
|
|
397
|
+
provider: new GeminiProvider({
|
|
398
398
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
399
399
|
model: "models/gemini-2.5-flash",
|
|
400
400
|
}),
|
|
@@ -403,7 +403,7 @@ const geminiAgent = new Agent({
|
|
|
403
403
|
// Use OpenAI
|
|
404
404
|
const openaiAgent = new Agent({
|
|
405
405
|
name: "OpenAI Assistant",
|
|
406
|
-
|
|
406
|
+
provider: new OpenAIProvider({
|
|
407
407
|
apiKey: process.env.OPENAI_API_KEY!,
|
|
408
408
|
model: "gpt-5",
|
|
409
409
|
}),
|
|
@@ -412,7 +412,7 @@ const openaiAgent = new Agent({
|
|
|
412
412
|
// Use OpenRouter (access to 200+ models)
|
|
413
413
|
const openrouterAgent = new Agent({
|
|
414
414
|
name: "OpenRouter Assistant",
|
|
415
|
-
|
|
415
|
+
provider: new OpenRouterProvider({
|
|
416
416
|
apiKey: process.env.OPENROUTER_API_KEY!,
|
|
417
417
|
model: "anthropic/claude-sonnet-4-5",
|
|
418
418
|
}),
|
|
@@ -379,7 +379,7 @@ async function createBusinessOnboardingAgent(
|
|
|
379
379
|
description:
|
|
380
380
|
"A specialized assistant that helps businesses set up intelligent conversation routes for their customers.",
|
|
381
381
|
goal: "Collect comprehensive business information and create personalized conversation routes",
|
|
382
|
-
|
|
382
|
+
provider: provider,
|
|
383
383
|
context: {
|
|
384
384
|
userId,
|
|
385
385
|
userName,
|
|
@@ -146,7 +146,7 @@ const agent = new Agent<CompanyContext>({
|
|
|
146
146
|
"I'm here to help you learn about Acme Corp, our products, and policies",
|
|
147
147
|
personality:
|
|
148
148
|
"Friendly, helpful, and knowledgeable. Always professional but approachable.",
|
|
149
|
-
|
|
149
|
+
provider: new OpenAIProvider({
|
|
150
150
|
apiKey: process.env.OPENAI_API_KEY || "test-key",
|
|
151
151
|
model: "gpt-5o-mini",
|
|
152
152
|
}),
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
createMessageEvent,
|
|
17
17
|
EventSource,
|
|
18
18
|
createSession,
|
|
19
|
-
|
|
19
|
+
SessionState,
|
|
20
20
|
MessageEventData,
|
|
21
21
|
Event,
|
|
22
22
|
END_ROUTE,
|
|
@@ -133,7 +133,7 @@ async function example() {
|
|
|
133
133
|
name: "Onboarding Assistant",
|
|
134
134
|
description: "Help new customers get started",
|
|
135
135
|
goal: "Collect customer information efficiently",
|
|
136
|
-
|
|
136
|
+
provider: new GeminiProvider({
|
|
137
137
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
138
138
|
model: "models/gemini-2.0-flash-exp",
|
|
139
139
|
}),
|
|
@@ -218,9 +218,9 @@ async function example() {
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
/**
|
|
221
|
-
* Convert database session to agent
|
|
221
|
+
* Convert database session to agent SessionState
|
|
222
222
|
*/
|
|
223
|
-
let agentSession:
|
|
223
|
+
let agentSession: SessionState<OnboardingData>;
|
|
224
224
|
|
|
225
225
|
if (dbSession.currentRoute && dbSession.collectedData) {
|
|
226
226
|
// Restore existing session from database
|
|
@@ -248,7 +248,7 @@ async function example() {
|
|
|
248
248
|
>) || {},
|
|
249
249
|
routeHistory:
|
|
250
250
|
(dbSession.collectedData
|
|
251
|
-
?.routeHistory as
|
|
251
|
+
?.routeHistory as SessionState<OnboardingData>["routeHistory"]) || [],
|
|
252
252
|
metadata: {
|
|
253
253
|
sessionId: dbSession.id,
|
|
254
254
|
userId,
|
|
@@ -404,7 +404,7 @@ async function example() {
|
|
|
404
404
|
if (!reloadedDbSession) throw new Error("Session not found");
|
|
405
405
|
|
|
406
406
|
// Reconstruct session step
|
|
407
|
-
const recoveredSession:
|
|
407
|
+
const recoveredSession: SessionState<OnboardingData> = {
|
|
408
408
|
currentRoute: reloadedDbSession.currentRoute
|
|
409
409
|
? {
|
|
410
410
|
id: reloadedDbSession.currentRoute,
|
|
@@ -430,7 +430,7 @@ async function example() {
|
|
|
430
430
|
>) || {},
|
|
431
431
|
routeHistory:
|
|
432
432
|
(reloadedDbSession.collectedData
|
|
433
|
-
?.routeHistory as
|
|
433
|
+
?.routeHistory as SessionState<OnboardingData>["routeHistory"]) || [],
|
|
434
434
|
metadata: {
|
|
435
435
|
sessionId: reloadedDbSession.id,
|
|
436
436
|
userId,
|
|
@@ -479,7 +479,7 @@ async function advancedExample() {
|
|
|
479
479
|
|
|
480
480
|
const agent = new Agent({
|
|
481
481
|
name: "Smart Onboarding",
|
|
482
|
-
|
|
482
|
+
provider: new GeminiProvider({
|
|
483
483
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
484
484
|
model: "models/gemini-2.0-flash-exp",
|
|
485
485
|
}),
|
|
@@ -296,7 +296,7 @@ const agent = new Agent<HealthcareContext>({
|
|
|
296
296
|
patientId: "p_12345",
|
|
297
297
|
patientName: "Alice Johnson",
|
|
298
298
|
},
|
|
299
|
-
|
|
299
|
+
provider: new GeminiProvider({
|
|
300
300
|
apiKey: process.env.GEMINI_API_KEY || "demo-key",
|
|
301
301
|
model: "models/gemini-2.5-flash",
|
|
302
302
|
}),
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
import { OpenRouterProvider } from "../src/providers";
|
|
24
24
|
|
|
25
25
|
// Initialize AI provider
|
|
26
|
-
const
|
|
26
|
+
const provider = new OpenRouterProvider({
|
|
27
27
|
apiKey: process.env.OPENROUTER_API_KEY || "your-api-key-here",
|
|
28
28
|
model: "google/gemini-2.0-flash-exp",
|
|
29
29
|
backupModels: ["anthropic/claude-sonnet-4-5"],
|
|
@@ -34,7 +34,7 @@ const agent = new Agent({
|
|
|
34
34
|
name: "Multi-Domain Assistant",
|
|
35
35
|
description:
|
|
36
36
|
"An assistant that handles different tasks with domain-scoped tools",
|
|
37
|
-
|
|
37
|
+
provider,
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
// Register different domains with their tools
|
|
@@ -252,7 +252,7 @@ const agent = new Agent<FlightBookingContext>({
|
|
|
252
252
|
name: "Flight Booking Agent",
|
|
253
253
|
goal: "Help users book flights efficiently",
|
|
254
254
|
description: "I help you find and book flights",
|
|
255
|
-
|
|
255
|
+
provider: new OpenAIProvider({
|
|
256
256
|
apiKey: process.env.OPENAI_API_KEY || "your-api-key-here",
|
|
257
257
|
model: "gpt-5o-mini",
|
|
258
258
|
}),
|
|
@@ -106,7 +106,7 @@ async function createHealthcareAgent() {
|
|
|
106
106
|
const agent = new Agent<HealthcareContext>({
|
|
107
107
|
name: "Healthcare Agent",
|
|
108
108
|
description: "Is empathetic and calming to the patient.",
|
|
109
|
-
|
|
109
|
+
provider: provider,
|
|
110
110
|
context: {
|
|
111
111
|
patientId: "patient-123",
|
|
112
112
|
patientName: "Test Patient",
|
package/examples/openai-agent.ts
CHANGED
|
@@ -81,7 +81,7 @@ async function example() {
|
|
|
81
81
|
name: "Customer Service Agent",
|
|
82
82
|
description: "Handle customer complaints with full-text search",
|
|
83
83
|
goal: "Resolve customer issues efficiently",
|
|
84
|
-
|
|
84
|
+
provider: new GeminiProvider({
|
|
85
85
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
86
86
|
model: "models/gemini-2.0-flash-exp",
|
|
87
87
|
}),
|
|
@@ -248,7 +248,7 @@ async function example() {
|
|
|
248
248
|
|
|
249
249
|
// Load session from OpenSearch
|
|
250
250
|
console.log("\n--- Loading Session from OpenSearch ---");
|
|
251
|
-
const loadedSession = await persistence.
|
|
251
|
+
const loadedSession = await persistence.loadSessionState<ComplaintData>(
|
|
252
252
|
sessionData.id
|
|
253
253
|
);
|
|
254
254
|
|
|
@@ -331,7 +331,7 @@ async function analyticsExample() {
|
|
|
331
331
|
|
|
332
332
|
const agent = new Agent({
|
|
333
333
|
name: "Support Analyzer",
|
|
334
|
-
|
|
334
|
+
provider: new GeminiProvider({
|
|
335
335
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
336
336
|
model: "models/gemini-2.0-flash-exp",
|
|
337
337
|
}),
|
|
@@ -442,7 +442,7 @@ async function timeSeriesExample() {
|
|
|
442
442
|
|
|
443
443
|
const agent = new Agent({
|
|
444
444
|
name: "Metrics Agent",
|
|
445
|
-
|
|
445
|
+
provider: new GeminiProvider({
|
|
446
446
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
447
447
|
model: "models/gemini-2.0-flash-exp",
|
|
448
448
|
}),
|
|
@@ -130,7 +130,7 @@ async function createPersistentOnboardingAgent(sessionId: string) {
|
|
|
130
130
|
name: "OnboardingBot",
|
|
131
131
|
description: "A friendly assistant that helps businesses get started",
|
|
132
132
|
goal: "Collect business information efficiently while being conversational",
|
|
133
|
-
|
|
133
|
+
provider: provider,
|
|
134
134
|
// Context is loaded fresh from database on each respond() call
|
|
135
135
|
contextProvider: async () => {
|
|
136
136
|
console.log("🔄 Loading fresh context from database...");
|
|
@@ -359,7 +359,7 @@ async function createOnboardingAgentWithProvider(sessionId: string) {
|
|
|
359
359
|
const agent = new Agent<OnboardingContext>({
|
|
360
360
|
name: "OnboardingBot",
|
|
361
361
|
description: "A friendly assistant that helps businesses get started",
|
|
362
|
-
|
|
362
|
+
provider: provider,
|
|
363
363
|
|
|
364
364
|
// Context is always fetched fresh from database
|
|
365
365
|
contextProvider: async () => {
|
|
@@ -85,7 +85,7 @@ async function example() {
|
|
|
85
85
|
name: "Travel Assistant",
|
|
86
86
|
description: "A helpful travel booking assistant",
|
|
87
87
|
goal: "Help users book flights with ease",
|
|
88
|
-
|
|
88
|
+
provider: new GeminiProvider({
|
|
89
89
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
90
90
|
model: "models/gemini-2.0-flash-exp",
|
|
91
91
|
}),
|
|
@@ -333,7 +333,7 @@ async function example() {
|
|
|
333
333
|
* Load session step from database (demonstrates persistence)
|
|
334
334
|
*/
|
|
335
335
|
console.log("\n--- Loading Session from Database ---");
|
|
336
|
-
const loadedSession = await persistence.
|
|
336
|
+
const loadedSession = await persistence.loadSessionState<FlightBookingData>(
|
|
337
337
|
dbSessionId
|
|
338
338
|
);
|
|
339
339
|
|
|
@@ -383,7 +383,7 @@ async function advancedExample() {
|
|
|
383
383
|
const agent = new Agent<UserContext>({
|
|
384
384
|
name: "Onboarding Assistant",
|
|
385
385
|
description: "Help new users get started",
|
|
386
|
-
|
|
386
|
+
provider: new GeminiProvider({
|
|
387
387
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
388
388
|
model: "models/gemini-2.0-flash-exp",
|
|
389
389
|
}),
|
|
@@ -517,7 +517,7 @@ async function quickStart() {
|
|
|
517
517
|
|
|
518
518
|
const agent = new Agent({
|
|
519
519
|
name: "Support Agent",
|
|
520
|
-
|
|
520
|
+
provider: new GeminiProvider({
|
|
521
521
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
522
522
|
model: "models/gemini-2.0-flash-exp",
|
|
523
523
|
}),
|
|
@@ -69,7 +69,7 @@ async function example() {
|
|
|
69
69
|
name: "Support Assistant",
|
|
70
70
|
description: "Fast, real-time support assistant",
|
|
71
71
|
goal: "Help users resolve issues quickly",
|
|
72
|
-
|
|
72
|
+
provider: new GeminiProvider({
|
|
73
73
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
74
74
|
model: "models/gemini-2.0-flash-exp",
|
|
75
75
|
}),
|
|
@@ -251,7 +251,7 @@ async function example() {
|
|
|
251
251
|
|
|
252
252
|
// Load session step from Redis (demonstrates persistence)
|
|
253
253
|
console.log("\n--- Loading Session from Redis ---");
|
|
254
|
-
const loadedSession = await persistence.
|
|
254
|
+
const loadedSession = await persistence.loadSessionState<SupportTicketData>(
|
|
255
255
|
sessionData.id
|
|
256
256
|
);
|
|
257
257
|
|
|
@@ -281,7 +281,7 @@ async function highThroughputExample() {
|
|
|
281
281
|
const agent = new Agent({
|
|
282
282
|
name: "Chat Bot",
|
|
283
283
|
description: "Fast chat responses",
|
|
284
|
-
|
|
284
|
+
provider: new GeminiProvider({
|
|
285
285
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
286
286
|
model: "models/gemini-2.0-flash-exp",
|
|
287
287
|
}),
|
|
@@ -366,7 +366,7 @@ async function sessionRecoveryExample() {
|
|
|
366
366
|
|
|
367
367
|
const agent = new Agent({
|
|
368
368
|
name: "Order Assistant",
|
|
369
|
-
|
|
369
|
+
provider: new GeminiProvider({
|
|
370
370
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
371
371
|
model: "models/gemini-2.0-flash-exp",
|
|
372
372
|
}),
|
|
@@ -433,7 +433,7 @@ async function sessionRecoveryExample() {
|
|
|
433
433
|
console.log("\n--- User Reconnects ---");
|
|
434
434
|
|
|
435
435
|
// Load session from Redis
|
|
436
|
-
const recoveredSession = await persistence.
|
|
436
|
+
const recoveredSession = await persistence.loadSessionState<OrderData>(
|
|
437
437
|
sessionId
|
|
438
438
|
);
|
|
439
439
|
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
createMessageEvent,
|
|
15
15
|
EventSource,
|
|
16
16
|
END_ROUTE,
|
|
17
|
-
type
|
|
17
|
+
type SessionState,
|
|
18
18
|
} from "../src/index";
|
|
19
19
|
|
|
20
20
|
// Type definitions for our booking data
|
|
@@ -34,7 +34,7 @@ async function main() {
|
|
|
34
34
|
const agent = new Agent({
|
|
35
35
|
name: "HotelBot",
|
|
36
36
|
description: "A hotel booking assistant with feedback collection",
|
|
37
|
-
|
|
37
|
+
provider: new GeminiProvider({
|
|
38
38
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
39
39
|
model: "models/gemini-2.0-flash-exp",
|
|
40
40
|
}),
|
|
@@ -138,7 +138,7 @@ async function main() {
|
|
|
138
138
|
console.log("\n=== Route Transitions Example ===\n");
|
|
139
139
|
|
|
140
140
|
// Conversation 1: User provides all booking info at once
|
|
141
|
-
let session:
|
|
141
|
+
let session: SessionState | undefined;
|
|
142
142
|
let history = [
|
|
143
143
|
createMessageEvent(
|
|
144
144
|
EventSource.CUSTOMER,
|
|
@@ -209,7 +209,7 @@ async function main() {
|
|
|
209
209
|
console.log("\n=== Manual Transition Example ===\n");
|
|
210
210
|
|
|
211
211
|
// Demonstrate manual transition using agent.nextStepRoute()
|
|
212
|
-
let session2:
|
|
212
|
+
let session2: SessionState | undefined;
|
|
213
213
|
let history2 = [
|
|
214
214
|
createMessageEvent(
|
|
215
215
|
EventSource.CUSTOMER,
|
|
@@ -19,7 +19,7 @@ import { OpenAIProvider } from "../src/providers/OpenAIProvider";
|
|
|
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
|
|
|
@@ -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
|
|
|
@@ -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
|
|
@@ -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 = [
|
|
@@ -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 = [
|
|
@@ -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
|
|
@@ -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 = [
|
package/examples/travel-agent.ts
CHANGED
|
@@ -189,7 +189,7 @@ async function createTravelAgent() {
|
|
|
189
189
|
description:
|
|
190
190
|
"A knowledgeable travel agent who helps book flights, answer travel questions, and manage reservations.",
|
|
191
191
|
goal: "Help customers book travel and manage their reservations",
|
|
192
|
-
|
|
192
|
+
provider: provider,
|
|
193
193
|
context: {
|
|
194
194
|
customerId: "test-123",
|
|
195
195
|
customerName: "Test Customer",
|
package/package.json
CHANGED