
    )$/i                         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rSSK	J	r	  SSK
J
r
  \R                  " \5      r " S	 S
5      r\" 5       rg)    N)HTTPAdapter)Retry   )Config   )gemini_service)chatgpt_servicec                   :    \ rS rSrS rS rSS jr\S 5       rSr	g)	ChatService   c                 L    [        5       U l        U R                  5       U l        g )N)r   config_create_sessionsession)selfs    RC:\Users\fernando.barreto\Documents\GitLab\ollama\chat-ollama\src\services\chat.py__init__ChatService.__init__   s    h++-    c                 B   [         R                  " 5       n[        U R                  R                  U R                  R
                  U R                  R                  U R                  R                  S9n[        US9nUR                  SU5        UR                  SU5        U$ )N)totalbackoff_factorstatus_forcelistallowed_methods)max_retrieszhttp://zhttps://)
requestsSessionr   r   RETRY_TOTALRETRY_BACKOFF_FACTORRETRY_STATUS_FORCELISTRETRY_ALLOWED_METHODSr   mount)r   r   retry_strategyadapters       r   r   ChatService._create_session   s{    ""$++));;;;![[?? KK==	
 .9i)j'*r   Nc           	          U(       aG  UR                  S5      (       a1  [        R                  SU 35        [        R                  " UUSSSUS9$ U(       aZ  UR                  S5      (       d  SUR                  5       ;   a0  [        R                  S	U 35        [        R                  " UUSSSS
9$ U R                  R                   U R                  R                   3nU=(       d    U R                  R                  SU=(       d    SS.SUS./U=(       d    / UU R                  R                  U R                  R                  U R                  R                  S.S.n[        R                  SU 35        [        R                  SU 35        U R                  R!                  UUU R                  R"                  US9nUR%                  5         U(       a  Sn	UR'                  5        H@  n
U
(       d  M   [(        R*                  " U
5      nSU;   a  SUS   ;   a  XS   S   -  n	M>  M@  MB     [        R                  S5        [        R                  SU	 35        U	/ SS.$ UR)                  5       n[        R                  S5        [        R                  SU 35        SU;  d	  SUS   ;  a  [/        S5      eUS   S   UR1                  S/ 5      SS.$ ! [(        R,                   a     GM  f = f! [2        R4                  R6                   a!    [        R9                  S5        [/        S5      e[2        R4                  R:                   a!    [        R9                  S 5        [/        S!5      e[2        R4                  R<                   a=  n[        R9                  S"[?        U5       35        [/        S#[?        U5       35      eS nAf[.         a=  n[        R9                  S$[?        U5       35        [/        S%[?        U5       35      eS nAff = f)&NgeminizUsing Gemini model: gffffff?i  g?)messagesystem_prompttemperature
max_tokenstop_pmodelgptchatgptzUsing ChatGPT model: )r(   r)   r*   r+   r,   systemzYou are a helpful AI assistant.)rolecontentuser)r*   r,   top_k)r-   messagescontextstreamoptionszSending request to Ollama API: zRequest payload: )jsontimeoutr7    r(   r2   z8Successfully received streaming response from Ollama APIz
Response: T)responser6   donez.Successfully received response from Ollama APIz'Invalid response format from Ollama APIr6   zRequest to API timed outz(The request timed out. Please try again.zFailed to connect to APIzBCould not connect to the AI service. Please check your connection.zError in API request: z)Error communicating with the AI service: zUnexpected error: zAn unexpected error occurred: ) 
startswithloggerinfor   generate_responselowerr	   r   
OLLAMA_URLCHAT_ENDPOINTOLLAMA_MODELOLLAMA_TEMPERATUREOLLAMA_TOP_POLLAMA_TOP_Kdebugr   postOLLAMA_TIMEOUTraise_for_status
iter_linesr9   loadsJSONDecodeError	Exceptiongetr   
exceptionsTimeouterrorConnectionErrorRequestExceptionstr)r   r(   r-   r)   r6   r7   urlpayloadr<   full_responselinechunkresultes                 r   send_messageChatService.send_message   s   `	G))(3325':;%77#"/ ##  %**511Y%++-5O3E7;<&88#"/ ##  [[++,T[[-F-F,GHC :$++":":%-2dCde#8 #=b #';;#A#A![[55![[55G KK9#?@LL,WI67||((22	 ) H %%' "$//1Dt%$(JJt$4E(E1i5CS6S -y1A)1L L 7T1	 2 VWz-9: !.!   "LMz&23F*ivi?P.P#$MNN !'y 1) <%zz)R8  '  $33 %$%2 ""** 	HLL34FGG""22 	bLL34`aa""33 	RLL1#a&:;GAxPQQ 	GLL-c!fX67<SVHEFF	Gs^   AK- A K- 1D>K- 4/K#:K- A2K- K*%K- )K**K- -BP8N==P
8PPc                      SSK Jn   SSKJn  U R                  R                  UR                  S9R                  U R                  R                  5       5      R                  5       $ )u"   Retorna os chats do usuário atualr   )Chat)current_user)user_id)
src.modelsrb   flask_loginrc   query	filter_byidorder_by
created_atdescall)rb   rc   s     r   get_user_chatsChatService.get_user_chats   sG     	$,zz##LOO#<EEdooFZFZF\]aaccr   )r   r   )NNNF)
__name__
__module____qualname____firstlineno__r   r   r_   staticmethodrn   __static_attributes__ r   r   r   r      s*    .aGF d dr   r   )r   requests.adaptersr   urllib3.util.retryr   r   r   loggingr9   r   r	   	getLoggerrp   r?   r   chat_servicerv   r   r   <module>r|      sE     ) $    * ,			8	$zd zdx }r   