o
    "i                     @   s  U d dl Z d dlmZmZmZ d dlmZmZ d dlm	Z	m
Z
mZmZ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 eZe ZG d
d dZda edB e!d< defddZ"defddZ#ej$dedee#fde
defddZ%ej$dedee#fdedefddZ&ej$dedee#fdedefddZ'ej(de	dee#fde)d e)defd!d"Z*dS )#    N)	APIRouterDependsHTTPException)INGESTED_CHUNKSRETRIEVAL_QUERIES)AgentReportResponseIngestCallRequestIngestCallResponseQueryRequestQueryResponseScoreCallRequestScoreCallResponseContextChunk)IngestionService)RetrievalService)
LLMService)ScoringService)ReportServicec                   @   s6   e Zd ZU eed< eed< eed< eed< eed< dS )ServiceContainer	ingestion	retrievalllmscoringreportN)	__name__
__module____qualname__r   __annotations__r   r   r   r    r   r   ;/home/aiteam/pcaa-dev/ai-call-quality-rag/app/api/routes.pyr      s   
 r   
_containercc                 C   s   | a d S )N)r    )r!   r   r   r   set_container$   s   r"   returnc                   C   s   t d u rtdt S )Nz!Service container not initialized)r    RuntimeErrorr   r   r   r   get_container)   s   r%   z/ingest_call)response_modelpayloadc                 C   sT   |j j| j| j| j| j| jdd | jD d}tj	| jd
| t| j| j|dS )Nc                 S   s   g | ]}|  qS r   )
model_dump).0tr   r   r   
<listcomp>7   s    zingest_call.<locals>.<listcomp>)	tenant_idcall_idagent_id	timestamptags
transcriptr,   )r,   r-   chunks_ingested)r   ingest_callr,   r-   r.   r/   r0   r1   r   labelsincr	   )r'   r!   chunksr   r   r   r4   /   s   r4   z/queryc                 C   sv   |j j| j| j| j| j| jd}tj| jd	  d
dd |D }|jd| j d| }t|dd |D d	S )
N)r,   queryr0   top_kuse_keywordr2   z

c                 S   s    g | ]}d |j  d|j qS )[z] )speakertextr)   xr   r   r   r+   H   s     zquery.<locals>.<listcomp>z3Use this context to answer the user query.

Query: z

Context:
c                 S   s0   g | ]}t |j|j|j|j|j|j|jd qS ))chunk_idr-   r.   r<   r=   scoremetadata)r   r@   r-   r.   r<   r=   rA   rB   r>   r   r   r   r+   O   s    
)answercontext)r   retriever,   r8   r0   r9   r:   r   r5   r6   joinr   rC   r   )r'   r!   r7   context_textrC   r   r   r   r8   =   s$   
r8   z/score_callc              
   C   s`   z|j | j| j| j}W n ty& } ztd tdt	|dd }~ww t
| j| j|dS )Nzscore_call failedi  )status_codedetail)r,   r-   score_payload)r   
score_callr,   r-   r.   	Exceptionlogger	exceptionr   strr   )r'   r!   rJ   excr   r   r   rK   ^   s   
rK   z/agent_reportr,   r.   c                 C   s   |j | |}tdi |S )Nr   )r   agent_reportr   )r,   r.   r!   r   r   r   r   rQ   i   s   rQ   )+loggingfastapir   r   r   app.core.observabilityr   r   app.models.schemasr   r   r	   r
   r   r   r   r   app.services.ingestion_servicer   app.services.retrieval_servicer   app.services.llm_servicer   app.services.scoring_servicer   app.services.report_servicer   	getLoggerr   rM   routerr   r    r   r"   r%   postr4   r8   rK   getrO   rQ   r   r   r   r   <module>   s.   
 (

 
$