
    Ii(                     d    d dl Z d dlZd dlZd dlmZ ddlmZ  e         G d d      Z e       Zy)    N)load_dotenv   )Configc                       e Zd Zd ZddZy)GeminiServicec                 p    t               | _        t        j                  d      | _        dddddd| _        y )NGEMINI_API_KEYzXhttps://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContentzVhttps://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-pro:generateContentzXhttps://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContentzVhttps://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent)zgemini-2.0-flashzgemini-2.0-progemini-2.5-flashzgemini-2.5-progemini)r   configosgetenvapi_keymodels)selfs    :/srv/www/ollama/chat-ollama/src/services/gemini_service.py__init__zGeminiService.__init__
   s4    hyy!12 zv zvp
    Nc           
         	 ddi}|r| d| n|}| j                   j                  || j                   d         }	dd|igig|||dd}
t        j                  |	 d	| j                   ||

      }|j                          |j                         }t        dt        j                  |d              d|vst        |d         dk(  rvd|v rO|d   }|j                  dd      }|j                  dg       }t        d| dt        j                  |d             t        dt        j                  |d             |d   d   }|j                  dd      }|dv r8|j                  dg       }t        d| dt        j                  |d             d|vr#t        dt        j                  |d             |d   }d|vst        |d         dk(  r#t        dt        j                  |d             |d   d   }d|vr#t        dt        j                  |d             |d   }|g dd S # t        j                  j                  $ r;}dd!lm}  |d"d#d$d%t        |       d#&       t        d't        |             d#}~wt        $ r;}dd!lm}  |d"d#d$d(t        |       d#&       t        d)t        |             d#}~ww xY w)*a  
        Generate a response using the Gemini API.
        
        Args:
            message (str): The user's message
            system_prompt (str, optional): System prompt to guide the model
            temperature (float): Controls randomness (0.0 to 1.0)
            max_tokens (int): Maximum number of tokens to generate
            top_p (float): Controls diversity via nucleus sampling
            
        Returns:
            dict: Response containing the generated text and metadata
        zContent-Typezapplication/jsonz

r
   partstext)temperaturemaxOutputTokenstopP)contentsgenerationConfigz?key=)headersjsonz)[DEBUG GEMINI] Resposta completa da API: r   )indent
candidatesr   promptFeedbackblockReasonUNKNOWNsafetyRatingsu"   Gemini bloqueou o prompt. Razão: z
. Safety: z"No candidates in Gemini response: finishReason)SAFETY
RECITATIONOTHERzGemini finalizou por 'z'. Safety: contentzNo content in candidate: u5   Content sem 'parts' (possível bloqueio). Candidate: zNo text in part: T)responsecontextdone)send_discord_audit_logu   Falha de integração externaNGeminiz"Erro ao comunicar com Gemini API: )actionuser_idobject_typedetails
ip_addressz%Error communicating with Gemini API: z Erro inesperado com Gemini API: z"Unexpected error with Gemini API: )r   getrequestspostr   raise_for_statusr   printdumpslen	Exception
exceptionsRequestExceptionsrc.discord.discord_webhookr-   str)r   messagesystem_promptr   
max_tokenstop_pmodelr   full_promptapi_urldatar*   resultfeedbackblock_reasonsafety_ratings	candidatefinish_reasonr)   partgenerated_texter-   s                          r   generate_responsezGeminiService.generate_response   s]   ^	K 2G >K]O4y9PWK kkooeT[[9K-LMG
   &" $/'1!%D"  }})5/H %%']]_F =djjXY>Z=[\] 6)S1E-F!-K#v-%&67H#+<<y#IL%-\\/2%FN#&HV`aeakaklz  DE  bF  aG  %H  I  I"DTZZPV_`EaDb cdd|,Q/I &MM.)DM AA!*!C"8{SWS]S]^luvSwRx yzz	)";DJJyYZ<[;\ ]^^	*Gg%WW-=)>!)C"WX\XbXbcluvXwWx yzz7#A&DT!"3DJJtA4N3O PQQ!&\N*  ""33 		NJ"6$<SVHE CCF8LMM 		KJ"6$:3q6(C @QIJJ		Ks$   H/H2 2K6JK6KK)Ngffffff?i  g?r
   )__name__
__module____qualname__r   rQ    r   r   r   r   	   s    	
lKr   r   )	r5   r   r   dotenvr   r   r   r   gemini_servicerU   r   r   <module>rX      s1      	   xK xKt r   