
    j                     ,   d dl Z d dlmZmZ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mZmZ ddlmZmZ d	 Zd
efdZ ej        ddg          d             Z ej        ddg          d             Z ej        ddg          d             ZdS )    N)Responsejsonifyrequest   )ai_analyst_bp)chatchat_with_kbRuizhiApiError)RUIZHI_KB_NAME)SYSTEM_PROMPTbuild_person_analysis_promptbuild_serial_case_prompt)fetch_recent_qincai_casesfind_serial_candidatesc                 @      fd}t           |            d          S )Nc               3     K   	 D ]} |                      dg           }|s|d                              di           }|                     d          }|rdt          j        d|id           dV  |d                              d	          d
k    r nnB# t          $ r5}dt          j        dt	          |          id           dV  Y d }~nd }~ww xY wdV  d S )Nchoicesr   deltacontentdata: Fensure_ascii

finish_reasonstoperrordata: [DONE]

)getjsondumpsr
   str)chunkr   r   r   egens        ;/home/longshao/multi-rider-rag/modules/ai_analyst/routes.pygeneratez_sse_stream.<locals>.generate   s2     	S 	 	))Ir22 
w33))I.. ^]4:y'.BQV#W#W#W]]]]]]1:>>/22f<<E = 	S 	S 	SR4:wA&7eLLLRRRRRRRRRRR	S      s   BB 
C +CCtext/event-streammimetyper   )r$   r&   s   ` r%   _sse_streamr+      s8    ! ! ! ! !  HHJJ)<====    textc                 @      fd}t           |            d          S )Nc               3   P   K   dt          j        d id           dV  dV  d S )Nr   r   Fr   r   r   )r   r    )r-   s   r%   r&   z_sse_text.<locals>.generate%   sD      Ntz9d"3%HHHNNNNNN      r,   r'   r(   r*   )r-   r&   s   ` r%   	_sse_textr0   $   s8    ! ! ! ! ! HHJJ)<====r,   z/chatPOST)methodsc                     t          j        d          } |                     d          pd                                }|                     d          pg }|                     dd          }|st	          dd	i          d
fS dt
          dg}|dd          D ]R}|                    d          dv r9|                    d          r$|                    |d         |d         d           S|                    d|d           	 |dk    r t          rt          |t          gd          }nt          |d          }t          |          S # t          $ r}t          d|           cY d }~S d }~ww xY w)NTforcemessage historymodegeneralr   zmissing message  system)roler   ir=   )user	assistantr   r>   rag)streamu   AI服务调用失败: )r   get_jsonr   stripr   r   appendr   r	   r   r+   r
   r0   )bodyr6   r8   r9   messageshr$   r#   s           r%   ai_chatrH   ,   s   $'''Dxx	""(b//11Ghhy!!'RG88FI&&D :!2344c99!m<<=HSTT] J J55==111aeeI6F6F1OOQvY1Y<HHIIIOOV8899975==^=x.)9$GGGCCx---C3 7 7 75!55666666667s   AE 
E.E)#E.)E.z/analyze/personc                     t          j        d          } |                     d          pd                                }|st	          ddi          dfS dd	lm}  ||          }|r|                    d
          st          d          S t          |          }	 t          |ddd          }t          |          S # t          $ r}t          d|           cY d }~S d }~ww xY w)NTr4   zjhmr7   r   zmissing zjhmr;   r   )assemble_profilebasicu?   未找到该人员信息，请确认证件号码是否正确。   g      ?rA   
max_tokenstemperatureu   AI分析失败: )r   rB   r   rC   r   *modules.profile.services.profile_assemblerrK   r0   r   r   r+   r
   )rE   rJ   rK   person_datarF   r$   r#   s          r%   analyze_personrS   F   s    $'''DHHV"))++D 7011366KKKKKK""4((K \koog66 \Z[[[+K88H18DTsKKK3 1 1 1/A//000000001s   !B= =
C#CC#C#z/analyze/serialc                  Z  	 t          j        d          } |                     dd          }	 t          |          }n)# t          $ r}t          d|           cY d }~S d }~ww xY wt          |          dk     rt          d| d          S t          |          \  }}t          |||          }t          |          t          |          |d			 t          |dd
d          	fd}t           |            d          S # t          $ r}t          d|           cY d }~S d }~ww xY w)NTr4   months   u   查询案件数据失败:    u   近u=   个月内侵财案件不足2起，无法进行串并分析。)
case_count
pair_countused_embeddingrM   g333333?rN   c               3     K   dt          j        did           dV  	 D ]} |                     dg           }|s|d                             di           }|                    d	          }|rdt          j        d	|id           dV  |d                             d
          dk    r nnB# t          $ r5}dt          j        dt	          |          id           dV  Y d }~nd }~ww xY wdV  d S )Nr   metaFr   r   r   r   r   r   r   r   r   r   )r   r    r   r
   r!   )r"   r   r   r   r#   r$   result_metas        r%   r&   z analyze_serial.<locals>.generateu   s^     V4:v{&;%PPPVVVVVVW  	 	E#ii	266G" ! #AJNN7B77E#ii	22G batz9g2FUZ'['['[aaaaaaqz~~o66&@@ A! W W WVtz7CFF*;%PPPVVVVVVVVVVVW$$$$$$s   BB4 4
C3>+C..C3r'   r(   u   串并分析失败: )r   rB   r   r   	Exceptionr0   lenr   r   r   r   r
   )
rE   rU   casesr#   similar_pairsrZ   rF   r&   r$   r]   s
           @@r%   analyze_serialrb   \   s   $'''DXXh""F;)&11 ; ; ;9a99::::::::; 5zzA~~dvdddeee$:5$A$A!M>'}nMMH %jj-((( K58DTsKKK	% 	% 	% 	% 	% 	%" 

-@AAAA 5 5 5333444444445s9   ? 
A%	A A% A%1D 
D*D%D*%D*)r   flaskr   r   r   r7   r   shared.ai.ruizhi_clientr   r	   r
   shared.config.configr   services.prompt_builderr   r   r   services.case_matcherr   r   r+   r!   r0   routerH   rS   rb    r,   r%   <module>rj      s    , , , , , , , , , ,       F F F F F F F F F F / / / / / /         
 U T T T T T T T> > >(>C > > > > Wvh///7 7 0/72 &9991 1 :91* &999+5 +5 :9+5 +5 +5r,   