[PR #21155] [CLOSED] feat: get all group query optimization #48999

Closed
opened 2026-04-30 01:17:02 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/open-webui/open-webui/pull/21155
Author: @ylwy0178-ctrl
Created: 2/4/2026
Status: Closed

Base: devHead: bugfix/get_all_group_query_optimization


📝 Commits (10+)

📊 Changes

1 file changed (+30 additions, -17 deletions)

View changed files

📝 backend/open_webui/models/groups.py (+30 -17)

📄 Description

Pull Request Checklist

Note to first-time contributors
Please open a discussion post in Discussions to discuss your idea or fix with the community before creating a pull request.

This ensures that large feature PRs are aligned with the project goals and avoids unnecessary work if the feature is not desired.


Pre-Submission Checklist

Before submitting your pull request, please confirm the following:

  • Target Branch

    • This pull request targets the dev branch
    • Not targeting dev will lead to immediate closure
  • Description

    • A concise description of the changes is provided below
  • Changelog

    • A changelog entry following Keep a Changelog format is included at the bottom of the PR description
  • Documentation

    • Relevant documentation has been updated (Open WebUI Docs, environment variables, tutorials, etc.)
  • Dependencies

    • Any new dependencies are documented
    • Dependency version changes are reflected in the documentation
  • Testing

    • Manual testing has been performed
    • The change works as intended and does not break existing functionality
    • Screenshots are included where applicable
  • Agentic AI Code

    • This PR was not written solely by an AI agent
    • If AI was used, the code has undergone human review and manual testing
    • AI-only PRs may be closed immediately
  • Code Review

    • A self-review has been completed
    • Code follows the project’s coding standards

Pull Request Title Prefix

Prefix your pull request title with one of the following:

  • BREAKING CHANGE: Compatibility-impacting changes
  • build: Build system or dependency changes
  • ci: CI workflow updates
  • chore: Cleanup or non-functional changes
  • docs: Documentation updates
  • feat: New features or enhancements
  • fix: Bug fixes
  • i18n: Internationalization or localization
  • perf: Performance improvements
  • refactor: Code restructuring
  • style: Formatting or stylistic changes
  • test: Test additions or corrections
  • WIP: Work in progress

Changelog Entry

Description

Slightly improves performance for /api/models by ensuring each function is loaded only once from the database.


Changes Made

get_groups() Method

Before

  • Queried all groups
  • Executed get_group_member_count_by_id() for each group
  • Resulted in N+1 queries

After

  • Uses a single query with:
    • LEFT OUTER JOIN on GroupMember
    • func.count() aggregation
  • Retrieves member counts in one database round-trip

search_groups() Method

Before

  • Same N+1 query pattern during pagination

After

  • Single aggregated query
  • Member counts included
  • Pagination (offset / limit) preserved

Performance Impact

  • Database round-trips: N + 11
  • Query complexity: O(N+1)O(1)
  • Real-world impact: Retrieving 100 groups now executes 1 query instead of 101

Contributor License Agreement (CLA)

By submitting this pull request, I confirm that I have read and fully agree to the Contributor License Agreement (CLA), and I am providing my contributions under its terms.

Important:
Deleting this CLA section will lead to immediate closure of the PR.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/open-webui/open-webui/pull/21155 **Author:** [@ylwy0178-ctrl](https://github.com/ylwy0178-ctrl) **Created:** 2/4/2026 **Status:** ❌ Closed **Base:** `dev` ← **Head:** `bugfix/get_all_group_query_optimization` --- ### 📝 Commits (10+) - [`fe6783c`](https://github.com/open-webui/open-webui/commit/fe6783c16699911c7be17392596d579333fb110c) Merge pull request #19030 from open-webui/dev - [`fc05e0a`](https://github.com/open-webui/open-webui/commit/fc05e0a6c5d39da60b603b4d520f800d6e36f748) Merge pull request #19405 from open-webui/dev - [`e3faec6`](https://github.com/open-webui/open-webui/commit/e3faec62c58e3a83d89aa3df539feacefa125e0c) Merge pull request #19416 from open-webui/dev - [`9899293`](https://github.com/open-webui/open-webui/commit/9899293f050ad50ae12024cbebee7e018acd851e) Merge pull request #19448 from open-webui/dev - [`140605e`](https://github.com/open-webui/open-webui/commit/140605e660b8186a7d5c79fb3be6ffb147a2f498) Merge pull request #19462 from open-webui/dev - [`6f1486f`](https://github.com/open-webui/open-webui/commit/6f1486ffd0cb288d0e21f41845361924e0d742b3) Merge pull request #19466 from open-webui/dev - [`d95f533`](https://github.com/open-webui/open-webui/commit/d95f533214e3fe5beb5e41ec1f349940bc4c7043) Merge pull request #19729 from open-webui/dev - [`a727153`](https://github.com/open-webui/open-webui/commit/a7271532f8a38da46785afcaa7e65f9a45e7d753) 0.6.43 (#20093) - [`6adde20`](https://github.com/open-webui/open-webui/commit/6adde203cd292a9e3af9c64a2ae36b603fed096a) Merge pull request #20394 from open-webui/dev - [`f9b0534`](https://github.com/open-webui/open-webui/commit/f9b0534e0c442631d1cb7205169588b9b6204179) Merge pull request #20522 from open-webui/dev ### 📊 Changes **1 file changed** (+30 additions, -17 deletions) <details> <summary>View changed files</summary> 📝 `backend/open_webui/models/groups.py` (+30 -17) </details> ### 📄 Description # Pull Request Checklist > **Note to first-time contributors** > Please open a discussion post in **Discussions** to discuss your idea or fix with the community before creating a pull request. > > This ensures that large feature PRs are aligned with the project goals and avoids unnecessary work if the feature is not desired. --- ## Pre-Submission Checklist Before submitting your pull request, please confirm the following: - **Target Branch** - [ ] This pull request targets the **`dev`** branch - Not targeting `dev` will lead to immediate closure - **Description** - [ ] A concise description of the changes is provided below - **Changelog** - [ ] A changelog entry following **Keep a Changelog** format is included at the bottom of the PR description - **Documentation** - [ ] Relevant documentation has been updated (Open WebUI Docs, environment variables, tutorials, etc.) - **Dependencies** - [ ] Any new dependencies are documented - [ ] Dependency version changes are reflected in the documentation - **Testing** - [ ] Manual testing has been performed - [ ] The change works as intended and does not break existing functionality - [ ] Screenshots are included where applicable - **Agentic AI Code** - [ ] This PR was not written solely by an AI agent - [ ] If AI was used, the code has undergone human review and manual testing - AI-only PRs may be closed immediately - **Code Review** - [ ] A self-review has been completed - [ ] Code follows the project’s coding standards --- ## Pull Request Title Prefix Prefix your pull request title with **one** of the following: - `BREAKING CHANGE:` Compatibility-impacting changes - `build:` Build system or dependency changes - `ci:` CI workflow updates - `chore:` Cleanup or non-functional changes - `docs:` Documentation updates - `feat:` New features or enhancements - `fix:` Bug fixes - `i18n:` Internationalization or localization - `perf:` Performance improvements - `refactor:` Code restructuring - `style:` Formatting or stylistic changes - `test:` Test additions or corrections - `WIP:` Work in progress --- # Changelog Entry ### Description Slightly improves performance for `/api/models` by ensuring each function is loaded only once from the database. --- ## Changes Made ### `get_groups()` Method **Before** - Queried all groups - Executed `get_group_member_count_by_id()` for each group - Resulted in **N+1 queries** **After** - Uses a single query with: - `LEFT OUTER JOIN` on `GroupMember` - `func.count()` aggregation - Retrieves member counts in one database round-trip --- ### `search_groups()` Method **Before** - Same N+1 query pattern during pagination **After** - Single aggregated query - Member counts included - Pagination (`offset` / `limit`) preserved --- ## Performance Impact - **Database round-trips:** `N + 1` → `1` - **Query complexity:** `O(N+1)` → `O(1)` - **Real-world impact:** Retrieving 100 groups now executes **1 query instead of 101** --- # Contributor License Agreement (CLA) By submitting this pull request, I confirm that I have read and fully agree to the Contributor License Agreement (CLA), and I am providing my contributions under its terms. > **Important:** > Deleting this CLA section will lead to immediate closure of the PR. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-30 01:17:02 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#48999