Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
34ec582
codegen metadata
stainless-app[bot] Nov 17, 2025
197d11b
feat(api): config update for dedalus-ai/dev
stainless-app[bot] Nov 17, 2025
d288b0b
chore(internal): codegen related update
stainless-app[bot] Nov 21, 2025
9aeb7a7
feat(api): schema compiler landed
stainless-app[bot] Nov 25, 2025
62cf7e1
feat(api): improve types
stainless-app[bot] Nov 26, 2025
9bb6d0d
feat(api): manual updates
stainless-app[bot] Nov 27, 2025
e0e6406
fix: ensure streams are always closed
stainless-app[bot] Nov 27, 2025
cb4d323
chore(deps): mypy 1.18.1 has a regression, pin to 1.17
stainless-app[bot] Nov 27, 2025
bf78aad
feat(api): mcp server params
stainless-app[bot] Dec 1, 2025
34e7a71
feat(api): config update for dedalus-ai/dev
stainless-app[bot] Dec 1, 2025
16aabac
release: 0.2.0
stainless-app[bot] Dec 1, 2025
8c99323
wip: mcp server params
windsornguyen Dec 1, 2025
584fe2a
refactor(api): update types
windsornguyen Dec 1, 2025
d2203b1
fix(api): add thought signature
stainless-app[bot] Dec 1, 2025
13e0ffc
Merge pull request #30 from dedalus-labs/feat/20251201-mcp-server-params
windsornguyen Dec 1, 2025
cb3f674
chore: bump required `uv` version
stainless-app[bot] Dec 1, 2025
46f1379
chore: update lockfile
stainless-app[bot] Dec 2, 2025
e4330c0
chore(docs): use environment variables for authentication in code sni…
stainless-app[bot] Dec 2, 2025
ce8790c
release: 0.3.0
stainless-app[bot] Dec 2, 2025
5905b55
chore(internal): avoid using unstable Python versions in tests
stainless-app[bot] Dec 4, 2025
d72d130
feat: encryption
windsornguyen Dec 6, 2025
2f614ca
refactor(api): types for mcp server serialization
stainless-app[bot] Dec 6, 2025
fd500d6
fix(runner): import and dict issues
windsornguyen Dec 6, 2025
6e2678b
Merge pull request #31 from dedalus-labs/feat/20251206-encryption
windsornguyen Dec 6, 2025
647780c
release: 0.2.0
stainless-app[bot] Dec 6, 2025
172b56b
fix(runner): narrow mcp types
windsornguyen Dec 6, 2025
fbeb35a
Merge pull request #32 from dedalus-labs/fix/20251206-narrow-types
windsornguyen Dec 6, 2025
b082445
release: 0.2.0
stainless-app[bot] Dec 6, 2025
70c967f
fix: import paths and tests
windsornguyen Dec 6, 2025
ad0ec37
chore(api): point local dev to 4010 port for prism
stainless-app[bot] Dec 6, 2025
fd52f5a
chore(repo): update contributing doc and mock test script
windsornguyen Dec 6, 2025
2d40cb0
Merge branch 'next' into fix/20251206-import-paths
windsornguyen Dec 6, 2025
7da58e3
Merge pull request #33 from dedalus-labs/fix/20251206-import-paths
windsornguyen Dec 6, 2025
b822aa2
fix: tool call format and custom_auth validation
windsornguyen Dec 6, 2025
09f6767
Merge pull request #34 from dedalus-labs/fix/20251206-bug-fixes
windsornguyen Dec 6, 2025
624e2b6
fix(types): allow pyright to infer TypedDict types within SequenceNotStr
stainless-app[bot] Dec 8, 2025
52ded59
chore: add missing docstrings
stainless-app[bot] Dec 8, 2025
c39bcfc
chore(auth): add minor auth params
stainless-app[bot] Dec 9, 2025
91d5103
release: 0.2.0
stainless-app[bot] Dec 9, 2025
731f753
fix(api): standardize to use automatic_tool_execution
windsornguyen Dec 12, 2025
a0d8615
fix(api): relocate parts of auth logic
windsornguyen Dec 12, 2025
99c65f6
chore: tidy protocol docstrings
windsornguyen Dec 12, 2025
cca9a82
Merge pull request #35 from dedalus-labs/fix/20251212-changes
windsornguyen Dec 12, 2025
9b17190
refactor(api): update auth types
stainless-app[bot] Dec 12, 2025
3cdef11
fix(api): mcp credential types
stainless-app[bot] Dec 12, 2025
c437646
release: 0.2.0
stainless-app[bot] Dec 12, 2025
f3a6008
chore(internal): add missing files argument to base client
stainless-app[bot] Dec 15, 2025
056ef78
fix: use async_to_httpx_files in patch method
stainless-app[bot] Dec 17, 2025
6dbc75d
fix(api): typed json objects
stainless-app[bot] Dec 18, 2025
7eca858
fix: mcp auth types
windsornguyen Dec 18, 2025
ba981cf
Feat/20251217 mcp auth (#36)
windsornguyen Dec 18, 2025
db161b2
fix(api): typed json objects
stainless-app[bot] Dec 18, 2025
699f8b9
fix(api): docstring truncation
stainless-app[bot] Dec 18, 2025
973611a
chore(api): rename MCPToolExecution -> MCPToolResult
stainless-app[bot] Dec 18, 2025
e9300fa
release: 0.2.0
stainless-app[bot] Dec 18, 2025
6908b05
fix(api): syntactical sugar for json types
windsornguyen Dec 18, 2025
8f29baf
fix(api): syntactical sugar for json types (#37)
windsornguyen Dec 18, 2025
8c0b864
fix(api): update types/docstrings
stainless-app[bot] Dec 18, 2025
b25908b
chore(internal): add `--fix` argument to lint script
stainless-app[bot] Dec 18, 2025
e3a3293
fix(api): improve types
stainless-app[bot] Dec 19, 2025
892cd49
release: 0.2.0
stainless-app[bot] Dec 19, 2025
6bae04e
fix: remove rootmodel hack
windsornguyen Dec 19, 2025
0aeaf80
fix: use typealiastype to prevent recursive type issues
windsornguyen Dec 19, 2025
8d78a6d
Fix/20251219 remove rootmodel (#38)
windsornguyen Dec 19, 2025
594b57f
release: 0.2.0
stainless-app[bot] Dec 19, 2025
4e9f631
chore: tidy for regen
windsornguyen Dec 19, 2025
e309af3
Chore/20251219 sdk regen (#39)
windsornguyen Dec 19, 2025
99693c9
feat(api): update via SDK Studio
stainless-app[bot] Dec 20, 2025
de73670
fix: reconcile generated and integrated SDK branches
windsornguyen Dec 20, 2025
eda6f77
style: enforce double quotes via ruff
windsornguyen Dec 20, 2025
f8be312
chore(internal): codegen related update
stainless-app[bot] Jan 5, 2026
2889d94
docs: prominently feature MCP server setup in root SDK readmes
stainless-app[bot] Jan 5, 2026
18e861f
fix(streaming): add exception classes for structured output streaming
windsornguyen Jan 7, 2026
2254078
Merge pull request #12 from stainless-sdks/review/custom-patches
windsornguyen Jan 7, 2026
05a96bd
fix(client): loosen auth header validation
stainless-app[bot] Jan 7, 2026
758c5c3
fix(streaming): use _post() in stream() to support Responses API aliases
windsornguyen Jan 7, 2026
3521c37
Merge pull request #13 from stainless-sdks/review/custom-patches
windsornguyen Jan 7, 2026
e25dc9b
feat(api): manual updates
stainless-app[bot] Jan 7, 2026
b9d6a59
release: 0.2.0
stainless-app[bot] Jan 7, 2026
5e5953a
fix(types): resolve merge conflicts in streaming types
windsornguyen Jan 8, 2026
8f8be5b
fix(parsing): handle LengthFinishReasonError and ContentFilterFinishR…
windsornguyen Jan 8, 2026
c871828
test(parsing): add structured output parsing tests
windsornguyen Jan 8, 2026
715d1b4
fix/parsing exception handling (#40)
windsornguyen Jan 8, 2026
9e3c2f2
fix(mcp): correct wire format for URL-based servers
windsornguyen Jan 8, 2026
660af64
fix(mcp): correct wire format for URL-based servers (#41)
windsornguyen Jan 8, 2026
5f9ff01
release: 0.2.0
stainless-app[bot] Jan 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}

USER vscode

RUN curl -sSf https://rye.astral.sh/get | RYE_VERSION="0.44.0" RYE_INSTALL_OPTION="--yes" bash
ENV PATH=/home/vscode/.rye/shims:$PATH
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

RUN echo "[[ -d .venv ]] && source .venv/bin/activate || export PATH=\$PATH" >> /home/vscode/.bashrc
4 changes: 2 additions & 2 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"context": ".."
},

"postStartCommand": "rye sync --all-features",
"postStartCommand": "uv sync --all-extras",

"customizations": {
"vscode": {
Expand All @@ -20,7 +20,7 @@
"python.defaultInterpreterPath": ".venv/bin/python",
"python.typeChecking": "basic",
"terminal.integrated.env.linux": {
"PATH": "/home/vscode/.rye/shims:${env:PATH}"
"PATH": "${env:PATH}"
}
}
}
Expand Down
39 changes: 15 additions & 24 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,13 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Install Rye
run: |
curl -sSf https://rye.astral.sh/get | bash
echo "$HOME/.rye/shims" >> $GITHUB_PATH
env:
RYE_VERSION: '0.44.0'
RYE_INSTALL_OPTION: '--yes'
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
version: '0.9.13'

- name: Install dependencies
run: rye sync --all-features
run: uv sync --all-extras

- name: Run lints
run: ./scripts/lint
Expand All @@ -46,19 +43,16 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Install Rye
run: |
curl -sSf https://rye.astral.sh/get | bash
echo "$HOME/.rye/shims" >> $GITHUB_PATH
env:
RYE_VERSION: '0.44.0'
RYE_INSTALL_OPTION: '--yes'
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
version: '0.9.13'

- name: Install dependencies
run: rye sync --all-features
run: uv sync --all-extras

- name: Run build
run: rye build
run: uv build

- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/dedalus-sdk-python'
Expand All @@ -83,13 +77,10 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Install Rye
run: |
curl -sSf https://rye.astral.sh/get | bash
echo "$HOME/.rye/shims" >> $GITHUB_PATH
env:
RYE_VERSION: '0.44.0'
RYE_INSTALL_OPTION: '--yes'
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
version: '0.9.13'

- name: Bootstrap
run: ./scripts/bootstrap
Expand Down
11 changes: 4 additions & 7 deletions .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,10 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Install Rye
run: |
curl -sSf https://rye.astral.sh/get | bash
echo "$HOME/.rye/shims" >> $GITHUB_PATH
env:
RYE_VERSION: '0.44.0'
RYE_INSTALL_OPTION: '--yes'
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
version: '0.9.13'

- name: Publish to PyPI
run: |
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.1.1"
".": "0.2.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 12
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/dedalus-labs--inc-dash%2Fdedalus-sdk-5ea14da15b01354db7e852ec1bb581d08b90b6e6fcdb846aacbecbe09943f484.yml
openapi_spec_hash: 46809b9015c6110f0a47acc1696d51dd
config_hash: 635871f7432aa7667937941f2a4742de
configured_endpoints: 10
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/dedalus-labs%2Fdedalus-sdk-9543ba4968eb09fe1d5ccf3bcbc0acdc614a53401893cfb15f530d51d7fe952d.yml
openapi_spec_hash: eebaaecfa11e98efa3c44d709c08cbd6
config_hash: 1890670c4485d0ade7c70a0c8bd20423
2 changes: 1 addition & 1 deletion Brewfile
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
brew "rye"
brew "uv"

937 changes: 937 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

51 changes: 35 additions & 16 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
## Setting up the environment

### With Rye
### With `uv`

We use [Rye](https://rye.astral.sh/) to manage dependencies because it will automatically provision a Python environment with the expected Python version. To set it up, run:
We use [uv](https://docs.astral.sh/uv/) to manage dependencies because it will automatically provision a Python environment with the expected Python version. To set it up, run:

```sh
$ ./scripts/bootstrap
```

Or [install Rye manually](https://rye.astral.sh/guide/installation/) and run:
Or [install uv manually](https://docs.astral.sh/uv/getting-started/installation/) and run:

```sh
$ rye sync --all-features
$ uv sync --all-extras
```

You can then run scripts using `rye run python script.py` or by activating the virtual environment:
You can then run scripts using `uv run python script.py` or by manually activating the virtual environment:

```sh
# Activate the virtual environment - https://docs.python.org/3/library/venv.html#how-venvs-work
# manually activate - https://docs.python.org/3/library/venv.html#how-venvs-work
$ source .venv/bin/activate

# now you can omit the `rye run` prefix
# now you can omit the `uv run` prefix
$ python script.py
```

### Without Rye
### Without `uv`

Alternatively if you don't want to install `Rye`, you can stick with the standard `pip` setup by ensuring you have the Python version specified in `.python-version`, create a virtual environment however you desire and then install dependencies using this command:
Alternatively if you don't want to install `uv`, you can stick with the standard `pip` setup by ensuring you have the Python version specified in `.python-version`, create a virtual environment however you desire and then install dependencies using this command:

```sh
$ pip install -r requirements-dev.lock
Expand All @@ -45,7 +45,7 @@ All files in the `examples/` directory are not modified by the generator and can
```py
# add an example to examples/<your-example>.py

#!/usr/bin/env -S rye run python
#!/usr/bin/env -S uv run python
```

Expand All @@ -72,7 +72,7 @@ Building this package will create two files in the `dist/` directory, a `.tar.gz
To create a distributable version of the library, all you have to do is run this command:

```sh
$ rye build
$ uv build
# or
$ python -m build
```
Expand All @@ -85,17 +85,36 @@ $ pip install ./path-to-wheel-file.whl

## Running tests

Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.

```sh
# you will need npm installed
$ npx prism mock path/to/your/openapi.yml
# Run all tests (uses respx mocking, no server needed)
$ uv run pytest

# Run with Pydantic v1 and v2 across Python versions
$ ./scripts/test
```

### Prism mock server (optional)

Some API resource tests are marked as skipped by default. To run them, you need Prism:

```sh
$ ./scripts/test
# Start mock server (uses spec URL from .stats.yml)
$ ./scripts/mock --daemon

# Or manually with bun (recommended) or npm
$ bunx @stainless-api/[email protected] prism mock \
"$(grep openapi_spec_url .stats.yml | cut -d' ' -f2)"

# Or with npx if you don't have bun
$ npx @stainless-api/[email protected] prism mock \
"$(grep openapi_spec_url .stats.yml | cut -d' ' -f2)"

# Kill when done
$ kill $(lsof -t -i tcp:4010)
```

Note: The Prism tests in `tests/api_resources/` are currently hardcoded with `@pytest.mark.skip`. These are Stainless-generated and validate wire format compliance. The core SDK logic is covered by the non-skipped tests.

## Linting and formatting

This repository uses [ruff](https://github.com/astral-sh/ruff) and
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright 2025 Dedalus
Copyright 2026 Dedalus

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

Expand Down
Loading
Loading