@@ -21,25 +21,58 @@ If you also want durable helper-level accounting, set `usageLedger.path`, set `u
2121| ` agent() ` | Lightweight multi-turn sessions with in-memory history | Does not replace the full AgentOS runtime |
2222| ` AgentOS ` | Personas, extensions, workflows, multi-agent orchestration, guardrails, HITL, runtime lifecycle | More setup, more control |
2323
24- ## Provider Defaults
24+ ## Provider Resolution
25+
26+ ### Calling Styles
27+
28+ AgentOS supports three styles for specifying provider and model. ** Provider-first is recommended:**
29+
30+ ``` ts
31+ // 1. Provider-first (recommended) — AgentOS picks the best default model
32+ await generateText ({ provider: ' openai' , prompt: ' ...' });
33+
34+ // 2. Provider + explicit model — full control
35+ await generateText ({ provider: ' anthropic' , model: ' claude-sonnet-4-20250514' , prompt: ' ...' });
36+
37+ // 3. Legacy colon format — backwards compatible, still works
38+ await generateText ({ model: ' openai:gpt-4o' , prompt: ' ...' });
39+ ```
40+
41+ ### Provider Defaults
2542
2643When you supply ` provider ` without an explicit ` model ` , AgentOS resolves the default model
2744for the requested task automatically:
2845
29- | Provider | Text default | Image default | Embedding default |
30- | ----------| -------------| ---------------| -------------------|
31- | ` openai ` | ` gpt-4o ` | ` gpt-image-1 ` | ` text-embedding-3-small ` |
32- | ` anthropic ` | ` claude-sonnet-4-20250514 ` | — | — |
33- | ` ollama ` | ` llama3.2 ` | ` stable-diffusion ` | ` nomic-embed-text ` |
34- | ` openrouter ` | ` openai/gpt-4o ` | — | — |
35- | ` gemini ` | ` gemini-2.5-flash ` | — | — |
36- | ` stability ` | — | ` stable-diffusion-xl-1024-v1-0 ` | — |
37- | ` replicate ` | — | ` black-forest-labs/flux-1.1-pro ` | — |
46+ | Provider | Type | Text default | Image default | Embedding default | Env var |
47+ | ----------| ------| -------------| ---------------| -------------------| ---------|
48+ | ` openai ` | Cloud | ` gpt-4o ` | ` gpt-image-1 ` | ` text-embedding-3-small ` | ` OPENAI_API_KEY ` |
49+ | ` anthropic ` | Cloud | ` claude-sonnet-4-20250514 ` | — | — | ` ANTHROPIC_API_KEY ` |
50+ | ` gemini ` | Cloud | ` gemini-2.5-flash ` | — | — | ` GEMINI_API_KEY ` |
51+ | ` openrouter ` | Cloud | ` openai/gpt-4o ` | — | — | ` OPENROUTER_API_KEY ` |
52+ | ` stability ` | Cloud | — | ` stable-diffusion-xl-1024-v1-0 ` | — | ` STABILITY_API_KEY ` |
53+ | ` replicate ` | Cloud | — | ` black-forest-labs/flux-1.1-pro ` | — | ` REPLICATE_API_TOKEN ` |
54+ | ` ollama ` | Local | ` llama3.2 ` | ` stable-diffusion ` | ` nomic-embed-text ` | ` OLLAMA_BASE_URL ` |
55+ | ` stable-diffusion-local ` | Local | — | ` v1-5-pruned-emaonly ` | — | ` STABLE_DIFFUSION_LOCAL_BASE_URL ` |
3856
3957When neither ` provider ` nor ` model ` is given, the first set API key env var is used
4058(` OPENAI_API_KEY ` → ` ANTHROPIC_API_KEY ` → ` OPENROUTER_API_KEY ` → ` GEMINI_API_KEY ` → ` OLLAMA_BASE_URL ` ).
4159
42- The legacy ` model: 'provider:model' ` format is fully supported alongside the new style.
60+ ### Local Providers
61+
62+ Local providers don't require API keys — just a ` baseUrl ` (or the corresponding env var):
63+
64+ ``` ts
65+ // Ollama — runs any GGUF model locally
66+ await generateText ({
67+ provider: ' ollama' ,
68+ model: ' llama3.2' ,
69+ prompt: ' Explain quantum entanglement simply.' ,
70+ baseUrl: ' http://localhost:11434' , // or set OLLAMA_BASE_URL
71+ });
72+
73+ // Anthropic fallback: if ANTHROPIC_API_KEY is unset but OPENROUTER_API_KEY is set,
74+ // AgentOS automatically routes anthropic requests through OpenRouter.
75+ ```
4376
4477## ` generateText() `
4578
@@ -110,21 +143,28 @@ console.log(result.provider);
110143console .log (result .images [0 ]?.mimeType );
111144```
112145
113- Built-in image providers:
146+ ### Built-in Image Providers
114147
115- - ` openai `
116- - ` openrouter `
117- - ` stability `
118- - ` replicate `
148+ | Provider | Type | Default model | API key env var |
149+ | ---| ---| ---| ---|
150+ | ` openai ` | Cloud API | ` gpt-image-1 ` | ` OPENAI_API_KEY ` |
151+ | ` stability ` | Cloud API | ` stable-diffusion-xl-1024-v1-0 ` | ` STABILITY_API_KEY ` |
152+ | ` replicate ` | Cloud API | ` black-forest-labs/flux-1.1-pro ` | ` REPLICATE_API_TOKEN ` |
153+ | ` openrouter ` | Cloud API | — | ` OPENROUTER_API_KEY ` |
154+ | ` ollama ` | Local | ` stable-diffusion ` | None (uses ` baseUrl ` ) |
155+ | ` stable-diffusion-local ` | Local | ` v1-5-pruned-emaonly ` | None (uses ` baseUrl ` ) |
156+
157+ ### Provider-Specific Options
119158
120159Use the common options for the simple path, then drop down to namespaced
121- ` providerOptions ` when you need provider-specific controls:
160+ ` providerOptions ` when you need provider-native controls:
122161
123162``` ts
124163import { generateImage } from ' @framers/agentos' ;
125164
126165const poster = await generateImage ({
127- model: ' stability:stable-image-core' ,
166+ provider: ' stability' ,
167+ model: ' stable-image-core' ,
128168 prompt: ' An art deco travel poster for a moon colony' ,
129169 negativePrompt: ' text, watermark' ,
130170 providerOptions: {
@@ -143,7 +183,8 @@ Replicate and OpenRouter work the same way:
143183
144184``` ts
145185const replicateResult = await generateImage ({
146- model: ' replicate:black-forest-labs/flux-schnell' ,
186+ provider: ' replicate' ,
187+ model: ' black-forest-labs/flux-schnell' ,
147188 prompt: ' A product photo of a titanium watch on black stone' ,
148189 aspectRatio: ' 16:9' ,
149190 providerOptions: {
@@ -157,8 +198,31 @@ const replicateResult = await generateImage({
157198});
158199```
159200
160- If you need a custom backend entirely, register a provider factory and still use
161- the same ` generateImage() ` surface:
201+ ### Local Image Generation
202+
203+ Run Stable Diffusion locally without any API key:
204+
205+ ``` ts
206+ // Via Ollama (if your Ollama install has a stable-diffusion model)
207+ const local = await generateImage ({
208+ provider: ' ollama' ,
209+ model: ' stable-diffusion' ,
210+ prompt: ' A watercolor landscape of rolling hills' ,
211+ baseUrl: ' http://localhost:11434' , // or set OLLAMA_BASE_URL
212+ });
213+
214+ // Via local Stable Diffusion WebUI (Automatic1111 / ComfyUI)
215+ const sdLocal = await generateImage ({
216+ provider: ' stable-diffusion-local' ,
217+ model: ' v1-5-pruned-emaonly' ,
218+ prompt: ' A brutalist house in fog' ,
219+ baseUrl: ' http://localhost:7860' , // or set STABLE_DIFFUSION_LOCAL_BASE_URL
220+ });
221+ ```
222+
223+ ### Custom Image Provider
224+
225+ Register a provider factory for backends not covered by the built-ins:
162226
163227``` ts
164228import {
@@ -167,7 +231,7 @@ import {
167231 type IImageProvider ,
168232} from ' @framers/agentos' ;
169233
170- class CustomImageProvider implements IImageProvider {
234+ class ComfyUIProvider implements IImageProvider {
171235 providerId = ' comfyui' ;
172236 isInitialized = false ;
173237 defaultModelId = ' sdxl' ;
@@ -187,10 +251,11 @@ class CustomImageProvider implements IImageProvider {
187251 }
188252}
189253
190- registerImageProviderFactory (' comfyui' , () => new CustomImageProvider ());
254+ registerImageProviderFactory (' comfyui' , () => new ComfyUIProvider ());
191255
192256await generateImage ({
193- model: ' comfyui:sdxl' ,
257+ provider: ' comfyui' ,
258+ model: ' sdxl' ,
194259 prompt: ' A brutalist house in fog' ,
195260});
196261```
0 commit comments