release: 0.11.5#369
Merged
stainless-app[bot] merged 6 commits intoMay 29, 2026
Merged
Conversation
ee2b10f to
97dae2a
Compare
97dae2a to
4bbaa85
Compare
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4bbaa85 to
ae01a46
Compare
Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Declan Brady <declan.brady@scale.com> Co-authored-by: Michael Chou <michael.chou@scale.com>
ae01a46 to
0b5ae6b
Compare
Contributor
Author
Release version edited manuallyThe Pull Request version has been manually set to If you instead want to use the version number |
0b5ae6b to
f6782a0
Compare
…ts adapter (#375) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
f6782a0 to
8f16e2e
Compare
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
danielmillerp
approved these changes
May 29, 2026
Contributor
Author
|
🤖 Release is at https://github.com/scaleapi/scale-agentex-python/releases/tag/v0.11.5 🌻 |
5 tasks
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated Release PR
0.11.5 (2026-05-29)
Full Changelog: v0.11.4...v0.11.5
Features
Performance Improvements
Chores
Refactors
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
Greptile Summary
This is the 0.11.5 release PR, bundling four changesets: tracing performance improvements, a protocol-type module promotion, new
cleaned_atfields on task response types, and dependency cleanup.AsyncSpanQueuegains a configurable linger window (default 100 ms) to coalesce spans into larger batches, per-event-loop HTTP client caching viaWeakKeyDictionaryto restore connection keepalive safely, bounded retry on transient 429/5xx failures, and adropped_spanscounter for observability.RPCMethod,CreateTaskParams,JSONRPCRequest, etc.) are promoted fromagentex.lib.types.*to the new canonicalagentex.protocol.*package; the old paths become re-export shims with identity-preserving tests to guardisinstancecompatibility.cleaned_at: Optional[datetime]added toTask,TaskListResponseItem,TaskRetrieveResponse, andTaskRetrieveByNameResponse.pytest,pytest-asyncio,ipykernel,datadog,anthropic,tzdata,tornado) removed from the runtime wheel; test directories excluded from the built wheel via hatch config.Confidence Score: 5/5
Safe to merge — changes are well-scoped, each guarded by matching tests, and backward compatibility is explicitly validated.
All three major areas of change (span-queue drain overhaul, per-loop client caching, protocol-type promotion) are covered by new or updated unit tests that pin the exact contracts being changed. The retry/drop logic is internally consistent, the WeakKeyDictionary eviction is verified end-to-end, and the back-compat shims are identity-tested. Dependency removals are dev/test packages that were never appropriate in the runtime wheel.
No files require special attention.
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD E[enqueue span] --> S{_stopping?} S -- yes --> D1[record_drop: shutting down] S -- no --> Q{queue full?} Q -- yes --> D2[record_drop: queue full] Q -- no --> QI[put item on asyncio.Queue\nattempts=0] QI --> DRAIN[drain loop: await queue.get] DRAIN --> FIRST[batch = first item] FIRST --> LINGER{linger_ms > 0\nand not stopping?} LINGER -- yes --> WAIT[wait_for queue.get\nup to linger deadline] WAIT --> MORE{more items\nor timeout?} MORE -- more items --> BATCH_FULL{batch == batch_size?} BATCH_FULL -- no --> WAIT BATCH_FULL -- yes --> SPLIT MORE -- timeout --> SPLIT[split START / END] LINGER -- no --> DRAIN_NOW[drain_nowait until\nbatch_size or QueueEmpty] DRAIN_NOW --> SPLIT SPLIT --> PROC[_process_items per event_type\ngather per-processor _handle] PROC --> TRY{processor call\nsucceeds?} TRY -- yes --> CLEAR[batch.clear loop back] CLEAR --> DRAIN TRY -- no --> RETRY{retryable status\n429/5xx?} RETRY -- no --> D3[record_drop: permanent failure] RETRY -- yes --> ATCHECK{attempts+1 < max_retries?} ATCHECK -- no --> D4[record_drop: retries exhausted] ATCHECK -- yes --> REENQUEUE[_reenqueue\nattempts+1, processors=p] REENQUEUE --> Q2{queue full?} Q2 -- yes --> D5[record_drop: queue full on retry] Q2 -- no --> DRAIN subgraph PerLoopCache [Per-event-loop client cache] LC[asyncio.get_running_loop] --> WKD[WeakKeyDictionary lookup] WKD -- miss --> BUILD[_build_client keepalive=20] BUILD --> STORE[store in WeakKeyDictionary] WKD -- hit --> USE[reuse existing client] end PROC -.->|HTTP call via| PerLoopCacheReviews (6): Last reviewed commit: "release: 0.11.5" | Re-trigger Greptile