Skip to content

Commit a4f9dfc

Browse files
committed
fix: transaction error after run assistant chat
1 parent feece9c commit a4f9dfc

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

backend/apps/terminology/curd/terminology.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -390,10 +390,23 @@ def save_embeddings(session: Session, ids: List[int]):
390390
FROM terminology AS child
391391
) TEMP
392392
WHERE similarity > {settings.EMBEDDING_TERMINOLOGY_SIMILARITY} AND oid = :oid
393+
AND (specific_ds = false OR specific_ds IS NULL)
394+
ORDER BY similarity DESC
395+
LIMIT {settings.EMBEDDING_TERMINOLOGY_TOP_COUNT}
396+
"""
397+
398+
embedding_sql_with_datasource = f"""
399+
SELECT id, pid, word, similarity
400+
FROM
401+
(SELECT id, pid, word, oid, specific_ds, datasource_ids,
402+
( 1 - (embedding <=> :embedding_array) ) AS similarity
403+
FROM terminology AS child
404+
) TEMP
405+
WHERE similarity > {settings.EMBEDDING_TERMINOLOGY_SIMILARITY} AND oid = :oid
393406
AND (
394-
(:datasource IS NULL AND (specific_ds = false OR specific_ds IS NULL))
395-
OR
396-
(:datasource IS NOT NULL AND ((specific_ds = false OR specific_ds IS NULL) OR (specific_ds = true AND datasource_ids IS NOT NULL AND datasource_ids @> jsonb_build_array(:datasource))))
407+
(specific_ds = false OR specific_ds IS NULL)
408+
OR
409+
(specific_ds = true AND datasource_ids IS NOT NULL AND datasource_ids @> jsonb_build_array(:datasource))
397410
)
398411
ORDER BY similarity DESC
399412
LIMIT {settings.EMBEDDING_TERMINOLOGY_TOP_COUNT}
@@ -447,14 +460,21 @@ def select_terminology_by_word(session: SessionDep, word: str, oid: int, datasou
447460

448461
embedding = model.embed_query(word)
449462

450-
results = session.execute(text(embedding_sql), {'embedding_array': str(embedding), 'oid': oid,
451-
'datasource': datasource}).fetchall()
463+
with session.begin():
464+
if datasource is not None:
465+
results = session.execute(text(embedding_sql_with_datasource),
466+
{'embedding_array': str(embedding), 'oid': oid,
467+
'datasource': datasource}).fetchall()
468+
else:
469+
results = session.execute(text(embedding_sql),
470+
{'embedding_array': str(embedding), 'oid': oid}).fetchall()
452471

453-
for row in results:
454-
_list.append(Terminology(id=row.id, word=row.word, pid=row.pid))
472+
for row in results:
473+
_list.append(Terminology(id=row.id, word=row.word, pid=row.pid))
455474

456475
except Exception:
457476
traceback.print_exc()
477+
session.rollback()
458478

459479
_map: dict = {}
460480
_ids: list[int] = []

0 commit comments

Comments
 (0)