Some of my merged PRs to open-source projects, mostly bug fixes and small features.
-
Pydantic AI #6155 — Bedrock tool result serialization
Bedrock requires tool results to contain at least one content block, but an empty list could produce none. The fix handles empty lists in both text and JSON modes. -
tool-eval-bench #68 — Reasoning content in tool-call history
DeepSeek's thinking mode needsreasoning_contentto be carried over between tool calls. The runner was dropping it when rebuilding conversation history, causing subsequent requests to fail. -
tool-eval-bench #304 — Rate-limit scheduling
Requests that had already reserved a slot could resume together after another HTTP 429 changed the rate limit. They now re-enter the queue using the latest pause and pacing interval. -
tool-eval-bench #305 — API endpoint URLs
Appending an endpoint to a base URL with query parameters could put the path inside the query string. I changed the URL helpers and their callers across OpenAI-compatible, Gemini, Anthropic, and other endpoints. -
tool-eval-bench #306 — HTTP
Retry-After
The retry handler only understood numeric delays, although HTTP also allows dates. It now handles both forms, including expired dates and invalid values.
-
JupyterLab #19220 — R operator shortcuts
This started as documentation for R shortcuts and grew into built-in bindings after review. The merged PR supports<-and%>%in R notebooks, consoles, and editors without affecting other languages. -
JupyterLab #19221 — Copy in Markdown Viewer
Added a Copy command to the Markdown Viewer context menu so selected text can be copied without leaving the preview. -
JupyterLab #19222 — Search in Markdown Viewer
Connected Markdown Viewer to JupyterLab's existing document search system. Search now works on rendered Markdown and can start with selected text.
-
MaaFramework #1421 — Batch OCR cache
Batch OCR could reuse cached results for a different recognition request simply because the names matched. Cache lookups now also check the model and relevant OCR settings. -
MaaFramework #1422 — ColorMatch configuration
Some ColorMatch configurations could be exported but not loaded again because the parser rejected empty arrays. Updated the parsing logic and added a round-trip test. -
MaaFramework #1423 — And/Or recognition serialization
Inline sub-recognitions lost the expected JSON structure when exported from And/Or nodes. The dumper now keeps the nestedrecognitionfield so the output can be loaded again. -
MaaFramework #1502 — Neural detection ROI
Detection boxes could extend outside the requested ROI. The fix clips them to the ROI and drops boxes with no overlap.
-
vectorbt #860 — Simulation record buffers
Order and log buffers were allocated withnp.empty, leaving their contents uninitialized when callbacks first accessed them. The buffers now start with defined sentinel values. -
vectorbt #859 — Benchmark plotting
Custom benchmark returns were broadcast against the wrong object when plotting a selected portfolio column. Changed the broadcast target to use the portfolio wrapper. -
bt #520 — Backtest statistics
Performance statistics included the flat period before a strategy made its first trade. They now start just before the first transaction, keeping the initial trading return in the calculation. -
qf-lib #284 — Pandas groupby compatibility
Replaced deprecated column-axisgroupbycalls with a helper that groups transposed DataFrames, keeping the portfolio analysis output unchanged.