Skip to content

Conversation

@stainless-app
Copy link
Contributor

@stainless-app stainless-app bot commented Nov 17, 2025

Automated Release PR

0.2.0 (2025-12-19)

Full Changelog: v0.2.0...v0.2.0

Features

  • add image edits/variation and vision format support (f8a8c84)
  • api: add endpoints (c10d7b5)
  • api: add streaming (745c331)
  • api: add streaming configuration (0172ad5)
  • api: api update (280a595)
  • api: auto exec tools (780162b)
  • api: config update for dedalus-ai/dev (34e7a71)
  • api: config update for dedalus-ai/dev (197d11b)
  • api: convenient bug reporting ux (5aa032f)
  • api: image support (ca28133)
  • api: improve types (62cf7e1)
  • api: manual updates (9bb6d0d)
  • api: manual updates (9b2851a)
  • api: mcp server params (bf78aad)
  • api: messages param nullable (e905235)
  • api: response format (660ac29)
  • api: revert streaming for now (56d57d5)
  • api: schema compiler landed (9aeb7a7)
  • api: standardize name casing with stainless initialism (ba1e188)
  • api: stream helper for pydantic (c4ab8b0)
  • api: streaming support for structured output (48ddd0a)
  • api: update via SDK Studio (9407b44)
  • client: support file upload requests (caadecd)
  • encryption (d72d130)
  • flexible input params for .parse() (b208fbe)
  • structured outputs for tools (b0434ca)

Bug Fixes

  • api: add shared DedalusModel type (8855a07)
  • api: add thought signature (d2203b1)
  • api: docstring truncation (699f8b9)
  • api: hardened _compat types (312b628)
  • api: improve types (e3a3293)
  • api: mcp credential types (3cdef11)
  • api: relocate parts of auth logic (a0d8615)
  • api: standardize to use automatic_tool_execution (731f753)
  • api: syntactical sugar for json types (6908b05)
  • api: syntactical sugar for json types (#37) (8f29baf)
  • api: typed json objects (db161b2)
  • api: typed json objects (6dbc75d)
  • api: update types/docstrings (8c0b864)
  • client: close streams without requiring full consumption (24c4190)
  • compat with Python 3.14 (aacb192)
  • compat: update signatures of model_dump and model_dump_json for Pydantic v1 (bd1df12)
  • ensure streams are always closed (e0e6406)
  • import paths and tests (70c967f)
  • mcp auth types (7eca858)
  • remove rootmodel hack (6bae04e)
  • runner tool calling mechanics (a07f8eb)
  • runner: import and dict issues (fd500d6)
  • runner: narrow mcp types (172b56b)
  • runner: use TypeAlias from typing_extensions for py3.9+ support (0625b2c)
  • streaming: correct stream type detection (7b6576c)
  • tests: update bug reporting parameters/paths (3838ebe)
  • tool call format and custom_auth validation (b822aa2)
  • types: allow pyright to infer TypedDict types within SequenceNotStr (624e2b6)
  • types: remove manual DedalusModel (e1ce236)
  • use async_to_httpx_files in patch method (056ef78)
  • use typealiastype to prevent recursive type issues (0aeaf80)

Chores

  • add missing docstrings (52ded59)
  • api: point local dev to 4010 port for prism (ad0ec37)
  • api: rename MCPToolExecution -> MCPToolResult (973611a)
  • auth: add minor auth params (c39bcfc)
  • bump httpx-aiohttp version to 0.1.9 (6b5f606)
  • bump required uv version (cb3f674)
  • deps: mypy 1.18.1 has a regression, pin to 1.17 (cb4d323)
  • docs: use environment variables for authentication in code snippets (e4330c0)
  • internal/tests: avoid race condition with implicit client cleanup (0854f1d)
  • internal: add --fix argument to lint script (b25908b)
  • internal: add missing files argument to base client (f3a6008)
  • internal: avoid using unstable Python versions in tests (5905b55)
  • internal: codegen related update (d288b0b)
  • internal: detect missing future annotations with ruff (6909c09)
  • internal: grammar fix (it's -> its) (f0c5880)
  • package: drop Python 3.8 support (ef5e794)
  • remove custom code (81f922b)
  • repo: update contributing doc and mock test script (fd52f5a)
  • tidy for regen (4e9f631)
  • tidy protocol docstrings (99c65f6)
  • tidying (354f95b)
  • update lockfile (46f1379)

Refactors

  • api: types for mcp server serialization (2f614ca)
  • api: update auth types (9b17190)
  • api: update types (584fe2a)

This pull request is managed by Stainless's GitHub App.

The semver version number is based on included commit messages. Alternatively, you can manually set the version number in the title of this pull request.

For a better experience, it is recommended to use either rebase-merge or squash-merge when merging this pull request.

🔗 Stainless website
📚 Read the docs
🙋 Reach out for help or questions


Note

Introduces MCP server/credential and tool-choice types with richer model settings, refactors response-format types to use JSONObjectInput, overhauls chat/client tests, and adds new encryption and MCP wire serialization tests.

  • Types/Schema:
    • Add shared_params (e.g., ModelSettings, Reasoning, MCPServers, MCPServerSpec, MCPCredentials, Credential, FunctionDefinition, tool_choice).
    • Update response formats: ResponseFormatJSONSchema/JSONObject/Text enhanced; JSON schema fields now use JSONObjectInput.
    • Refactor model selection: DedalusModel now references ModelSettings; DedalusModelChoice simplified to Union[str, DedalusModel].
  • Chat API Tests:
    • Migrate to ChatCompletion; switch to openai/gpt-5; align params (e.g., automatic_tool_execution, credentials, mcp_servers, structured tool_choice, system_instruction).
    • Remove health/root API tests.
  • Client/Infra Tests:
    • Update retry/stream tests to hit POST /v1/chat/completions.
    • Expand auth error message to include x_api_key support.
    • Add new tests for credential encryption (envelope v1) and MCP wire/connection/credential serialization.
  • Misc:
    • Introduce shared/tool_choice for non-params usage.
    • Minor docstring/typing improvements across response-format and schema types.

Written by Cursor Bugbot for commit 5897085. This will update automatically on new commits. Configure here.

@stainless-app
Copy link
Contributor Author

stainless-app bot commented Nov 17, 2025

🧪 Testing

To try out this version of the SDK, run:

pip install 'https://pkg.stainless.com/s/dedalus-sdk-python/e309af3a4fa6222b30a3cf569f179f0a11231544/dedalus_labs-0.2.0-py3-none-any.whl'

Expires at: Sun, 18 Jan 2026 22:36:54 GMT
Updated at: Fri, 19 Dec 2025 22:36:54 GMT

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from c009fc7 to f7dcba2 Compare November 21, 2025 23:26
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from f7dcba2 to 9f9595f Compare November 25, 2025 00:18
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 9f9595f to e472959 Compare November 26, 2025 10:37
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from e472959 to b0d5b29 Compare November 27, 2025 14:30
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from b0d5b29 to 0f9dda8 Compare November 27, 2025 16:49
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 0f9dda8 to 18bac02 Compare November 27, 2025 18:44
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 18bac02 to 0855388 Compare December 1, 2025 02:24
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 0855388 to 01f0641 Compare December 1, 2025 14:53
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 01f0641 to 8f6e9b4 Compare December 1, 2025 17:19
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 8f6e9b4 to d39dc44 Compare December 1, 2025 17:20
@stainless-app stainless-app bot changed the title release: 0.2.0 release: 0.3.0 Dec 1, 2025
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from d39dc44 to 349fdaa Compare December 1, 2025 17:21
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from c437646 to 94d029c Compare December 17, 2025 15:47
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 94d029c to 20b4252 Compare December 18, 2025 05:22
data["mcp_servers"] = serialize_mcp_servers(servers)

# Make a copy to avoid mutation side effects related to SDK retry logic.
data = copy.deepcopy(data)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Request data mutated before deep copy protection

The prepare_mcp_request and prepare_mcp_request_sync functions modify data["mcp_servers"] in place on line 101/142 before creating the deep copy on line 104/145. The comment states the copy is made "to avoid mutation side effects" but the mutation has already occurred. This causes the caller's original dict to be unexpectedly modified—users who pass a dict containing MCPServer objects will find their dict now contains serialized strings/dicts after the API call. The deep copy should be made first to actually protect against mutation side effects.

Additional Locations (1)

Fix in Cursor Fix in Web

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 20b4252 to dfc2867 Compare December 18, 2025 17:32
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from dfc2867 to e9300fa Compare December 18, 2025 17:33
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 38a6079 to e0550b8 Compare December 18, 2025 19:53
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from e0550b8 to 892cd49 Compare December 19, 2025 16:49
)

# Extract MCP tool executions from the last response
mcp_results = _extract_mcp_results(response)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Undefined variable when max_steps is zero or negative

The response variable is only defined inside the while steps < exec_config.max_steps loop, but _extract_mcp_results(response) is called unconditionally after the loop. If max_steps is 0 or negative, the loop body never executes, leaving response undefined, which causes an UnboundLocalError when the function tries to extract MCP results. This affects both _execute_turns_sync and _execute_turns_async methods.

Additional Locations (1)

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants