What's Changed
- perf: perm sync start time by @evan-onyx in #9685
- fix(nginx): route /scim/* to api_server by @nmgarza5 in #9686
- chore(greptile): add nginx routing rule for non-api backend routes by @nmgarza5 in #9687
- chore(deps-dev): bump handlebars from 4.7.8 to 4.7.9 in /web by @dependabot[bot] in #9689
- chore(deps-dev): bump picomatch from 2.3.1 to 2.3.2 in /web by @dependabot[bot] in #9691
- chore(devtools):
ods traceby @jmelahman in #9688 - feat: configurable file upload size and token limits via admin settings by @Subash-Mohan in #9232
- refactor(indexing): Vespa & Opensearch index function use Iterable by @Danelegend in #9384
- feat(helm): add Prometheus metrics ports and Services for celery workers by @nmgarza5 in #9630
- fix(fe): Popover content doesnt overflow on small screens by @jmelahman in #9612
- chore(deps): bump brace-expansion in /backend/onyx/server/features/build/sandbox/kubernetes/docker/templates/outputs/web by @dependabot[bot] in #9698
- chore(devtools): upgrade
ods: 0.7.1->0.7.2 by @jmelahman in #9701 - chore(playwright): deflake
settings_pages.spec.tsby @jmelahman in #9684 - Update README.md by @yuhongsun96 in #9703
- chore(gha): pin helm release docker image by @jmelahman in #9706
- feat(hook): admin page create or edit hook by @Bo-Onyx in #9690
- chore(gha): fix helm release after image update by @jmelahman in #9707
- fix(celery): use broker connection pool to prevent Redis connection leak by @nmgarza5 in #9682
- chore(gha): helm release upstream nits by @jmelahman in #9708
- chore(gha): fix git error after helm release migration to alpine base image by @jmelahman in #9709
- chore(release): build all CLI wheels before publishing by @jmelahman in #9710
- chore(deps): upgrade go deps by @jmelahman in #9711
- fix(cli):
onyx-cli --versioninterpolation by @jmelahman in #9712 - feat(cli):
--versionandvalidate-configwarn if backend version is incompatible by @jmelahman in #9715 - chore(deps): bump cryptography from 46.0.5 to 46.0.6 by @dependabot[bot] in #9721
- chore(deps): bump langchain-core from 1.2.11 to 1.2.22 by @dependabot[bot] in #9720
- fix: Anthropic litellm thinking workaround by @evan-onyx in #9713
- feat(widget): add citation badges to chat widget by @rohoswagger in #9714
- fix(openpyxl): Colors must be aRGB hex values by @justin-tahara in #9727
- feat(cli):
onyx-cli serveover SSH by @jmelahman in #9726 - perf(swr): convert raw-fetch hooks to SWR to eliminate duplicate requests by @nmgarza5 in #9694
- refactor(opal): unify Interactive color system by @raunakab in #9717
- feat(indexing): Max chunk processing by @Danelegend in #9400
- refactor(indexing): Change adapters to support iterables by @Danelegend in #9469
- refactor(indexing): Refactor indexing vector db abstraction by @Danelegend in #9653
- feat(indexing): Batch chunks during doc processing by @Danelegend in #9468
- chore(gha): prefer
ci-protectedenv by @jmelahman in #9728 - chore(deps): bump pygments from 2.19.2 to 2.20.0 by @dependabot[bot] in #9757
- feat(opal):
SelectCard+CardHeaderLayoutby @raunakab in #9760 - chore(deps): bump actions/cache from 5.0.3 to 5.0.4 by @dependabot[bot] in #9765
- chore(deps): bump runs-on/cache from 50350ad4242587b6c8c2baa2e740b1bc11285ff4 to a5f51d6f3fece787d03b7b4e981c82538a0654ed by @dependabot[bot] in #9763
- chore(fe): polish Query History table by @jmelahman in #9767
- chore(deps): bump helm/chart-testing-action from b5eebdd9998021f29756c53432f48dab66394810 to 2e2940618cb426dce2999631d543b53cdcfc8527 by @dependabot[bot] in #9764
- chore(types): fix IconButton size props by @jmelahman in #9772
- feat(sentry): add release tracking to backend and frontend by @nmgarza5 in #9773
- feat(rds): Adding RDS Snapshosts by @justin-tahara in #9779
- feat(helm): add Grafana dashboard provisioning by @nmgarza5 in #9725
- feat(sentry): enable frontend source map uploads in cloud CI by @nmgarza5 in #9775
- feat(eks): Adding Cloudwatch logging by @justin-tahara in #9783
- feat(rds): Adding CPU Alerts by @justin-tahara in #9784
- refactor: migrate away from
cards/Selectby @raunakab in #9771 - feat(rds): Add Freeable Memory alert by @justin-tahara in #9787
- fix(tenants): run migrations on pool tenants before assigning to new users by @nmgarza5 in #9788
- feat(canvas): Canvas Connector data fetching 2/4 by @benwu408 in #9386
- feat(hook): hook status and logs by @Bo-Onyx in #9770
- chore(opensearch): Add Grafana dashboard for retrieval by @acaprau in #9657
- refactor(admin): image-generation by @raunakab in #9769
- refactor(admin): LLM Config by @raunakab in #9806
- fix(llm): when multiple providers are same type ensure name is prioritized when default by @jessicasingh7 in #9777
- refactor(admin): web-search by @raunakab in #9761
- perf(swr): add SWR_KEYS registry and skip revalidation for stable hooks by @nmgarza5 in #9695
- refactor(admin): code-interpreter by @raunakab in #9790
- feat(voice): VAD auto-stop only when auto-send is enabled by @jessicasingh7 in #9809
- chore: fix batch logging by @evan-onyx in #9808
- chore: Rag script for benchmark/regression by @yuhongsun96 in #9781
- chore: fix indexing log2 by @evan-onyx in #9811
- fix(connectors): fix reindex on paused file connectors by @jessicasingh7 in #9812
- feat(hook): refactor under ee by @Bo-Onyx in #9776
- feat(rds): Adding IO Metrics Alarms by @justin-tahara in #9789
- fix: discord token validation by @evan-onyx in #9817
- fix: install early exit by @evan-onyx in #9818
- fix(perf): optimize chat sessions query to prevent DB cascading failures by @justin-tahara in #9802
- feat(file-upload): Upload files exceeding tokens but skip indexing by @Danelegend in #9751
- refactor(opal): split Card sizeVariant into padding + rounding by @raunakab in #9823
- refactor(files): Port csv type to tabular by @Danelegend in #9785
- feat(files): Inject file metadata over content for certain files by @Danelegend in #9786
- refactor(admin): revamp Service Accounts page and AdminListHeader by @raunakab in #9824
- chore(fe): prefer
Buttonw/hrefto wrappedLinkby @jmelahman in #9774 - fix(a11y): migrate some buttons to
Hoverableby @jmelahman in #9778 - fix(fe): foldable buttons unfold on tab by @jmelahman in #9828
- refactor(swr): migrate all inline cache keys to SWR_KEYS registry by @nmgarza5 in #9782
- chore(deployment): rework trivy job by @jmelahman in #9780
- chore(deps): bump fastmcp from 3.0.2 to 3.2.0 by @dependabot[bot] in #9814
- docs(readme): README and Contrib by @yuhongsun96 in #9829
- README Update by @yuhongsun96 in #9833
- feat(hook): frontend ee by @Bo-Onyx in #9825
- chore(gha): cleanup connector tests by @jmelahman in #9836
- refactor: drive connector by @evan-onyx in #9834
- chore(deps): bump aiohttp from 3.13.3 to 3.13.4 by @dependabot[bot] in #9839
- feat(hook): integrate document ingestion hook point by @Bo-Onyx in #9810
- refactor(opal): split
SelectCard'ssizeVariantprop intopaddingVariant+roundingVariantby @raunakab in #9830 - fix(db): remove unnecessary selectinload(User.memories) from auth paths by @justin-tahara in #9838
- feat(hook): update hook doc link and reference by @Bo-Onyx in #9841
- fix(opensearch): Add Vespa server-side timeout for the migration by @acaprau in #9843
- chore(opensearch): Increase
DEFAULT_NUM_HYBRID_SUBQUERY_CANDIDATESto 500, disable profiling by default by @acaprau in #9844 - fix(xlsx): Improve empty row/col handling by @Danelegend in #9288
- fix(opal): guard
opal/interactive'sonClickhandlers against React portal event bubbling by @raunakab in #9850 - fix(llm): Azure custom model support + Mistral tool call message ordering by @justin-tahara in #9729
- refactor(emitter): replace bus-polling with merge-queue by @nmgarza5 in #9803
- refactor: Hook Extensions edits by @raunakab in #9831
- docs: Chat README by @yuhongsun96 in #9853
- feat(chat): add multi-model parallel streaming backend by @nmgarza5 in #9647
- feat(chat): add frontend types and API helpers for multi-model streaming by @nmgarza5 in #9648
- feat(groups): seed default Admin and Basic user groups by @Subash-Mohan in #9795
- refactor: update
Buttonto define its own internal disabled styling by @raunakab in #9851 - feat(hook): Show connection lost status by @Bo-Onyx in #9848
- refactor: simplify
opal/Disabledby removing its context by @raunakab in #9852 - fix(offline): fallback to system sans-serif font by @jmelahman in #9860
- refactor: move
SidebarTabto opal by @raunakab in #9863 - Revert "refactor: move
SidebarTabto opal" by @raunakab in #9865 - chore(playwright): stabalize icon loading, users table timestamp by @jmelahman in #9864
- refactor: move SidebarTab to Opal with disabled prop and variant/state API (v2) by @raunakab in #9866
- feat(install): add GitHub star prompt at end of install script by @rohoswagger in #9861
- fix(opensearch): Re-order migration task logic to not hold DB sessions too long by @acaprau in #9872
- fix(opensearch): Doc IDs whose length would exceed OpenSearch's ID length are hashed by @acaprau in #9847
- chore: remove unused db rows by @evan-onyx in #9869
- fix(desktop): prefer native scrollbar styling by @jmelahman in #9879
- feat(cli): make onyx-cli agent-friendly by @rohoswagger in #9874
- fix(fe): fix sticky sidebar headers overlapping scrollbars by @jmelahman in #9884
- fix(mcp server): propagate detailed error messages to mcp client instead of generic message and migrate to OnyxError by @wenxi-onyx in #9880
- feat: cluster disabled admin sidebar tabs at the bottom by @raunakab in #9867
- feat: filestore delete missing error by @evan-onyx in #9878
- fix(fe): projects buttons transition in like other sidebar items by @jmelahman in #9875
- fix(fe): closed sidebar button tooltip text color by @jmelahman in #9876
- feat(hook): UI improve disconnect error popover by @Bo-Onyx in #9877
- feat(cli):
onyx install-skillby @jmelahman in #9889 - fix(mobile): update sidebar responsiveness by @jmelahman in #9862
- fix(notion): extract people properties and inline table content by @jessicasingh7 in #9891
- fix: user files deleted by cleanup task by @evan-onyx in #9890
- fix(mobile): sidebar overlaps content on medium-sized screens by @jmelahman in #9870
- fix: Edit
bifrostcolour by @raunakab in #9897 - fix(mt): Update Preprovision Workflow by @justin-tahara in #9896
- chore(deps): bump litellm from 1.81.6 to 1.83.0 by @dependabot[bot] in #9898
- feat(cli): render markdown while streaming (experiment) by @jmelahman in #9893
- refactor: rework admin sidebar footer by @raunakab in #9895
- Revert "chore(deps): bump litellm from 1.81.6 to 1.83.0 (#9898)" by @jmelahman in #9908
- fix: Edit
AccountPopover+Separator's appearances when folded by @raunakab in #9906 - refactor: flatten opal card layouts, add
childrentoCardHeaderLayoutby @raunakab in #9907 - chore: rm remnants of old kombu psql broker code by @wenxi-onyx in #9924
- fix(federated): prevent masked credentials from corrupting stored secrets by @nmgarza5 in #9868
- feat(chat): add multi-model selector and chat hook by @nmgarza5 in #9854
- refactor: remove dead LLM provider code from chat page load path by @wenxi-onyx in #9925
- feat(helm): add optional CA certificate update step to api-server startup by @alex000kim in #9378
- chore: bump sleep time in flaky test by @evan-onyx in #9900
- chore(deps): bump azure/setup-helm from 4.3.1 to 5.0.0 by @dependabot[bot] in #9934
- chore(deps): bump softprops/action-gh-release from 2.2.2 to 2.6.1 by @dependabot[bot] in #9935
- fix: set correct ee mode for mcp server by @wenxi-onyx in #9933
- chore(deps): bump actions/stale from 10.1.1 to 10.2.0 by @dependabot[bot] in #9936
- chore(db): Add env var for multiple postgres hosts by @acaprau in #9942
- chore(deps-dev): bump vite from 6.4.1 to 6.4.2 in /web by @dependabot[bot] in #9944
- chore(deps-dev): bump vite from 7.3.1 to 7.3.2 in /widget by @dependabot[bot] in #9950
- refactor: clean up
KeyValueInputandEmptyMessageCardby @raunakab in #9947 - chore: update custom LLM modal descriptions by @raunakab in #9946
- fix(llm-config): extract first-class fields from custom provider key-value list by @raunakab in #9945
- chore: context gitignore by @evan-onyx in #9949
- chore(helm): Bumping Python Sandbox to v0.3.2 by @justin-tahara in #9955
- refactor: conditionally render LLM modals instead of early-returning null by @raunakab in #9954
- fix: a proper revamp of "Custom LLM Configuration Models" by @raunakab in #9958
- fix: replace React context hover tracking with pure CSS by @raunakab in #9961
- fix: stop falsely rejecting owner-password-only PDFs as protected by @jmelahman in #9953
- feat(chat): add multi-model response panels by @nmgarza5 in #9855
- docs(celery): add Prometheus metrics integration guide by @nmgarza5 in #9969
- feat: generic OpenAI Compatible LLM Provider setup by @jmelahman in #9968
- fix(groups): Global Curator Permissions by @justin-tahara in #9974
- chore(mt): Update cloud tasks by @justin-tahara in #9967
- fix(indexing, powerpoint files): Patch markitdown _convert_chart_to_markdown to no-op by @acaprau in #9970
- chore(docker): docker bake cache-from
:edgeimages by @jmelahman in #9976 - fix(fe): use Modal.Footer for token rate limit modal button by @jessicasingh7 in #9978
- refactor(ollama): manual fetch and fix ollama cloud base url by @wenxi-onyx in #9973
- feat(chat): wire multi-model streaming into chat controller and UI by @nmgarza5 in #9929
- feat(pruning): Add Wire Prometheus metrics into the Heavy Celery worker by @Bo-Onyx in #9982
- chore(mt): reduce cleanup-idle-sandboxes beat cadence by @justin-tahara in #9984
- fix(auth): migrate limited-role checks to account-type based access control by @Subash-Mohan in #9930
- fix: onboarding LLM Provider configuration fixes by @raunakab in #9972
- fix: LM Studio API key field mismatch by @raunakab in #9991
- refactor: remove auto-refresh from LLM provider model selection by @raunakab in #9995
- fix: initialize tracing in Slack bot service by @wenxi-onyx in #9993
- refactor: foldable model list in ModelSelectionField by @raunakab in #9996
- chore: delete unused files by @raunakab in #10001
- fix: enable force-delete for last LLM provider by @raunakab in #9998
- fix: Custom LLM Provider requires a Provider Name by @jmelahman in #10003
- fix: fetch Custom Models provider names by @jmelahman in #10004
- feat(metrics): add pruning-specific Prometheus metrics by @Bo-Onyx in #9983
- feat:
@opal/logosby @raunakab in #10002 - feat(ods): Ad Hoc Deploys by @justin-tahara in #10014
- chore(python sandbox): Bump to v0.3.3 by @justin-tahara in #10016
- chore(ods): Bump from v0.7.2 -> v0.7.3 by @justin-tahara in #10018
- fix:
/api/admin/llm/built-in/options/custom404 by @jmelahman in #10009 - chore(edge): Skip edge tag by @justin-tahara in #10019
- chore: update generic LLM configuration help copy by @jmelahman in #10011
- fix(chat): resolve model selector showing stale model on agent switch by @nmgarza5 in #10022
- fix(input): differentiate attach file and add model icons by @nmgarza5 in #10024
- fix(chat): center multi-model response panels in chat view by @nmgarza5 in #10006
- fix(chat): gate ModelSelector render on agent and provider readiness by @nmgarza5 in #10017
- fix(chat): only collapse sidebar on multi-model submit by @nmgarza5 in #10020
- fix(chat): prevent popover flash when selecting 3rd model by @nmgarza5 in #10021
- chore(python): simplify internal packages/workspace by @jmelahman in #10029
- feat(nrf): add ModelSelector and multi-model support to Chrome extension by @nmgarza5 in #10023
- feat(chat): add deselect preferred response with smooth transitions and scroll preservation by @nmgarza5 in #10026
- refactor: consolidate LLM provider modal routing by @raunakab in #10030
- fix(chat): set consistent 720px content width for chat and input bar by @nmgarza5 in #10032
- fix(helm): declare metrics port on celery-worker-heavy by @Bo-Onyx in #10033
Full Changelog: v3.1.0...v3.2.0