roboz 0.1.2.dev10__tar.gz → 0.1.2.dev12__tar.gz
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.
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/CHANGELOG.md +23 -1
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/PKG-INFO +90 -24
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/README.md +87 -22
- roboz-0.1.2.dev12/docs/catalogues.md +156 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/pyproject.toml +12 -17
- roboz-0.1.2.dev12/src/roboz/endpoints/__init__.py +1 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/__main__.py +7 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/_inventory_codec.py +281 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/_inventory_codegen.py +126 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/adapters/__init__.py +1 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/adapters/openai_compatible.py +250 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/catalog.py +89 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/catalog.pyi +35 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/cli.py +281 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/inventory.py +63 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/inventory.pyi +37 -0
- roboz-0.1.2.dev12/src/roboz/endpoints/specs.py +40 -0
- roboz-0.1.2.dev12/src/roboz/examples/__init__.py +1 -0
- roboz-0.1.2.dev12/src/roboz/examples/complex.py +72 -0
- roboz-0.1.2.dev12/src/roboz/examples/simple.py +36 -0
- roboz-0.1.2.dev12/src/roboz/examples/simpsons_quotes.py +44 -0
- roboz-0.1.2.dev12/src/roboz/shed/__init__.py +1 -0
- roboz-0.1.2.dev12/src/roboz/shed/agents/__init__.py +6 -0
- roboz-0.1.2.dev12/src/roboz/shed/agents/librarian.py +50 -0
- roboz-0.1.2.dev12/src/roboz/shed/agents/orchestrator.py +49 -0
- roboz-0.1.2.dev12/src/roboz/shed/capabilities.py +354 -0
- roboz-0.1.2.dev12/src/roboz/shed/dependency_health.py +328 -0
- roboz-0.1.2.dev12/src/roboz/shed/deployments/__init__.py +5 -0
- roboz-0.1.2.dev12/src/roboz/shed/deployments/robosprawl.py +75 -0
- roboz-0.1.2.dev12/src/roboz/shed/identifiers.py +30 -0
- roboz-0.1.2.dev12/src/roboz/shed/models.py +242 -0
- roboz-0.1.2.dev12/src/roboz/shed/sandbox.py +226 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/__init__.py +8 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/cli_tools/__init__.py +10 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/cli_tools/prompts.py +195 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/email_tools/__init__.py +10 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/email_tools/prompts.py +125 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/file_editing/__init__.py +27 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/file_editing/prompts.py +149 -0
- roboz-0.1.2.dev12/src/roboz/shed/skills/robosprawl.py +143 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/__init__.py +52 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/_snapshot_metadata.py +90 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/apply_patch.py +194 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/__init__.py +23 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/run_file_command/__init__.py +12 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/run_file_command/command.py +162 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/run_file_command/resolve.py +388 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/run_file_command/specs.py +131 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/__init__.py +80 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/cmd_spec.py +48 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/constants.py +36 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/formatting.py +252 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/cli_commands/utilities/path_extractors.py +179 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/__init__.py +35 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/compactify_messages.py +260 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/prompts.py +107 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/summarize.py +279 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/compactification/summary_prompts.py +61 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/consolidate_memory.py +287 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/consolidate_memory_example.py +110 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/consolidate_memory_prompts.py +110 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/contexts.py +170 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/__init__.py +54 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/contracts.py +244 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/drafts.py +414 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/factory.py +266 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/inputs.py +66 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/messages.py +248 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/email/runtime.py +31 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/guard.py +161 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/guard_formatting.py +58 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/librarian_errors.py +8 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/memory_files.py +117 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/purge_files.py +98 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/runner.py +251 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/sleep_between_runs.py +63 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/snapshot_conversation_example.py +38 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/snapshot_conversation_prompts.py +89 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/snapshot_conversations.py +320 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/snapshot_normalize.py +61 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/stop_when_watched_agents_inactive.py +50 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/truncation.py +20 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/types.py +30 -0
- roboz-0.1.2.dev12/src/roboz/shed/tools/utils.py +252 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/.gitignore +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/LICENSE +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/__init__.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/__init__.pyi +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/_naming.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/__init__.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/_execution_context.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/_identifiers.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/_notifications.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/_prompts.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/_tool_observer.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/background_agent.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/core.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/prompt_agent_tool.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/agent/subagent.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/dependencies.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/deployment.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/exceptions.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/__init__.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/_diagnostics.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/_retry.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/_truncation.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/binding.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/calls.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/completion.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/endpoints.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/openai_compatible.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/openrouter.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/llm/prompts.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/models/__init__.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/models/_schema.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/models/_serialization.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/models/_telemetry.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/models/core.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/models/messages.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/models/truncation.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/py.typed +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/__init__.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/_environment.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/_external.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/_logging.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/_paths.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/events.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/io.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/observability.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/persistence/__init__.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/persistence/activity.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/persistence/schema.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/pipe.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/runtime/sinks.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/skill/__init__.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/skill/_prompts.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/skill/core.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tooling/__init__.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tooling/_prompts.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tooling/_protocols.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tooling/_typing.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tooling/context.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tooling/core.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tooling/decorators.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tools/__init__.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tools/_identifiers.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tools/control.py +0 -0
- {roboz-0.1.2.dev10 → roboz-0.1.2.dev12}/src/roboz/tools/interaction.py +0 -0
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.1.2.dev12 - 2026-09-21
|
|
6
|
+
|
|
7
|
+
- Breaking: consolidate core, Shed, and Endpoints into the `roboz`
|
|
8
|
+
distribution. Replace `roboshed` imports with `roboz.shed` and
|
|
9
|
+
`roboz_endpoints` imports with `roboz.endpoints`; no compatibility packages
|
|
10
|
+
or forwarding namespaces are provided.
|
|
11
|
+
- Install the OpenAI SDK as a required dependency while retaining deferred
|
|
12
|
+
endpoint client construction and credential-free imports. Remove package
|
|
13
|
+
extras and the `roboz-endpoints` executable; manage catalogues with
|
|
14
|
+
`python -m roboz.endpoints inventory`.
|
|
15
|
+
- Exclude Proton Bridge from the consolidated distribution. Its pre-migration
|
|
16
|
+
implementation and development setup remain preserved on the
|
|
17
|
+
`wip/proton-bridge` branch.
|
|
18
|
+
- Consolidate package documentation into the main README and move the detailed
|
|
19
|
+
project catalogue guide to `docs/catalogues.md`.
|
|
20
|
+
|
|
21
|
+
## 0.1.2.dev11 - 2026-09-21
|
|
22
|
+
|
|
23
|
+
- Ship the simple and complex examples in `roboz.examples`, so installed users
|
|
24
|
+
can run the credential-free agent demo with `python -m roboz.examples.simple`
|
|
25
|
+
without cloning the repository.
|
|
26
|
+
|
|
5
27
|
## 0.1.2.dev10 - 2026-09-21
|
|
6
28
|
|
|
7
29
|
- Define default tools as scheduler-owned chain roots: downstream tools can now
|
|
@@ -166,7 +188,7 @@
|
|
|
166
188
|
|
|
167
189
|
- Breaking: remove the `roboz[openai]` extra. Install
|
|
168
190
|
`roboz-endpoints[openai]` directly for the endpoint catalogue and SDK adapter;
|
|
169
|
-
it installs core automatically.
|
|
191
|
+
it installs core automatically.
|
|
170
192
|
|
|
171
193
|
- Breaking: move dependency primitives from `roboz.tooling.dependencies` and
|
|
172
194
|
`roboz.tooling` to `roboz.dependencies`. Update those imports; the existing
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: roboz
|
|
3
|
-
Version: 0.1.2.
|
|
3
|
+
Version: 0.1.2.dev12
|
|
4
4
|
Import-Name: roboz
|
|
5
|
-
Summary: Typed
|
|
5
|
+
Summary: Typed agents, reusable capabilities, and model catalogues
|
|
6
6
|
Project-URL: Homepage, https://github.com/Tachion-Oy/roboz
|
|
7
7
|
Project-URL: Repository, https://github.com/Tachion-Oy/roboz
|
|
8
8
|
Project-URL: Issues, https://github.com/Tachion-Oy/roboz/issues
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.14
|
|
21
21
|
Classifier: Typing :: Typed
|
|
22
22
|
Requires-Python: >=3.13
|
|
23
|
+
Requires-Dist: openai<3,>=2.8.1
|
|
23
24
|
Requires-Dist: pydantic>=2.12.4
|
|
24
25
|
Requires-Dist: python-dotenv>=1.2.1
|
|
25
26
|
Requires-Dist: rich>=14.2.0
|
|
@@ -69,9 +70,8 @@ Chaining not only reduces the llm calls, but it also provides a useful way of in
|
|
|
69
70
|
```python
|
|
70
71
|
from random import choice
|
|
71
72
|
|
|
72
|
-
from simpsons_quotes import QUOTES
|
|
73
|
-
|
|
74
73
|
from roboz import Agent, tool
|
|
74
|
+
from roboz.examples.simpsons_quotes import QUOTES
|
|
75
75
|
from roboz.llm.endpoints import MockLLMEndpoint
|
|
76
76
|
from roboz.models import Empty, Message, Stop
|
|
77
77
|
|
|
@@ -97,12 +97,12 @@ output, messages_ = agent.invoke()
|
|
|
97
97
|
print(f'"{output.value}"')
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
-
The above [simple example](https://github.com/Tachion-Oy/roboz/blob/main/examples/simple.py) uses the accompanying
|
|
101
|
-
[quote file](https://github.com/Tachion-Oy/roboz/blob/main/examples/simpsons_quotes.py)
|
|
102
|
-
|
|
100
|
+
The above [simple example](https://github.com/Tachion-Oy/roboz/blob/main/src/roboz/examples/simple.py) uses the accompanying
|
|
101
|
+
[quote file](https://github.com/Tachion-Oy/roboz/blob/main/src/roboz/examples/simpsons_quotes.py). First add RoboZ to your
|
|
102
|
+
environment as shown in [Try it out](#try-it-out), then run it with
|
|
103
103
|
|
|
104
104
|
```bash
|
|
105
|
-
uv run python examples
|
|
105
|
+
uv run python -m roboz.examples.simple
|
|
106
106
|
```
|
|
107
107
|
It creates an agent that returns a random
|
|
108
108
|
Simpsons quote. **The docstring in the tool is the instruction that the agent sees**. It uses a mock endpoint, with pre-determined replies, so you can run it without API keys.
|
|
@@ -136,7 +136,7 @@ The contract in RoboZ is that every action in the agentic loop is a tool call an
|
|
|
136
136
|
### LLM Endpoints are instances
|
|
137
137
|
As a fundamental design rule in Roboz, everything that depends on an LLM call must be trivially swappable to another provider or model. This makes changing an agent endpoint trivial and furthermore multi-endpoint functionality, where inside a single agent several endpoints are implemented, quite easy.
|
|
138
138
|
|
|
139
|
-
To see the above in practice see the [complex example](https://github.com/Tachion-Oy/roboz/blob/main/examples/complex.py)
|
|
139
|
+
To see the above in practice see the [complex example](https://github.com/Tachion-Oy/roboz/blob/main/src/roboz/examples/complex.py) below.
|
|
140
140
|
|
|
141
141
|
|
|
142
142
|
|
|
@@ -226,40 +226,106 @@ agent.invoke()
|
|
|
226
226
|
|
|
227
227
|
```
|
|
228
228
|
|
|
229
|
-
The above [complex example](https://github.com/Tachion-Oy/roboz/blob/main/examples/complex.py)
|
|
229
|
+
The above [complex example](https://github.com/Tachion-Oy/roboz/blob/main/src/roboz/examples/complex.py) is also bundled with
|
|
230
|
+
RoboZ. First add the library to your environment as shown in
|
|
231
|
+
[Try it out](#try-it-out), then run it with
|
|
230
232
|
|
|
231
233
|
```bash
|
|
232
|
-
uv run python examples
|
|
234
|
+
uv run python -m roboz.examples.complex
|
|
233
235
|
```
|
|
234
236
|
|
|
235
237
|
|
|
236
238
|
## Try it out
|
|
237
239
|
|
|
240
|
+
Add RoboZ to a uv project and run the same bundled example. The one dependency
|
|
241
|
+
includes the core framework, Shed, Endpoints, and the OpenAI SDK:
|
|
242
|
+
|
|
238
243
|
```bash
|
|
239
244
|
uv add roboz
|
|
245
|
+
uv run python -m roboz.examples.simple
|
|
240
246
|
```
|
|
241
247
|
|
|
242
|
-
|
|
248
|
+
or with pip, install RoboZ into the active environment first:
|
|
243
249
|
|
|
244
250
|
```bash
|
|
245
251
|
python -m pip install roboz
|
|
252
|
+
python -m roboz.examples.simple
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Shed
|
|
256
|
+
|
|
257
|
+
`roboz.shed` provides reusable components built on the core primitives. Use an
|
|
258
|
+
individual guarded file or email tool, add a capability to a
|
|
259
|
+
`DeployableAgent`, start from the orchestrator and Librarian definitions, or use
|
|
260
|
+
the RoboSprawl recipe to assemble a persistent project agent. Applications own
|
|
261
|
+
the model endpoints, event sinks, lifecycle, and filesystem layout.
|
|
262
|
+
|
|
263
|
+
- `roboz.shed.agents` contains the orchestrator and Librarian definitions.
|
|
264
|
+
- `roboz.shed.capabilities` binds reusable behavior to agent configuration.
|
|
265
|
+
- `roboz.shed.tools` contains guarded file commands, patching, email contracts,
|
|
266
|
+
conversation compaction, snapshots, memory consolidation, and retention.
|
|
267
|
+
- `roboz.shed.skills` supplies the agent instructions for those tools.
|
|
268
|
+
- `roboz.shed.sandbox` defines filesystem scopes and tool permission policies.
|
|
269
|
+
- `roboz.shed.dependency_health` checks configured external resources.
|
|
270
|
+
|
|
271
|
+
Shed permission policies guard Shed tools. They are not an operating-system
|
|
272
|
+
sandbox.
|
|
273
|
+
|
|
274
|
+
## Endpoints and model catalogues
|
|
275
|
+
|
|
276
|
+
`roboz.endpoints` builds concrete `LLMEndpoint` and `TranscriptionEndpoint`
|
|
277
|
+
objects for OpenAI-compatible APIs. The OpenAI SDK is installed with RoboZ, but
|
|
278
|
+
client construction and credential lookup remain deferred until an endpoint is
|
|
279
|
+
materialized or used. Importing and inspecting the bundled catalogue needs no
|
|
280
|
+
credentials:
|
|
281
|
+
|
|
282
|
+
```python
|
|
283
|
+
from roboz.endpoints.inventory import openrouter
|
|
284
|
+
|
|
285
|
+
endpoint = openrouter.z_ai__glm_5_3
|
|
286
|
+
print(endpoint.model_name)
|
|
287
|
+
print(endpoint.max_context_tokens)
|
|
246
288
|
```
|
|
247
289
|
|
|
248
|
-
|
|
290
|
+
The bundled OpenRouter, Cerebras, and Groq entries are examples. Export them to
|
|
291
|
+
an editable project catalogue, change `models.json`, then generate the Python
|
|
292
|
+
snapshot:
|
|
249
293
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
294
|
+
```bash
|
|
295
|
+
uv run python -m roboz.endpoints inventory export
|
|
296
|
+
# Edit model_catalogue/models.json.
|
|
297
|
+
uv run python -m roboz.endpoints inventory import
|
|
298
|
+
```
|
|
253
299
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
300
|
+
For a src-layout project named `my-app`, the commands create
|
|
301
|
+
`src/my_app/model_catalogue/models.json` and
|
|
302
|
+
`src/my_app/model_catalogue/providers.py`. Import the generated catalogue from
|
|
303
|
+
your application package:
|
|
304
|
+
|
|
305
|
+
```python
|
|
306
|
+
from my_app.model_catalogue.providers import my_service
|
|
307
|
+
|
|
308
|
+
endpoint = my_service.chat
|
|
309
|
+
```
|
|
260
310
|
|
|
261
|
-
|
|
262
|
-
|
|
311
|
+
Only OpenAI-compatible API protocols are supported. An inventory entry records
|
|
312
|
+
a provider URL, the name of its credential environment variable, and its model
|
|
313
|
+
routes; it never stores the credential itself. See the
|
|
314
|
+
[project catalogue guide](docs/catalogues.md) for custom paths, inventory
|
|
315
|
+
format, reset, and recovery.
|
|
316
|
+
|
|
317
|
+
## Module map
|
|
318
|
+
|
|
319
|
+
| Module | Provides |
|
|
320
|
+
| --- | --- |
|
|
321
|
+
| `roboz` | Agent, tool, factory, and skill authoring facade. |
|
|
322
|
+
| `roboz.agent` | Agent implementations, subagents, and background agents. |
|
|
323
|
+
| `roboz.deployment` | Reusable agent definitions and capabilities. |
|
|
324
|
+
| `roboz.llm` | Endpoint contracts, selection, calls, and request policies. |
|
|
325
|
+
| `roboz.models` | Typed messages and tool input/output models. |
|
|
326
|
+
| `roboz.runtime` | Events, pipes, sinks, persistence, and observability. |
|
|
327
|
+
| `roboz.shed` | Reusable capabilities, guarded tools, agents, and recipes. |
|
|
328
|
+
| `roboz.endpoints` | OpenAI-compatible adapters and typed model catalogues. |
|
|
263
329
|
|
|
264
330
|
## Development
|
|
265
331
|
|
|
@@ -42,9 +42,8 @@ Chaining not only reduces the llm calls, but it also provides a useful way of in
|
|
|
42
42
|
```python
|
|
43
43
|
from random import choice
|
|
44
44
|
|
|
45
|
-
from simpsons_quotes import QUOTES
|
|
46
|
-
|
|
47
45
|
from roboz import Agent, tool
|
|
46
|
+
from roboz.examples.simpsons_quotes import QUOTES
|
|
48
47
|
from roboz.llm.endpoints import MockLLMEndpoint
|
|
49
48
|
from roboz.models import Empty, Message, Stop
|
|
50
49
|
|
|
@@ -70,12 +69,12 @@ output, messages_ = agent.invoke()
|
|
|
70
69
|
print(f'"{output.value}"')
|
|
71
70
|
```
|
|
72
71
|
|
|
73
|
-
The above [simple example](https://github.com/Tachion-Oy/roboz/blob/main/examples/simple.py) uses the accompanying
|
|
74
|
-
[quote file](https://github.com/Tachion-Oy/roboz/blob/main/examples/simpsons_quotes.py)
|
|
75
|
-
|
|
72
|
+
The above [simple example](https://github.com/Tachion-Oy/roboz/blob/main/src/roboz/examples/simple.py) uses the accompanying
|
|
73
|
+
[quote file](https://github.com/Tachion-Oy/roboz/blob/main/src/roboz/examples/simpsons_quotes.py). First add RoboZ to your
|
|
74
|
+
environment as shown in [Try it out](#try-it-out), then run it with
|
|
76
75
|
|
|
77
76
|
```bash
|
|
78
|
-
uv run python examples
|
|
77
|
+
uv run python -m roboz.examples.simple
|
|
79
78
|
```
|
|
80
79
|
It creates an agent that returns a random
|
|
81
80
|
Simpsons quote. **The docstring in the tool is the instruction that the agent sees**. It uses a mock endpoint, with pre-determined replies, so you can run it without API keys.
|
|
@@ -109,7 +108,7 @@ The contract in RoboZ is that every action in the agentic loop is a tool call an
|
|
|
109
108
|
### LLM Endpoints are instances
|
|
110
109
|
As a fundamental design rule in Roboz, everything that depends on an LLM call must be trivially swappable to another provider or model. This makes changing an agent endpoint trivial and furthermore multi-endpoint functionality, where inside a single agent several endpoints are implemented, quite easy.
|
|
111
110
|
|
|
112
|
-
To see the above in practice see the [complex example](https://github.com/Tachion-Oy/roboz/blob/main/examples/complex.py)
|
|
111
|
+
To see the above in practice see the [complex example](https://github.com/Tachion-Oy/roboz/blob/main/src/roboz/examples/complex.py) below.
|
|
113
112
|
|
|
114
113
|
|
|
115
114
|
|
|
@@ -199,40 +198,106 @@ agent.invoke()
|
|
|
199
198
|
|
|
200
199
|
```
|
|
201
200
|
|
|
202
|
-
The above [complex example](https://github.com/Tachion-Oy/roboz/blob/main/examples/complex.py)
|
|
201
|
+
The above [complex example](https://github.com/Tachion-Oy/roboz/blob/main/src/roboz/examples/complex.py) is also bundled with
|
|
202
|
+
RoboZ. First add the library to your environment as shown in
|
|
203
|
+
[Try it out](#try-it-out), then run it with
|
|
203
204
|
|
|
204
205
|
```bash
|
|
205
|
-
uv run python examples
|
|
206
|
+
uv run python -m roboz.examples.complex
|
|
206
207
|
```
|
|
207
208
|
|
|
208
209
|
|
|
209
210
|
## Try it out
|
|
210
211
|
|
|
212
|
+
Add RoboZ to a uv project and run the same bundled example. The one dependency
|
|
213
|
+
includes the core framework, Shed, Endpoints, and the OpenAI SDK:
|
|
214
|
+
|
|
211
215
|
```bash
|
|
212
216
|
uv add roboz
|
|
217
|
+
uv run python -m roboz.examples.simple
|
|
213
218
|
```
|
|
214
219
|
|
|
215
|
-
|
|
220
|
+
or with pip, install RoboZ into the active environment first:
|
|
216
221
|
|
|
217
222
|
```bash
|
|
218
223
|
python -m pip install roboz
|
|
224
|
+
python -m roboz.examples.simple
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Shed
|
|
228
|
+
|
|
229
|
+
`roboz.shed` provides reusable components built on the core primitives. Use an
|
|
230
|
+
individual guarded file or email tool, add a capability to a
|
|
231
|
+
`DeployableAgent`, start from the orchestrator and Librarian definitions, or use
|
|
232
|
+
the RoboSprawl recipe to assemble a persistent project agent. Applications own
|
|
233
|
+
the model endpoints, event sinks, lifecycle, and filesystem layout.
|
|
234
|
+
|
|
235
|
+
- `roboz.shed.agents` contains the orchestrator and Librarian definitions.
|
|
236
|
+
- `roboz.shed.capabilities` binds reusable behavior to agent configuration.
|
|
237
|
+
- `roboz.shed.tools` contains guarded file commands, patching, email contracts,
|
|
238
|
+
conversation compaction, snapshots, memory consolidation, and retention.
|
|
239
|
+
- `roboz.shed.skills` supplies the agent instructions for those tools.
|
|
240
|
+
- `roboz.shed.sandbox` defines filesystem scopes and tool permission policies.
|
|
241
|
+
- `roboz.shed.dependency_health` checks configured external resources.
|
|
242
|
+
|
|
243
|
+
Shed permission policies guard Shed tools. They are not an operating-system
|
|
244
|
+
sandbox.
|
|
245
|
+
|
|
246
|
+
## Endpoints and model catalogues
|
|
247
|
+
|
|
248
|
+
`roboz.endpoints` builds concrete `LLMEndpoint` and `TranscriptionEndpoint`
|
|
249
|
+
objects for OpenAI-compatible APIs. The OpenAI SDK is installed with RoboZ, but
|
|
250
|
+
client construction and credential lookup remain deferred until an endpoint is
|
|
251
|
+
materialized or used. Importing and inspecting the bundled catalogue needs no
|
|
252
|
+
credentials:
|
|
253
|
+
|
|
254
|
+
```python
|
|
255
|
+
from roboz.endpoints.inventory import openrouter
|
|
256
|
+
|
|
257
|
+
endpoint = openrouter.z_ai__glm_5_3
|
|
258
|
+
print(endpoint.model_name)
|
|
259
|
+
print(endpoint.max_context_tokens)
|
|
219
260
|
```
|
|
220
261
|
|
|
221
|
-
|
|
262
|
+
The bundled OpenRouter, Cerebras, and Groq entries are examples. Export them to
|
|
263
|
+
an editable project catalogue, change `models.json`, then generate the Python
|
|
264
|
+
snapshot:
|
|
222
265
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
266
|
+
```bash
|
|
267
|
+
uv run python -m roboz.endpoints inventory export
|
|
268
|
+
# Edit model_catalogue/models.json.
|
|
269
|
+
uv run python -m roboz.endpoints inventory import
|
|
270
|
+
```
|
|
226
271
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
272
|
+
For a src-layout project named `my-app`, the commands create
|
|
273
|
+
`src/my_app/model_catalogue/models.json` and
|
|
274
|
+
`src/my_app/model_catalogue/providers.py`. Import the generated catalogue from
|
|
275
|
+
your application package:
|
|
276
|
+
|
|
277
|
+
```python
|
|
278
|
+
from my_app.model_catalogue.providers import my_service
|
|
279
|
+
|
|
280
|
+
endpoint = my_service.chat
|
|
281
|
+
```
|
|
233
282
|
|
|
234
|
-
|
|
235
|
-
|
|
283
|
+
Only OpenAI-compatible API protocols are supported. An inventory entry records
|
|
284
|
+
a provider URL, the name of its credential environment variable, and its model
|
|
285
|
+
routes; it never stores the credential itself. See the
|
|
286
|
+
[project catalogue guide](docs/catalogues.md) for custom paths, inventory
|
|
287
|
+
format, reset, and recovery.
|
|
288
|
+
|
|
289
|
+
## Module map
|
|
290
|
+
|
|
291
|
+
| Module | Provides |
|
|
292
|
+
| --- | --- |
|
|
293
|
+
| `roboz` | Agent, tool, factory, and skill authoring facade. |
|
|
294
|
+
| `roboz.agent` | Agent implementations, subagents, and background agents. |
|
|
295
|
+
| `roboz.deployment` | Reusable agent definitions and capabilities. |
|
|
296
|
+
| `roboz.llm` | Endpoint contracts, selection, calls, and request policies. |
|
|
297
|
+
| `roboz.models` | Typed messages and tool input/output models. |
|
|
298
|
+
| `roboz.runtime` | Events, pipes, sinks, persistence, and observability. |
|
|
299
|
+
| `roboz.shed` | Reusable capabilities, guarded tools, agents, and recipes. |
|
|
300
|
+
| `roboz.endpoints` | OpenAI-compatible adapters and typed model catalogues. |
|
|
236
301
|
|
|
237
302
|
## Development
|
|
238
303
|
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Project catalogues
|
|
2
|
+
|
|
3
|
+
A project catalogue is an editable JSON inventory plus a generated Python
|
|
4
|
+
module. It lets an application define its own OpenAI-compatible providers and
|
|
5
|
+
models without modifying RoboZ.
|
|
6
|
+
|
|
7
|
+
## Standard workflow
|
|
8
|
+
|
|
9
|
+
Run these commands from the application project root:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
uv run python -m roboz.endpoints inventory export
|
|
13
|
+
# Edit the generated models.json.
|
|
14
|
+
uv run python -m roboz.endpoints inventory import
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The export command creates a `model_catalogue` package. The import command reads
|
|
18
|
+
`models.json` and generates `providers.py` beside it. Edit and retain the JSON;
|
|
19
|
+
do not edit the generated Python module.
|
|
20
|
+
|
|
21
|
+
For a project with `name = "my-app"` in `pyproject.toml`, the default location
|
|
22
|
+
follows the existing package layout:
|
|
23
|
+
|
|
24
|
+
- `src/my_app/__init__.py` → `src/my_app/model_catalogue/`
|
|
25
|
+
- `my_app/__init__.py` → `my_app/model_catalogue/`
|
|
26
|
+
|
|
27
|
+
If neither package exists, the CLI uses `model_catalogue/` in the project root.
|
|
28
|
+
For reliable imports from every application module, use `--path` to place the
|
|
29
|
+
catalogue inside the actual application package when automatic detection fails.
|
|
30
|
+
|
|
31
|
+
The generated package contains:
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
model_catalogue/
|
|
35
|
+
├── __init__.py
|
|
36
|
+
├── models.json # editable source
|
|
37
|
+
└── providers.py # generated snapshot
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Import through the application's package path:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from my_app.model_catalogue.providers import my_service
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Choose another name or location
|
|
47
|
+
|
|
48
|
+
`--path` selects the JSON file. Unless `--output` is provided, import generates
|
|
49
|
+
`providers.py` beside that JSON file. For example, to call the package
|
|
50
|
+
`endpoints`:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
mkdir -p src/my_app/endpoints
|
|
54
|
+
touch src/my_app/endpoints/__init__.py
|
|
55
|
+
|
|
56
|
+
uv run python -m roboz.endpoints inventory export \
|
|
57
|
+
--path src/my_app/endpoints/models.json
|
|
58
|
+
|
|
59
|
+
uv run python -m roboz.endpoints inventory import \
|
|
60
|
+
--path src/my_app/endpoints/models.json
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Then import it from any application module:
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from my_app.endpoints.providers import my_service
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
To choose the generated module name as well:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
uv run python -m roboz.endpoints inventory import \
|
|
73
|
+
--path src/my_app/endpoints/models.json \
|
|
74
|
+
--output src/my_app/endpoints/catalogue.py
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
That module is imported as:
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
from my_app.endpoints.catalogue import my_service
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
For custom paths, create the parent package and its `__init__.py` first. Paths
|
|
84
|
+
are relative to the directory in which the command runs.
|
|
85
|
+
|
|
86
|
+
## Inventory format
|
|
87
|
+
|
|
88
|
+
The exported file is the complete starting inventory. A provider entry has its
|
|
89
|
+
service URL, the name of its credential environment variable, and one or more
|
|
90
|
+
models:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"schema_version": 1,
|
|
95
|
+
"providers": {
|
|
96
|
+
"my_service": {
|
|
97
|
+
"base_url": "https://models.example.com/v1",
|
|
98
|
+
"api_key_env": "MY_SERVICE_API_KEY",
|
|
99
|
+
"models": {
|
|
100
|
+
"chat": {
|
|
101
|
+
"model_id": "my-chat-model",
|
|
102
|
+
"endpoint_type": "llm",
|
|
103
|
+
"max_context_tokens": 128000
|
|
104
|
+
},
|
|
105
|
+
"voice": {
|
|
106
|
+
"model_id": "my-transcription-model",
|
|
107
|
+
"endpoint_type": "transcription"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Provider and model keys become Python names, so they must be valid public Python
|
|
116
|
+
identifiers. `model_id` is the identifier sent to the provider. A chat model
|
|
117
|
+
requires `max_context_tokens`; a transcription model does not accept it.
|
|
118
|
+
|
|
119
|
+
Only OpenAI-compatible APIs are currently supported. Store the environment
|
|
120
|
+
variable name in `api_key_env`, never the credential itself.
|
|
121
|
+
|
|
122
|
+
## Regenerate after editing
|
|
123
|
+
|
|
124
|
+
Once `providers.py` exists, regenerate it with `--force`:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
uv run python -m roboz.endpoints inventory import --force
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
For a custom location, pass the same `--path` and, if used originally,
|
|
131
|
+
`--output`. Restart the application so it imports the new snapshot. Package
|
|
132
|
+
upgrades do not replace a project catalogue.
|
|
133
|
+
|
|
134
|
+
## Reset or recover
|
|
135
|
+
|
|
136
|
+
Reset restores the bundled examples after confirmation and discards catalogue
|
|
137
|
+
customizations:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
uv run python -m roboz.endpoints inventory reset
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
For a custom catalogue, pass its `--path` and `--output`. Copy anything that
|
|
144
|
+
must be retained before confirming the reset.
|
|
145
|
+
|
|
146
|
+
If `models.json` was lost but the generated module remains, recover JSON without
|
|
147
|
+
executing the module:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
uv run python -m roboz.endpoints inventory export \
|
|
151
|
+
--from-module src/my_app/model_catalogue/providers.py \
|
|
152
|
+
--path recovered-models.json
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Use `uv run python -m roboz.endpoints inventory <command> --help` for the full
|
|
156
|
+
options of `export`, `import`, or `reset`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "roboz"
|
|
3
|
-
version = "0.1.2.
|
|
4
|
-
description = "Typed
|
|
3
|
+
version = "0.1.2.dev12"
|
|
4
|
+
description = "Typed agents, reusable capabilities, and model catalogues"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [{ name = "Tachion Oy" }]
|
|
7
7
|
license = "Apache-2.0"
|
|
@@ -20,6 +20,7 @@ classifiers = [
|
|
|
20
20
|
"Typing :: Typed",
|
|
21
21
|
]
|
|
22
22
|
dependencies = [
|
|
23
|
+
"openai>=2.8.1,<3",
|
|
23
24
|
"pydantic>=2.12.4",
|
|
24
25
|
"python-dotenv>=1.2.1",
|
|
25
26
|
"rich>=14.2.0",
|
|
@@ -29,20 +30,18 @@ dependencies = [
|
|
|
29
30
|
requires = ["hatchling>=1.32"]
|
|
30
31
|
build-backend = "hatchling.build"
|
|
31
32
|
|
|
32
|
-
[tool.uv.workspace]
|
|
33
|
-
members = ["packages/*"]
|
|
34
|
-
|
|
35
|
-
[tool.uv.sources]
|
|
36
|
-
roboz = { workspace = true }
|
|
37
|
-
roboshed = { workspace = true }
|
|
38
|
-
roboz-endpoints = { workspace = true }
|
|
39
|
-
roboz-proton-bridge = { workspace = true }
|
|
40
|
-
|
|
41
33
|
[tool.hatch.build.targets.wheel]
|
|
42
34
|
packages = ["src/roboz"]
|
|
43
35
|
|
|
44
36
|
[tool.hatch.build.targets.sdist]
|
|
45
|
-
include = [
|
|
37
|
+
include = [
|
|
38
|
+
"/src/roboz",
|
|
39
|
+
"/docs/catalogues.md",
|
|
40
|
+
"/README.md",
|
|
41
|
+
"/CHANGELOG.md",
|
|
42
|
+
"/LICENSE",
|
|
43
|
+
"/pyproject.toml",
|
|
44
|
+
]
|
|
46
45
|
|
|
47
46
|
[project.urls]
|
|
48
47
|
Homepage = "https://github.com/Tachion-Oy/roboz"
|
|
@@ -53,7 +52,7 @@ Documentation = "https://github.com/Tachion-Oy/roboz#readme"
|
|
|
53
52
|
[tool.pytest.ini_options]
|
|
54
53
|
addopts = "--cov=roboz --cov-report=term-missing --ignore=tests/type_tests"
|
|
55
54
|
python_files = ["test_*.py", "tests_*.py"]
|
|
56
|
-
testpaths = ["tests"
|
|
55
|
+
testpaths = ["tests"]
|
|
57
56
|
|
|
58
57
|
[tool.ruff.lint]
|
|
59
58
|
select = ["D", "E4", "E7", "E9", "F"]
|
|
@@ -63,16 +62,12 @@ convention = "google"
|
|
|
63
62
|
|
|
64
63
|
[tool.ruff.lint.per-file-ignores]
|
|
65
64
|
"examples/**/*.py" = ["D"]
|
|
66
|
-
"packages/*/tests/**/*.py" = ["D"]
|
|
67
65
|
"scripts/**/*.py" = ["D"]
|
|
68
66
|
"tests/**/*.py" = ["D"]
|
|
69
67
|
|
|
70
68
|
[dependency-groups]
|
|
71
69
|
dev = [
|
|
72
70
|
"check-wheel-contents>=0.6",
|
|
73
|
-
"roboshed",
|
|
74
|
-
"roboz-endpoints[openai]",
|
|
75
|
-
"roboz-proton-bridge",
|
|
76
71
|
"pyright>=1.1.411",
|
|
77
72
|
"pytest>=7.0",
|
|
78
73
|
"pytest-cov>=4.0",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Typed model catalogues and OpenAI-compatible endpoint adapters."""
|