Ë
    sUhÆ]  ã                   ó¤  — d Z ddlZddlmZmZmZmZmZmZ ddl	Z	ddl
Z
ddlZddlmZ ddlmZmZ ddlZddlmZmZmZmZmZ ddlmZmZmZmZmZmZ ddlmZm Z  dd	l!m"Z"  e"«       Z# e	jH                  e	jJ                  ¬
«        e	jL                  e'«      Z( G d„ de«      Z) G d„ de«      Z* G d„ de«      Z+ G d„ de«      Z, G d„ de«      Z-d„ Z.y)zy
Specialized agents for the FarmGenius multi-agent system.
Each agent is responsible for a specific domain of expertise.
é    N)ÚDictÚListÚAnyÚOptionalÚCallableÚUnion)ÚImage)ÚdatetimeÚ	timedelta)ÚAgentÚ	AgentTypeÚMessageÚcoordinatorÚcontext_protocol)Úget_disease_predictionÚget_yield_estimateÚprocess_voice_command_aiÚget_market_summary_aiÚgemini_vision_modelÚgemini_text_model)Úget_all_pricesÚget_scraper)Úget_settings)Úlevelc                   óN   ‡ — e Zd ZdZˆ fd„Zdedee   fd„Zdedee   fd„Zˆ xZ	S )ÚDiseaseDetectorAgentz8Agent specializing in crop disease detection from imagesc                 ó°   •— t         ‰| �  t        j                  «       | j	                  d| j
                  «       | j	                  d| j                  «       y )NÚanalyze_imageÚget_treatment)ÚsuperÚ__init__r   ÚDISEASE_DETECTORÚregister_handlerÚhandle_analyze_imageÚhandle_get_treatment©ÚselfÚ	__class__s    €ú>C:\Users\aadil\OneDrive\Desktop\404\backend\app\core\agents.pyr!   zDiseaseDetectorAgent.__init__$   sB   ø€ Ü‰Ñœ×3Ñ3Ô4Ø×Ñ˜o¨t×/HÑ/HÔIØ×Ñ˜o¨t×/HÑ/HÕIó    ÚmessageÚreturnc           
   ƒ   ó€  K  — 	 |j                   j                  d«      }|s%t        | j                  |j                  ddid¬«      S t        |«      ƒ d{  –—† }|j                  d«      sC|j                  r|j                  j                  d«      nd}|rt        j                  |d|i«       t        | j                  |j                  d	|id
|j                  ¬«      S 7 Œˆ# t        $ rS}t        j                  d|› �«       t        | j                  |j                  ddt        |«      › �id¬«      cY d}~S d}~ww xY w­w)z%Analyze image to detect crop diseasesÚimage_bytesÚerrorzNo image data provided©ÚsenderÚreceiverÚcontentÚmessage_typeNzError:Ú
session_idÚlast_disease_detectionÚresultÚanalysis_result©r1   r2   r3   r4   ÚcontextzError in disease detection: zError analyzing image: )r3   Úgetr   Ú
agent_typer1   r   Ú
startswithr:   r   Úupdate_contextÚ	ExceptionÚloggerr/   Ústr)r'   r+   r.   r7   Ú
context_idÚes         r)   r$   z)DiseaseDetectorAgent.handle_analyze_image)   s.  è ø€ ð*	à!Ÿ/™/×-Ñ-¨mÓ<ˆKÙÜØŸ?™?Ø$Ÿ^™^Ø$Ð&>Ð?Ø!(ô	ð ô 2°+Ó>×>ˆFð ×$Ñ$ XÔ.àBIÇ/Â/˜WŸ_™_×0Ñ0°Ô>ÐW[�
Ùä$×3Ñ3°JØ0°&ðAô ô Ø—‘Ø Ÿ™Ø! 6Ð*Ø.ØŸ™ôð ð ?ùô. ò 	Ü�L‰LÐ7¸°sÐ;Ô<ÜØ—‘Ø Ÿ™Ø Ð$;¼CÀ»F¸8Ð"DÐEØ$ô	õ ûð	üsU   ‚D>„AC ÁD>ÁC ÁCÁBC ÃD>ÃC Ã	D;Ã(AD6Ä0D;Ä1D>Ä6D;Ä;D>c           
   ƒ   ó„  K  — |j                   j                  d«      }|j                   j                  dd«      }|j                  r|j                  j                  d«      nd}d}|r)t        j                  |«      }|r|j                  dd«      }	 d|› d	|› d
�}t        |«      ƒ d{  –—† }|}	t        | j                  |j                  d|	id|j                  ¬«      S 7 Œ6# t        $ rS}
t        j                  d|
› �«       t        | j                  |j                  ddt        |
«      › �id¬«      cY d}
~
S d}
~
ww xY w­w)z2Get treatment recommendations for detected diseaseÚdisease_nameÚ	crop_typeúunknown cropr5   NÚenÚlanguagez7Provide organic and conventional treatment options for z in zk. 
            Include locally available options common in Maharashtra, India. Keep it brief and practical.Ú	treatmentÚtreatment_recommendationr9   z(Error getting treatment recommendation: r/   r0   )r3   r;   r:   r   Úget_contextr   r   r<   r1   r?   r@   r/   rA   )r'   r+   rE   rF   rB   rI   r:   Úpromptr7   rJ   rC   s              r)   r%   z)DiseaseDetectorAgent.handle_get_treatmentW   s>  è ø€ à—‘×*Ñ*¨>Ó:ˆØ—O‘O×'Ñ'¨°^ÓDˆ	ð ;B¿/º/�W—_‘_×(Ñ(¨Ô6Ètˆ
ØˆáÜ&×2Ñ2°:Ó>ˆGÙØ"Ÿ;™; z°4Ó8�ð	ØPÐQ]ÐP^Ð^bÐclÐbmð nið lˆFô -¨VÓ4×4ˆFàˆIäØ—‘Ø Ÿ™Ø$ iÐ0Ø7ØŸ™ôð ð	 5ùô ò 	Ü�L‰LÐCÀAÀ3ÐGÔHÜØ—‘Ø Ÿ™Ø Ð$LÌSÐQRËVÈHÐ"UÐVØ$ô	õ ûð	üsI   ‚BE ÂC! Â(CÂ)5C! ÃE ÃC! Ã!	D=Ã*AD8Ä2D=Ä3E Ä8D=Ä=E )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r   r   r$   r%   Ú__classcell__©r(   s   @r)   r   r   !   s=   ø„ ÙBôJð
,°'ð ,¸hÀwÑ>Oó ,ð\&°'ð &¸hÀwÑ>O÷ &r*   r   c                   ó8   ‡ — e Zd ZdZˆ fd„Zdedee   fd„Zˆ xZS )ÚYieldPredictorAgentz,Agent specializing in crop yield predictionsc                 óx   •— t         ‰| �  t        j                  «       | j	                  d| j
                  «       y )NÚpredict_yield)r    r!   r   ÚYIELD_PREDICTORr#   Úhandle_predict_yieldr&   s    €r)   r!   zYieldPredictorAgent.__init__‚   s,   ø€ Ü‰Ñœ×2Ñ2Ô3Ø×Ñ˜o¨t×/HÑ/HÕIr*   r+   r,   c           
   ƒ   óŽ  K  — 	 |j                   j                  d«      }|s%t        | j                  |j                  ddid¬«      S t        |«      ƒ d{  –—† }|j                  r|j                  j                  d«      nd}|r0t        j                  |d|j                  |j                  |dœi«       t        | j                  |j                  d	|id
|j                  ¬«      S 7 Œ�# t        $ rS}t        j                  d|› �«       t        | j                  |j                  ddt        |«      › �id¬«      cY d}~S d}~ww xY w­w)z+Generate yield prediction from farmer inputÚyield_inputr/   zNo yield input data providedr0   Nr5   Úlast_yield_prediction)ÚcropÚareaÚ
predictionr7   Úprediction_resultr9   zError in yield prediction: zError making yield prediction: )r3   r;   r   r<   r1   r   r:   r   r>   rF   Ú	area_sizer?   r@   r/   rA   )r'   r+   r[   r7   rB   rC   s         r)   rY   z(YieldPredictorAgent.handle_predict_yield†   s8  è ø€ ð(	à!Ÿ/™/×-Ñ-¨mÓ<ˆKÙÜØŸ?™?Ø$Ÿ^™^Ø$Ð&DÐEØ!(ô	ð ô .¨kÓ:×:ˆFð ?F¿oºo˜Ÿ™×,Ñ,¨\Ô:ÐSWˆJÙÜ ×/Ñ/°
Ø+Ø +× 5Ñ 5Ø +× 5Ñ 5Ø&,ñ.ð=ô ô Ø—‘Ø Ÿ™Ø! 6Ð*Ø0ØŸ™ôð ð ;ùô* ò 	Ü�L‰LÐ6°q°cÐ:Ô;ÜØ—‘Ø Ÿ™Ø Ð$CÄCÈÃFÀ8Ð"LÐMØ$ô	õ ûð	üsU   ‚E„AC& ÁEÁC& ÁC$ÁBC& Ã#EÃ$C& Ã&	EÃ/AD=Ä7EÄ8EÄ=EÅE)	rN   rO   rP   rQ   r!   r   r   rY   rR   rS   s   @r)   rU   rU      s$   ø„ Ù6ôJð*°'ð *¸hÀwÑ>O÷ *r*   rU   c                   ód   ‡ — e Zd ZdZˆ fd„Zdedee   fd„Zdedee   fd„Zdedee   fd„Z	ˆ xZ
S )ÚMarketAnalyzerAgentz=Agent specializing in market data analysis and price trackingc                 ó  •— t         ‰| �  t        j                  «       | j	                  d| j
                  «       | j	                  d| j                  «       | j	                  d| j                  «       d | _        g | _	        y )NÚ
get_pricesÚanalyze_trendsÚget_summary)
r    r!   r   ÚMARKET_ANALYZERr#   Úhandle_get_pricesÚhandle_analyze_trendsÚhandle_get_summaryÚlast_updateÚcached_pricesr&   s    €r)   r!   zMarketAnalyzerAgent.__init__µ   si   ø€ Ü‰Ñœ×2Ñ2Ô3Ø×Ñ˜l¨D×,BÑ,BÔCØ×ÑÐ.°×0JÑ0JÔKØ×Ñ˜m¨T×-DÑ-DÔEØˆÔØˆÕr*   r+   r,   c           
   ƒ   óh  K  — 	 |j                   j                  d«      }|j                   j                  dd«      }|j                   j                  dd«      }|r't        d«      }|j                  ||¬«      ƒ d{  –—† }nX| j                  r|r>t        «       ƒ d{  –—† | _        t        j                  «       j                  «       | _	        | j                  }|j                  r|j                  j                  d	«      nd}|rt        j                  |d
|||dœi«       t        | j                  |j                  d|id|j                  ¬«      S 7 ŒÔ7 Œµ# t         $ rS}t"        j%                  d|› �«       t        | j                  |j                  ddt'        |«      › �id¬«      cY d}~S d}~ww xY w­w)z#Get current market prices for cropsr]   ÚlocationÚBaramatiÚforce_refreshFÚ	agmarknet)ÚdistrictNr5   Úlast_market_query)r]   ro   Úpricesru   Ú
price_datar9   zError getting market prices: r/   r0   )r3   r;   r   re   rm   r   ÚasyncioÚget_event_loopÚtimerl   r:   r   r>   r   r<   r1   r?   r@   r/   rA   )	r'   r+   r]   ro   rq   Úscraperru   rB   rC   s	            r)   ri   z%MarketAnalyzerAgent.handle_get_prices½   sŽ  è ø€ ð-	à—?‘?×&Ñ& vÓ.ˆDØ—‘×*Ñ*¨:°zÓBˆHØ#ŸO™O×/Ñ/°ÀÓGˆMñ ä% kÓ2�Ø&×1Ñ1°$ÀÐ1ÓJ×J‘ð ×)Ò)©]Ü/=Ó/?×)?�DÔ&Ü'.×'=Ñ'=Ó'?×'DÑ'DÓ'F�DÔ$à×+Ñ+�ð ?F¿oºo˜Ÿ™×,Ñ,¨\Ô:ÐSWˆJÙÜ ×/Ñ/°
Ø'Ø $Ø$,Ø"(ñ*ð=ô ô Ø—‘Ø Ÿ™Ø! 6Ð*Ø)ØŸ™ôð ð) Køð *@ùô0 ò 	Ü�L‰LÐ8¸¸Ð<Ô=ÜØ—‘Ø Ÿ™Ø Ð$AÄ#ÀaÃ&ÀÐ"JÐKØ$ô	õ ûð	üs[   ‚F2„A6E Á:EÁ; E ÂEÂB2E ÅF2ÅE ÅE Å	F/ÅAF*Æ$F/Æ%F2Æ*F/Æ/F2c              ƒ   ó  K  — 	 |j                   j                  dd«      }t        j                  d|› �«       t	        j
                  «       }g }t        j                  dd«      }t        ddd«      D ]i  }|t        |¬	«      z
  j                  d
«      }t        j                  dd«      }|d|z   dd|z
  z  z   z  }	t        |	d«      }	|j                  ||	dœ«       |	}Œk |d   d   }
|d   d   }||
z
  |
z  dz  }|dkD  rd|› d|d›d�}n|dk  rd|› d|d›d�}n
d|› d|d›d�}|j                  r|j                  j                  d«      nd}|rt        j                   |d|› �||d œi«       t#        | j$                  |j&                  ||d!œd"|j                  ¬#«      S # t(        $ rY}t        j+                  d$› d%|› �«       t#        | j$                  |j&                  d&d'|› d%t-        |«      › �id&¬(«      cY d}~S d}~ww xY w­w))z4Analyze market trends for specific crops (Simulated)r]   rG   z)Generating simulated trend analysis for: iÜ  iˆ  é   r   éÿÿÿÿ)Údaysz%Y-%m-%dgš™™™™™©¿gìQ¸…ë±?é   gü©ñÒMbP?é   )ÚdateÚpricer‚   éd   é   zPrices for zC have shown a noticeable upward trend over the past month (approx. z.1fz% increase).éûÿÿÿzE have shown a noticeable downward trend over the past month (approx. z% decrease).z@ have remained relatively stable over the past month (change of z%).r5   NÚtrend_analysis_)ÚsummaryÚhistorical_data)r+   rˆ   Útrend_analysis_resultr9   z&Error generating simulated trends for z: r/   zError analyzing trends for r0   )r3   r;   r@   Úinfor
   ÚnowÚrandomÚrandintÚranger   ÚstrftimeÚuniformÚroundÚappendr:   r   r>   r   r<   r1   r?   r/   rA   )r'   r+   r]   ÚtodayÚhistorical_pricesÚ
base_priceÚir�   Úprice_fluctuationr‚   Ústart_priceÚ	end_priceÚtrend_percentageÚtrend_summaryrB   rC   s                   r)   rj   z)MarketAnalyzerAgent.handle_analyze_trendsî   s‰  è ø€ ð:	Ø—?‘?×&Ñ& v¨~Ó>ˆDÜ�K‰KÐCÀDÀ6ÐJÔKô —L‘L“NˆEØ "ÐÜŸ™¨¨dÓ3ˆJÜ˜2˜q "Ö%�Ø¤	¨qÔ 1Ñ1×;Ñ;¸JÓG�ä$*§N¡N°5¸$Ó$?Ð!Ø" aÐ*;Ñ&;¸uÈÈ1É¹~Ñ&NÑO�Ü˜e Q›�Ø!×(Ñ(°$ÀÑ)GÔHØ"‘
ð &ð ,¨AÑ.¨wÑ7ˆKØ)¨"Ñ-¨gÑ6ˆIØ!*¨[Ñ!8¸KÑ GÈ3ÑNÐà !Ò#Ø"-¨d¨VÐ3vð  xHð  ILð  wMð  MYð  !Z‘Ø! BÒ&Ø"-¨d¨VÐ3xð  zJð  KNð  yOð  O[ð  !\‘à"-¨d¨VÐ3sð  uEð  FIð  tJð  JMð  !N�ð ?F¿oºo˜Ÿ™×,Ñ,¨\Ô:ÐSWˆJÙÜ ×/Ñ/°
Ø% d VÐ,Ø#0Ø+<ñ/ð=ô ô Ø—‘Ø Ÿ™à,Ø'8ñð 5ØŸ™ô	ð 	øô ò 	Ü�L‰LÐAÀ$ÀÀrÈ!ÈÐMÔNÜØ—‘Ø Ÿ™Ø Ð$?À¸vÀRÌÈAËÀxÐ"PÐQØ$ô	õ ûð	üs6   ‚H„FF ÆHÆ	G>Æ%AG9Ç3G>Ç4HÇ9G>Ç>Hc           
   ƒ   ó   K  — 	 | j                   s>t        «       ƒ d{  –—† | _         t        j                  «       j	                  «       | _        t        | j                   «      ƒ d{  –—† }t        | j                  |j                  d|id|j                  ¬«      S 7 Œ}7 Œ6# t        $ rS}t        j                  d|› �«       t        | j                  |j                  ddt        |«      › �id¬«      cY d}~S d}~ww xY w­w)z*Get a summary of current market conditionsNr‡   Úmarket_summaryr9   zError getting market summary: r/   r0   )rm   r   rw   rx   ry   rl   r   r   r<   r1   r:   r?   r@   r/   rA   )r'   r+   r‡   rC   s       r)   rk   z&MarketAnalyzerAgent.handle_get_summary,  sá   è ø€ ð	à×%Ò%Ü+9Ó+;×%;�Ô"Ü#*×#9Ñ#9Ó#;×#@Ñ#@Ó#B�Ô ô 2°$×2DÑ2DÓE×EˆGäØ—‘Ø Ÿ™Ø" GÐ,Ø-ØŸ™ôð ð &<øð Fùô ò 	Ü�L‰LÐ9¸!¸Ð=Ô>ÜØ—‘Ø Ÿ™Ø Ð$BÄ3ÀqÃ6À(Ð"KÐLØ$ô	õ ûð	üsX   ‚C>„B �BžAB Á&BÁ'3B ÂC>ÂB ÂB Â	C;Â(AC6Ã0C;Ã1C>Ã6C;Ã;C>)rN   rO   rP   rQ   r!   r   r   ri   rj   rk   rR   rS   s   @r)   rc   rc   ²   sU   ø„ ÙGô ð/¨wð /¸8ÀGÑ;Ló /ðb<°7ð <¸xÈÑ?Pó <ð|°ð ¸HÀWÑ<M÷ r*   rc   c                   óN   ‡ — e Zd ZdZˆ fd„Zdedee   fd„Zdedee   fd„Zˆ xZ	S )ÚVoiceAssistantAgentz?Agent specializing in voice interaction and language processingc                 óÆ   •— t         ‰| �  t        j                  «       | j	                  d| j
                  «       | j	                  d| j                  «       ddddœ| _        y )NÚprocess_commandÚtext_to_speechÚEnglishÚHindiÚMarathi©rH   ÚhiÚmr)r    r!   r   ÚVOICE_ASSISTANTr#   Úhandle_process_commandÚhandle_text_to_speechÚ	languagesr&   s    €r)   r!   zVoiceAssistantAgent.__init__K  sX   ø€ Ü‰Ñœ×2Ñ2Ô3Ø×ÑÐ/°×1LÑ1LÔMØ×ÑÐ.°×0JÑ0JÔKð ØØñ
ˆ�r*   r+   r,   c           
   ƒ   ór  ‡K  — 	 |j                   j                  d«      Š‰s%t        | j                  |j                  ddid¬«      S |j
                  r|j
                  j                  d«      nd}d}|r)t        j                  |«      }|r|j                  dd«      }t        ‰|«      ƒ d{  –—† }d	}d}t        ˆfd
„dD «       «      rd}t        j                  }�n6t        ˆfd„dD «       «      rd}t        j                  }�nt        ˆfd„dD «       «      rúd}t        j                  }g d¢}t        ˆfd„|D «       d«      }	|	rÍ|t        j                  k(  rº| j                  t        j                  d|	id|j
                  ¬«      ƒ d{  –—† }
|
r�|
j                   j                  dg «      }|rcg }|D ]F  }d|v r|j!                  |d   › d|d   › d�«       Œ%d|v sŒ*|j!                  |d   › d|d   › d�«       ŒH |rddj#                  |«      › �}t        | j                  |j                  |||r|j$                  nddœd|j
                  ¬ «      S 7 �Œ§7 ŒÊ# t&        $ rS}t(        j+                  d!|› �«       t        | j                  |j                  dd!t-        |«      › �id¬«      cY d}~S d}~ww xY w­w)"z!Process voice command transcriptsÚ
transcriptr/   zNo transcript providedr0   r5   NrH   rI   Fc              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­w©N©Úlower©Ú.0Úwordr®   s     €r)   Ú	<genexpr>z=VoiceAssistantAgent.handle_process_command.<locals>.<genexpr>v  s"   øè ø€ ÐoÑ:n°$�4˜:×+Ñ+Ó-Ô-Ñ:nùó   ƒ)ÚdiseaseÚ	infectionÚspotsÚleafÚanalyzeTc              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wr°   r±   r³   s     €r)   r¶   z=VoiceAssistantAgent.handle_process_command.<locals>.<genexpr>|  s"   øè ø€ ÐkÑ<j°D�T˜Z×-Ñ-Ó/Ô/Ñ<jùr·   )ÚyieldÚharvestÚ
productionzhow muchc              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wr°   r±   r³   s     €r)   r¶   z=VoiceAssistantAgent.handle_process_command.<locals>.<genexpr>�  s"   øè ø€ ÐiÑ<h°D�T˜Z×-Ñ-Ó/Ô/Ñ<hùr·   )r‚   ÚmarketÚsellÚcostÚmandi)ÚwheatÚonionÚsoybeanÚ	sugarcaneÚriceÚcottonc              3   óH   •K  — | ]  }|‰j                  «       v sŒ|–— Œ y ­wr°   r±   )r´   r]   r®   s     €r)   r¶   z=VoiceAssistantAgent.handle_process_command.<locals>.<genexpr>‰  s"   øè ø€ ÐY©l d¸dÀj×FVÑFVÓFXÒ>XœT©lùs   ƒ"›"r]   re   )r2   r3   r4   r:   ru   Úprice_per_quintalz is z rupees per quintalÚprice_per_tonnez rupees per tonnezHere are the current prices: z, )ÚresponseÚshould_routeÚtarget_agentÚvoice_responser9   z Error processing voice command: )r3   r;   r   r<   r1   r:   r   rL   r   Úanyr   r"   rX   rh   ÚnextÚsend_messager’   ÚjoinÚvaluer?   r@   r/   rA   )r'   r+   rB   rI   r:   r7   rÐ   rÑ   Úcommon_cropsr]   Úmarket_responseru   Úprice_textsr‚   rC   r®   s                  @r)   rª   z*VoiceAssistantAgent.handle_process_commandW  s¿  øè ø€ ð\	Ø Ÿ™×,Ñ,¨\Ó:ˆJÙÜØŸ?™?Ø$Ÿ^™^Ø$Ð&>Ð?Ø!(ô	ð ð ?F¿oºo˜Ÿ™×,Ñ,¨\Ô:ÐSWˆJØˆHáÜ*×6Ñ6°zÓB�ÙØ&Ÿ{™{¨:°tÓ<�Hô 4°JÀÓI×IˆFð !ˆLØˆLäÓoÑ:nÓoÔoà#�Ü(×9Ñ9’ô ÓkÑ<jÓkÔkà#�Ü(×8Ñ8’äÓiÑ<hÓiÔià#�Ü(×8Ñ8�ò  \�ÜÓY©lÓYÐ[_Ó`�á˜L¬I×,EÑ,EÒEà,0×,=Ñ,=Ü!*×!:Ñ!:Ø!'¨ Ø%1Ø '§¡ð	 ->ó -÷ '�Oñ 'à!0×!8Ñ!8×!<Ñ!<¸XÀrÓ!J˜Ù!Ø*,˜KÛ)/ Ø#6¸%Ñ#?Ø$/×$6Ñ$6¸%À¹-¸ÈÈUÐSfÑMgÐLhÐh{Ð7|Õ$}Ø%6¸%Ò%?Ø$/×$6Ñ$6¸%À¹-¸ÈÈUÐSdÑMeÐLfÐfwÐ7xÕ$yð	 *0ñ  +Ø+HÈÏÉÐS^ÓI_ÐH`Ð)a äØ—‘Ø Ÿ™à &Ø$0Ù:F L×$6Ò$6ÈDñð
 .ØŸ™ô
ð 
ðk Jùð@'ùôB ò 	Ü�L‰LÐ;¸A¸3Ð?Ô@ÜØ—‘Ø Ÿ™Ø Ð$DÄSÈÃVÀHÐ"MÐNØ$ô	õ ûð	üsp   ƒJ7…AI ÁJ7ÁA%I Â,IÂ-CI ÆIÆAI ÇA4I ÉJ7ÉI ÉI É	J4É!AJ/Ê)J4Ê*J7Ê/J4Ê4J7c           
   ƒ   óÔ  K  — |j                   j                  d«      }|s%t        | j                  |j                  ddid¬«      S |j
                  r|j
                  j                  d«      nd}d}|r)t        j                  |«      }|r|j                  dd«      }t        | j                  |j                  d	d
| j                  j                  |d«      › �id|j
                  ¬«      S ­w)z3Generate text-to-speech audio (mock implementation)Útextr/   z%No text provided for speech synthesisr0   r5   NrH   rI   r+   z.Text-to-speech synthesis would happen here in r£   Útts_responser9   )	r3   r;   r   r<   r1   r:   r   rL   r¬   )r'   r+   rÜ   rB   rI   r:   s         r)   r«   z)VoiceAssistantAgent.handle_text_to_speech·  sÝ   è ø€ à�‰×"Ñ" 6Ó*ˆÙÜØ—‘Ø Ÿ™Ø Ð"IÐJØ$ô	ð ð ;B¿/º/�W—_‘_×(Ñ(¨Ô6Ètˆ
ØˆáÜ&×2Ñ2°:Ó>ˆGÙØ"Ÿ;™; z°4Ó8�ô Ø—?‘?Ø—^‘^àÐKÈDÏNÉN×L^ÑL^Ð_gÐirÓLsÐKtÐuðð (Ø—O‘Oô
ð 	
ùs   ‚C&C()
rN   rO   rP   rQ   r!   r   r   rª   r«   rR   rS   s   @r)   rŸ   rŸ   H  s?   ø„ ÙIô

ð^°Gð ^ÀÈÑ@Qó ^ð@
°7ð 
¸xÈÑ?P÷ 
r*   rŸ   c                   ó8   ‡ — e Zd ZdZˆ fd„Zdedee   fd„Zˆ xZS )ÚTranslatorAgentzCAgent specializing in language translation for multilingual supportc                 óŽ   •— t         ‰| �  t        j                  «       | j	                  d| j
                  «       ddddœ| _        y )NÚ	translater£   r¤   r¥   r¦   )r    r!   r   Ú
TRANSLATORr#   Úhandle_translater¬   r&   s    €r)   r!   zTranslatorAgent.__init__Ú  s@   ø€ Ü‰Ñœ×-Ñ-Ô.Ø×Ñ˜k¨4×+@Ñ+@ÔAð ØØñ
ˆ�r*   r+   r,   c           
   ƒ   óü  K  — 	 |j                   j                  d«      }|j                   j                  dd«      }|j                   j                  d«      }|s%t        | j                  |j                  ddid¬«      S || j
                  vr(t        | j                  |j                  dd|› �id¬«      S 	 | j
                  j                  |d	«      }| j
                  j                  |d
«      }d|› d|› d|› �}t        |«      ƒ d{  –—† }|}	t        | j                  |j                  d|	id|j                  ¬«      S 7 Œ6# t        $ rS}
t        j                  d|
› �«       t        | j                  |j                  ddt        |
«      › �id¬«      cY d}
~
S d}
~
ww xY w# t        $ rS}
t        j                  d|
› �«       t        | j                  |j                  ddt        |
«      › �id¬«      cY d}
~
S d}
~
ww xY w­w)z Translate text between languagesrÜ   Útarget_languagerH   Úsource_languager/   z No text provided for translationr0   zUnsupported target language: zthe source languager£   z"Translate the following text from z to zu.
                Only return the translated text, nothing else.
                
                Text to translate: NÚtranslated_textÚtranslation_resultr9   zError in translation: )r3   r;   r   r<   r1   r¬   r   r:   r?   r@   r/   rA   )r'   r+   rÜ   rå   ræ   Úsource_lang_nameÚtarget_lang_namerM   r7   rç   rC   s              r)   rã   z TranslatorAgent.handle_translateå  s   è ø€ ð<	Ø—?‘?×&Ñ& vÓ.ˆDØ%Ÿo™o×1Ñ1Ð2CÀTÓJˆOØ%Ÿo™o×1Ñ1Ð2CÓDˆOáÜØŸ?™?Ø$Ÿ^™^Ø$Ð&HÐIØ!(ô	ð ð  d§n¡nÑ4ÜØŸ?™?Ø$Ÿ^™^Ø$Ð(EÀoÐEVÐ&WÐXØ!(ô	ð ðØ#'§>¡>×#5Ñ#5°oÐG\Ó#]Ð Ø#'§>¡>×#5Ñ#5°oÀyÓ#QÐ à?Ð@PÐ?QÐQUÐVfÐUgð h$ð %) 6ð-�ô
  1°Ó8×8�à"(�äØŸ?™?Ø$Ÿ^™^Ø.°Ð@Ø!5Ø#ŸO™Oôð ð	 9ùô ò Ü—‘Ð5°a°SÐ9Ô:ÜØŸ?™?Ø$Ÿ^™^Ø$Ð(>¼sÀ1»v¸hÐ&GÐHØ!(ô	õ ûðûô ò 	Ü�L‰LÐ1°!°Ð5Ô6ÜØ—‘Ø Ÿ™Ø Ð$:¼3¸q»6¸(Ð"CÐDØ$ô	õ ûð	üsŒ   ‚G<„A8F Á<G<Á=5F Â2G<Â4AD> ÄD<Ä5D> Ä;G<Ä<D> Ä>	FÅAFÆFÆF ÆG<ÆFÆF Æ	G9Æ&AG4Ç.G9Ç/G<Ç4G9Ç9G<)	rN   rO   rP   rQ   r!   r   r   rã   rR   rS   s   @r)   rß   rß   ×  s#   ø„ ÙMô	
ð>¨gð >¸(À7Ñ:K÷ >r*   rß   c                  óD  — t        «       } t        j                  | «       t        «       }t        j                  |«       t	        «       }t        j                  |«       t        «       }t        j                  |«       t        «       }t        j                  |«       t        S )z.Initialize and register all specialized agents)r   r   Úregister_agentrU   rc   rŸ   rß   )Údisease_agentÚyield_agentÚmarket_agentÚvoice_agentÚtranslator_agents        r)   Úinit_agentsrò   &  sx   € ä(Ó*€MÜ×Ñ˜}Ô-ä%Ó'€KÜ×Ñ˜{Ô+ä&Ó(€LÜ×Ñ˜|Ô,ä%Ó'€KÜ×Ñ˜{Ô+ä&Ó(ÐÜ×ÑÐ/Ô0äÐr*   )/rQ   rw   Útypingr   r   r   r   r   r   ÚloggingÚjsonÚioÚPILr	   r
   r   rŒ   Úapp.core.multi_agentr   r   r   r   r   Úapp.core.ai_servicesr   r   r   r   r   r   Úapp.services.market_scraperr   r   Úapp.core.configr   ÚsettingsÚbasicConfigÚINFOÚ	getLoggerrN   r@   r   rU   rc   rŸ   rß   rò   © r*   r)   Ú<module>r     s¿   ðñó ß =× =Û Û Û 	Ý ß (Û ç YÕ Y÷÷ ÷ DÝ (ñ ‹>€ð €× Ñ ˜'Ÿ,™,Õ 'Ø	ˆ×	Ñ	˜8Ó	$€ô\˜5ô \ô|1˜%ô 1ôfT˜%ô TôlM
˜%ô M
ô^L�eô Ló^r*   