Team Ai
Apppublic

Underground-Digital/Workflow-Engine

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
index_tool_callback_handler.py83 linesDownload Raw Back to callback_handler
1from core.app.apps.base_app_queue_manager import AppQueueManager, PublishFrom2from core.app.entities.app_invoke_entities import InvokeFrom3from core.app.entities.queue_entities import QueueRetrieverResourcesEvent4from core.rag.models.document import Document5from extensions.ext_database import db6from models.dataset import DatasetQuery, DocumentSegment7from models.model import DatasetRetrieverResource8 9 10class DatasetIndexToolCallbackHandler:11    """Callback handler for dataset tool."""12 13    def __init__(14        self, queue_manager: AppQueueManager, app_id: str, message_id: str, user_id: str, invoke_from: InvokeFrom15    ) -> None:16        self._queue_manager = queue_manager17        self._app_id = app_id18        self._message_id = message_id19        self._user_id = user_id20        self._invoke_from = invoke_from21 22    def on_query(self, query: str, dataset_id: str) -> None:23        """24        Handle query.25        """26        dataset_query = DatasetQuery(27            dataset_id=dataset_id,28            content=query,29            source="app",30            source_app_id=self._app_id,31            created_by_role=(32                "account" if self._invoke_from in {InvokeFrom.EXPLORE, InvokeFrom.DEBUGGER} else "end_user"33            ),34            created_by=self._user_id,35        )36 37        db.session.add(dataset_query)38        db.session.commit()39 40    def on_tool_end(self, documents: list[Document]) -> None:41        """Handle tool end."""42        for document in documents:43            query = db.session.query(DocumentSegment).filter(44                DocumentSegment.index_node_id == document.metadata["doc_id"]45            )46 47            if "dataset_id" in document.metadata:48                query = query.filter(DocumentSegment.dataset_id == document.metadata["dataset_id"])49 50            # add hit count to document segment51            query.update({DocumentSegment.hit_count: DocumentSegment.hit_count + 1}, synchronize_session=False)52 53            db.session.commit()54 55    def return_retriever_resource_info(self, resource: list):56        """Handle return_retriever_resource_info."""57        if resource and len(resource) > 0:58            for item in resource:59                dataset_retriever_resource = DatasetRetrieverResource(60                    message_id=self._message_id,61                    position=item.get("position") or 0,62                    dataset_id=item.get("dataset_id"),63                    dataset_name=item.get("dataset_name"),64                    document_id=item.get("document_id"),65                    document_name=item.get("document_name"),66                    data_source_type=item.get("data_source_type"),67                    segment_id=item.get("segment_id"),68                    score=item.get("score") if "score" in item else None,69                    hit_count=item.get("hit_count") if "hit_count" in item else None,70                    word_count=item.get("word_count") if "word_count" in item else None,71                    segment_position=item.get("segment_position") if "segment_position" in item else None,72                    index_node_hash=item.get("index_node_hash") if "index_node_hash" in item else None,73                    content=item.get("content"),74                    retriever_from=item.get("retriever_from"),75                    created_by=self._user_id,76                )77                db.session.add(dataset_retriever_resource)78                db.session.commit()79 80        self._queue_manager.publish(81            QueueRetrieverResourcesEvent(retriever_resources=resource), PublishFrom.APPLICATION_MANAGER82        )83