Skip to content

perf: Cache chat object in upsert_message to avoid redundant DB load#21592

Closed
Classic298 wants to merge 1 commit intoopen-webui:devfrom
Classic298:perf-upsert-chat
Closed

perf: Cache chat object in upsert_message to avoid redundant DB load#21592
Classic298 wants to merge 1 commit intoopen-webui:devfrom
Classic298:perf-upsert-chat

Conversation

@Classic298
Copy link
Collaborator

@Classic298 Classic298 commented Feb 19, 2026

upsert_message_to_chat_by_id_and_message_id was calling get_chat_by_id
twice: once at the top to load the chat, and again at line 512 just to
get user_id for the dual-write to chat_message table.

This function fires many times during streaming responses, so each redundant load deserializes the full conversation JSON blob unnecessarily.

upsert_message: Look at that call count: 17 call sites across socket/main.py and middleware.py. This is called during streaming. It's also called when the user's message is first saved, when tool calls happen, when the final response lands. So this one fires many times during a single streaming response, and each was doing 2 full chat loads instead of 1.

Contributor License Agreement

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.

Note

Deleting the CLA section will lead to immediate closure of your PR and it will not be merged in.

@pr-validator-bot
Copy link

👋 Welcome and Thank You for Contributing!

We appreciate you taking the time to submit a pull request to Open WebUI!

⚠️ Important: Testing Requirements

We've recently seen an increase in PRs that have significant issues:

  • PRs that don't actually fix the bug they claim to fix
  • PRs that don't implement the feature they describe
  • PRs that break existing functionality
  • PRs that are clearly AI-generated without proper testing being done by the author
  • PRs that simply don't work as intended

These untested PRs consume significant time from maintainers and volunteer contributors who review and test PRs in their free time.
Time that could be spent testing other PRs or improving Open WebUI in other ways.

Before marking your PR as "Ready for Review":

Please explicitly confirm:

  1. ✅ You have personally tested ALL changes in this PR
  2. How you tested it (specific steps you took to verify it works)
  3. Visual evidence where applicable (screenshots or videos showing the feature/fix working) - if applicable to your specific PR

If you're not certain your PR works exactly as intended, please leave it in DRAFT mode until you've thoroughly tested it.

Thank you for helping us maintain quality and respecting the time of our community! 🙏

@tjbck
Copy link
Contributor

tjbck commented Feb 19, 2026

Addressed in dev.

@tjbck tjbck closed this Feb 19, 2026
@Classic298 Classic298 deleted the perf-upsert-chat branch February 19, 2026 23:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants