@falai/agent 0.7.0 → 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 +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.js +8 -8
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/RoutingEngine.d.ts +1 -1
- 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/types/agent.d.ts +1 -1
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/core/Agent.js +8 -8
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/RoutingEngine.d.ts +1 -1
- 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/types/agent.d.ts +1 -1
- package/dist/types/agent.d.ts.map +1 -1
- package/docs/AGENT.md +7 -7
- package/docs/CONTEXT_MANAGEMENT.md +3 -3
- 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 +4 -4
- 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 +2 -2
- 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 +3 -3
- package/examples/persistent-onboarding.ts +2 -2
- package/examples/prisma-persistence.ts +3 -3
- package/examples/redis-persistence.ts +3 -3
- package/examples/route-transitions.ts +1 -1
- 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 +8 -8
- package/src/core/RoutingEngine.ts +9 -7
- package/src/types/agent.ts +1 -1
package/docs/DOMAINS.md
CHANGED
|
@@ -32,7 +32,7 @@ Domains provide **optional** security and organization for your tools. If you ne
|
|
|
32
32
|
```typescript
|
|
33
33
|
const agent = new Agent({
|
|
34
34
|
name: "Simple Agent",
|
|
35
|
-
|
|
35
|
+
provider: provider,
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
// Define tools however you want
|
|
@@ -57,7 +57,7 @@ route.initialStep
|
|
|
57
57
|
```typescript
|
|
58
58
|
const agent = new Agent({
|
|
59
59
|
name: "Production Agent",
|
|
60
|
-
|
|
60
|
+
provider: provider,
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
// 1️⃣ Organize tools into domains
|
package/docs/EXAMPLES.md
CHANGED
package/docs/GETTING_STARTED.md
CHANGED
|
@@ -65,7 +65,7 @@ interface MyContext {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
// Create AI provider
|
|
68
|
-
const
|
|
68
|
+
const provider = new GeminiProvider({
|
|
69
69
|
apiKey: process.env.GEMINI_API_KEY!,
|
|
70
70
|
model: "models/gemini-2.5-pro",
|
|
71
71
|
});
|
|
@@ -74,7 +74,7 @@ const ai = new GeminiProvider({
|
|
|
74
74
|
const agent = new Agent<MyContext>({
|
|
75
75
|
name: "FlightBot",
|
|
76
76
|
description: "A helpful flight booking assistant",
|
|
77
|
-
|
|
77
|
+
provider,
|
|
78
78
|
context: {
|
|
79
79
|
userId: "user_123",
|
|
80
80
|
userName: "Alice",
|
|
@@ -252,7 +252,7 @@ Load everything from config:
|
|
|
252
252
|
```typescript
|
|
253
253
|
const agent = new Agent({
|
|
254
254
|
name: "ConfiguredBot",
|
|
255
|
-
|
|
255
|
+
provider: provider,
|
|
256
256
|
terms: loadTermsFromFile(),
|
|
257
257
|
guidelines: loadGuidelinesFromDB(),
|
|
258
258
|
routes: [
|
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,
|
|
@@ -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
|
},
|
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
|
}),
|
|
@@ -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
|
}),
|
|
@@ -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
|
}),
|
|
@@ -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
|
}),
|
|
@@ -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
|
}),
|
|
@@ -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
|
}),
|
|
@@ -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
|
}),
|
|
@@ -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
package/src/core/Agent.ts
CHANGED
|
@@ -412,7 +412,7 @@ export class Agent<TContext = unknown> {
|
|
|
412
412
|
description: this.options.description,
|
|
413
413
|
personality: this.options.personality,
|
|
414
414
|
},
|
|
415
|
-
|
|
415
|
+
provider: this.options.provider,
|
|
416
416
|
context: effectiveContext,
|
|
417
417
|
signal,
|
|
418
418
|
});
|
|
@@ -491,7 +491,7 @@ export class Agent<TContext = unknown> {
|
|
|
491
491
|
);
|
|
492
492
|
|
|
493
493
|
// Generate message stream using AI provider
|
|
494
|
-
const stream = this.options.
|
|
494
|
+
const stream = this.options.provider.generateMessageStream({
|
|
495
495
|
prompt: responsePrompt,
|
|
496
496
|
history,
|
|
497
497
|
context: effectiveContext,
|
|
@@ -612,7 +612,7 @@ export class Agent<TContext = unknown> {
|
|
|
612
612
|
);
|
|
613
613
|
|
|
614
614
|
// Stream completion message using AI provider
|
|
615
|
-
const stream = this.options.
|
|
615
|
+
const stream = this.options.provider.generateMessageStream({
|
|
616
616
|
prompt: completionPrompt,
|
|
617
617
|
history,
|
|
618
618
|
context: effectiveContext,
|
|
@@ -698,7 +698,7 @@ export class Agent<TContext = unknown> {
|
|
|
698
698
|
.addCapabilities(this.capabilities)
|
|
699
699
|
.build();
|
|
700
700
|
|
|
701
|
-
const stream = this.options.
|
|
701
|
+
const stream = this.options.provider.generateMessageStream({
|
|
702
702
|
prompt: fallbackPrompt,
|
|
703
703
|
history,
|
|
704
704
|
context: effectiveContext,
|
|
@@ -872,7 +872,7 @@ export class Agent<TContext = unknown> {
|
|
|
872
872
|
description: this.options.description,
|
|
873
873
|
personality: this.options.personality,
|
|
874
874
|
},
|
|
875
|
-
|
|
875
|
+
provider: this.options.provider,
|
|
876
876
|
context: effectiveContext,
|
|
877
877
|
signal,
|
|
878
878
|
});
|
|
@@ -956,7 +956,7 @@ export class Agent<TContext = unknown> {
|
|
|
956
956
|
);
|
|
957
957
|
|
|
958
958
|
// Generate message using AI provider
|
|
959
|
-
const result = await this.options.
|
|
959
|
+
const result = await this.options.provider.generateMessage({
|
|
960
960
|
prompt: responsePrompt,
|
|
961
961
|
history,
|
|
962
962
|
context: effectiveContext,
|
|
@@ -1044,7 +1044,7 @@ export class Agent<TContext = unknown> {
|
|
|
1044
1044
|
);
|
|
1045
1045
|
|
|
1046
1046
|
// Generate completion message using AI provider
|
|
1047
|
-
const completionResult = await this.options.
|
|
1047
|
+
const completionResult = await this.options.provider.generateMessage({
|
|
1048
1048
|
prompt: completionPrompt,
|
|
1049
1049
|
history,
|
|
1050
1050
|
context: effectiveContext,
|
|
@@ -1115,7 +1115,7 @@ export class Agent<TContext = unknown> {
|
|
|
1115
1115
|
.addCapabilities(this.capabilities)
|
|
1116
1116
|
.build();
|
|
1117
1117
|
|
|
1118
|
-
const result = await this.options.
|
|
1118
|
+
const result = await this.options.provider.generateMessage({
|
|
1119
1119
|
prompt: fallbackPrompt,
|
|
1120
1120
|
history,
|
|
1121
1121
|
context: effectiveContext,
|
|
@@ -50,7 +50,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
50
50
|
description?: string;
|
|
51
51
|
personality?: string;
|
|
52
52
|
};
|
|
53
|
-
|
|
53
|
+
provider: AiProvider;
|
|
54
54
|
context: TContext;
|
|
55
55
|
signal?: AbortSignal;
|
|
56
56
|
}): Promise<{
|
|
@@ -60,7 +60,8 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
60
60
|
session: SessionStep;
|
|
61
61
|
isRouteComplete?: boolean;
|
|
62
62
|
}> {
|
|
63
|
-
const { route, session, history, agentMeta,
|
|
63
|
+
const { route, session, history, agentMeta, provider, context, signal } =
|
|
64
|
+
params;
|
|
64
65
|
|
|
65
66
|
let updatedSession = session;
|
|
66
67
|
const selectedRoute = route;
|
|
@@ -138,7 +139,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
138
139
|
candidates.map((c) => c.step.id)
|
|
139
140
|
);
|
|
140
141
|
|
|
141
|
-
const stepResult = await
|
|
142
|
+
const stepResult = await provider.generateMessage<
|
|
142
143
|
TContext,
|
|
143
144
|
{
|
|
144
145
|
reasoning: string;
|
|
@@ -411,7 +412,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
411
412
|
description?: string;
|
|
412
413
|
personality?: string;
|
|
413
414
|
};
|
|
414
|
-
|
|
415
|
+
provider: AiProvider;
|
|
415
416
|
context: TContext;
|
|
416
417
|
signal?: AbortSignal;
|
|
417
418
|
}): Promise<{
|
|
@@ -421,7 +422,8 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
421
422
|
session: SessionStep;
|
|
422
423
|
isRouteComplete?: boolean;
|
|
423
424
|
}> {
|
|
424
|
-
const { routes, session, history, agentMeta,
|
|
425
|
+
const { routes, session, history, agentMeta, provider, context, signal } =
|
|
426
|
+
params;
|
|
425
427
|
|
|
426
428
|
if (routes.length === 0) {
|
|
427
429
|
return { session };
|
|
@@ -434,7 +436,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
434
436
|
session,
|
|
435
437
|
history,
|
|
436
438
|
agentMeta,
|
|
437
|
-
|
|
439
|
+
provider,
|
|
438
440
|
context,
|
|
439
441
|
signal,
|
|
440
442
|
});
|
|
@@ -504,7 +506,7 @@ export class RoutingEngine<TContext = unknown> {
|
|
|
504
506
|
activeRouteSteps
|
|
505
507
|
);
|
|
506
508
|
|
|
507
|
-
const routingResult = await
|
|
509
|
+
const routingResult = await provider.generateMessage<
|
|
508
510
|
TContext,
|
|
509
511
|
RoutingDecisionOutput
|
|
510
512
|
>({
|
package/src/types/agent.ts
CHANGED
|
@@ -86,7 +86,7 @@ export interface AgentOptions<TContext = unknown> {
|
|
|
86
86
|
/** Lifecycle hooks for context management */
|
|
87
87
|
hooks?: ContextLifecycleHooks<TContext>;
|
|
88
88
|
/** AI provider strategy for generating responses */
|
|
89
|
-
|
|
89
|
+
provider: AiProvider;
|
|
90
90
|
/** Composition mode for response generation */
|
|
91
91
|
compositionMode?: CompositionMode;
|
|
92
92
|
/** Initial terms for domain glossary */
|