You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/llm-coding-tools-agents/README.md
+6-1Lines changed: 6 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,6 +44,9 @@ permission:
44
44
Prompt body goes here...
45
45
```
46
46
47
+
**Note**: Provider selection is driven by the `provider:` prefix, not by URL inspection. OpenAI-compatible endpoints should still use `openai:` with a custom base URL provided via provider overrides.
48
+
49
+
47
50
### Mode Options
48
51
49
52
The `mode` field controls how the agent can be invoked:
@@ -72,7 +75,7 @@ See `examples/serdesai-agents.rs` for the complete example.
72
75
73
76
```rust,no_run
74
77
use llm_coding_tools_agents::{AgentCatalog, AgentLoader, Ruleset, Rule, PermissionAction};
75
-
use llm_coding_tools_serdesai::{AgentDefaults, AgentRegistryBuilder, TaskTool, default_tools, TodoState};
78
+
use llm_coding_tools_serdesai::{AgentDefaults, AgentRegistryBuilder, ProviderOverrides, TaskTool, default_tools, TodoState};
Copy file name to clipboardExpand all lines: src/llm-coding-tools-core/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ This crate provides the foundational building blocks for coding tool implementat
15
15
Task tools (for agent-to-agent delegation) are implemented as registry-driven tools in the framework-specific crates:
16
16
- SerdesAI: See `llm-coding-tools-serdesai::TaskTool` (README for setup example)
17
17
18
-
The serdesAI framework uses a unified flow: load agent configs into `AgentCatalog`, build a framework-specific registry, then construct a `TaskTool` with the registry and permission rules.
18
+
The SerdesAI framework uses a unified flow: load agent configs into `AgentCatalog`, build a framework-specific registry, then construct a `TaskTool` with the registry and permission rules.
Copy file name to clipboardExpand all lines: src/llm-coding-tools-serdesai/README.md
+41-1Lines changed: 41 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -98,13 +98,53 @@ Setup requires three steps:
98
98
99
99
The example file shows the complete setup.
100
100
101
-
**Note**: The `default_tools` function returns cloneable `ToolCatalogEntry` items that can be reused for building multiple agents. The `AgentRegistryBuilder` uses these to construct tool descriptions and filter based on agent permissions. The `deps` parameter is passed to registry agents at invocation time.
101
+
**Note**: The `default_tools` function (defined in `examples/serdesai-agents.rs`) returns cloneable `ToolCatalogEntry` items that can be reused for building multiple agents. The `AgentRegistryBuilder` uses these to construct tool descriptions and filter based on agent permissions. The `deps` parameter is passed to registry agents at invocation time.
102
102
103
103
Other tools: `BashTool`, `WebFetchTool`, `TodoReadTool`, `TodoWriteTool`.
104
104
Use `SystemPromptBuilder` to track tools and pass `pb.build()` to `.system_prompt()`. Set `working_directory()` so the environment section is populated.
105
105
Use `AgentBuilderExt::tool()` to add tools that implement `Tool<Deps>` to the agent.
106
106
Context strings are re-exported in `llm_coding_tools_serdesai::context` (e.g., `BASH`, `READ_ABSOLUTE`).
107
107
108
+
### models.dev Resolver
109
+
110
+
Use the models.dev catalog to resolve per-provider API keys/base URLs:
111
+
112
+
```rust,no_run
113
+
# use std::env;
114
+
# use llm_coding_tools_models_dev::ModelsDevCatalog;
115
+
# use llm_coding_tools_serdesai::{AgentDefaults, ModelsDevResolver, ProviderOverride, ProviderOverrides};
let resolver = ModelsDevResolver::new(Some(catalog), overrides.clone());
123
+
124
+
let defaults = AgentDefaults {
125
+
model: "openai:gpt-4o".into(),
126
+
model_resolver: Some(resolver),
127
+
provider_overrides: overrides,
128
+
api_key: None,
129
+
base_url: None,
130
+
temperature: None,
131
+
top_p: None,
132
+
options: Default::default(),
133
+
};
134
+
# Ok(())
135
+
# }
136
+
```
137
+
138
+
**OpenAI-compatible providers**: serdesAI does not infer providers from base URLs. Use an `openai:` model spec and set a provider-specific `base_url` via overrides.
139
+
140
+
**Reasoning models**: If you need `OpenAIResponsesModel` for `o1`, `o3`, or `gpt-5`, construct it directly instead of using `ModelConfig`.
141
+
142
+
**OpenRouter/HuggingFace**: `build_model_with_config` does not support these providers; use `OpenRouterModel::new` or `HuggingFaceModel::new` directly.
143
+
OpenRouter does not support base URL overrides; resolver should not surface `base_url` for this provider.
144
+
145
+
**Resolver fallback behavior**: When no resolver is provided, the registry attempts to load the models.dev catalog from the shared cache or bundled snapshot. If that fails, it falls back to an empty catalog (meaning only explicit specs are usable and no provider mapping occurs).
146
+
147
+
108
148
### Migration from Legacy Task APIs
109
149
110
150
The previous task setup using `TaskToolCore` and `SubagentRegistry` has been replaced with the registry-driven flow. Key changes:
0 commit comments