
    Xj                     0   d dl mZmZmZmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ  ee          Z e            Ze                     d           eed           ee           e ed                    fdedededefd                        Z!e                     d           eed           ee           e ed                    fdedededefd                        Z"dS )    )	APIRouterDependsHTTPExceptionRequest)Session)require_read)EmbeddingGenerationErrorVectorSearchError)get_translator)get_db)KnowledgeBaseKnowledgeDocumentModel)KnowledgeCategory)User)SearchRequest)
get_loggerlog_performancez/searchi  )threshold_msknowledge_basesrequestsearchdbcurrent_userc                 0   t          |           }|j        dk    r|                    t                                        t          j        dk    t          j                  }ddlm}  |            }|r|                    t          j
                                      t          t          j        t          j
        k                                  t          j        |k                                              }d |D             }|r3|                    t          j                            |                    }n#|                    t          j
        dk              }t          j                            |j                  t          j                            |j                  z  }	|                    |	          }|j        r(|                    t          j        |j        k              }|                    |j                                                  }
d |
D             t-          |
          dS |j        d	k    r8	 dd
lm} ddlm}  |            }d }|j        ro|                    t                                        t          j
        |j        k                                              }ddlm}  |            }|r.|r,t9          |d          r|j        |k    rt;          dd          |r|j        r|j                                        r`|                    t@                                        t@          j
        tC          |j                  k                                              }nR|                    t@                                        t@          j        |j        k                                              }|r|j
        }|sa|                    t@                                        t@          j"        dk    t@          j#                                                  }|r|j
        }|sg d|$                    d          dS |%                    |j        ||          }|stM          d           |||j                  }i }|j        rc|                    t          j
                                      t          j        |j        k                                              }d |D             }|'                    ||j        dz  d|          }g }tQ                      }g }|D ]\  }}|)                    d          }|j        r|)                    d          |j        k    r@||v rE|*                    |           |+                    |||f           t-          |          |j        k    r n|rd |D             }|                    t                                        t          j
                            |                    }|j,        dv r	 |                                }d |D             } |D ]v\  }}}| )                    |          }!|!rY|+                    |!j
        |!j        |!j-        p|!j        d d         |)                    d d!          |!j        ||!j.        d"           w|t-          |          dS # td          $ r  tL          $ r  tf          $ r}"dd l4}#t^          0                    |j        %          5                    d&|"            t^          5                    d'|#6                                            te          d(to          |"                     d d }"~"ww xY wt;          d)|$                    d*                    )+Nkeyword	publishedr   )get_current_tenant_idc                     g | ]
}|d          S r    ).0cids     C/lsinfo/ai/hellotax_ai/base_platform/app/api/v1/knowledge/search.py
<listcomp>z$search_knowledge.<locals>.<listcomp>)   s    "I"I"Ic3q6"I"I"I    c                 n    g | ]2}|j         |j        |j        p|j        d d         |j        |j        d3S )N   )idtitlesummarycategory_id
created_at)r*   r+   r,   contentr-   r.   r"   docs     r$   r%   z$search_knowledge.<locals>.<listcomp>6   sZ     	 	 	  & Y"{?ck$3$.?#&?"%. 	 	 	r&   )resultstotalsemantic)get_embedding_factory)get_vector_store	tenant_idi  zKnowledge base not found)status_codedetail	embeddingz&knowledge.no_embedding_model_available)r2   r3   message)textr   model_idz"Failed to generate query embedding)knowledge_base_idc                     g | ]	}|j         
S r!   r*   r0   s     r$   r%   z$search_knowledge.<locals>.<listcomp>w   s    ;;;c36;;;r&      g      ?)query_embeddingk	thresholdfilter_dictdocument_idr-   c                     g | ]
}|d          S r    r!   )r"   items     r$   r%   z$search_knowledge.<locals>.<listcomp>   s    @@@t47@@@r&   )customer_usercustomer_adminc                     i | ]
}|j         |S r!   r@   r0   s     r$   
<dictcomp>z$search_knowledge.<locals>.<dictcomp>   s    7773363777r&   r)   r<    )r*   r+   r,   r/   r-   scorer.   )queryresult_countzSemantic search completed)rO   zVector search failed: zTraceback: u   向量搜索失败: i  z!knowledge.unsupported_search_type)8r   search_typerO   r   filterstatus	is_publicapp.core.tenant_contextr   r   r*   joinr   r>   r7   allr-   in_r+   containsr/   limitlen3app.services.llm.backends.embedding_backend_factoryr5   )app.services.storage.vector_store_factoryr6   firsthasattrr   codeisdigitr   inttype	is_activetgenerate_embeddingr	   similarity_searchsetgetaddappendroler,   r.   loggerbindinfor
   	Exception	tracebackerror
format_excstr)$r   r   r   r   re   rO   r   r7   tenant_category_idssearch_filter	documentsr5   r6   embedding_factoryvector_model_idkbvector_modeldefault_modelrB   vector_storerE   category_docsdoc_idssimilar_resultsr2   seen_doc_idsdoc_ids_to_fetchdoc_dictrN   doc_id
docs_querydocsdoc_mapr1   erq   s$                                       r$   search_knowledger      s    	wAY&&*++22$35F5P
 
 	BAAAAA))++	 	A*-..m%6%HML\%\]]/9<==	   #J"I5H"I"I"I" A%6%B%F%FGZ%[%[\\%6%9R%?@@)/88L
 
%..v|<<= ]++ 	VLL!2!>&BT!TUUEKK--1133		 	 %	 	 	 ^^
 
 	
 
	z	)	)i	OaaaaaaRRRRRR 5 5 7 7"O' :HH]++VM,0HHIIUWW 
 JIIIII1133	 `) `r;// `BLI4M4M+D^____ :"' :w(( ]')xx'='=eh#bg,,>V'W'W']']'_'_')xx'='=ejBG>S'T'T'Z'Z'\'\# :*6/" 7HHUOOVEJ+5uGGUWW 
 ! 7&3&6O" ! ss#KLL  
 0BB\b? C  O # U./STTT++B&BZ[[[LK! <HH.122V-9V=OOPPSUU 
 <;];;;*<< /,"'	 =  O G55L!#2 	 	%!m44% (,,}*E*EI[*[*[\))  ((( ''5(ABBB'((FL88E 9 @@/?@@@XX&788??@Q@T@X@XY`@a@abb
$(KKK!~~''77$777/?  +FHe!++f--C &)f),+.;+K#+dsd:K+3<<+C+C/2)..1n 
 
 
  'W>>> ! 	 	 	' 	 	 	 	O 	O 	OKKflK++112N12N2NOOOLL?y';';'='=??@@@#$C3q66$C$CDD$N	O ACC8[4\4\]]]]s!   =H[ 
I:[ ]1#B	],,]1z/search/vectorc                 R    t          |            d|_        t          | |||          S )Nr4   )r   rQ   r   )r   r   r   r   s       r$   vector_searchr      s.     7#FGVR>>>r&   N)#fastapir   r   r   r   sqlalchemy.ormr   app.api.permissionsr   app.core.exceptionsr	   r
   app.core.i18nr   app.db.sessionr   
app.modelsr   r   r   app.models.knowledge_baser   app.models.userr   app.schemas.knowledge_documentr   common_loggingr   r   __name__rm   routerpostr   r   r!   r&   r$   <module>r      sW   > > > > > > > > > > > > " " " " " " , , , , , , K K K K K K K K ( ( ( ( ( ( ! ! ! ! ! ! > > > > > > > > > > 7 7 7 7 7 7             8 8 8 8 8 8 6 6 6 6 6 6 6 6	H			 Yd+++ '&// .?!@!@AA	Z^ Z^Z^Z^ 	Z^ 	Z^ Z^ Z^ ,+ Z^z d+++ '&// .?!@!@AA	? ??? 	? 	? ? ? ,+ ? ? ?r&   