o
    z­jæ  ã                
   @   s,  d dl mZmZ d dlmZmZmZ d dlm	Z	m
Z
 d dlmZmZmZmZ d dlZd dlmZ eƒ Zeƒ ZejrAejdkrAejndZdZerozeed� eejƒZW n eyn Z zed	eeƒ› �ƒ W Y dZ[ndZ[ww i ZG d
d„ de	ƒZG dd„ de	ƒZejdedd�edƒfdefdd„ƒZ dS )é    )Ú	configureÚGenerativeModel)Ú	APIRouterÚHTTPExceptionÚBody)Ú	BaseModelÚField)ÚOptionalÚDictÚAnyÚListN)Úget_settingsÚYOUR_GEMINI_API_KEY_NOT_SET)Úapi_keyzFailed to initialize Gemini: c                   @   sT   e Zd ZU edddd�Zeed< eddd�Zee ed	< ed
dd�Z	ee ed< dS )Ú	ChatInput.é   z$User's message to the chat assistant)Ú
min_lengthÚdescriptionÚmessageNz'Session ID for continuing conversations)r   Ú
session_idÚenz Language code (en, hi, mr, etc.)Úlanguage)
Ú__name__Ú
__module__Ú__qualname__r   r   ÚstrÚ__annotations__r   r	   r   © r   r   úF/var/www/html/CropPilot/backend/app/api/endpoints/multilingual_chat.pyr      s   
 r   c                   @   s2   e Zd ZU eed< eed< dZeed< eed< dS )ÚChatResponseÚresponser   zgemini-2.5-flashÚ
model_usedÚhistoryN)r   r   r   r   r   r!   Úlistr   r   r   r   r   #   s
   
 r   z/messageéÈ   )Úresponse_modelÚstatus_code.Ú
chat_inputc              
   Ã   sî   �t s	tddd�‚zV| jptt ¡ ƒ}t |g ¡}|s+| ddd| j	› d�igdœ¡ | dd| j
igdœ¡ t j|d	�}| | j
¡}|j}| d
d|igdœ¡ |t|< t||tƒ j|d�W S  tyv } ztddt|ƒ› �d�‚d}~ww )z€
    Multilingual Gemini chat endpoint using google-generativeai SDK.
    Stores and uses conversation history per session.
    iô  zGemini model not initialized)r&   ÚdetailÚuserÚtextae  You are CropPilot, a professional multilingual AI assistant for Indian agriculture. You ONLY answer questions related to farming, crops, weather, agri-markets, government schemes, or rural livelihoods. If a question is not about agriculture, politely refuse and ask the user to ask a farming-related question.
Always answer in the user's selected language: z‹. Never answer in English unless the user selected English.
Be friendly, clear, and provide detailed, actionable advice for Indian farmers.)ÚroleÚparts)r"   Úmodel)r    r   r!   r"   zGemini error: N)Úgenai_modelr   r   r   ÚuuidÚuuid4Úconversation_historiesÚgetÚappendr   r   Ú
start_chatÚsend_messager*   r   r   ÚGEMINI_MODELÚ	Exception)r'   r   r"   Úchat_sessionr    Úai_responseÚer   r   r   Úchat_message)   s>   €ýþþü€ÿr;   )!Úgoogle.generativeair   Úgenai_configurer   Úfastapir   r   r   Úpydanticr   r   Útypingr	   r
   r   r   r/   Úapp.core.configr   ÚrouterÚ	_settingsÚGEMINI_API_KEYr.   r6   r7   r:   Úprintr   r1   r   r   Úpostr;   r   r   r   r   Ú<module>   s8    ÿ
þü
€ÿ