§
    J»4fY  ã                   óz  — d dl Z d dlZd dlmZ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 d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZmZmZ d d
lmZ d dlmZ d dlm Z  ddl!m"Z" d dl#m$Z$  e$j%        ¦   «         Z& G d„ de¦  «        Z' G d„ de¦  «        Z(dZ)	 ddeee                  defd„Z* G d„ d¦  «        Z+dS )é    N)Ú	BaseModelÚExtraÚField)ÚListÚOptionalÚUnion)ÚdatetimeÚ	timedelta)ÚCallbackManager)Ú!create_structured_output_runnable)ÚRunnable)ÚChatPromptTemplateÚSystemMessagePromptTemplateÚHumanMessagePromptTemplate)ÚSystemMessageÚ	AIMessageÚHumanMessageÚBaseMessage)ÚBaseMessagePromptTemplate)Úsettings)ÚChatAdditonalé   )ÚMultiArgsTool)ÚCustomLoggerc                   óÐ   — e Zd ZU  edd¬¦  «        Zeed<    edd¬¦  «        Zeed<    edd¬¦  «        Ze	ed	<    ed
d¬¦  «        Z
e	ed<    edd¬¦  «        Zee         ed<   dS )ÚSearchRoomToolSchemazStart date of bookingN)ÚdescriptionÚdefaultÚ	from_datezEnd date of bookingÚto_datezCount of adulté   ÚadultzCount of childr   ÚchildzQUser Provided Keywords on which we find rooms, like 'room_name', 'amenities', etcÚroom_filters)Ú__name__Ú
__module__Ú__qualname__r   r   r	   Ú__annotations__r    r"   Úintr#   r$   ÚlistÚstr© ó    ú:/var/www/html/ls-bot-apis/app/agents/tools/search_rooms.pyr   r      sÖ   € € € € € € Ø˜%Ð,CÈTÐRÑRÔR€IˆxÐRÐRÑRØ˜Ð*?ÈÐNÑNÔN€GˆXÐNÐNÑNØ�Ð#3¸QÐ?Ñ?Ô?€Eˆ3Ð?Ð?Ñ?Ø�Ð#3¸QÐ?Ñ?Ô?€Eˆ3Ð?Ð?Ñ?Ø#˜eð  1Dð  NRð  Sñ  Sô  S€L�$�s”)ð  Sð  Sñ  Sð  Sð  Sr-   r   c                   óz   — e Zd ZU  ed¬¦  «        Zeed<    ed¬¦  «        Zee         ed<    G d„ d¦  «        Z	dS )	ÚSearchRoomSchemaz-Answer to user question with details of rooms)r   ÚanswerzˆGenerate very short responses of user consisting of 2-3 words only. Examples could include 'Book now', 'Show more rooms', or 'Need help'ÚfollowUpQuestionsc                   ó    — e Zd Zej        ZdZdS )úSearchRoomSchema.ConfigTN)r%   r&   r'   r   ÚallowÚextraÚarbitrary_types_allowedr,   r-   r.   ÚConfigr4   !   s   € € € € € Ø”ˆØ"&ÐÐÐr-   r8   N)
r%   r&   r'   r   r1   r+   r(   r2   r   r8   r,   r-   r.   r0   r0      s”   € € € € € € Ø�%Ð$SÐTÑTÔT€FˆCÐTÐTÑTØ"' %ð  5ð  #@ñ  #@ô  #@Ð�d˜3”ið  @ð  @ñ  @ð'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'r-   r0   a¶  You are a helpful AI assistant trained to answer questions about "Bay View Hotel" -> Available Rooms Details. Use the following pieces of context to answer the question. If you don't find the answer in the context, politely explain that you don't know and suggest rephrasing the question, don't try to make up an answer. Answer in the language of the user question.
Today's in date DD/MM/YYYY for your Knowledge: {date}

Include any relevant images or URLs, but only if they are found in the context. Don't make answer too much large for user gave you view in concise way (Follow law of least action).

<AVAILABLE_ROOMS>
{context}
</AVAILABLE_ROOMS>

Format your helpful response as "markdown".Úextra_prompt_messagesÚreturnc                 óŒ   — | pg }g |¢t          j        t          ¦  «        ‘t          j        d¦  «        ‘}t	          |¬¦  «        S )Nz
{question})Úmessages)r   Úfrom_templateÚSEARCH_ROOM_PROMPTr   r   )r9   Ú_promptsr<   s      r.   Úcreate_search_tool_promptr@   0   s]   € ð %Ð*¨€HðE
ØðE
å'Ô5Õ6HÑIÔIðE
õ 'Ô4°\ÑBÔBðE
€Hõ
  xÐ0Ñ0Ô0Ð0r-   c                   ó~   — e Zd Zddededeeeee	f                  ddfd„Z
d„ Zdd	efd
„Zddefd„Zed„ ¦   «         ZdS )ÚSearchRoomToolNÚquestionÚllmÚhistoryr:   c                 ó–   — || _         || _        || _        t          j        | _        t          j        | _        t          j        | _	        d S ©N)
rD   rC   Úchat_hisoryr   Ú
LS_API_URLÚ	hotel_urlÚHOTEL_CURRENT_VERSIONÚhotel_current_verionÚSUB_HOTEL_IDÚsub_hotel_id)ÚselfrC   rD   rE   s       r.   Ú__init__zSearchRoomTool.__init__>   s>   € ØˆŒØ ˆŒØ"ˆÔÝ!Ô,ˆŒÝ$,Ô$BˆÔ!Ý$Ô1ˆÔÐÐr-   c                 ó>   — t          dd| j        t          d¬¦  «        S )NÚ*search_or_check_hotel_rooms_availabilitieszÉUse this tool to Search or check hotels rooms availability with price. Only use this tool if all parameters are present in user query, if not then ask the user for requierd parameters to use this tool.T)Únamer   ÚfuncÚargs_schemaÚreturn_direct)r   Ú_search_roomsr   )rO   s    r.   Ú__call__zSearchRoomTool.__call__F   s.   € ÝØ=ð dØÔ#Ý,Øð
ñ 
ô 
ð 	
r-   r   Ú	callbacksc                 óT  — t          | j        t          t          | j        ¬¦  «        ¬¦  «        } | j        ||||fi |¤Ž}t          |¦  «        r|                     ¦   «         nd}	|                     | j	        |	t          j        ¦   «                              d¦  «        dœd|i¬¦  «        }
d |
_        t          |¦  «        rf|r|r|rdnd	}t          d
dg||r<d| j        › d|                     d¦  «        › d|                     d¦  «        › d|› d|› �
nd|rdnd¬¦  «        |
_        |
S )N)r9   )rD   Úoutput_schemaÚpromptzNo Rooms Foundz%m-%d-%Y)rC   ÚcontextÚdaterY   )ÚinputÚconfigTFz
change-urlÚscrollToz/search-results/ú/z/Suitesz.search-result-innerz.room-listing-block)ÚactionsÚroomListÚurlÚscrollToElement)r   rD   r0   r@   rH   Ú
_get_roomsÚlenÚ__str__ÚinvokerC   r	   ÚnowÚstrftimeÚ
additionalr   rN   )rO   rY   r   r    r"   r#   ÚkwargsÚchainÚ
rooms_listr]   ÚresultÚparam_availables               r.   rW   zSearchRoomTool._search_roomsO   s×  € Ý1Ø”Ý*Ý,À4ÔCSÐTÑTÔTð
ñ 
ô 
ˆð %�T”_ Y°¸ÀÐPÐPÈÐPÐPˆ
Ý*-¨j©/¬/ÐO�*×$Ò$Ñ&Ô&Ð&Ð?OˆØ#(§<¢<À4Ä=Ð]dÕnvÔnzÑn|Ôn|÷  oFò  oFð  GQñ  oRô  oRð  7Sð  7Sð  ]hð  irð  \s <ñ  $tô  $tˆà!ˆÔÝˆz‰?Œ?ð 	Ø&+ÐP°	ÐP¸gÐP˜d˜dÈ5ˆOÝ -Ø% zÐ2à#ð Q`ð  pð  L¨Ô(9ð  Lð  L¸I×<NÒ<NÈzÑ<ZÔ<Zð  Lð  LÐ]d×]mÒ]mÐnxÑ]yÔ]yð  Lð  Lð  }Bð  Lð  Lð  EJð  Lð  Lð  Lð  gpØ;JÐ!eÐ!7Ð!7ÐPeð!ñ !ô !ˆFÔð ˆr-   c                 óþ  ‡— 	 t          j        | j        dz   d| j        i¬¦  «        }t	          j        |j                             d¦  «        ¦  «        }|j        dk    s|d         dk    rt          d¦  «        ‚g }	‰rˆfd	„|d
         D ¦   «         }	d„ |d
         D ¦   «         }	t          |	¦  «        st          d¦  «        ‚d„ |	D ¦   «         }
t          j        | j        dz   ||t          |t          ¦  «        r|                     d¦  «        n%t          j        ¦   «                              d¦  «        t          |t          ¦  «        r|                     d¦  «        n6t          j        ¦   «         t!          d¬¦  «        z                        d¦  «        d|
ddœd| j        i¬¦  «        }|j        dk    s|d         dk    rt          d¦  «        ‚t	          j        |j                             d¦  «        ¦  «        }d„ |d                              ¦   «         D ¦   «         }t%          |	|¦  «        D ]
\  }}||d<   Œ|	S # t          $ r6}t&                               dt+          |¦  «        › �¦  «         g cY d }~S d }~ww xY w)Nz/frontend/Home/get_hotel_roomsÚcurrent_version)Úheadersz	utf-8-sigéÈ   ÚstatusÚerrorz"Error Occur in While Room Fetchingc                 óJ   •— g | ]}t                                |‰¦  «        ¯|‘Œ S r,   )rB   Úis_has)Ú.0Úitemr$   s     €r.   ú
<listcomp>z-SearchRoomTool._get_rooms.<locals>.<listcomp>t   s0   ø€ ÐoÐoÐo tÅ^×EZÒEZÐ[_ÐamÑEnÔEnÐo˜dÐoÐoÐor-   Údatac           
      óv   — g | ]6}|d          |d         |d         |d         |d         |d         |d         dœ‘Œ7S )Úroom_display_nameÚthumbnailImageÚ
bundleRoomÚ	occupancyÚbedÚroom_type_codeÚroom_type_id)ÚroomNameÚ	roomImager‚   rƒ   r„   r…   r†   r,   ©r{   r~   s     r.   r}   z-SearchRoomTool._get_rooms.<locals>.<listcomp>v   sk   € ð ð ð ð ð !%Ð%8Ô 9Ø!%Ð&6Ô!7Ø"& |Ô"4Ø!% kÔ!2Ø œ;Ø&*Ð+;Ô&<Ø$(¨Ô$8ðð ðð ð r-   zNo Room Found While Filteringc                 ó   — g | ]
}|d          ‘ŒS )r†   r,   r‰   s     r.   r}   z-SearchRoomTool._get_rooms.<locals>.<listcomp>†   s   € ÐFÐFÐF°$˜˜nÔ-ÐFÐFÐFr-   z)/frontend/Searchresults/getRoomsRatesInfoz%Y-%m-%dr   )ÚdaysÚtrueÚ )Úadultsr#   Úroom_stay_fromÚroom_stay_toÚcalled_for_suitesÚroomIdsÚpromo)Újsonru   z(Error Occur in While Room Rates Fetchingc                 ó   — g | ]
}|d          ‘ŒS )Úrater,   r‰   s     r.   r}   z-SearchRoomTool._get_rooms.<locals>.<listcomp>™   s   € ÐVÐVÐV¨$˜˜fœÐVÐVÐVr-   Úresultsr–   zFailed to upload file: )ÚrequestsÚgetrJ   rL   r”   ÚloadsÚcontentÚdecodeÚstatus_codeÚ	Exceptionrh   ÚpostÚ
isinstancer	   rl   rk   r
   ÚvaluesÚzipÚloggerrx   r+   )rO   r   r    r"   r#   r$   rn   ÚresponseÚ
rooms_datarp   Úroom_idsÚrooms_rate_dataÚ	room_rateÚroomr–   Úes        `          r.   rg   zSearchRoomTool._get_roomsg   s  ø€ ð9	Ý”|Ø”Ð!AÑAØ*¨DÔ,EÐFðñ ô ˆHõ œ HÔ$4×$;Ò$;¸KÑ$HÔ$HÑIÔIˆJàÔ# sÒ*Ð*¨j¸Ô.BÀgÒ.MÐ.MÝÐ DÑEÔEÐEàˆJØð pØoÐoÐoÐo¨z¸&Ô/AÐoÑoÔo�
ðð ð ' vÔ.ðñ ô ˆJõ �z‘?”?ð AÝÐ ?Ñ@Ô@Ð@àFÐF¸*ÐFÑFÔFˆHÝ”}Ø”Ð!LÑLà#Ø"ÝHRÐS\Õ^fÑHgÔHgð  'Q i×&8Ò&8¸Ñ&DÔ&DÐ&DÕmuÔmyÑm{Ôm{÷  nEò  nEð  FPñ  nQô  nQÝDNÈwÕX`ÑDaÔDað  %a G×$4Ò$4°ZÑ$@Ô$@Ð$@ÕhpÔhtÑhvÔhvõ  zCð  IJð  zKñ  zKô  zKñ  iK÷  hUò  hUð  V`ñ  haô  haØ)/Ø'Øðð ð +¨DÔ,EÐFðñ ô ˆHð Ô# sÒ*Ð*¨j¸Ô.BÀgÒ.MÐ.MÝÐ JÑKÔKÐKå"œj¨Ô)9×)@Ò)@ÀÑ)MÔ)MÑNÔNˆOØVÐV°/À)Ô2L×2SÒ2SÑ2UÔ2UÐVÑVÔVˆIå! *¨iÑ8Ô8ð $ð $‘
��dØ#��V‘�àÐøÝð 	ð 	ð 	Ý�LŠLÐ;µ3°q±6´6Ð;Ð;Ñ<Ô<Ð<ØˆIˆIˆIˆIˆIˆIøøøøð	øøøs   ƒH8H< È<
I<É+I7É1I<É7I<c                 ó:   ‡ — t          ˆ fd„|D ¦   «         ¦  «        S )Nc              3   ót   •K  — | ]2}|                      ¦   «         ‰d                                ¦   «         v V — Œ3dS )r€   N)Úlower)r{   Úentityr|   s     €r.   ú	<genexpr>z(SearchRoomTool.is_has.<locals>.<genexpr>¦   sB   øè è € Ð^Ð^È6�6—<’<‘>”> TÐ*=Ô%>×%DÒ%DÑ%FÔ%FÐFÐ^Ð^Ð^Ð^Ð^Ð^r-   )Úany)r|   Úentitiess   ` r.   rz   zSearchRoomTool.is_has¤   s'   ø€ åÐ^Ð^Ð^Ð^ÐU]Ð^Ñ^Ô^Ñ^Ô^Ð^r-   rG   )NNNr   r   )NNr   r   N)r%   r&   r'   r+   r   r   r   r   r   r   rP   rX   r   rW   r*   rg   Ústaticmethodrz   r,   r-   r.   rB   rB   =   sÒ   € € € € € ð2ð 2 ð 2¨8ð 2¸dÀ5ÈÐW`ÐboÐIoÔCpÔ>qð 2ð  ~Bð 2ð 2ð 2ð 2ð
ð 
ð 
ðð  ð ð ð ð ð0:ð :Ðmqð :ð :ð :ð :ðz ð_ð _ñ „\ð_ð _ð _r-   rB   rG   ),r”   r˜   Úpydanticr   r   r   Útypingr   r   r   r	   r
   Úlangchain.callbacks.managerr   Ú!langchain.chains.openai_functionsr   Úlangchain_core.runnablesr   Úlangchain.promptsr   r   r   Úlangchain.schemar   r   r   r   Úlangchain.prompts.chatr   Úapp.configsr   Úapp.schemas.chatr   r�   r   Úapp.utils.loggerr   Ú
get_loggerr£   r   r0   r>   r@   rB   r,   r-   r.   ú<module>r¿      s/  ðØ €€€Ø €€€à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø OÐ OÐ OÐ OÐ OÐ OØ -Ð -Ð -Ð -Ð -Ð -Ø iÐ iÐ iÐ iÐ iÐ iÐ iÐ iÐ iÐ iØ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ <Ð <Ð <Ð <Ð <Ð <à  Ð  Ð  Ð  Ð  Ð  Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð à )Ð )Ð )Ð )Ð )Ð )Ø	 ˆÔ	 Ñ	"Ô	"€ðSð Sð Sð Sð S˜9ñ Sô Sð Sð'ð 'ð 'ð 'ð '�yñ 'ô 'ð 'ð	/Ð ð :>ð
1ð 
1Ø# D¨Ô$5Ô6ð
1àð
1ð 
1ð 
1ð 
1ði_ð i_ð i_ð i_ð i_ñ i_ô i_ð i_ð i_ð i_r-   