
    ;Qj                        d dl mZ d dlmZm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	 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 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 G d! d"e      Z G d# d$e      Z G d% d&e      Z G d' d(e      Zy))*    )Literal)	BaseModelFieldc                   <    e Zd ZU ed   ed<   eed<   dZedz  ed<   y)ChatMessage)user	assistantrolecontentN	timestamp)__name__
__module____qualname__r   __annotations__strr        1/var/www/html/meridian/meridian-ai/app/schemas.pyr   r      s!    
%
&&L IsTz r   r   c                   v    e Zd ZU dZdZedz  ed<   dZedz  ed<   dZedz  ed<   dZ	e
dz  ed<   dZe
dz  ed<   y)TripSpeczMirrors goplaces_backend/v4/persistence.py's DEFAULT_TRIP_SPEC shape - kept as a
    free-ish dict for budget/travelers since the caller (Meridian-Backend) owns the
    canonical structure and this service shouldn't need to change when that does.
    N	home_city
start_dateend_datebudget	travelers)r   r   r   __doc__r   r   r   r   r   r   dictr   r   r   r   r   r      sO    
 !IsTz !Jd
!HcDjFD4K!Itd{!r   r   c                   D    e Zd ZU dZedz  ed<   dZedz  ed<   dZe	ed<   y)CostNamountcurrencyTis_estimate)
r   r   r   r    floatr   r!   r   r"   boolr   r   r   r   r      s(    FEDLHcDjKr   r   c                       e Zd ZU eed<   dZedz  ed<   dZedz  ed<    e	e
      Ze
e   ed<    e	e
      Ze
e   ed<    e	e
      Ze
e   ed<    e	e
      Ze
e   ed	<   d
Zeed<   dZedz  ed<   dZedz  ed<   y)GenerateItineraryRequest
trip_briefN	trip_specpreferencesdefault_factoryanswered_questionsflight_candidatesstay_candidatesevent_candidates   num_optionsprovidermodel)r   r   r   r   r   r(   r   r)   r   r   listr,   r-   r.   r/   r1   intr2   r3   r   r   r   r&   r&   "   s    O!%Ix$%#K#%*4%@T
@
 %*$$?tDz?"'"=OT$Z=#(#>d4j>K  HcDjE3:r   r&   c                   D    e Zd ZU  ee      Zee   ed<   dZe	dz  ed<   y)ItineraryDestinationr*   
activitiesNestimated_cost)
r   r   r   r   r4   r8   r   r   r9   r   r   r   r   r7   r7   6   s#    !$7JS	7"&ND4K&r   r7   c                   H    e Zd ZU dZedz  ed<    ee      Zeee	f   ed<   y)ItineraryDayNtitler*   destinations)
r   r   r   r<   r   r   r   r   r=   r7   r   r   r   r;   r;   ;   s,    E3: 5:$4OL$s001Or   r;   c                       e Zd ZU dZdZedz  ed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed<   dZedz  ed	<   dZedz  ed
<   dZedz  ed<   dZeed<   y)SelectedFlightzQA flight chosen (or estimated) by the model for one leg of this itinerary option.Nairlineflight_numberdeparture_airportarrival_airportdeparture_datetimearrival_datetimecostr!   booking_urlTr"   )r   r   r   r   r@   r   r   rA   rB   rC   rD   rE   rF   r#   r!   rG   r"   r$   r   r   r   r?   r?   B   s    [GS4Z $M3:$$(sTz("&OS4Z&%)d
)#'cDj'D%$,HcDj"Kt"Kr   r?   c                       e Zd ZU dZeed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed	<   dZedz  ed
<   dZeed<   y)SelectedStayzNAn accommodation chosen (or estimated) by the model for this itinerary option.nameNaddresscheck_in_datecheck_out_date	room_typecost_per_nightr!   rG   Tr"   )r   r   r   r   r   r   rK   rL   rM   rN   rO   r#   r!   rG   r"   r$   r   r   r   rI   rI   P   sv    X
IGS4Z $M3:$!%NC$J% IsTz #'NEDL'HcDj"Kt"Kr   rI   c                       e Zd ZU eed<   eed<   dZeed<   eed<   dZedz  ed<    e	e
      Ze
eef   ed	<    e	e      Zee   ed
<    e	e      Zee   ed<   y)ItineraryOptionletterrJ   F
is_ai_picksummaryN
total_costr*   daysflightsstays)r   r   r   r   r   rS   r$   rU   r   r   r   rV   r;   r4   rW   r?   rX   rI   r   r   r   rQ   rQ   ]   sj    K
IJL"Jt"$)$$?D$sL 
!?$)$$?GT.!? %d ;E4;r   rQ   c                   T    e Zd ZU ee   ed<   dZedz  ed<    ee      Z	ee
   ed<   y)GenerateItineraryResponseoptionsNprovider_usedr*   skipped_providers)r   r   r   r4   rQ   r   r\   r   r   r]   r   r   r   r   rZ   rZ   h   s1    /"" !%M3:$$)$$?tDz?r   rZ   c                   @    e Zd ZU eed<   dZedz  ed<   dZedz  ed<   y)SuggestQuestionsRequestr'   Nr(   r)   )	r   r   r   r   r   r(   r   r)   r   r   r   r   r_   r_   t   s#    O!%Ix$%#K#r   r_   c                   X    e Zd ZU eed<   eed<   dZed   ed<    ee      Z	ee   ed<   y)	SuggestedQuestionidtextsingle_choice)rd   	free_texttyper*   r[   N)
r   r   r   r   r   rf   r   r   r4   r[   r   r   r   ra   ra   z   s/    G
I2AD'.
/At4GT#Y4r   ra   c                       e Zd ZU ee   ed<   y)SuggestQuestionsResponse	questionsN)r   r   r   r4   ra   r   r   r   r   rh   rh      s    %&&r   rh   c                   @    e Zd ZU ee   ed<   dZedz  ed<   dZe	ed<   y)SuggestResponseRequestconversation_historyNtrip_contextr0   num_suggestions)
r   r   r   r4   r   r   rm   r   rn   r5   r   r   r   rk   rk      s%    {++ $L$+$OSr   rk   c                   "    e Zd ZU eed<   eed<   y)ResponseSuggestionrc   toneN)r   r   r   r   r   r   r   r   rp   rp      s    
I
Ir   rp   c                   @    e Zd ZU ee   ed<    ee      Zee   ed<   y)SuggestResponseResponsesuggestionsr*   context_usedN)	r   r   r   r4   rp   r   r   ru   r   r   r   r   rs   rs      s!    ())#D9L$s)9r   rs   c                   p    e Zd ZU eed<   dZedz  ed<   dZedz  ed<    ee	      Z
e	e   ed<   dZeed<   y)	RecommendStayRequest	itineraryNr(   r)   r*   
candidatesr0   num_recommendations)r   r   r   r   r   r(   r   r)   r   r4   ry   rz   r5   r   r   r   rw   rw      sC    O!%Ix$%#K# #48JT
8  r   rw   c                       e Zd ZU eed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   eed<   dZ	e
ed<   ed	   ed
<   dZedz  ed<   y)StayRecommendationrJ   Nlocationprice_per_nightr!   whyFis_top_pick)search_candidatellm_suggestedsource
source_ref)r   r   r   r   r   r}   r~   r#   r!   r   r$   r   r   r   r   r   r|   r|      sZ    
IHcDj$(OUT\(HcDj	HK788!Jd
!r   r|   c                       e Zd ZU ee   ed<   y)RecommendStayResponserecommendationsN)r   r   r   r4   r|   r   r   r   r   r   r      s    ,--r   r   N)typingr   pydanticr   r   r   r   r   r&   r7   r;   r?   rI   rQ   rZ   r_   ra   rh   rk   rp   rs   rw   r|   r   r   r   r   <module>r      s     %!) !
"y 
"9 y ('9 '
P9 PY 
9 
<i <@	 @$i $5	 5'y 'Y  
:i :
!9 
!" ".I .r   