@fllf/agent-sdk 0.1.0 → 0.1.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 CHANGED
@@ -1,240 +1,548 @@
1
- # FAgent
2
-
3
- FAgent is a composable TypeScript foundation for building Agent runtimes.
4
-
5
- It provides the shared building blocks for an Agent instead of forcing users to subclass a base class. An Agent is assembled from an LLM, session-scoped message history, tools, config, and an executor.
6
-
7
- ## Status
8
-
9
- The project is in an early runtime-foundation stage. The core architecture is in place:
10
-
11
- - Composable `Agent`
12
- - Unified `LLM.chat()` interface
13
- - OpenAI and local OpenAI-compatible providers
14
- - Streaming support through `LLM.stream()`
15
- - Timeout, retry, abort, and normalized LLM errors
16
- - `generateObject()` structured output with Zod validation
17
- - Session-scoped message history with an in-memory store
18
- - Simple chat and tool-calling executors
19
- - Zod-driven tool system
20
- - Optional observer events for debugging and tracing
21
-
22
- ## Install
23
-
24
- ```bash
25
- npm install
26
- ```
27
-
28
- ## Scripts
29
-
30
- ```bash
31
- npm test
32
- npm run typecheck
33
- npm run build
34
- ```
35
-
36
- Examples:
37
-
38
- ```bash
39
- npm run example:simple-chat
40
- npm run example:tool-calling
41
- npm run example:local-ollama
42
- ```
43
-
44
- ## Environment
45
-
46
- OpenAI:
47
-
48
- ```bash
49
- OPENAI_API_KEY=...
50
- OPENAI_MODEL=gpt-4o-mini
51
- ```
52
-
53
- Local OpenAI-compatible runtime, such as Ollama, LM Studio, vLLM, or compatible services:
54
-
55
- ```bash
56
- LOCAL_BASE_URL=http://127.0.0.1:11434/v1
57
- LOCAL_MODEL=llama3
58
- LOCAL_API_KEY=local-key
59
- ```
60
-
61
- If no OpenAI key is configured, FAgent falls back to the local provider.
62
-
63
- ## Basic Usage
64
-
65
- ```ts
66
- import { Agent } from 'fagent';
67
-
68
- const agent = new Agent({
69
- name: 'simple-chat',
70
- systemPrompt: 'You are a concise assistant.',
71
- });
72
-
73
- const result = await agent.run('What is FAgent?');
74
- console.log(result.output);
75
- ```
76
-
77
- ## Sessions
78
-
79
- FAgent uses LangChain-style session-scoped message history. The `Agent` is the reusable runtime, and `sessionId` selects the conversation context.
80
-
81
- ```ts
82
- const agent = new Agent({
83
- name: 'support-bot',
84
- systemPrompt: 'You are a helpful support assistant.',
85
- });
86
-
87
- await agent.run('Hi, I need help with an order.', {
88
- sessionId: 'session_a',
89
- });
90
-
91
- await agent.run('Start a separate conversation.', {
92
- sessionId: 'session_b',
93
- });
94
- ```
95
-
96
- Runs from different sessions can proceed concurrently. Runs for the same session are serialized so the conversation history stays ordered.
97
-
98
- If `sessionId` is omitted or blank, FAgent uses the shared `default` session. For production apps where every request should belong to an explicit user, tenant, or conversation, enable strict session ids:
99
-
100
- ```ts
101
- const agent = new Agent({
102
- name: 'support-bot',
103
- requireSessionId: true,
104
- });
105
-
106
- await agent.run('Hi, I need help with an order.', {
107
- sessionId: 'user_123:order_456',
108
- });
109
- ```
110
-
111
- With `requireSessionId: true`, `run`, `addMessage`, `clearHistory`, and `getHistory` reject missing or blank session ids instead of falling back to `default`.
112
-
113
- Recoverable tool failures stay inside the agent loop: FAgent records the failure as a `tool` message, sends it back to the model, and commits the full turn if the executor completes successfully. If the run cannot continue because the model/provider fails before producing a response, FAgent leaves that session's history unchanged and reports the failure through runtime events such as `agent:error` and `llm:error`.
114
-
115
- For the built-in `InMemoryMessageHistoryStore`, `clear(sessionId)` empties a session while keeping its history entry alive. Use `deleteSession(sessionId)` to release one session entry, or `clearAll()` to release every in-memory session entry.
116
-
117
- ## Tool Calling
118
-
119
- Tools are defined with Zod schemas. The framework turns the schema into an OpenAI-compatible tool schema and validates model-supplied arguments before running the tool.
120
-
121
- ```ts
122
- import { z } from 'zod';
123
- import { Agent, Tool, ToolCallingExecutor } from 'fagent';
124
-
125
- const AddToolSchema = z.object({
126
- left: z.number().describe('Left number.'),
127
- right: z.number().describe('Right number.'),
128
- });
129
-
130
- class AddTool extends Tool<typeof AddToolSchema, number> {
131
- constructor() {
132
- super({
133
- name: 'add',
134
- description: 'Adds two numbers.',
135
- schema: AddToolSchema,
136
- });
137
- }
138
-
139
- protected run(input: z.infer<typeof AddToolSchema>): number {
140
- return input.left + input.right;
141
- }
142
- }
143
-
144
- const agent = new Agent({
145
- name: 'tool-agent',
146
- tools: [new AddTool()],
147
- executor: new ToolCallingExecutor(),
148
- });
149
-
150
- const result = await agent.run('Use the add tool to calculate 19 + 23.');
151
- console.log(result.output);
152
- ```
153
-
154
- ## Structured Output
155
-
156
- ```ts
157
- import { z } from 'zod';
158
- import { LLM } from 'fagent';
159
-
160
- const llm = new LLM();
161
-
162
- const result = await llm.generateObject({
163
- messages: [
164
- { role: 'user', content: 'Return a short project summary.' },
165
- ],
166
- schema: z.object({
167
- summary: z.string(),
168
- confidence: z.number(),
169
- }),
170
- });
171
-
172
- console.log(result.value);
173
- ```
174
-
175
- ## Observability
176
-
177
- FAgent emits structured runtime events, but it does not print anything by default. Pass an observer when you want to debug or forward events to a logging system.
178
-
179
- ```ts
180
- import { Agent, ConsoleObserver } from 'fagent';
181
-
182
- const agent = new Agent({
183
- name: 'debug-agent',
184
- observer: new ConsoleObserver(),
185
- });
186
-
187
- await agent.run('Hello');
188
- ```
189
-
190
- Events include:
191
-
192
- - `agent:start`
193
- - `agent:end`
194
- - `agent:error`
195
- - `llm:start`
196
- - `llm:end`
197
- - `llm:error`
198
- - `tool:start`
199
- - `tool:end`
200
- - `tool:error`
201
-
202
- Custom observers can send events anywhere:
203
-
204
- ```ts
205
- const observer = {
206
- onEvent(event) {
207
- myLogger.info(event);
208
- },
209
- };
210
- ```
211
-
212
- ## Architecture
213
-
214
- ```txt
215
- Agent
216
- -> Executor
217
- -> LLM
218
- -> MessageHistory(sessionId)
219
- -> ToolRegistry
220
- -> ToolExecutor
221
- ```
222
-
223
- Main responsibilities:
224
-
225
- - `Agent`: assembles runtime components and delegates execution.
226
- - `Executor`: controls the run strategy, such as simple chat or tool calling.
227
- - `LLM`: provides a unified model interface with timeout, retry, abort, and structured output support.
228
- - `Provider`: adapts OpenAI-compatible SDK calls to the unified LLM interface.
229
- - `MessageHistoryStore`: stores conversation history by `sessionId`.
230
- - `Tool`: defines external capabilities with Zod schemas.
231
-
232
- ## Public Entry
233
-
234
- All public APIs are exported from:
235
-
236
- ```ts
237
- import { Agent, LLM, Tool } from 'fagent';
238
- ```
239
-
240
- During local development, examples import from `../src` so they can run without building first.
1
+ # FAgent Agent SDK
2
+
3
+ FAgent is a composable TypeScript SDK for building LLM agents, tool-calling
4
+ workflows, and RAG-powered chat systems.
5
+
6
+ The published npm package is:
7
+
8
+ ```bash
9
+ npm install @fllf/agent-sdk
10
+ ```
11
+
12
+ Use it as the runtime core behind a web chat product, backend API, worker, or
13
+ third-party integration layer. The SDK does not include a web UI, database
14
+ migrations for your application, authentication, or deployment code.
15
+
16
+ ## Capabilities
17
+
18
+ - Composable `Agent` runtime.
19
+ - Unified `LLM.chat()` interface.
20
+ - OpenAI and OpenAI-compatible local providers.
21
+ - Streaming through `LLM.stream()`.
22
+ - Timeout, retry, abort, and normalized LLM errors.
23
+ - `generateObject()` structured output with Zod validation.
24
+ - Session-scoped message history.
25
+ - Simple chat, tool-calling, and RAG executors.
26
+ - Zod-driven tool definitions.
27
+ - RAG ingestion, chunking, embedding, retrieval, reranking, context building,
28
+ generation, and verification.
29
+ - In-memory stores for development and tests.
30
+ - Postgres RAG store adapters that work with any compatible `query()` client.
31
+ - Observer events for logging, tracing, and debugging.
32
+
33
+ ## Runtime requirements
34
+
35
+ - Node.js 18 or newer.
36
+ - TypeScript is recommended for typed integration.
37
+ - Install optional document conversion dependencies only if you use those
38
+ loaders:
39
+ - HTML: `turndown`, `turndown-plugin-gfm`
40
+ - DOCX: `mammoth`
41
+ - PDF: `pdf-parse`
42
+
43
+ ## Environment variables
44
+
45
+ OpenAI:
46
+
47
+ ```bash
48
+ OPENAI_API_KEY=...
49
+ OPENAI_MODEL=gpt-4o-mini
50
+ OPENAI_BASE_URL=https://api.openai.com/v1
51
+ OPENAI_EMBEDDING_MODEL=text-embedding-3-small
52
+ ```
53
+
54
+ OpenAI-compatible local runtime, such as Ollama, LM Studio, vLLM, or a gateway:
55
+
56
+ ```bash
57
+ LOCAL_BASE_URL=http://127.0.0.1:11434/v1
58
+ LOCAL_MODEL=llama3
59
+ LOCAL_API_KEY=local-key
60
+ ```
61
+
62
+ If no OpenAI key is configured, the default `LLM` auto-detection falls back to
63
+ the local OpenAI-compatible provider.
64
+
65
+ `OPENAI_BASE_URL` also applies to `OpenAIEmbedder`. For OpenAI-compatible
66
+ embedding providers, configure it as the API root, for example
67
+ `https://gateway.example.test/v1`; the SDK posts embedding requests to
68
+ `{OPENAI_BASE_URL}/embeddings`.
69
+
70
+ ## Basic chat integration
71
+
72
+ ```ts
73
+ import { Agent } from '@fllf/agent-sdk';
74
+
75
+ const agent = new Agent({
76
+ name: 'support-chat',
77
+ systemPrompt: 'You are a concise support assistant.',
78
+ requireSessionId: true,
79
+ });
80
+
81
+ const result = await agent.run('How do I reset my password?', {
82
+ sessionId: 'tenant_1:user_42:conversation_1001',
83
+ metadata: {
84
+ tenantId: 'tenant_1',
85
+ userId: 'user_42',
86
+ },
87
+ });
88
+
89
+ console.log(result.output);
90
+ ```
91
+
92
+ ### Suggested HTTP contract
93
+
94
+ Your API layer owns authentication, authorization, persistence, rate limits, and
95
+ request validation. A typical chat endpoint can adapt incoming requests to
96
+ `Agent.run()`:
97
+
98
+ ```ts
99
+ import { Agent } from '@fllf/agent-sdk';
100
+
101
+ const agent = new Agent({
102
+ name: 'web-chat',
103
+ requireSessionId: true,
104
+ });
105
+
106
+ export async function handleChatRequest(body: {
107
+ conversationId: string;
108
+ userId: string;
109
+ tenantId: string;
110
+ message: string;
111
+ }) {
112
+ const sessionId = `${body.tenantId}:${body.userId}:${body.conversationId}`;
113
+
114
+ const result = await agent.run(body.message, {
115
+ sessionId,
116
+ metadata: {
117
+ tenantId: body.tenantId,
118
+ userId: body.userId,
119
+ },
120
+ });
121
+
122
+ return {
123
+ message: result.output,
124
+ usage: result.usage,
125
+ };
126
+ }
127
+ ```
128
+
129
+ Recommended request body:
130
+
131
+ ```json
132
+ {
133
+ "conversationId": "conversation_1001",
134
+ "userId": "user_42",
135
+ "tenantId": "tenant_1",
136
+ "message": "How do I reset my password?"
137
+ }
138
+ ```
139
+
140
+ Recommended response body:
141
+
142
+ ```json
143
+ {
144
+ "message": "Open the account settings page and choose Reset password.",
145
+ "usage": {
146
+ "promptTokens": 120,
147
+ "completionTokens": 30,
148
+ "totalTokens": 150
149
+ }
150
+ }
151
+ ```
152
+
153
+ ## Sessions and message history
154
+
155
+ `Agent` is reusable. `sessionId` selects a conversation context.
156
+
157
+ ```ts
158
+ await agent.run('Hi', { sessionId: 'tenant_1:user_42:conversation_a' });
159
+ await agent.run('Start another conversation', {
160
+ sessionId: 'tenant_1:user_42:conversation_b',
161
+ });
162
+ ```
163
+
164
+ Runs from different sessions can proceed concurrently. Runs for the same session
165
+ are serialized so message order remains stable.
166
+
167
+ For production APIs, set `requireSessionId: true` and pass an explicit
168
+ tenant/user/conversation scoped session id. The built-in
169
+ `InMemoryMessageHistoryStore` is suitable for development and tests. Production
170
+ systems should provide a persistent `MessageHistoryStore`.
171
+
172
+ ## Tool calling
173
+
174
+ Tools are defined with Zod schemas. The SDK converts the schema into an
175
+ OpenAI-compatible tool schema and validates model-supplied arguments before
176
+ running the tool.
177
+
178
+ ```ts
179
+ import { z } from 'zod';
180
+ import { Agent, Tool, ToolCallingExecutor } from '@fllf/agent-sdk';
181
+
182
+ const AddToolSchema = z.object({
183
+ left: z.number().describe('Left number.'),
184
+ right: z.number().describe('Right number.'),
185
+ });
186
+
187
+ class AddTool extends Tool<typeof AddToolSchema, number> {
188
+ constructor() {
189
+ super({
190
+ name: 'add',
191
+ description: 'Adds two numbers.',
192
+ schema: AddToolSchema,
193
+ });
194
+ }
195
+
196
+ protected run(input: z.infer<typeof AddToolSchema>): number {
197
+ return input.left + input.right;
198
+ }
199
+ }
200
+
201
+ const agent = new Agent({
202
+ name: 'tool-agent',
203
+ executor: new ToolCallingExecutor(),
204
+ tools: [new AddTool()],
205
+ requireSessionId: true,
206
+ });
207
+
208
+ const result = await agent.run('Calculate 19 + 23 with the tool.', {
209
+ sessionId: 'tenant_1:user_42:conversation_tools',
210
+ });
211
+
212
+ console.log(result.output);
213
+ ```
214
+
215
+ ## RAG integration
216
+
217
+ RAG is exposed as an independent subsystem. Agent code only depends on
218
+ `RagPipeline` through either:
219
+
220
+ - `RagExecutor`: always retrieve before answering. Use this for knowledge-base
221
+ QA.
222
+ - `RagSearchTool`: let a tool-calling agent retrieve evidence only when the
223
+ model decides it needs knowledge-base context.
224
+
225
+ ### Build an in-memory RAG pipeline
226
+
227
+ This example is suitable for local development, tests, or a minimal MVP. Replace
228
+ the stores with Postgres, pgvector, Qdrant, Elasticsearch, or your own adapters
229
+ for production.
230
+
231
+ ```ts
232
+ import {
233
+ AutoChunker,
234
+ AutoDocumentLoader,
235
+ DefaultContextBuilder,
236
+ DefaultDocumentNormalizer,
237
+ DefaultRagGenerator,
238
+ DefaultRagPipeline,
239
+ DenseRetriever,
240
+ HybridRetriever,
241
+ InMemoryDocumentStore,
242
+ InMemoryKeywordStore,
243
+ InMemoryVectorStore,
244
+ OpenAIEmbedder,
245
+ RuleBasedVerifier,
246
+ SparseRetriever,
247
+ } from '@fllf/agent-sdk';
248
+
249
+ const documentStore = new InMemoryDocumentStore();
250
+ const keywordStore = new InMemoryKeywordStore();
251
+ const embedder = new OpenAIEmbedder();
252
+ const vectorStore = new InMemoryVectorStore({
253
+ dimensions: embedder.dimensions,
254
+ });
255
+
256
+ const denseRetriever = new DenseRetriever({
257
+ embedder,
258
+ vectorStore,
259
+ documentStore,
260
+ });
261
+
262
+ const sparseRetriever = new SparseRetriever({
263
+ keywordStore,
264
+ documentStore,
265
+ });
266
+
267
+ export const ragPipeline = new DefaultRagPipeline({
268
+ loader: new AutoDocumentLoader(),
269
+ normalizer: new DefaultDocumentNormalizer(),
270
+ chunker: new AutoChunker(),
271
+ embedder,
272
+ documentStore,
273
+ vectorStore,
274
+ keywordStore,
275
+ retriever: new HybridRetriever({
276
+ denseRetriever,
277
+ sparseRetriever,
278
+ }),
279
+ contextBuilder: new DefaultContextBuilder({
280
+ maxContextTokens: 3000,
281
+ }),
282
+ generator: new DefaultRagGenerator(),
283
+ verifier: new RuleBasedVerifier(),
284
+ });
285
+ ```
286
+
287
+ `OpenAIEmbedder` and `OpenAICompatibleEmbedder` send embedding requests with
288
+ `encoding_format: "float"` and validate that the returned embedding length
289
+ matches `embedder.dimensions`. When using a third-party OpenAI-compatible
290
+ embedding model whose dimension is not known by the SDK, pass `dimensions`
291
+ explicitly and create the vector store with the same value:
292
+
293
+ ```ts
294
+ import {
295
+ InMemoryVectorStore,
296
+ OpenAICompatibleEmbedder,
297
+ } from '@fllf/agent-sdk';
298
+
299
+ const embedder = new OpenAICompatibleEmbedder({
300
+ apiKey: process.env.OPENAI_API_KEY,
301
+ baseURL: 'https://gateway.example.test/v1',
302
+ model: 'bge-m3',
303
+ dimensions: 1024,
304
+ });
305
+
306
+ const vectorStore = new InMemoryVectorStore({
307
+ dimensions: embedder.dimensions,
308
+ });
309
+ ```
310
+
311
+ If you change the embedding model or dimensions, build a new vector collection
312
+ or re-ingest documents. Vectors from different models or dimensions must not be
313
+ mixed in the same index.
314
+
315
+ ### Ingest documents
316
+
317
+ Your application should run ingestion from an admin API, background worker, or
318
+ document synchronization job.
319
+
320
+ ```ts
321
+ await ragPipeline.ingest({
322
+ content: '# Refund policy\n\nRefunds are available within 30 days.',
323
+ source: 'policies/refund.md',
324
+ tenantId: 'tenant_1',
325
+ knowledgeBaseId: 'kb_support',
326
+ acl: ['user:user_42', 'role:support'],
327
+ replaceExisting: true,
328
+ });
329
+ ```
330
+
331
+ Important ingestion fields:
332
+
333
+ - `source`: stable source path, URL, or document id shown in citations.
334
+ - `tenantId`: tenant boundary.
335
+ - `knowledgeBaseId`: knowledge-base boundary.
336
+ - `acl`: access-control labels used at retrieval time.
337
+ - `replaceExisting`: delete previous chunks and indexes for the same document id
338
+ before writing new ones.
339
+
340
+ ### Knowledge-base QA agent
341
+
342
+ ```ts
343
+ import { Agent, RagExecutor } from '@fllf/agent-sdk';
344
+ import { ragPipeline } from './rag-pipeline';
345
+
346
+ const knowledgeAgent = new Agent({
347
+ name: 'knowledge-agent',
348
+ executor: new RagExecutor({
349
+ pipeline: ragPipeline,
350
+ requireCitations: true,
351
+ }),
352
+ requireSessionId: true,
353
+ });
354
+
355
+ const result = await knowledgeAgent.run('What is the refund window?', {
356
+ sessionId: 'tenant_1:user_42:conversation_1001',
357
+ metadata: {
358
+ tenantId: 'tenant_1',
359
+ knowledgeBaseId: 'kb_support',
360
+ acl: ['user:user_42', 'role:support'],
361
+ topK: 5,
362
+ maxContextTokens: 3000,
363
+ },
364
+ });
365
+
366
+ console.log(result.output);
367
+ console.log(result.raw);
368
+ ```
369
+
370
+ `result.raw` is the `RagAnswer`:
371
+
372
+ ```ts
373
+ type RagAnswer = {
374
+ answer: string;
375
+ citations: Array<{
376
+ index: number;
377
+ chunkId: string;
378
+ documentId: string;
379
+ source: string;
380
+ title?: string;
381
+ headingPath?: string[];
382
+ page?: number;
383
+ quote?: string;
384
+ }>;
385
+ confidence: 'high' | 'medium' | 'low';
386
+ retrieved: unknown[];
387
+ usage?: unknown;
388
+ metadata?: Record<string, unknown>;
389
+ };
390
+ ```
391
+
392
+ Recommended RAG chat response:
393
+
394
+ ```ts
395
+ return {
396
+ message: result.output,
397
+ citations: (result.raw as any).citations,
398
+ confidence: (result.raw as any).confidence,
399
+ usage: result.usage,
400
+ };
401
+ ```
402
+
403
+ ### RAG as an optional search tool
404
+
405
+ Use `RagSearchTool` when the agent should decide whether to search the knowledge
406
+ base.
407
+
408
+ ```ts
409
+ import {
410
+ Agent,
411
+ RagSearchTool,
412
+ ToolCallingExecutor,
413
+ } from '@fllf/agent-sdk';
414
+ import { ragPipeline } from './rag-pipeline';
415
+
416
+ const agent = new Agent({
417
+ name: 'general-agent',
418
+ executor: new ToolCallingExecutor(),
419
+ tools: [
420
+ new RagSearchTool({
421
+ pipeline: ragPipeline,
422
+ defaultRetrieveOptions: {
423
+ topK: 5,
424
+ },
425
+ }),
426
+ ],
427
+ requireSessionId: true,
428
+ });
429
+ ```
430
+
431
+ ## Structured output
432
+
433
+ ```ts
434
+ import { z } from 'zod';
435
+ import { LLM } from '@fllf/agent-sdk';
436
+
437
+ const llm = new LLM();
438
+
439
+ const result = await llm.generateObject({
440
+ messages: [
441
+ { role: 'user', content: 'Return a short project summary.' },
442
+ ],
443
+ schema: z.object({
444
+ summary: z.string(),
445
+ confidence: z.number(),
446
+ }),
447
+ });
448
+
449
+ console.log(result.value);
450
+ ```
451
+
452
+ ## Observability
453
+
454
+ The SDK emits structured runtime events and does not print by default.
455
+
456
+ ```ts
457
+ import { Agent, ConsoleObserver } from '@fllf/agent-sdk';
458
+
459
+ const agent = new Agent({
460
+ name: 'debug-agent',
461
+ observer: new ConsoleObserver(),
462
+ });
463
+
464
+ await agent.run('Hello');
465
+ ```
466
+
467
+ Event types include:
468
+
469
+ - `agent:start`
470
+ - `agent:end`
471
+ - `agent:error`
472
+ - `llm:start`
473
+ - `llm:end`
474
+ - `llm:error`
475
+ - `tool:start`
476
+ - `tool:end`
477
+ - `tool:error`
478
+
479
+ Forward events to your logging or tracing system:
480
+
481
+ ```ts
482
+ const observer = {
483
+ onEvent(event) {
484
+ logger.info({ event }, 'agent runtime event');
485
+ },
486
+ };
487
+ ```
488
+
489
+ ## Production integration checklist
490
+
491
+ The SDK provides runtime primitives. A complete product should add:
492
+
493
+ - Persistent users, conversations, messages, and audit logs.
494
+ - A persistent `MessageHistoryStore`.
495
+ - Persistent RAG stores and a vector/search backend.
496
+ - AuthN/AuthZ before `Agent.run()` or `RagPipeline.retrieve()`.
497
+ - Tenant, knowledge-base, and ACL filters in every RAG request.
498
+ - Background document ingestion and index rebuild jobs.
499
+ - Rate limits, model cost controls, and request timeouts.
500
+ - Redaction or filtering for logs that may contain user messages or document
501
+ snippets.
502
+
503
+ ## Public API map
504
+
505
+ All public APIs are exported from the package root:
506
+
507
+ ```ts
508
+ import {
509
+ Agent,
510
+ LLM,
511
+ Tool,
512
+ ToolCallingExecutor,
513
+ RagExecutor,
514
+ RagSearchTool,
515
+ DefaultRagPipeline,
516
+ } from '@fllf/agent-sdk';
517
+ ```
518
+
519
+ Main areas:
520
+
521
+ - `agent`: runtime composition.
522
+ - `llm`: provider abstraction and structured output.
523
+ - `history`: session-scoped message history interfaces and in-memory store.
524
+ - `tools`: Zod-driven tools and tool execution.
525
+ - `executors`: simple chat, tool calling, and RAG execution strategies.
526
+ - `rag`: ingestion, chunking, embeddings, stores, retrieval, generation, and
527
+ verification.
528
+ - `observability`: observer interface and console observer.
529
+
530
+ ## Development
531
+
532
+ ```bash
533
+ npm install
534
+ npm run typecheck
535
+ npm test
536
+ npm run build
537
+ ```
538
+
539
+ Examples:
540
+
541
+ ```bash
542
+ npm run example:simple-chat
543
+ npm run example:tool-calling
544
+ npm run example:local-ollama
545
+ ```
546
+
547
+ During local development, examples may import from `../src` so they can run
548
+ without building first.
@@ -1,6 +1,10 @@
1
- import OpenAI from 'openai';
2
1
  import type { Embedder } from './embedder';
3
- type OpenAIEmbeddingBody = Parameters<OpenAI['embeddings']['create']>[0];
2
+ export interface OpenAIEmbeddingRequestBody {
3
+ model: string;
4
+ input: string[];
5
+ encoding_format: 'float';
6
+ dimensions?: number;
7
+ }
4
8
  export interface OpenAIEmbeddingResponseLike {
5
9
  data: Array<{
6
10
  embedding: unknown;
@@ -9,9 +13,21 @@ export interface OpenAIEmbeddingResponseLike {
9
13
  }
10
14
  export interface OpenAIEmbeddingsClientLike {
11
15
  embeddings: {
12
- create(body: OpenAIEmbeddingBody): Promise<OpenAIEmbeddingResponseLike>;
16
+ create(body: OpenAIEmbeddingRequestBody): Promise<OpenAIEmbeddingResponseLike>;
13
17
  };
14
18
  }
19
+ export type OpenAIEmbeddingFetchLike = (input: string, init?: {
20
+ method?: string;
21
+ headers?: Record<string, string>;
22
+ body?: string;
23
+ signal?: AbortSignal;
24
+ }) => Promise<OpenAIEmbeddingHttpResponseLike>;
25
+ export interface OpenAIEmbeddingHttpResponseLike {
26
+ ok: boolean;
27
+ status: number;
28
+ statusText: string;
29
+ text(): Promise<string>;
30
+ }
15
31
  export interface OpenAICompatibleEmbedderOptions {
16
32
  apiKey?: string;
17
33
  model: string;
@@ -19,6 +35,9 @@ export interface OpenAICompatibleEmbedderOptions {
19
35
  baseURL?: string;
20
36
  batchSize?: number;
21
37
  sendDimensions?: boolean;
38
+ timeoutMs?: number;
39
+ headers?: Record<string, string>;
40
+ fetch?: OpenAIEmbeddingFetchLike;
22
41
  client?: OpenAIEmbeddingsClientLike;
23
42
  }
24
43
  export interface OpenAIEmbedderOptions extends Omit<OpenAICompatibleEmbedderOptions, 'model'> {
@@ -42,5 +61,4 @@ export declare class OpenAICompatibleEmbedder implements Embedder {
42
61
  export declare class OpenAIEmbedder extends OpenAICompatibleEmbedder {
43
62
  constructor(options?: OpenAIEmbedderOptions);
44
63
  }
45
- export {};
46
64
  //# sourceMappingURL=openai-compatible-embedder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compatible-embedder.d.ts","sourceRoot":"","sources":["../../../src/rag/embeddings/openai-compatible-embedder.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,OAAO,KAAK,EACR,QAAQ,EACX,MAAM,YAAY,CAAC;AAEpB,KAAK,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzE,MAAM,WAAW,2BAA2B;IACxC,IAAI,EAAE,KAAK,CAAC;QACR,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACN;AAED,MAAM,WAAW,0BAA0B;IACvC,UAAU,EAAE;QACR,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;KAC3E,CAAC;CACL;AAED,MAAM,WAAW,+BAA+B;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,0BAA0B,CAAC;CACvC;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,+BAA+B,EAAE,OAAO,CAAC;IACzF,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,QAAQ;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;gBAE7B,OAAO,EAAE,+BAA+B;IAS9C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAcpD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAUnC,gBAAgB;CAiBjC;AAED,qBAAa,cAAe,SAAQ,wBAAwB;gBAC5C,OAAO,GAAE,qBAA0B;CAgBlD"}
1
+ {"version":3,"file":"openai-compatible-embedder.d.ts","sourceRoot":"","sources":["../../../src/rag/embeddings/openai-compatible-embedder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,QAAQ,EACX,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,0BAA0B;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IACxC,IAAI,EAAE,KAAK,CAAC;QACR,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACN;AAED,MAAM,WAAW,0BAA0B;IACvC,UAAU,EAAE;QACR,MAAM,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;KAClF,CAAC;CACL;AAED,MAAM,MAAM,wBAAwB,GAAG,CACnC,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB,KACA,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAE9C,MAAM,WAAW,+BAA+B;IAC5C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,MAAM,CAAC,EAAE,0BAA0B,CAAC;CACvC;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,+BAA+B,EAAE,OAAO,CAAC;IACzF,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,QAAQ;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;gBAE7B,OAAO,EAAE,+BAA+B;IAQ9C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAcpD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAUnC,gBAAgB;CAkBjC;AAED,qBAAa,cAAe,SAAQ,wBAAwB;gBAC5C,OAAO,GAAE,qBAA0B;CAgBlD"}
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.OpenAIEmbedder = exports.OpenAICompatibleEmbedder = void 0;
7
- const openai_1 = __importDefault(require("openai"));
8
4
  const embedder_1 = require("./embedder");
9
5
  const DEFAULT_OPENAI_EMBEDDING_MODEL = 'text-embedding-3-small';
6
+ const DEFAULT_OPENAI_BASE_URL = 'https://api.openai.com/v1';
10
7
  const DEFAULT_BATCH_SIZE = 100;
8
+ const DEFAULT_TIMEOUT_MS = 30000;
11
9
  const DEFAULT_OPENAI_EMBEDDING_DIMENSIONS = {
12
10
  'text-embedding-3-small': 1536,
13
11
  'text-embedding-3-large': 3072,
@@ -27,9 +25,8 @@ class OpenAICompatibleEmbedder {
27
25
  this.model = options.model;
28
26
  this.dimensions = resolveEmbeddingDimensions(options.model, options.dimensions);
29
27
  this.batchSize = resolveBatchSize(options.batchSize);
30
- this.sendDimensions = options.sendDimensions
31
- ?? (options.dimensions !== undefined && supportsDimensionsParam(options.model));
32
- this.client = options.client ?? createOpenAIClient(options);
28
+ this.sendDimensions = options.sendDimensions ?? options.dimensions !== undefined;
29
+ this.client = options.client ?? createHttpEmbeddingsClient(options);
33
30
  }
34
31
  async embedDocuments(texts) {
35
32
  const embeddings = [];
@@ -56,6 +53,7 @@ class OpenAICompatibleEmbedder {
56
53
  const body = {
57
54
  model: this.model,
58
55
  input: texts,
56
+ encoding_format: 'float',
59
57
  };
60
58
  if (this.sendDimensions) {
61
59
  body.dimensions = this.dimensions;
@@ -83,17 +81,22 @@ class OpenAIEmbedder extends OpenAICompatibleEmbedder {
83
81
  }
84
82
  }
85
83
  exports.OpenAIEmbedder = OpenAIEmbedder;
86
- function createOpenAIClient(options) {
84
+ function createHttpEmbeddingsClient(options) {
87
85
  if (!options.apiKey) {
88
86
  throw new Error('OpenAI-compatible embedder requires an apiKey.');
89
87
  }
90
88
  const clientOptions = {
91
89
  apiKey: options.apiKey,
90
+ baseURL: options.baseURL ?? DEFAULT_OPENAI_BASE_URL,
91
+ timeoutMs: options.timeoutMs ?? DEFAULT_TIMEOUT_MS,
92
92
  };
93
- if (options.baseURL) {
94
- clientOptions.baseURL = options.baseURL;
93
+ if (options.headers !== undefined) {
94
+ clientOptions.headers = options.headers;
95
+ }
96
+ if (options.fetch !== undefined) {
97
+ clientOptions.fetch = options.fetch;
95
98
  }
96
- return new openai_1.default(clientOptions);
99
+ return new HttpOpenAIEmbeddingsClient(clientOptions);
97
100
  }
98
101
  function resolveEmbeddingDimensions(model, dimensions) {
99
102
  if (dimensions !== undefined) {
@@ -114,9 +117,6 @@ function resolveBatchSize(batchSize) {
114
117
  }
115
118
  return batchSize;
116
119
  }
117
- function supportsDimensionsParam(model) {
118
- return model === 'text-embedding-3-small' || model === 'text-embedding-3-large';
119
- }
120
120
  function toOrderedEmbeddings(response, expectedSize, expectedDimensions) {
121
121
  (0, embedder_1.assertEmbeddingBatchSize)(response.data, expectedSize);
122
122
  const ordered = new Array(expectedSize);
@@ -142,4 +142,98 @@ function readEmbedding(value) {
142
142
  }
143
143
  return value;
144
144
  }
145
+ class HttpOpenAIEmbeddingsClient {
146
+ embeddings = {
147
+ create: async (body) => {
148
+ const controller = this.timeoutMs > 0 ? new AbortController() : undefined;
149
+ const timeoutId = controller === undefined
150
+ ? undefined
151
+ : setTimeout(() => controller.abort(), this.timeoutMs);
152
+ try {
153
+ const request = {
154
+ method: 'POST',
155
+ headers: this.createHeaders(),
156
+ body: JSON.stringify(body),
157
+ };
158
+ if (controller !== undefined) {
159
+ request.signal = controller.signal;
160
+ }
161
+ const response = await this.fetchImpl(this.url, request);
162
+ const text = await response.text();
163
+ if (!response.ok) {
164
+ throw new Error(`Embedding API failed: ${response.status} ${response.statusText}${formatBody(text)}`);
165
+ }
166
+ return parseEmbeddingResponse(text);
167
+ }
168
+ finally {
169
+ if (timeoutId !== undefined) {
170
+ clearTimeout(timeoutId);
171
+ }
172
+ }
173
+ },
174
+ };
175
+ url;
176
+ apiKey;
177
+ timeoutMs;
178
+ headers;
179
+ fetchImpl;
180
+ constructor(options) {
181
+ this.url = joinURL(options.baseURL, '/embeddings');
182
+ this.apiKey = options.apiKey;
183
+ this.timeoutMs = options.timeoutMs;
184
+ this.headers = { ...(options.headers ?? {}) };
185
+ this.fetchImpl = options.fetch ?? getGlobalFetch();
186
+ }
187
+ createHeaders() {
188
+ const headers = {
189
+ 'content-type': 'application/json',
190
+ ...this.headers,
191
+ };
192
+ const hasAuthorization = Object.keys(headers).some((key) => key.toLowerCase() === 'authorization');
193
+ if (!hasAuthorization) {
194
+ headers.authorization = `Bearer ${this.apiKey}`;
195
+ }
196
+ return headers;
197
+ }
198
+ }
199
+ function parseEmbeddingResponse(text) {
200
+ const parsed = JSON.parse(text);
201
+ if (!isRecord(parsed) || !Array.isArray(parsed.data)) {
202
+ throw new TypeError('Embedding API response must contain a data array.');
203
+ }
204
+ return {
205
+ data: parsed.data.map((item) => {
206
+ if (!isRecord(item)) {
207
+ throw new TypeError('Embedding API response data items must be objects.');
208
+ }
209
+ const embedding = item.embedding;
210
+ const result = { embedding };
211
+ if (item.index !== undefined) {
212
+ if (typeof item.index !== 'number') {
213
+ throw new TypeError('Embedding API response item index must be a number.');
214
+ }
215
+ result.index = item.index;
216
+ }
217
+ return result;
218
+ }),
219
+ };
220
+ }
221
+ function joinURL(baseURL, endpoint) {
222
+ return `${baseURL.replace(/\/+$/, '')}/${endpoint.replace(/^\/+/, '')}`;
223
+ }
224
+ function getGlobalFetch() {
225
+ if (typeof fetch !== 'function') {
226
+ throw new Error('OpenAI-compatible embedder requires fetch support or a custom fetch option.');
227
+ }
228
+ return fetch;
229
+ }
230
+ function isRecord(value) {
231
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
232
+ }
233
+ function formatBody(text) {
234
+ if (text.length === 0) {
235
+ return '';
236
+ }
237
+ return `: ${text}`;
238
+ }
145
239
  //# sourceMappingURL=openai-compatible-embedder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compatible-embedder.js","sourceRoot":"","sources":["../../../src/rag/embeddings/openai-compatible-embedder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai-compatible-embedder.js","sourceRoot":"","sources":["../../../src/rag/embeddings/openai-compatible-embedder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "@fllf/agent-sdk",
3
- "version": "0.1.0",
2
+ "name": "@fllf/agent-sdk",
3
+ "version": "0.1.2",
4
4
  "description": "A composable TypeScript Agent runtime foundation.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -10,20 +10,20 @@
10
10
  "default": "./dist/index.js"
11
11
  }
12
12
  },
13
- "files": [
14
- "dist",
15
- "README.md"
16
- ],
17
- "publishConfig": {
18
- "access": "public",
19
- "registry": "https://registry.npmjs.org/"
20
- },
21
- "scripts": {
22
- "build": "tsc -p tsconfig.build.json",
23
- "typecheck": "tsc --noEmit",
24
- "test": "tsx --test test/**/*.test.ts",
25
- "prepublishOnly": "npm run typecheck && npm test && npm run build",
26
- "example:simple-chat": "tsx examples/simple-chat.ts",
13
+ "files": [
14
+ "dist",
15
+ "README.md"
16
+ ],
17
+ "publishConfig": {
18
+ "access": "public",
19
+ "registry": "https://registry.npmjs.org/"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc -p tsconfig.build.json",
23
+ "typecheck": "tsc --noEmit",
24
+ "test": "tsx --test test/**/*.test.ts",
25
+ "prepublishOnly": "npm run typecheck && npm test && npm run build",
26
+ "example:simple-chat": "tsx examples/simple-chat.ts",
27
27
  "example:tool-calling": "tsx examples/tool-calling.ts",
28
28
  "example:local-ollama": "tsx examples/local-ollama.ts"
29
29
  },