
    ;g3                     P   S SK JrJrJrJrJrJrJrJr  S SK	J
r
  S SKJr  S SKJr  S SKJrJrJr  S SKrS SKJr  S SKrS SKrS SKJr  S S	KJr  S S
KJr  S SKrS SKJ r!  \!" 5          " S S\5      r" " S S\5      r#\" 5       r$\$RK                  \
S/SS/S/S9  0 rSr&\$RO                  S5      S 5       r(\$RS                  S5      S\*S\4S j5       r+S\4S jr,\$RS                  S5      S\"4S j5       r-\$R]                  S5      S\4S  j5       r/\0S!:X  a  \Rb                  " \$S"S#S$9  gg)%    )FastAPIBackgroundTasks	WebSocketWebSocketDisconnectHTTPExceptionCookieResponseDepends)CORSMiddleware)
AgentClass)Voice)user_storageget_useradd_userN)RateLimitError)DocumentProcessor)List)	BaseModel)load_dotenvc                   &    \ rS rSr% \\   \S'   Srg)UrlsRequest   urls N__name__
__module____qualname____firstlineno__r   str__annotations____static_attributes__r       B   /Users/zhangyaohui/Desktop/AI课程/xiaolang/backend/src/Server.pyr   r      s    
s)Or#   r   c                   &    \ rS rSr% \\   \S'   Srg)FilesRequest   filesr   Nr   r   r#   r$   r&   r&      s    9r#   r&   *T)allow_originsallow_credentialsallow_methodsallow_headersTestUser/c                     #    SS0$ 7f)NmessagezHello World!r   r   r#   r$   rootr2   &   s     ~&&s   z/chatquerybackground_tasksc                     [        5       n[        S[        5        UR                  U 5      n[	        [
        R                  " 5       5      n[        US9nUR                  UR                  US   5        X4S.$ )Nuserid)uidoutput)msgid)
r   r   UID	run_agentr    uuiduuid4r   add_task	get_voice)r3   r4   agentr9   	unique_idvoices         r$   SyncChatrD   *   s^    LEXc
//%
 C DJJL!Ii Eeooc(m<((r#   	websocketc                    #      U R                  S5      I S h  vN   [        R                  " S5      I S h  vN   M:   N$ N! [         a  n[	        SU5         S nAg S nAff = f7f)NPing   u   心跳发送失败)	send_textasynciosleep	Exceptionprint)rE   es     r$   send_heartbeatrO   7   s[     
	%%f-----""" -" 	&*	sK   A%A >A A A A%A  A 
A"AA%A""A%z	/add_urlsrequestc           	        #     [        [        R                  " SS5      SS[        R                  " SS5      S9nUR                  U R                  5      I Sh  vN nU$  N! [
         a  n[        S	S
[        U5       3S9eSnAff = f7f)ur   
添加URL列表到向量数据库

参数:
    request: 包含URL列表的请求对象

返回:
    处理结果
COLLECTION_NAMExiaolang_documentsi   2   PERSIST_DIRz./vector_db)collection_name
chunk_sizechunk_overlappersist_directoryNi  u   添加URL时出错: )status_codedetail)r   osgetenvadd_urlsr   rL   r   r    )rP   	processorresultrN   s       r$   r^   r^   @   s     
U%II&79MN ii}E	
	 !))',,77 8 U6J3q6(4STTUs;   B	AA! AA! B	A! !
B+BBB	z/wsc                 >  #    Sn[         R                  " [        U 5      5        U R                  5       I S h  vN     U R	                  5       I S h  vN nUS:X  a  [        S5        O@ [        5       nUR                  U5        S h  vN nU R                  U5      I S h  vN   M$  Ml   Nr NZ N% N
 OL! [         a    U R                  S5      I S h  vN    Sn Oe[         a  n[        SU5        Sn S nAOIS nAff = fU(       a  Ma  U R                  S5      I S h  vN    N|! [         a    [        S5        Sn Of = fU(       d  U R                  5       I S h  vN    [        S5        g ! U(       d  U R                  5       I S h  vN    [        S5        f = f7f)NFTPongzRate Limit ErrorzAn error occurred:z##END##zWebSocket connection closed)rJ   ensure_futurerO   acceptreceive_textrM   r   run_agent_wsrI   r   rL   r   close)rE   connection_closeddatarA   chunkrN   s         r$   websocket_endpointrk   W   sl    .34



-"//11Dv~f&LE','9'9$'? 9e'11%888   298 (@ & '112DEEE,0)  .2(,%
 )(#--i888 !+, ! !//###+, !//###+,s
  5FB*FD$ B,D$ )B4 B2B.	B2B4 !B0"B4 (D$ *F,D$ .B20B4 2B4 3D$ 4C=CC=D$ E- 	C=%C83D$ 7E- 8C==
D$ 	D$ D D$ $D>;E- =D>>E- FEF-FF	FF__main__	localhosti@  )hostport)2fastapir   r   r   r   r   r   r	   r
   fastapi.middleware.corsr   
src.Agentsr   	src.Voicer   src.Storager   r   r   uvicornopenair   r=   rJ   
src.AddDocr   typingr   pydanticr   r\   dotenvr   _load_dotenvr   r&   appadd_middlewarer;   getr2   postr    rD   rO   r^   rE   rk   r   runr   r#   r$   <module>r      sN   u u u 2 !  6 6  !   (   	 . ) 9  i   %%%   ' ' '	)C 	)? 	) 	)I  +UK U U, u!-	 !- !-F zKK+D1 r#   