
    Ii3                         d dl Z d dlmZ d dlmZ ddlmZ d dlZd dlZddl	m	Z	 ddl
m
Z
  ej                  e      Z G d	 d
      Z e       Zy)    N)HTTPAdapter)Retry   )Config   )gemini_service)chatgpt_servicec                   0    e Zd Zd Zd ZddZed        Zy)ChatServicec                 L    t               | _        | j                         | _        y )N)r   config_create_sessionsession)selfs    0/srv/www/ollama/chat-ollama/src/services/chat.py__init__zChatService.__init__   s    h++-    c                 L   t        j                         }t        | j                  j                  | j                  j
                  | j                  j                  | j                  j                        }t        |      }|j                  d|       |j                  d|       |S )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   zChatService._create_session   s{    ""$++));;;;![[?? KK==	
 .9i)j'*r   Nc                    	 |rD|j                  d      r3t        j                  d|        t        j                  ||ddd|      S |rU|j                  d      sd|j                         v r2t        j                  d	|        t        j                  ||ddd
      S | j                  j                   | j                  j                   }|xs | j                  j                  d|xs ddd|dg|xs g || j                  j                  | j                  j                  | j                  j                  dd}t        j                  d|        t        j                  d|        | j                  j!                  ||| j                  j"                  |      }|j%                          |ryd}	|j'                         D ]1  }
|
s	 t)        j*                  |
      }d|v rd|d   v r|	|d   d   z  }	3 t        j                  d       t        j                  d|	        |	g ddS |j)                         }t        j                  d       t        j                  d|        d|vsd|d   vrt/        d      |d   d   |j1                  dg       ddS # t(        j,                  $ r Y w xY w# t2        j4                  j6                  $ r! t        j9                  d       t/        d      t2        j4                  j:                  $ r! t        j9                  d        t/        d!      t2        j4                  j<                  $ r=}t        j9                  d"t?        |              t/        d#t?        |             d }~wt.        $ r=}t        j9                  d$t?        |              t/        d%t?        |             d }~ww xY w)&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timeoutr4    r%   r/   z8Successfully received streaming response from Ollama APIz
Response: T)responser3   donez.Successfully received response from Ollama APIz'Invalid response format from Ollama APIr3   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_linesr6   loadsJSONDecodeError	Exceptiongetr   
exceptionsTimeouterrorConnectionErrorRequestExceptionstr)r   r%   r*   r&   r3   r4   urlpayloadr9   full_responselinechunkresultes                 r   send_messagezChatService.send_message   s   `	G))(325':;%77#"/ ##  %**5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 %%' "$//1 %D%$(JJt$4E(E1i5CS6S -y1A)1L L% 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J3 AJ3 D*J3 +J64J3 +A.J3 J0-J3 /J00J3 3BO	8N  O	8OO	c                      ddl m}  ddlm} | j                  j                  |j                        j                  | j                  j                               j                         S )u"   Retorna os chats do usuário atualr   )Chat)current_user)user_id)
src.modelsr^   flask_loginr_   query	filter_byidorder_by
created_atdescall)r^   r_   s     r   get_user_chatszChatService.get_user_chats   sG     	$,zz##LOO#<EEdooFZFZF\]aaccr   )NNNF)__name__
__module____qualname__r   r   r\   staticmethodrj    r   r   r   r      s*    .aGF d dr   r   )r   requests.adaptersr   urllib3.util.retryr   r   r   loggingr6   r   r	   	getLoggerrk   r<   r   chat_servicero   r   r   <module>ru      sG     ) $    * ,			8	$zd zdx }r   