mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-27 19:25:15 +02:00
perf(kb-persistence): offload sync embed_texts to thread
_create_document and _update_document run on the chat critical path when the filesystem subagent writes via the user's chat turn. Both called embed_texts synchronously inside an async coroutine, blocking the event loop for the duration of the embed.
This commit is contained in:
parent
4fa85a9a94
commit
52d425f170
1 changed files with 5 additions and 4 deletions
|
|
@ -32,6 +32,7 @@ exact same routine when ``aafter_agent`` was skipped (e.g. client disconnect).
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
from datetime import UTC, datetime
|
from datetime import UTC, datetime
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
@ -249,11 +250,11 @@ async def _create_document(
|
||||||
session.add(doc)
|
session.add(doc)
|
||||||
await session.flush()
|
await session.flush()
|
||||||
|
|
||||||
summary_embedding = embed_texts([content])[0]
|
summary_embedding = (await asyncio.to_thread(embed_texts, [content]))[0]
|
||||||
doc.embedding = summary_embedding
|
doc.embedding = summary_embedding
|
||||||
chunks = chunk_text(content)
|
chunks = chunk_text(content)
|
||||||
if chunks:
|
if chunks:
|
||||||
chunk_embeddings = embed_texts(chunks)
|
chunk_embeddings = await asyncio.to_thread(embed_texts, chunks)
|
||||||
session.add_all(
|
session.add_all(
|
||||||
[
|
[
|
||||||
Chunk(document_id=doc.id, content=text, embedding=embedding)
|
Chunk(document_id=doc.id, content=text, embedding=embedding)
|
||||||
|
|
@ -295,13 +296,13 @@ async def _update_document(
|
||||||
search_space_id,
|
search_space_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
summary_embedding = embed_texts([content])[0]
|
summary_embedding = (await asyncio.to_thread(embed_texts, [content]))[0]
|
||||||
document.embedding = summary_embedding
|
document.embedding = summary_embedding
|
||||||
|
|
||||||
await session.execute(delete(Chunk).where(Chunk.document_id == document.id))
|
await session.execute(delete(Chunk).where(Chunk.document_id == document.id))
|
||||||
chunks = chunk_text(content)
|
chunks = chunk_text(content)
|
||||||
if chunks:
|
if chunks:
|
||||||
chunk_embeddings = embed_texts(chunks)
|
chunk_embeddings = await asyncio.to_thread(embed_texts, chunks)
|
||||||
session.add_all(
|
session.add_all(
|
||||||
[
|
[
|
||||||
Chunk(document_id=document.id, content=text, embedding=embedding)
|
Chunk(document_id=document.id, content=text, embedding=embedding)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue