2024-01-02 07:29:18 +00:00
|
|
|
import datetime
|
|
|
|
|
import time
|
2024-01-12 04:34:01 +00:00
|
|
|
|
2024-01-02 07:29:18 +00:00
|
|
|
import click
|
2026-03-19 06:48:29 +00:00
|
|
|
from sqlalchemy import select, text
|
2025-08-08 01:07:59 +00:00
|
|
|
from sqlalchemy.exc import SQLAlchemyError
|
2024-01-02 07:29:18 +00:00
|
|
|
|
2024-02-06 05:21:13 +00:00
|
|
|
import app
|
2024-07-12 08:51:43 +00:00
|
|
|
from configs import dify_config
|
2024-02-06 05:21:13 +00:00
|
|
|
from extensions.ext_database import db
|
|
|
|
|
from models.dataset import Embedding
|
|
|
|
|
|
2024-01-02 07:29:18 +00:00
|
|
|
|
2024-08-15 04:54:05 +00:00
|
|
|
@app.celery.task(queue="dataset")
|
2024-01-02 07:29:18 +00:00
|
|
|
def clean_embedding_cache_task():
|
2024-08-15 04:54:05 +00:00
|
|
|
click.echo(click.style("Start clean embedding cache.", fg="green"))
|
2024-11-01 09:25:31 +00:00
|
|
|
clean_days = int(dify_config.PLAN_SANDBOX_CLEAN_DAY_SETTING)
|
2024-01-02 07:29:18 +00:00
|
|
|
start_at = time.perf_counter()
|
|
|
|
|
thirty_days_ago = datetime.datetime.now() - datetime.timedelta(days=clean_days)
|
|
|
|
|
while True:
|
|
|
|
|
try:
|
2026-03-19 06:48:29 +00:00
|
|
|
embedding_ids = db.session.scalars(
|
|
|
|
|
select(Embedding.id)
|
2025-07-23 16:57:45 +00:00
|
|
|
.where(Embedding.created_at < thirty_days_ago)
|
2024-08-15 04:54:05 +00:00
|
|
|
.order_by(Embedding.created_at.desc())
|
|
|
|
|
.limit(100)
|
2026-03-19 06:48:29 +00:00
|
|
|
).all()
|
2025-08-08 01:07:59 +00:00
|
|
|
except SQLAlchemyError:
|
|
|
|
|
raise
|
2024-07-19 17:29:25 +00:00
|
|
|
if embedding_ids:
|
2024-07-20 01:04:21 +00:00
|
|
|
for embedding_id in embedding_ids:
|
2024-08-15 04:54:05 +00:00
|
|
|
db.session.execute(
|
|
|
|
|
text("DELETE FROM embeddings WHERE id = :embedding_id"), {"embedding_id": embedding_id}
|
|
|
|
|
)
|
2024-07-19 17:29:25 +00:00
|
|
|
|
|
|
|
|
db.session.commit()
|
|
|
|
|
else:
|
|
|
|
|
break
|
2024-01-02 07:29:18 +00:00
|
|
|
end_at = time.perf_counter()
|
2025-07-25 02:32:48 +00:00
|
|
|
click.echo(click.style(f"Cleaned embedding cache from db success latency: {end_at - start_at}", fg="green"))
|