
    'jg              	          U d Z ddlZddlZddlmZ ddlZddl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mZmZ ddlmZ ddlmZ ed         Z  ee!          j"        d         Z# ee!          j$        dz  Z% eee j&        e j'                  Z(da)ej*        dz  e+d<   dej*        fdZ,dedefdZ-e(.                    de-dg           e(/                    d          d/d            Z0e(/                    d          d/d            Z1ej2        3                    d e4e#dz  d z  dz  d!z                      Z5 ee5          j$        6                    d"d"#           e(7                    d$ ed% d&d'e5(          d)*           e8d+k    rddl9Z9 e9j:        d,d-e j;        d".           dS dS )0u%  Tatasteel ASGI server — HTTP query endpoint + chat UI.

This module owns the FastAPI/Starlette app lifecycle and the REST handler.
The agent definition lives in ``backend.chanakya.tatasteel.agent``.

Entrypoint::

    uvicorn backend.chanakya.tatasteel.server:app --host 0.0.0.0 --port 8005
    N)Path)logger)Request)JSONResponse)make_metadata_aware_app)AGENT_REGISTRY)deserialize_historyload_conversation_history)
NL2SQLDeps)AgentQueryRequestAgentQueryResponseUIRenderRequesttatasteel_agent)app_factory	tatasteel   z
schema.sql)namedescription_db_poolreturnc            	      V  K   t           t          j        t          j                            dd          t          t          j                            dd                    t          j        d         t          j        d         t          j        d         dd	
           d {V a t           S )NTATASTEEL_DB_HOST	localhostTATASTEEL_DB_PORT5432TATASTEEL_DB_NAMETATASTEEL_DB_USERTATASTEEL_DB_PASSWORD   
   )hostportdatabaseuserpasswordmin_sizemax_size)r   asyncpgcreate_poolosenvirongetint     F/var/www/html/ai-enterprise-brain/backend/chanakya/tatasteel/server.py	_get_poolr2   ,   s       , 3[AARZ^^$7@@AAZ 34/0Z 78
 
 
 
 
 
 
 
 
 Or0   requestc                   K   	 |                                   d{V }t          di |}nQ# t          $ rD}t          t	          j        d| d                                          d          cY d}~S d}~ww xY w|j        7t          |j                  }t          j
        dt          |                     nBt          |j                   d{V }t          j
        dt          |          |j                   t                       d{V }t          |j        pd	t#          j                    |
          }	 t'          j        d|j        dd                   5  t,          j                            |j        ||           d{V }ddd           n# 1 swxY w Y   nn# t          $ ra}t          j        d|           t          t	          j        t5          |          d                                                    cY d}~S d}~ww xY w|j        }g }	|j        }
|
Q|
                                s=|	                    |
                                           |
|
                                =|j         pg }|j!        pd	}|r
|dd         ng }t          i tE          |j        |j#        ||j        |j        |	||j$        |j%        pd|j&        pd|j'        pd                                          |||j(        d          S )u   POST /query — runs the SQL query and returns raw rows + explanation.

    The response is shaped as a ``UIRenderRequest`` so the caller (Chanakya or
    the frontend) can forward it directly to the UI agent's ``POST /query``.
    NzInvalid request: PIPELINE_ERROR)messagecodei  )status_codez>[TATASTEEL] Using {} wire-format history messages (skipped DB)z2[TATASTEEL] Loaded {} messages for conversation {} )
user_emailprogress_queuepoolz{q}x   )q)depsmessage_historyztatasteel query error: {}r   )questionexplanationrowsr:   conversation_idprogress_stepsgenerated_sqlsql_explanationwhat_to_act_onurgencycost_of_inaction)rF   rows_sample	query_logr/   ))jsonr   	Exceptionr   r   failure
model_dumphistoryr	   _logdebuglenr
   rD   r2   r   r:   asyncioQueuelogfirespanrA   r   agentrunerrorstroutputr;   emptyappend
get_nowaitquery_resultrF   r   rB   rG   rH   rI   rJ   rL   )r3   bodyreqexcr@   r<   r?   resultr]   rE   r>   rC   sqlrK   s                 r1   _query_handlerrg   ?   s     
\\^^######''$'' 
 
 
&/H3/H/HO_```kkmm
 
 
 	
 	
 	
 	
 	
 	

 {-ck::
SUXYhUiUijjjj 9#:M N NNNNNNN
G_I]I]_b_rsssD!52gmoo\`aaaD
\%3<#5666 	o 	o*044S\^m4nnnnnnnnF	o 	o 	o 	o 	o 	o 	o 	o 	o 	o 	o 	o 	o 	o 	o 
 
 

.444&s3xx>NOOOZZ\\
 
 	
 	
 	
 	
 	
 	

 ]F!#NA
-		-allnn--- -		- "D


"C"*$rr((K	
".> # 3-! $ 4%4<.$!'!8!@D   jll	
 !&!	
 	
 	
  s]   &+ 
A99A4.A94A9;#F$ .FF$ FF$ F F$ $
H.AH
H
Hz/queryPOST)methodsstartupc                  ^  K   t           j                            dd          } t           j                            dd          }t           j                            dd          }t          j        d           t          j        d|            t          j        d	|            t          j        d
|            t          j        d|t           j                            dd          |           t          j        dt
                     t                       d {V  t          j        d           d S )NTATASTEEL_AGENT_PORT8005r   z	(not set)r   r   z
  Tatasteel Agent ready:u        A2A   → http://0.0.0.0:{}/u$       Chat  → http://0.0.0.0:{}/chatuM       Query → http://0.0.0.0:{}/query  (returns UIRenderRequest for UI agent)u!       DB    → postgres://{}:{}/{}r   r   u       Schema→ {}u%       DB pool → ready (min=2, max=10))r+   r,   r-   rR   info_DEFAULT_SCHEMA_PATHr2   )r#   dbr"   s      r1   _startuprq      s     :>>0&99D	+[	9	9B:>>-{;;DI*+++I0$777I4d;;;I]_cdddI14H[]c9d9dfhiiiI "6777
++I566666r0   shutdownc                  ^   K   t           #t                                            d {V  d a d S d S N)r   closer/   r0   r1   	_shutdownrv      sA       nn r0   PYLOGUE_DB_PATHdatazconversation-historieszchat_history.dbT)parentsexist_okz/chatc                      t           S rt   r   r/   r0   r1   <lambda>r|      s    / r0   zTatasteel AgentzHQuery the Tatasteel construction project database with natural language.)responder_factory
hero_titlehero_subtitledb_pathztatasteel-chat)r   __main__z%backend.chanakya.tatasteel.server:appz0.0.0.0)r"   r#   reload)r   N)<__doc__rU   r+   pathlibr   r)   rW   logurur   rR   starlette.requestsr   starlette.responsesr   backend.chanakya.a2a_contextr   backend.chanakya.configr   backend.chanakya.conversationr	   r
   backend.chanakya.nl2sql_corer   backend.chanakya.schemasr   r   r    backend.chanakya.tatasteel.agentr   pylogue.shellr   create_core_app_cfg__file__ry   _PROJECT_ROOTparentro   r   r   appr   Pool__annotations__r2   rg   	add_routeon_eventrq   rv   r,   r-   r\   _TATASTEEL_DB_PATHmkdirmount__name__uvicornrZ   r#   r/   r0   r1   <module>r      s-      				         ! ! ! ! ! ! & & & & & & , , , , , , @ @ @ @ @ @ 2 2 2 2 2 2 X X X X X X X X 3 3 3 3 3 3 [ [ [ [ [ [ [ [ [ [ < < < < < < 8 8 8 8 8 8k"X&q)tH~~,|; 
 	    !%',
 $ $ $    &?' ?l ? ? ? ?D h 9 9 9 i7 7 7 7 j    Z^^C!99KGJ[[\\       % %dT % B B B 		O11$`"	   
 
 	 	 	 zNNNGK7idi`deeeeee r0   