
    h;jZ                     *   S SK JrJr  S SKJr  S SKJr  S SKJr  S SK	r	S SK
Jr  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJrJr  S SKJr  S SKJr  S SKJ r   S SK!J!r!  S SKJr  S SKJ"r"  S SK#J$r$  S SK%J&r&  S SKJ'r'  S SKJ(r(  S SK)J*r*  SS/S/SS./ SQS/SS./ SQS/SS./ S QS!/S!S.S"/S#/S#S.S"/S$/S$S.S%// S&Q/ S'QS(./ S&QS)S$/S$S*.S%// S&Q/ S'QS(./ S&QS+S$/S$S*.S%// S&Q/ S'QS(./ S&QS,S$/S$S*./ S-Q/ S.Q/ S.Q/ S/QS(.S$/S$S0.S1/S2/S2S.S3.r+\," \+R[                  5       5      r./ S&Q/ S&Q/ S'QS(.S$S)S4./ S&Q/ S&Q/ S'QS(.S$S+S4./ S&Q/ S&Q/ S'QS(.S$S,S4./ S.Q/ S.Q/ S/QS(.S$S5.S6.r/\" 5       r0\0Rc                  S7\S89S9 5       r2 " S: S;\5      r3 " S< S=\5      r4S SK#J$r$  S SK%J&r&  S S
KJr  S S>KJ5r5   " S? S@\5      r6 " SA SB\5      r7 " SC S@\5      r6\0Rq                  SD5      SE\74SF j5       r9\0Rq                  SG5      SE\64SH j5       r:\0Rc                  SI5      SJ 5       r;\0Rc                  SK5      SL 5       r<\0Rc                  SM5      SN 5       r=\0Rc                  SO5      SP 5       r>\0Rc                  SQ5      SR 5       r
\0Rc                  SS5      ST\?SU\?4SV j5       r@\0Rc                  SW5      SX\?SY\?4SZ j5       rA\0Rc                  S[5      \" SS\S]9\" SS^S]9\" SS_S]9\" S5      \" S5      4SX\?S`\?Sa\\?   Sb\\?   Sc\\?   Sd\\B   Se\\B   4Sf jj5       rC\0Rc                  Sg5      Sh\?4Si j5       rD\0Rc                  Sj5      Sk 5       rE\0Rq                  Sl5      SE\34Sm j5       rF\0Rq                  Sn5      SE\44So j5       rG\0Rc                  Sp5       SSq\?Sr\?Sd\B4Ss jj5       rH\0Rq                  St5      Su 5       rI\0Rq                  Sv5      Sw\?4Sx j5       rJ " Sy Sz\5      rK\0Rq                  S{5      SE\K4S| j5       rL\0Rq                  S}5      SE\K4S~ j5       rM\0Rq                  S5      SE\K4S j5       rN\0Rc                  S5      S 5       rO\0Rc                  S5      S 5       rP\0Rc                  S5      S 5       rQ\0Rc                  S5      S 5       rR\0Rc                  S5      ST\?SU\?4S j5       rS\0Rq                  S5      SE\K4S j5       rT\0Rc                  S5      S 5       rU\0Rc                  S5      S 5       rV\0Rc                  S5      S 5       rW\0Rc                  S5      S 5       rX\0Rc                  S5      S\?4S j5       rQ\0Rc                  S5      S\?4S j5       rYS SK#J$r$  S SK%J&r&  \0Rc                  S5      S\?4S j5       rZ\0Rc                  S5      S\?4S j5       r[g)    )FastAPIQuery)HTMLResponse)Path)OptionalN)build_graph)predict_joinability	best_pathgenerate_multi_join_sql)suggest_column_name)	BaseModel)update_column_name)update_table_name)get_cached_tablesget_cached_columnsgenerate_report_sql	interpret)llm_interpret)json_to_report
best_paths)text)engine)find_join_key)merge_paths)semantic_catalogagri_user_addressagri_districts)r!   district_name)targetsgroup_bycolumn_filter)r    r!   agri_subdivisions)r&   subdiv_name)r    r!   r&   
agri_block)r(   
block_name)r    r!   r&   r(   
agri_mouza)r*   
mouza_nameagri_crop_related)agri_activity_pipescrop_season)r,   nameagri_crop_user_rels)r-   r0   r,   )agri_land_user_relsr0   r,   )pipeplotcrop_type_id)r#   required_pathsrequired_pathjoin_keyr$   r%   crop_name_idcrop_variety_id)r0   agri_crop_name_growth_stager,   )r-   r0   r:   r,   )r1   r0   r:   r,   )r#   r6   r5   r$   r%   r1   )r1   plot_no)districtsubdivisionblockmouzar.   season_name	crop_type	crop_namecrop_varietygrowth_stager3   )r6   r5   filter_columnr7   )r6   r5   rE   )rA   rB   rC   rD   /)response_classc                  b    [        S5      n U R                  5       (       d  gU R                  SS9$ )Nztemplates/index.htmlz'<h2>templates/index.html not found</h2>zutf-8)encoding)r   exists	read_text)	html_files    '/var/www/html/database-metadata/main.pyhomerN     s<     +,I8       c                   *    \ rS rSr% \\S'   \\S'   Srg)RenameRequesti  rawreadable N__name__
__module____qualname____firstlineno__str__annotations____static_attributes__rT   rO   rM   rQ   rQ         	HMrO   rQ   c                   *    \ rS rSr% \\S'   \\S'   Srg)TableRenameRequesti  rR   rS   rT   NrU   rT   rO   rM   r_   r_     r]   rO   r_   )Unionc                   *    \ rS rSr% \\S'   \\S'   Srg)BIQueryi  entitymetricrT   NrU   rT   rO   rM   rb   rb     s    KKrO   rb   c                        \ rS rSr% \\S'   Srg)
AskRequesti  questionrT   NrU   rT   rO   rM   rf   rf     s    MrO   rf   c                       \ rS rSr% \\S'   Sr\\S'   Sr\S-  \S'   Sr\S-  \S'   Sr	\
\\\\   4      \S'   Sr\S-  \S	'   Sr\S-  \S
'   0 r\\S'   Srg)rb   i  rc   	aggregatereport_typeNrd   fieldr$   sortlimitfiltersrT   )rV   rW   rX   rY   rZ   r[   rj   rd   rk   r$   r   r`   listrl   rm   intrn   dictr\   rT   rO   rM   rb   rb     so    K"K"FC$JE3:04HhuS$s)^,-4D#*E3:GTrO   z/askreqc                    [        SU R                  5        [        U R                  5      n[        SU5        US   (       d  U$ US   n[        SU5        UR                  S5      S:X  a  S US'   UR                  S5      S:X  a  S US'   UR                  S	5      S:X  a  S US	'   UR                  S
5      S:X  a5  SU R                  R	                  5       ;   a  UR                  S
S 5        SUS'   [        US   UR                  S
S5      UR                  S5      UR                  S	5      UR                  S5      UR                  S5      UR                  S5      UR                  S0 5      S9n[        SU5        [        U5      $ )Nz	QUESTION:zLLM RESPONSE:successdatazDATA:r$    rl   rk   rj   detailscountrd   rc   ri   rm   rn   )rc   rj   rd   rk   r$   rl   rm   rn   zBI REQ:)printrg   r   getlowerpoprb   bi_query)rr   llm_responseru   bi_reqs       rM   askr     s`    
+s||$ .L	/<(	"D	'4xx
r!T*xx2VxxBW 	HH]y(3<<%%''% X> 88H
((7
XXj!	&	
((7
HHY#F 
)VFrO   z	/bi_queryc                    [         R                  " U R                  5      nU(       d  SSU R                   3S.$ US   nUR                  S0 5      nU R                  S:X  Ga  / n/ nU R
                   HA  nUR                  S0 5      R                  U5      nU(       d  M-  UR                  US   5        MC     S	U S
U S3n[        SW	5        [        SW
5        [        SW5        U R
                  (       Ga:  / n0 n	U R
                  R                  5        GH  u  pmUR                  S0 5      R                  U5      nU[        ;   nU(       a  [        U   nSU;   a>  UR                  US   R                  U R                  UR                  S5      5      5        OSU;   a  UR                  US   5        SU;   a  US   WS'   SU;   a  SU;  a  SU;  a  UR                  S5        SU;   a%  US   u  nnU	R                  U0 5        SUS.U	U   U'   U(       d  GM  US   nUS   nU(       d  UU;  a  UR                  U5        U	R                  U0 5        US:X  a  US:X  a  SSS/S.U	U   U'   OSUS.U	U   U'   US:X  a   US:X  a  UR                  U SU S35        GM  UR                  U SU SU S35        GM     [        SU5        [        UU5      n[        S U5        [        U5      n[        S!U5        S"U S#U S$3nU H*  u  nn[        UU5      u  nnUS%U S&U SU S'U SU S$3-  nM,     U(       a3  UR                  5        H  u  nnUR                  U S(U S)U 35        M!     U(       a  US*S+R                  U5      -   -  n[        S,5        [        U5        [        S-5        [        R                   " 5        nUR#                  [%        U5      5      nU Vs/ s H  n['        UR(                  5      PM     nnS S S 5        S.U R                  U R                  U R
                  UWS/.$ UR                  S0 5      n0 n	/ n/ n[+        U R,                  [.        5      (       a  U R,                  OU R,                  (       a  U R,                  /O/ n / n0 nU  H  n!U![0        ;  a  M  [0        U!   n"SU";  a  SU";  a  UR3                  U"S0   5        UR3                  U"S1   5        SU";   a>  UR                  U"S   R                  U R                  U"R                  S5      5      5        OSU";   a  UR                  U"S   5        SU";   d  M  U"S   US'   M     U R
                  R                  5        GH^  u  pmUR                  S0 5      R                  U5      nU[        ;   nU(       a  [        U   nSU;   a>  UR                  US   R                  U R                  UR                  S5      5      5        OSU;   a  UR                  US   5        SU;   a  US   US'   SU;  a  SU;  a  UR                  S5        SU;   a%  US   u  nnU	R                  U0 5        SUS.U	U   U'   U(       d  M  US   nUS   nU(       d  UU;  a  UR                  U5        U	R                  U0 5        US:X  a  US:X  a  SS2S/S.U	U   U'   GMS  SUS.U	U   U'   GMa     [/        [&        R5                  U5      5      nU(       a6  U	R                  U0 5        UR                  5        H  u  nnSUS.X   U'   M     [        S3U R                  5        [        S4U R6                  5        [        S5UR                  S65      5        [        S7[9        UR                  S65      5      5        U R:                  S8:X  a&  UR                  S9UR                  S:5      5      n#Un$S8n%OU R:                  S;;   ao  UR                  S60 5      R                  U R6                  5      n&U&(       a"  U&S   n$U&S   n#U$U;  a  UR                  U$5        OUn$U R6                  n#U R:                  n%OSS<U R:                   3S.$ U$U#/0n
U  HO  n!U![0        ;  a  M  [0        U!   S=   u  n'n(U
R                  U'/ 5        U(U
U'   ;  d  M;  U
U'   R                  U(5        MQ     S>U R
                  ;   aM  U	R                  U0 5        U R
                  S>   S?:X  a  S@SAS.X   S>'   OU R
                  S>   SA:X  a
  SSAS.X   S>'   U$U#U%00n)[        SU	5        [        SU
5        [        SBU)5        [        SU
5        [        SBU)5        [        SC5        [        SDU5        [        SU5        [        SEU5        [        SF5        [        SGU5        [=        UUU
U	UU)UUSH9n[?        U5      SI:  n*U*(       aF  U R:                  U R:                  :X  a,  U R@                  (       d  USJU R:                  -   SK-   U#-   SL-   -  nU*(       aW  U R@                  SM:X  aG  U R:                  S8:X  a  USNU#-   SL-   -  nO+U R:                  S;;   a  USJU R:                  -   SK-   U#-   SL-   -  nU RB                  (       a  USOU RB                   3-  n[        SP5        [        U5        [        S-5        [        R                   " 5        nUR#                  [%        U5      5      nU Vs/ s H  n['        UR(                  5      PM     nnS S S 5        S.U R                  U R:                  U R,                  U R
                  UWSQ.$ s  snf ! , (       d  f       GNG= fs  snf ! , (       d  f       N\= f)RNFzUnknown entity: )rt   messagetablebase_filterrw   rn   columnz
        SELECT z.*
        FROM z	
        zWHERE FILTERS:zCOLUMN FILTERS:zFORCED PATHS:r5   r6   r7   )r0   r,   r0   rE   =)opvaluestatus_levelCARBON_DOCUMENTS_APPROVEDINCARBON_DOCUMENTS_APPROVED_.z? IN ('CARBON_DOCUMENTS_APPROVED', 'CARBON_DOCUMENTS_APPROVED_')z = ''zTARGETS:zDETAIL PATHS:zDETAIL EDGES:z
            SELECT z.*
            FROM z
            z
             JOIN z
                ON z
                = z."z" = z
WHERE z AND z
DETAIL SQL:
T)rt   rc   rj   rn   sqlru   r#   r$   CARBON_DOCMENTS_APPROVEDzENTITY:zFIELD:zMEASURE_COLUMNS:measure_columnszTYPE:rx   count_columnprimary_key)sumavgminmaxzUnsupported metric: r%   geo_typenon_geofencedz!=	geofencedzAGGREGATIONS:z
====================zSOURCE:z	GROUP_BY:z====================
zFORCED_PATHS:)sourcer#   column_filterswhere_filtersr$   aggregationsforced_paths
join_hintsr   z

ORDER BY _z DESCdescz
ORDER BY count_z
LIMIT z
GENERATED SQL:)rt   rc   rd   r$   rn   r   ru   )"r   
get_entityrc   rz   rj   rn   appendry   itemsSEMANTIC_FILTER_CONFIG
setdefaultr   r   r   joinr   connectexecuter   rq   _mapping
isinstancer$   ro   GROUP_BY_CONFIGextendfromkeysrk   typerd   r   lenrl   rm   )+rr   entity_infor   r   
conditionsfilter_columnsfilter_namefilter_infor   r   r   r   r#   filter_valuesemantic_filtersemantic_cfgr   target_tabletarget_columnpathsedges
left_tableright_tableleft_col	right_colcolr   connrowsrresultr$   group_dimensions	dimensionconfigmetric_columnmetric_tableagg_functionmeasure_info
table_namecolumn_namer   has_groupings+                                              rM   r}   r}     s@    #--

K )#**6
 	

  E //
K
 )#
;;K%// c+ 
 {%%) 'w W 	 	.0o|,;;;GM-0[[->->-@)&1oo%' #k* $ (+AA ( + !7$/!" )  0<? , 3 3$01A$B$F$F(+

(4(8(8(I%&!" "1L!@ , 3 3$0$A!"  *\9 %1$< !+%&!" !0< ?$4L$H$9$H '$9!"  /,> %1$A !<m !. 8 8$0$&!" +.-9N"l ;M J  +$'27';(3H(= !0 ,G ;#NN , &00( (>9 ,0K K '+$?$@*"JM,7F '*)5JM,7F
 (>9 ,0K K '--#/.- A@ !@ '--#/.-\NRS Ti .At *g&E
 /5)&E/5)7  C
 ,1'
K&3'#)
  -  <q
 +-q ,  ,1 )//1
U!!gRuD0 2
 zGLL$<<<oc
d^^<<S	D "! QZZ !    jj??{{
 	
 //
K
 MGH cllD)) 	 || ll^  LJ%	O+ 
 F*v-NNy! 	:	
 v%'(,,JJJJ/ &'  z" K &f &)[[%6%6%8!!oo
 #k
 	
  #99 	  /' ! (<7$++()9:>> #

 , 0 0 A )L8$++(9 "\1 )4 # -L@ 5W D#NN 5 ',6 !-_ = 8L- *44 , " '*)5JM,7F
 "7+#H-
  G+NN<( 	  	
 >) ;; .0:M,'6 %:M,'6I &9X gG   	

 &++-JC )M % . 
)SZZ 	(CII	
koo.?@A	'4(9:;<
zzW#OOM*

 	  
 S"B'S^ 	 '0L(2M7*|, !LIIMzz
 -cjj\:
 	
 	}oN &	O+  	 
K 	!!	

 nZ88f) &6 S[[   	

 ;;z"o5 $0M ,
 [[$3 $0M , 	<
L 

M*	
^,	/<(
 

^,	/<(	
"#	)U	*g	+x 	
"#	/<( "%#!!	C x=1$L

cjj(HH!jj! $$ 	C F" :: # C ZZ   !jj! $$ 	 yy#))%%	
	#J	$K 
	T||I
 
  	 
 
 ****LL;; s t
 
	s<   >l>l9<l>?mm=m9l>>
mm
m#z/bi_testc                     [        S/ SS/0SSS00S9n [        R                  " 5        nUR                  [	        U 5      5      nU Vs/ s H  n[        UR                  5      PM     nnS S S 5        U WS.$ s  snf ! , (       d  f       N= f)N
agri_usersuser_idrx   r   r#   r   r   )r   ru   )r   r   r   r   r   rq   r   )r   r   r   r   r   s        rM   bi_testr     s     "9+
 7
C 
	T||DI& 
  	 
	 
  
	 
	s   A;A6'A;6A;;
B	z/test_farmer_countc                  0    [        S/ SS/0SSS00S9n SU 0$ )Nr   r   rx   r   r   r   )r   s    rM   test_farmer_countr     sE     "9+
 7
C 	s rO   z/tablesc                      [        5       $ Nr   rT   rO   rM   tablesr     s    rO   z/columnsc                      [        5       $ r   r   rT   rO   rM   columnsr     s    rO   z/graphc                  l    [        5       n [        U R                  5      [        U R                  5      S.$ )N)nodesr   )r   ro   r   r   )Gs    rM   graphr     s$    A!'']T!''];;rO   z/predict_joint1t2c                      [        X5      nSU0$ )Njoinability_score)r	   )r   r   scores      rM   predictr     s    'E''rO   z
/best_pathr   targetc                     S[        X5      0$ )Nr
   )r
   )r   r   s     rM   pathr     s    6233rO   z!/generate_multi_join_sql_filteredz)Format: table1.col1,col2;table2.col3,col4)descriptionz5JSON: {"table": {"col": {"op": "=", "value": "val"}}}zJSON: [["table", "col", "asc"]]r#   r   whereorderrm   offsetc           	         UR                  S5      n0 nU(       aX  UR                  S5       HC  n	U	R                  S5      n
U
S   n[        U
5      S:  a  U
S   R                  S5      OS/nXU'   ME     U(       a  [        R                  " U5      O0 nU(       a  [        R                  " U5      O/ n[	        U UUUUUU5      nSU0$ )N,;r   r      *r   )splitr   jsonloadsr   )r   r#   r   r   r   rm   r   target_listr   grouppartsr   colsr   order_byr   s                   rM   multi_join_sql_filteredr     s     --$KN]]3'EKK$E!HE*-e*q.58>>#&seD$(5!	 ( */DJJu%BM$)tzz% rH
!C 3<rO   z/suggest_column_namerR   c                 :    [        U 5      u  pU[        US5      S.$ )N   )suggested_name
confidence)r   round)rR   r/   r   s      rM   suggestr    s    %c*KD"%q/BBrO   z/columns_with_suggestionsc                      [        5       n 0 nU R                  5        H)  u  p#U Vs/ s H  nU[        U5      S   S.PM     snX'   M+     U$ s  snf )Nr   )original	suggested)r   r   r   )rR   r   r   r   r   s        rM   columns_with_suggestionsr    s^    

CFyy{ 
 +>s+CA+FG
 #
 M	
s   Az/rename_columnc                     [        U R                  U R                  5        SSU R                   SU R                   S30$ )Nr   z	Renamed '' to 'r   )r   rR   rS   rr   s    rM   rename_columnr    s6    sww-377)6#,,qABBrO   z/rename_tablec                     [        U R                  U R                  5        SSU R                   SU R                   S30$ )Nr   zRenamed table 'r
  r   )r   rR   rS   r  s    rM   rename_table_apir    s6    cggs||,	~QGHHrO   z/generate_reportrd   r   c                     [        U UUS9$ )Nrd   r   rm   r   r  s      rM   generate_reportr    s      rO   z/refresh_schemac                      [         R                  " 5         [        R                  " 5         [        5         [        5         SS0$ )Nr   zSchema cache refreshed)r   cache_clearr   rT   rO   rM   refresh_schemar  &  s4     !!#""$/00rO   z/understand_query_rulequeryc                     [        U 5      $ r   r   )r  s    rM   understand_query_ruler  1  s     UrO   c                        \ rS rSr% \\S'   Srg)QueryRequesti7  r  rT   NrU   rT   rO   rM   r  r  7  s    JrO   r  z/understand_queryc                 ,    [        U R                  5      $ r   )r   r  r  s    rM   understand_queryr  :  s     ##rO   z/generate_report_definitionc                 `    [        U R                  5      nUS   (       d  U$ [        US   5      $ )Nrt   ru   )r   r  r   )rr   
llm_results     rM   generate_report_definitionr  @  s5     syy)Ji 6 rO   z/generate_sql_from_queryc                     [        U R                  5      nUS   (       d  U$ [        US   5      n[        US   US   US   US   S9nSUUS	.$ )
Nrt   ru   r   r#   r   r   r   r#   r   r   T)rt   r   report_definition)r   r  r   r   )rr   r  reportr   s       rM   generate_sql_from_queryr#  L  st     syy)Ji 6F "hy!./_-	C # rO   z/debug_pathc                       S[        SS/5      0$ )Ndistrict_pathr   r!   r   rT   rO   rM   
debug_pathr&  d  s"     	!" rO   z/debug_pathsc                  &    / SQn S[        SU 5      0$ )N)r!   agri_crop_historyr0   r   r   r   )r#   s    rM   debug_pathsr)  p  s%    G 	
 rO   z/debug_columnsc                      SSK Jn   U " 5       nUR                  S5      UR                  S5      UR                  S5      UR                  S5      S.$ )Nr   r   r   r!   r    	agri_land)r   r!   r    r+  schema_cacher   rz   )r   r   s     rM   debug_columnsr.    sM     0D hh|,((#34!XX&9:XXk*	 rO   z/debug_path_addressc                       S[        SS/5      0$ )Nr   r   r    r   rT   rO   rM   debug_path_addressr0    s!     	
 !
 rO   z/debug_shared/{t1}/{t2}c                 b    [        5       nS[        [        X    5      [        X!   5      -  5      0$ )Nshared)r   ro   set)r   r   r   s      rM   debug_sharedr4    s9     D 	$MM
 rO   z/execute_queryc                    [        U R                  5      nUS   (       d  U$ [        US   5      n[        US   US   US   US   S9n [        R
                  " 5        nUR                  [        U5      5      nUR                  S5       Vs/ s H  n[        UR                  5      PM     nnS S S 5        S	U[        W5      US
.$ s  snf ! , (       d  f       N#= f! [         a  nSU[        U5      S.s S nA$ S nAff = f)Nrt   ru   r   r#   r   r   r      T)rt   r   rx   ru   F)rt   r   error)r   r  r   r   r   r   r   r   	fetchmanyrq   r   r   	ExceptionrZ   )	rr   r  r"  r   r   r   rowr   es	            rM   execute_queryr<    s    syy)Ji 6F "hy!./_-	C
^^<<S	D  >>"--C S\\"-    [	
 	
 $  
 V
 	

sH   	C .C
C+C
-C C


CC 
C>%C93C>9C>z/sample_user_addressc                      [         R                  " 5        n U R                  [        S5      5      nU Vs/ s H  n[	        UR
                  5      PM     snsS S S 5        $ s  snf ! , (       d  f       g = f)Nz
                SELECT
                    user_id,
                    district
                FROM agri_user_address
                LIMIT 20
            )r   r   r   r   rq   r   )r   r   r   s      rM   sample_user_addressr>    sg     
	T||  
 
 
 
	
 
	s   A%A A% A%%
A3z/debug_path_districtc                       S[        SS/5      0$ )Nr   r    r!   r   rT   rO   rM   debug_path_districtr@    s!     	

 rO   z/debug_shared_address_districtc                  ,    [        5       n U S   U S   S.$ )Nr    r!   )r    r!   r   )r   s    rM   debug_shared_address_districtrB    s*     D ""56/0 rO   z/debug_full_pathc                  "    S[        S/ SQ5      0$ )Nr   r   )r    r!   r(  r0   r   rT   rO   rM   debug_full_pathrD    s      	

 
rO   z/debug_columns/{table}r   c                 F    SSK Jn  U" 5       nU UR                  U / 5      S.$ )Nr   r   )r   r   r,  )r   r   r   s      rM   r.  r.    s,     0D 88E2& rO   z/search_column/{column_name}r   c                     SSK Jn  U" 5       n0 nUR                  5        HH  u  pEU Vs/ s H)  nU R                  5       UR                  5       ;   d  M'  UPM+     nnU(       d  MD  XsU'   MJ     U$ s  snf )Nr   r   )r-  r   r   r{   )r   r   r   r   r   r   cmatchess           rM   search_columnrI    sx     0DF**, 
!  "aggi/ w 	 

 7#5M ' M
s   &A.A.z/run_sqlr   c                 n    [         R                  " 5        nUR                  [        U 5      5      nUR	                  5        Vs/ s H  n[        UR                  5      PM     nnS S S 5        S[        W5      US.$ s  snf ! , (       d  f       N"= f! [         a  nS[        U5      S.s S nA$ S nAff = f)NT)rt   rx   ru   F)rt   r7  )
r   r   r   r   fetchallrq   r   r   r9  rZ   )r   r   r   r   r   r;  s         rM   run_sqlrL  7  s    
^^\\S	F  **A QZZ *    Y
 	
 "  
 V
 	

sF   B -BA<#B%B <B
BB 
B4B/)B4/B4z/search_tables/{keyword}keywordc                     SSK Jn  U" 5        Vs/ s H)  nU R                  5       UR                  5       ;   d  M'  UPM+     sn$ s  snf )Nr   r   )r-  r   r{   )rM  r   ts      rM   search_tablesrP  T  sE     / #$$A==?aggi' 	
$  s
   &AA)r6  )\fastapir   r   fastapi.responsesr   pathlibr   typingr   r   r   r   mlr	   r
   join_generatorr   semantic_renamer   pydanticr   r   table_renamer   r-  r   r   report_generatorr   query_interpreterr   llm_interpreterr   r   r   
sqlalchemyr   dbr   r   r   bi_engine.semantic_loaderr   r   ro   keysGROUPABLE_DIMENSIONSr   apprz   rN   rQ   r_   r`   rb   rf   postr   r}   r   r   r   r   rZ   r   r   rp   r   r  r  r  r  r  r  r  r  r  r  r#  r&  r)  r.  r0  r4  r<  r>  r@  rB  rD  rI  rL  rP  rT   rO   rM   <module>rd     sT   " *     - 2 /  . * 1 ' ) ) 2    ( & 6  

 0


 1

 
 )

"
 )

&  
 3

  
 *

 	

 %7F 	

 %9 H 	

 "%7D

$ 	&I(X 	
 	+	Mup  
 #18
 #18
 &1:

 1gp f i\*	 +	I  
    i 
 i  &.Z . .` +c
' c
 c
P  : 	 &       < < ( ( ( ( 4 4c 4 4 	,- #45`a 3vw 3Z[ ;!$K c] C=	
 C= C= SM .@ 	 C C !C 	$% & 
C} C C /I, I I 	 


 
 
 
1 1 
"#  $
9  
$, $ $
 
'(	L 	 )	 
$%  &.      	  	   	"#	S 	c 	 $	 
,
| ,
 ,
` 	 
 !
& 	  ! 	)* + 	  	!"	 	 #	 	'(s  )*  
 
 
8 	#$3  %rO   