@framers/agentos 0.1.142 → 0.1.144
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 +154 -278
- package/dist/api/agent.d.ts +18 -1
- package/dist/api/agent.d.ts.map +1 -1
- package/dist/api/agent.js +2 -0
- package/dist/api/agent.js.map +1 -1
- package/dist/api/generateText.d.ts +90 -0
- package/dist/api/generateText.d.ts.map +1 -1
- package/dist/api/generateText.js +113 -0
- package/dist/api/generateText.js.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/streamText.d.ts.map +1 -1
- package/dist/api/streamText.js +68 -8
- package/dist/api/streamText.js.map +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.d.ts.map +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.js +82 -5
- package/dist/discovery/CapabilityDiscoveryEngine.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/query-router/QueryRouter.d.ts +11 -0
- package/dist/query-router/QueryRouter.d.ts.map +1 -1
- package/dist/query-router/QueryRouter.js +85 -31
- package/dist/query-router/QueryRouter.js.map +1 -1
- package/dist/query-router/types.d.ts +9 -0
- package/dist/query-router/types.d.ts.map +1 -1
- package/dist/query-router/types.js.map +1 -1
- package/knowledge/platform-corpus.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,9 +25,15 @@
|
|
|
25
25
|
|
|
26
26
|
- [Overview](#overview)
|
|
27
27
|
- [Quick Start](#quick-start)
|
|
28
|
-
- [
|
|
29
|
-
- [
|
|
30
|
-
- [
|
|
28
|
+
- [1. Generate Text (Provider-First)](#1-generate-text-provider-first)
|
|
29
|
+
- [2. Agent with Personality & Memory](#2-agent-with-personality--memory)
|
|
30
|
+
- [3. Multimodal RAG](#3-multimodal-rag)
|
|
31
|
+
- [4. Structured Output (Zod Validation)](#4-structured-output-zod-validation)
|
|
32
|
+
- [5. Workflows & Graphs](#5-workflows--graphs)
|
|
33
|
+
- [6. Multi-Agent Teams](#6-multi-agent-teams)
|
|
34
|
+
- [7. Voice Pipeline](#7-voice-pipeline)
|
|
35
|
+
- [8. Guardrails & Security](#8-guardrails--security)
|
|
36
|
+
- [Default Models Per Provider](#default-models-per-provider)
|
|
31
37
|
- [System Architecture](#system-architecture)
|
|
32
38
|
- [Architecture Diagram](#architecture-diagram)
|
|
33
39
|
- [Request Lifecycle](#request-lifecycle)
|
|
@@ -153,349 +159,219 @@
|
|
|
153
159
|
npm install @framers/agentos
|
|
154
160
|
```
|
|
155
161
|
|
|
156
|
-
|
|
162
|
+
Set any provider's API key and you're ready:
|
|
157
163
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
- Use [`generateText()` / `streamText()` / `generateObject()` / `streamObject()` / `embedText()` / `generateImage()` / `agent()`](./docs/getting-started/HIGH_LEVEL_API.md) for the fastest path from prompt to working code.
|
|
162
|
-
- Use [`AgentOS`](#advanced-agentgraph-and-full-runtime) when you need extensions, workflows, personas, or full runtime lifecycle control.
|
|
163
|
-
- Browse the live docs at [docs.agentos.sh/getting-started/high-level-api](https://docs.agentos.sh/getting-started/high-level-api) and [docs.agentos.sh/api](https://docs.agentos.sh/api).
|
|
164
|
+
```bash
|
|
165
|
+
export OPENAI_API_KEY=sk-... # or ANTHROPIC_API_KEY, GEMINI_API_KEY, GROQ_API_KEY, etc.
|
|
166
|
+
```
|
|
164
167
|
|
|
165
|
-
###
|
|
168
|
+
### 1. Generate Text (Provider-First)
|
|
166
169
|
|
|
167
|
-
|
|
168
|
-
multiple specialised agents. Three lines to go from prompt to a coordinated
|
|
169
|
-
research-and-writing pipeline:
|
|
170
|
+
No model strings needed — AgentOS picks the best default:
|
|
170
171
|
|
|
171
172
|
```typescript
|
|
172
|
-
import {
|
|
173
|
+
import { generateText, streamText } from '@framers/agentos';
|
|
173
174
|
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
writer: { instructions: 'Write a clear, concise summary.' },
|
|
178
|
-
},
|
|
179
|
-
strategy: 'sequential',
|
|
175
|
+
const result = await generateText({
|
|
176
|
+
provider: 'anthropic',
|
|
177
|
+
prompt: 'Explain how TCP handshakes work in 3 bullets.',
|
|
180
178
|
});
|
|
181
|
-
|
|
182
|
-
const result = await team.generate('Summarise recent advances in fusion energy.');
|
|
183
179
|
console.log(result.text);
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
Set any provider's API key (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`,
|
|
187
|
-
`GROQ_API_KEY`, `OLLAMA_BASE_URL`, etc.) and the agency auto-detects the provider.
|
|
188
|
-
All five strategies are available out of the box:
|
|
189
180
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
| `debate` | Agents argue and refine a shared answer over multiple rounds |
|
|
195
|
-
| `review-loop` | One agent drafts, another reviews and requests revisions |
|
|
196
|
-
| `hierarchical` | A coordinator dispatches sub-tasks to specialist agents at runtime |
|
|
197
|
-
| `graph` | Explicit dependency DAG via `dependsOn`; tiers run concurrently |
|
|
198
|
-
|
|
199
|
-
**Graph strategy** — declare dependencies between agents and let the orchestrator
|
|
200
|
-
handle topological ordering and concurrent execution:
|
|
201
|
-
|
|
202
|
-
```typescript
|
|
203
|
-
const team = agency({
|
|
204
|
-
agents: {
|
|
205
|
-
researcher: { instructions: 'Research the topic.' },
|
|
206
|
-
writer: { instructions: 'Write an article.', dependsOn: ['researcher'] },
|
|
207
|
-
illustrator: { instructions: 'Describe illustrations.', dependsOn: ['researcher'] },
|
|
208
|
-
reviewer: { instructions: 'Review everything.', dependsOn: ['writer', 'illustrator'] },
|
|
209
|
-
},
|
|
210
|
-
strategy: 'graph', // auto-detected when any agent has dependsOn
|
|
211
|
-
});
|
|
181
|
+
// Streaming
|
|
182
|
+
for await (const chunk of streamText({ provider: 'openai', prompt: 'Explain SYN-ACK.' }).textStream) {
|
|
183
|
+
process.stdout.write(chunk);
|
|
184
|
+
}
|
|
212
185
|
```
|
|
213
186
|
|
|
214
|
-
|
|
215
|
-
transport, `connect()` for channel adapters, RAG context injection, and real
|
|
216
|
-
per-agent stream events in the same config object — see
|
|
217
|
-
[`docs/orchestration/AGENCY_API.md`](./docs/orchestration/AGENCY_API.md) for the full reference.
|
|
187
|
+
16 providers supported. Automatic fallback when one fails (402/429/5xx → tries next available key).
|
|
218
188
|
|
|
219
|
-
###
|
|
189
|
+
### 2. Agent with Personality & Memory
|
|
220
190
|
|
|
221
|
-
|
|
222
|
-
output extraction, embedding generation, image generation, or a single stateful
|
|
223
|
-
session without a multi-agent team.
|
|
224
|
-
|
|
225
|
-
#### Provider-First Pattern (Recommended)
|
|
226
|
-
|
|
227
|
-
The recommended way to call any helper is **provider-first**: specify the provider
|
|
228
|
-
name and let AgentOS pick the best default model automatically. No model string
|
|
229
|
-
needed -- just set the matching environment variable and go.
|
|
191
|
+
Agents have HEXACO personality traits that shape their communication style, and cognitive memory with Ebbinghaus decay:
|
|
230
192
|
|
|
231
193
|
```typescript
|
|
232
|
-
import {
|
|
233
|
-
|
|
234
|
-
// Provider-first -- AgentOS picks the best default model
|
|
235
|
-
const result = await generateText({
|
|
236
|
-
provider: 'openai',
|
|
237
|
-
prompt: 'Explain TCP handshakes in 3 bullets.',
|
|
238
|
-
});
|
|
194
|
+
import { agent } from '@framers/agentos';
|
|
239
195
|
|
|
240
|
-
|
|
241
|
-
const result2 = await generateText({
|
|
196
|
+
const tutor = agent({
|
|
242
197
|
provider: 'anthropic',
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
//
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
198
|
+
instructions: 'You are a patient computer science tutor.',
|
|
199
|
+
personality: {
|
|
200
|
+
openness: 0.9, // creative, exploratory answers
|
|
201
|
+
conscientiousness: 0.95, // thorough, well-structured
|
|
202
|
+
agreeableness: 0.85, // warm, encouraging tone
|
|
203
|
+
},
|
|
204
|
+
memory: {
|
|
205
|
+
enabled: true,
|
|
206
|
+
cognitive: true, // Ebbinghaus decay, reconsolidation, involuntary recall
|
|
207
|
+
},
|
|
250
208
|
});
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
The same pattern works across **every helper function**: `generateText`, `streamText`,
|
|
254
|
-
`generateObject`, `streamObject`, `embedText`, `generateImage`, and `agent`.
|
|
255
209
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
from a built-in registry. Set the matching env var and you are ready to go:
|
|
260
|
-
|
|
261
|
-
| Provider | Default Model | Env Var |
|
|
262
|
-
|---|---|---|
|
|
263
|
-
| `openai` | `gpt-4o` | `OPENAI_API_KEY` |
|
|
264
|
-
| `anthropic` | `claude-sonnet-4-20250514` | `ANTHROPIC_API_KEY` |
|
|
265
|
-
| `gemini` | `gemini-2.5-flash` | `GEMINI_API_KEY` |
|
|
266
|
-
| `ollama` | `llama3.2` | `OLLAMA_BASE_URL` |
|
|
267
|
-
| `groq` | `llama-3.3-70b-versatile` | `GROQ_API_KEY` |
|
|
268
|
-
| `openrouter` | `openai/gpt-4o` | `OPENROUTER_API_KEY` |
|
|
269
|
-
| `together` | `Meta-Llama-3.1-70B-Instruct-Turbo` | `TOGETHER_API_KEY` |
|
|
270
|
-
| `mistral` | `mistral-large-latest` | `MISTRAL_API_KEY` |
|
|
271
|
-
| `xai` | `grok-2` | `XAI_API_KEY` |
|
|
210
|
+
const session = tutor.session('student-1');
|
|
211
|
+
const reply = await session.send('Explain recursion with an analogy.');
|
|
212
|
+
console.log(reply.text);
|
|
272
213
|
|
|
273
|
-
|
|
274
|
-
|
|
214
|
+
// Memory persists across sessions — the agent remembers context
|
|
215
|
+
const followUp = await session.send('Can you expand on that?');
|
|
216
|
+
console.log(followUp.text);
|
|
217
|
+
```
|
|
275
218
|
|
|
276
|
-
|
|
219
|
+
### 3. Multimodal RAG
|
|
277
220
|
|
|
278
|
-
|
|
221
|
+
Ingest documents, images, and structured data — retrieve with HyDE (Hypothetical Document Embedding):
|
|
279
222
|
|
|
280
223
|
```typescript
|
|
281
|
-
import {
|
|
282
|
-
|
|
283
|
-
// OpenAI
|
|
284
|
-
await generateText({ provider: 'openai', prompt: 'What is QUIC?' });
|
|
224
|
+
import { agent } from '@framers/agentos';
|
|
285
225
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
await generateText({ provider: 'ollama', prompt: 'What is QUIC?' });
|
|
226
|
+
const analyst = agent({
|
|
227
|
+
provider: 'openai',
|
|
228
|
+
instructions: 'You are a financial analyst. Answer questions using provided documents.',
|
|
229
|
+
rag: {
|
|
230
|
+
enabled: true,
|
|
231
|
+
mode: 'aggressive', // always retrieves before answering
|
|
232
|
+
topK: 10,
|
|
233
|
+
strategy: 'hyde', // generates hypothetical answers for better retrieval
|
|
234
|
+
},
|
|
235
|
+
});
|
|
297
236
|
|
|
298
|
-
|
|
299
|
-
await generateText({ provider: 'openrouter', prompt: 'What is QUIC?' });
|
|
237
|
+
const session = analyst.session('q4-review');
|
|
300
238
|
|
|
301
|
-
//
|
|
302
|
-
await
|
|
239
|
+
// Ingest documents
|
|
240
|
+
await session.ingest('Q4 revenue grew 23% YoY to $4.2B...');
|
|
241
|
+
await session.ingest({ type: 'file', path: './earnings-report.pdf' });
|
|
303
242
|
|
|
304
|
-
|
|
305
|
-
|
|
243
|
+
const answer = await session.send('What drove revenue growth in Q4?');
|
|
244
|
+
console.log(answer.text); // Cites specific passages from ingested docs
|
|
306
245
|
```
|
|
307
246
|
|
|
308
|
-
|
|
247
|
+
### 4. Structured Output (Zod Validation)
|
|
309
248
|
|
|
310
|
-
|
|
249
|
+
Extract typed data from unstructured text:
|
|
311
250
|
|
|
312
251
|
```typescript
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
provider: 'openai',
|
|
316
|
-
model: 'gpt-4o-mini',
|
|
317
|
-
prompt: 'Classify this support ticket.',
|
|
318
|
-
});
|
|
252
|
+
import { generateObject } from '@framers/agentos';
|
|
253
|
+
import { z } from 'zod';
|
|
319
254
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
255
|
+
const { object } = await generateObject({
|
|
256
|
+
provider: 'gemini',
|
|
257
|
+
schema: z.object({
|
|
258
|
+
name: z.string(),
|
|
259
|
+
sentiment: z.enum(['positive', 'negative', 'neutral']),
|
|
260
|
+
topics: z.array(z.string()),
|
|
261
|
+
}),
|
|
262
|
+
prompt: 'Analyze: "The new iPhone camera is incredible but the battery life is disappointing."',
|
|
325
263
|
});
|
|
326
264
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
provider: 'ollama',
|
|
330
|
-
model: 'codellama',
|
|
331
|
-
prompt: 'Write a Python fizzbuzz.',
|
|
332
|
-
});
|
|
265
|
+
console.log(object);
|
|
266
|
+
// { name: "iPhone Review", sentiment: "mixed", topics: ["camera", "battery"] }
|
|
333
267
|
```
|
|
334
268
|
|
|
335
|
-
|
|
269
|
+
### 5. Workflows & Graphs
|
|
336
270
|
|
|
337
|
-
|
|
338
|
-
priority order. Set one key and every call uses that provider automatically --
|
|
339
|
-
no `provider` field needed:
|
|
340
|
-
|
|
341
|
-
```bash
|
|
342
|
-
# Set one of these -- AgentOS picks the first it finds:
|
|
343
|
-
# Priority: OPENROUTER > OPENAI > ANTHROPIC > GEMINI > GROQ > TOGETHER > MISTRAL > XAI > OLLAMA
|
|
344
|
-
export ANTHROPIC_API_KEY=sk-ant-...
|
|
345
|
-
```
|
|
271
|
+
Deterministic multi-step pipelines with branching, parallel execution, and checkpointing:
|
|
346
272
|
|
|
347
273
|
```typescript
|
|
348
|
-
import {
|
|
274
|
+
import { workflow } from '@framers/agentos';
|
|
349
275
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
276
|
+
const pipeline = workflow('content-pipeline')
|
|
277
|
+
.step('research', { provider: 'anthropic', instructions: 'Research the topic thoroughly.' })
|
|
278
|
+
.step('draft', { provider: 'openai', instructions: 'Write a blog post from the research.' })
|
|
279
|
+
.step('review', { provider: 'anthropic', instructions: 'Review for accuracy and tone.' })
|
|
280
|
+
.step('publish', { tool: 'blog_publish' });
|
|
353
281
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
The `provider:model` string format still works but provider-first is preferred:
|
|
357
|
-
|
|
358
|
-
```typescript
|
|
359
|
-
// Legacy format -- still fully supported but not recommended for new code
|
|
360
|
-
await generateText({ model: 'openai:gpt-4o', prompt: '...' });
|
|
361
|
-
await generateText({ model: 'anthropic:claude-sonnet-4-20250514', prompt: '...' });
|
|
362
|
-
await generateText({ model: 'ollama:llama3.2', prompt: '...' });
|
|
282
|
+
const result = await pipeline.run('Write a post about WebAssembly in 2026.');
|
|
283
|
+
console.log(result.text);
|
|
363
284
|
```
|
|
364
285
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
```typescript
|
|
368
|
-
import {
|
|
369
|
-
agent, embedText, generateImage, generateObject, streamText, streamObject,
|
|
370
|
-
} from '@framers/agentos';
|
|
371
|
-
import { z } from 'zod';
|
|
286
|
+
### 6. Multi-Agent Teams
|
|
372
287
|
|
|
373
|
-
|
|
374
|
-
const live = streamText({
|
|
375
|
-
provider: 'anthropic',
|
|
376
|
-
prompt: 'Stream a short explanation of SYN, SYN-ACK, ACK.',
|
|
377
|
-
});
|
|
288
|
+
Coordinate specialized agents with built-in strategies:
|
|
378
289
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
}
|
|
290
|
+
```typescript
|
|
291
|
+
import { agency } from '@framers/agentos';
|
|
382
292
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
293
|
+
const team = agency({
|
|
294
|
+
agents: {
|
|
295
|
+
researcher: {
|
|
296
|
+
instructions: 'Find relevant facts and data.',
|
|
297
|
+
provider: 'anthropic',
|
|
298
|
+
},
|
|
299
|
+
writer: {
|
|
300
|
+
instructions: 'Write a clear, engaging summary.',
|
|
301
|
+
provider: 'openai',
|
|
302
|
+
},
|
|
303
|
+
reviewer: {
|
|
304
|
+
instructions: 'Check for accuracy and suggest improvements.',
|
|
305
|
+
provider: 'gemini',
|
|
306
|
+
dependsOn: ['writer'], // runs after writer
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
strategy: 'graph', // dependency-based DAG execution
|
|
310
|
+
memory: { shared: true }, // agents share context
|
|
387
311
|
});
|
|
388
312
|
|
|
389
|
-
|
|
313
|
+
const result = await team.generate('Compare TCP vs UDP for game networking.');
|
|
314
|
+
console.log(result.text);
|
|
315
|
+
```
|
|
390
316
|
|
|
391
|
-
|
|
392
|
-
const { object } = await generateObject({
|
|
393
|
-
provider: 'gemini',
|
|
394
|
-
schema: z.object({ name: z.string(), age: z.number() }),
|
|
395
|
-
prompt: 'Extract: "John is 30 years old"',
|
|
396
|
-
});
|
|
317
|
+
6 strategies: `sequential`, `parallel`, `debate`, `review-loop`, `hierarchical`, `graph`.
|
|
397
318
|
|
|
398
|
-
|
|
319
|
+
### 7. Voice Pipeline
|
|
399
320
|
|
|
400
|
-
|
|
401
|
-
const structured = streamObject({
|
|
402
|
-
provider: 'groq',
|
|
403
|
-
schema: z.object({ title: z.string(), tags: z.array(z.string()) }),
|
|
404
|
-
prompt: 'Generate metadata for an article about TCP.',
|
|
405
|
-
});
|
|
321
|
+
Real-time speech-to-text and text-to-speech with streaming:
|
|
406
322
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
}
|
|
410
|
-
console.log('final:', await structured.object);
|
|
323
|
+
```typescript
|
|
324
|
+
import { agent } from '@framers/agentos';
|
|
411
325
|
|
|
412
|
-
|
|
413
|
-
const { embeddings } = await embedText({
|
|
326
|
+
const receptionist = agent({
|
|
414
327
|
provider: 'openai',
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
// Stateful agent session with Anthropic
|
|
422
|
-
const assistant = agent({
|
|
423
|
-
provider: 'anthropic',
|
|
424
|
-
instructions: 'You are a concise networking tutor.',
|
|
425
|
-
maxSteps: 3,
|
|
328
|
+
instructions: 'You are a friendly receptionist for a dental clinic.',
|
|
329
|
+
voice: {
|
|
330
|
+
tts: { provider: 'elevenlabs', voice: 'Rachel' },
|
|
331
|
+
stt: { provider: 'deepgram' },
|
|
332
|
+
},
|
|
426
333
|
});
|
|
427
334
|
|
|
428
|
-
|
|
429
|
-
const
|
|
430
|
-
|
|
431
|
-
console.log(await session.usage());
|
|
335
|
+
// Voice sessions stream audio in real-time
|
|
336
|
+
const call = receptionist.voiceSession('call-1');
|
|
337
|
+
await call.start(); // begins listening
|
|
432
338
|
```
|
|
433
339
|
|
|
434
|
-
|
|
435
|
-
|
|
340
|
+
### 8. Guardrails & Security
|
|
341
|
+
|
|
342
|
+
5-tier security with PII redaction, prompt injection defense, and code scanning:
|
|
436
343
|
|
|
437
344
|
```typescript
|
|
438
|
-
import {
|
|
345
|
+
import { agent } from '@framers/agentos';
|
|
439
346
|
|
|
440
|
-
|
|
347
|
+
const secureBot = agent({
|
|
441
348
|
provider: 'anthropic',
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
```
|
|
448
|
-
|
|
449
|
-
With `enabled: true`, AgentOS writes to the shared home ledger at `~/.framers/usage-ledger.jsonl` unless you provide `usageLedger.path` or one of the ledger env vars.
|
|
450
|
-
|
|
451
|
-
Built-in image providers: `openai`, `openrouter`, `stability`, and `replicate`.
|
|
452
|
-
|
|
453
|
-
Use `providerOptions` when you need provider-native controls without leaving the high-level API:
|
|
454
|
-
|
|
455
|
-
```typescript
|
|
456
|
-
const poster = await generateImage({
|
|
457
|
-
model: 'stability:stable-image-core',
|
|
458
|
-
prompt: 'An art deco travel poster for a moon colony',
|
|
459
|
-
negativePrompt: 'text, watermark',
|
|
460
|
-
providerOptions: {
|
|
461
|
-
stability: {
|
|
462
|
-
stylePreset: 'illustration',
|
|
463
|
-
seed: 42,
|
|
464
|
-
cfgScale: 8,
|
|
465
|
-
},
|
|
349
|
+
instructions: 'You are a customer support agent.',
|
|
350
|
+
security: { tier: 'strict' },
|
|
351
|
+
guardrails: {
|
|
352
|
+
input: ['pii-redaction', 'ml-classifiers'], // block PII + detect injection
|
|
353
|
+
output: ['grounding-guard', 'code-safety'], // prevent hallucination + unsafe code
|
|
466
354
|
},
|
|
467
355
|
});
|
|
468
356
|
```
|
|
469
357
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
### Advanced: AgentGraph and Full Runtime
|
|
473
|
-
|
|
474
|
-
Use `AgentGraph` or the full `AgentOS` runtime when you need programmatic graph
|
|
475
|
-
construction with custom edge callbacks, extensions, workflow DSL, personas,
|
|
476
|
-
chunk-level streaming events, or full runtime lifecycle control.
|
|
358
|
+
5 tiers: `dangerous` → `permissive` → `balanced` → `strict` → `paranoid`.
|
|
477
359
|
|
|
478
|
-
|
|
479
|
-
import { AgentOS, AgentOSResponseChunkType } from '@framers/agentos';
|
|
480
|
-
import { createTestAgentOSConfig } from '@framers/agentos/config/AgentOSConfig';
|
|
360
|
+
### Default Models Per Provider
|
|
481
361
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
See [`docs/architecture/AGENT_GRAPH.md`](./docs/architecture/AGENT_GRAPH.md) for the `AgentGraph` programmatic
|
|
497
|
-
graph builder and [`docs/orchestration/WORKFLOW_DSL.md`](./docs/orchestration/WORKFLOW_DSL.md) for the workflow
|
|
498
|
-
DSL.
|
|
362
|
+
| Provider | Default Model | Env Var |
|
|
363
|
+
|---|---|---|
|
|
364
|
+
| openai | gpt-4o | `OPENAI_API_KEY` |
|
|
365
|
+
| anthropic | claude-sonnet-4 | `ANTHROPIC_API_KEY` |
|
|
366
|
+
| gemini | gemini-2.5-flash | `GEMINI_API_KEY` |
|
|
367
|
+
| ollama | llama3.2 | `OLLAMA_BASE_URL` |
|
|
368
|
+
| groq | llama-3.3-70b | `GROQ_API_KEY` |
|
|
369
|
+
| openrouter | openai/gpt-4o | `OPENROUTER_API_KEY` |
|
|
370
|
+
| together | meta-llama/Meta-Llama-3.1-70B | `TOGETHER_API_KEY` |
|
|
371
|
+
| mistral | mistral-large-latest | `MISTRAL_API_KEY` |
|
|
372
|
+
| xai | grok-3-mini | `XAI_API_KEY` |
|
|
373
|
+
|
|
374
|
+
Automatic fallback: when a provider fails, AgentOS tries the next available API key.
|
|
499
375
|
|
|
500
376
|
---
|
|
501
377
|
|
|
@@ -1046,14 +922,14 @@ See [`docs/memory/MEMORY_SCALING.md`](./docs/memory/MEMORY_SCALING.md), [`docs/m
|
|
|
1046
922
|
|
|
1047
923
|
**Location:** `knowledge/platform-corpus.json`
|
|
1048
924
|
|
|
1049
|
-
AgentOS ships with **
|
|
925
|
+
AgentOS ships with **244 pre-built knowledge entries** covering the entire platform surface area. When the QueryRouter initializes, these entries are automatically loaded alongside your project-specific documentation corpus, giving every agent instant knowledge about AgentOS capabilities with zero configuration.
|
|
1050
926
|
|
|
1051
927
|
**Coverage breakdown:**
|
|
1052
928
|
|
|
1053
929
|
| Category | Count | What it covers |
|
|
1054
930
|
|----------|-------|---------------|
|
|
1055
931
|
| Tools | 105 | Every tool and channel adapter (Discord, Telegram, LinkedIn, Bluesky, etc.) |
|
|
1056
|
-
| Skills |
|
|
932
|
+
| Skills | 80 | All curated skills from the skills registry |
|
|
1057
933
|
| FAQ | 30 | Common questions (voice setup, supported models, streaming, OCR, etc.) |
|
|
1058
934
|
| API | 14 | Core API functions (generateText, streamText, agent, agency, etc.) |
|
|
1059
935
|
| Troubleshooting | 15 | Common errors and their fixes (missing API keys, model not found, etc.) |
|
package/dist/api/agent.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* are not actively enforced in this lightweight layer — use the full AgentOS
|
|
9
9
|
* runtime (`AgentOSOrchestrator`) or `agency()` for guardrail enforcement.
|
|
10
10
|
*/
|
|
11
|
-
import { type GenerateTextOptions, type GenerateTextResult, type Message } from './generateText.js';
|
|
11
|
+
import { type FallbackProviderEntry, type GenerateTextOptions, type GenerateTextResult, type Message } from './generateText.js';
|
|
12
12
|
import { type StreamTextResult } from './streamText.js';
|
|
13
13
|
import { type AgentOSUsageAggregate, type AgentOSUsageLedgerOptions } from './runtime/usageLedger.js';
|
|
14
14
|
import type { BaseAgentConfig } from './types.js';
|
|
@@ -34,6 +34,23 @@ export interface AgentOptions extends BaseAgentConfig {
|
|
|
34
34
|
* - `string` — inject a custom CoT instruction when tools are present.
|
|
35
35
|
*/
|
|
36
36
|
chainOfThought?: boolean | string;
|
|
37
|
+
/**
|
|
38
|
+
* Ordered list of fallback providers to try when the primary provider
|
|
39
|
+
* fails with a retryable error (HTTP 402/429/5xx, network errors).
|
|
40
|
+
*
|
|
41
|
+
* Applied to every `generate()`, `stream()`, and `session.send()` /
|
|
42
|
+
* `session.stream()` call made through this agent.
|
|
43
|
+
*
|
|
44
|
+
* @see {@link GenerateTextOptions.fallbackProviders}
|
|
45
|
+
*/
|
|
46
|
+
fallbackProviders?: FallbackProviderEntry[];
|
|
47
|
+
/**
|
|
48
|
+
* Callback invoked when a fallback provider is about to be tried.
|
|
49
|
+
*
|
|
50
|
+
* @param error - The error that triggered the fallback.
|
|
51
|
+
* @param fallbackProvider - The provider identifier being tried next.
|
|
52
|
+
*/
|
|
53
|
+
onFallback?: (error: Error, fallbackProvider: string) => void;
|
|
37
54
|
}
|
|
38
55
|
/**
|
|
39
56
|
* A named conversation session returned by `Agent.session()`.
|
package/dist/api/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/api/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAA4C,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEpG;;;;;;;GAOG;AACH,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD;;;OAGG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/api/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAA4C,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEpG;;;;;;;GAOG;AACH,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD;;;OAGG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC5C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChD;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvC,+EAA+E;IAC/E,QAAQ,IAAI,OAAO,EAAE,CAAC;IACtB,wFAAwF;IACxF,KAAK,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxC,uDAAuD;IACvD,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC3F;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,gBAAgB,CAAC;IAC9E;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACnC,8EAA8E;IAC9E,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC1D,+DAA+D;IAC/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,iBAAiB,CAAC;IACpE;;;;OAIG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;CAC9D;AAgCD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,KAAK,CAiK/C"}
|
package/dist/api/agent.js
CHANGED
package/dist/api/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/api/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/api/agent.ts"],"names":[],"mappings":"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"}
|