
    $}pj                     T   d dl Z d dlZd dlmZmZ d dlmZmZ d dl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 d d
lmZ d dlmZ d dlmZ d dlmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z&  e	       Z' ejP                  e)      Z*e'jW                  ddd      dedefd       Z,y)    N)date	timedelta)AnyAsyncIterable)	APIRouterHTTPExceptionRequest)EventSourceResponse)
HotelAgent)tool_map)get_reservation)ChatRequest)settings)capture_request_metadata)get_hotel_details)create_conversationsave_conversation)get_available_dates)atrace_as_chain_group)build_other_hotelscompact_cart_for_llmtranscribe_audioz/streamzstream chat   )summarystatus_codeargsrequestc                 V    K   dt         t           f fd}t         |             S w)Nreturnc                   K   	 t                d {   } j                  r)j                  j                         dk(  rpj                  rdt	        j                         d {   _        dj                  z    j                  rj                  j                         dk(  rd_        j
                  sa	 t               d {   }t        j                  j                  j                  j                  j                  |       d {   _        t        j                          j#                  d      }t        j                          t%        d	      z   }t'        j                  j                  j                  j                         d {   \  }}t)        d
t*        j,                  j
                  j                  j                        }	 j.                  r(t1        j2                  t5        j.                              nd}d }	d }
d}d}d}| j                  j                     d   }t7        |dj                  idj
                  i      4 d {   }	 |j9                  j                  j                  j                  || j                  j                     d   | j                  j                     d   | j                  j                     d   t;        j                  j                         d {   |||t1        j2                  j<                        ||xs dj>                  rt1        j2                  j>                        nddj@                  |
|	|      2 3 d {   }|dk(  rd}| 7 x7 )7 # t        $ r0}t        j                  dt        |       d       i }Y d }~d }~ww xY w7 7 :# t        $ r.}t        j                  dt        |              d}Y d }~d }~ww xY w7 7 7 6 |jB                  jD                  jF                  dk7  rn|jB                  jH                  jJ                  r |jB                  jH                  jL                  sn||k\  rn|dz  }|jB                  jN                  dz   }d d |jB                  jQ                         }	t        tS        |jB                  jH                  jJ                  |jB                  jH                  jL                  j                  j                  j                  j                         d {  7        }
j
                  rdj
                  z    ||jB                  jN                  z  }tU        |jB                  ||j                  j                  j                  j                        2 3 d {  7  }d|vr	d |vr||z  }| 6 |jW                  d!|i       d {  7   d d d       d {  7   n# 1 d {  7  sw Y   nxY wj
                  r`tY        j
                  j                  j                  j                  j                  j                  |jZ                         d {  7   y y # t        $ rA}t        j                  dt        |       d       t]        d"dt        |       #      d }~ww xY ww)$N z#query-transcribe:zfUser sends an audio message but no text detected, might be an empty audio message, respond accordinglyz"Error capturing request metadata: T)exc_infoz	%d %B, %Yim  )dayszgpt-5.1)modelapi_keyconversation_idsub_hotel_idzError: r      
hotel_namequestionr&   )inputsmetadatahotel_addresshotel_emailhotel_phonezcart is empty)r*   hotel_idr)   r-   r.   r/   other_hotelsr   checkincheckoutcontextmax_future_booking_allowed	cart_datacustomer_details)inputhistorytool_response	tool_call	callbacks
z<br>get_reservation_details   z

z	#conv_id:#carouseloutputi  )r   detail)/r   r*   stripaudior   r&   r   	Exceptionloggererrorstrr   stateHOTEL_IDSUB_HOTEL_IDr   todaystrftimer   r   r   r   OPENAI_API_KEYr6   jsondumpsr   r   streamr   roomListr7   r9   resulttoolvalueparamsconfirmation_numberemailanswermodel_dump_jsonr   r   on_chain_endr   customer_idr   )
HOTEL_INFOr,   erM   r5   r2   r3   agentr6   r;   r:   final_answerattemptMAX_ATTEMPTSr)   group_managertokenr   r   s                    5/var/www/html/ls-ibe-bot-apis/app/controllers/chat.pysend_messagezchat.<locals>.send_message    sV    ]	L022J==DMM$7$7$9R$?DJJ&6tzz&B B*T]]::}}(;(;(=(C %MDM''"%=g%FFH .APWP]P]PfPfhohuhu  iC  iC  EM  .N  (N$JJL))+6E)-	s8K)K&&9'--:P:PRYR_R_RlRl&m mGXY8O8Oaeauau  EL  ER  ER  E_  E_  `EPTP^P^DJJ';DNN'KLdf	
 I MLGL#GMM$>$>?MJ,Z
DMM?Zevx|  yM  yM  eN  O  O  S`',||$(MM#*==#=#=&0)3GMM4N4N)OP_)`'1'--2L2L'Mm'\'1'--2L2L'Mm'\.@A[A[.\(\ %#*$,#'::dmm#<6P%.%A/QUQfQfDJJt7L7L,Mln;  $||=T]iv (4 (x $e  !D=$*E#o 3 B  G  "LL#Ec!fX!NY]L^!H" (N !n  ws1vh/0	 O )]$ (x( ||((..2KK <<..BB%,,J]J]JcJc,.qLG#(<<#6#6#?L L L % < < >I$'oell>Q>Q>e>eglgsgsgzgz  hA  hA  CJ  CP  CP  CY  CY  [b  [h  [h  [u  [u  /v  )v  )v  %wMI N ''%(<(<<< 3 33#+ELL$SZS`S`SiSikrkxkx  lF  lF  $G    %%<
e0C$-K $G
 $00(L1IJJJe O  O  O  O  Oh ##'(<(<gmm>T>TV]VcVcVpVprvrr  BN  PT  P`  P`  a  a  a $  	LLL73q6(+dL;C'#a&8JKK	Ls  [ Z N
AZ $N%AZ =N NN AZ OBZ OAZ 6O AZ "P#Z &B!XPA,X4P8P9P<X
Z Z N 	O%OZ OZ Z 	P#PZ PZ XPD)X U
BXW"	W
W"+X9W<:X?Z 
XZ X#XX#A,Z ZZ [ 	[<[[[ )r   r   r
   )r   r   rg   s   `` rf   chatrh      s,     ^Lc 2 ^L~ |~..s   %))-rP   loggingdatetimer   r   typingr   r   fastapir   r   r	   sse_starlette.sser
   
app.agentsr   app.agents.tool_mapr    app.agents.tools.get_reservationr   app.schemas.chatr   app.configs.settingsr   app.utils.capture_metar   app.utils.constantsr   app.utils.store_conversationr   r   !app.agents.tools.search_room_toolr    langchain_core.callbacks.managerr   app.utils.extrar   r   r   router	getLogger__name__rG   postrh        rf   <module>r      s      $ % 5 5 1 ! ( < ( ) ; 1 O A B V V 
			8	$  
a/K a/' a/
a/r~   