Development#26
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2b06d70de4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| trace_id = ( | ||
| response.headers.get("x-request-id") | ||
| or response.headers.get("x-trace-id") | ||
| or response.headers.get("x-ferro-request-id") | ||
| ) |
There was a problem hiding this comment.
Prefer the canonical trace header
When the gateway returns both x-request-id and x-trace-id, this stores the HTTP request id as trace_id and drops the actual Ferro trace id. The integration documentation and downstream observability bridge logic treat x-trace-id as the join key, so responses from gateways that emit both headers will point LangChain metadata at the wrong trace.
Useful? React with 👍 / 👎.
Both the sync and async _stream() paths swallowed JSONDecodeError with a
bare `continue`, silently dropping malformed SSE chunks and losing data
with no error or log. They now raise FerroStreamError instead — the first
code path that actually raises this previously-unused exception.
Also adds the {"plugins": [...]} wrapper coverage for admin.plugins.list()
and streaming malformed-chunk regression tests for both clients.
Closes #15
Closes #16
Add .github/release.yml so GitHub's auto-generated release notes (the publish job already runs softprops/action-gh-release with generate_release_notes: true) group merged PRs by label and credit every contributor by @handle, plus a "New Contributors" section. Contributor credit lives in the release notes only, not in CHANGELOG.md.
Summary
Release promotion from
development→main. Bundles the work merged intodevelopmentsince the last release:Bug fixes
FerroStreamErroron malformed SSE chunks (sync + async) instead of silently dropping them. First code path that actually raises the previously-unusedFerroStreamError. (via fix: raise FerroStreamError on malformed streaming chunks #27)Tests
client.admin.dashboard().client.admin.plugins.list()across all three response shapes: bare array,{"data": [...]}, and{"plugins": [...]}.Tooling
.github/release.yml— groups auto-generated GitHub Release notes by label and credits every contributor by@handleon each tagged release (publish job already runs withgenerate_release_notes: true).Fixed Issues
Closes #7
Closes #11
Closes #15
Closes #16
Testing
pytest tests/— 67 passed on Python 3.9–3.12 (local + CI).ruff check/ruff format --check— clean.mypy ferrolabsai— Success, no issues.Notes
FerroStreamErrorinstead of being silently skipped. Callers relying on silent skipping must catchFerroStreamError.