o
    "i                     @   sZ  d dl 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 d dlmZmZmZ d dlmZ d d	lmZmZ e Zejd
edeeeefdededefddZed
eefdefddZedeefdedefddZedeefdedefddZededeefdede
e  defddZ!edeeeefdedededefd d!Z"ed"d#d$d$eefded%e#d&e#d'e#def
d(d)Z$ed*eefdedefd+d,Z%e&deeeefdededefd-d.Z'ed/ed0edeeeefded1e de
e  dedef
d2d3Z(dS )4    )	APIRouterDependsHTTPExceptionQuery)StreamingResponse)Session)Optional)StringIO)get_db)DatasetCreateDatasetResponseSampleCreate)get_training_dataset_manager)get_current_userUser/)response_modeldatasetdbcurrent_userc                    s0   t |}|j| j| jpd| j|j| jd}|S )N )namedescriptiondataset_type
created_bymetadata)r   create_datasetr   r   r   idr   )r   r   r   managerresult r    E/lsinfo/ai/hellotax_ai/training_center/backend/app/api/v1/datasets.pyr      s   r   c                    s6   ddl m} | | }t|   fdd|D S )Nr   TrainingDatasetc                       g | ]}  |qS r    _dataset_to_dict).0dr   r    r!   
<listcomp>"       z!list_datasets.<locals>.<listcomp>)
app.modelsr#   queryallr   )r   r#   datasetsr    r)   r!   list_datasets   s
   r0   z/{dataset_id}
dataset_idc                    sJ   ddl m} |||j| k }|stdddt|}||S )Nr   r"     Dataset not foundstatus_codedetail)	r,   r#   r-   filterr   firstr   r   r&   )r1   r   r#   r   r   r    r    r!   get_dataset$   s   
r9   z/{dataset_id}/versionsc                    sB   ddl m} |||j| k }t|  fdd|D S )Nr   r"   c                    r$   r    r%   )r'   vr)   r    r!   r*   4   r+   z get_versions.<locals>.<listcomp>)r,   r#   r-   r7   parent_version_idr.   r   )r1   r   r#   versionsr    r)   r!   get_versions-   s   
r=   z/{dataset_id}/samplesNsplitc                    sZ   ddl m} |||j| k}|r||j|k}| }t|  fdd|D S )Nr   )DatasetSamplec                    r$   r    )_sample_to_dict)r'   sr)   r    r!   r*   B   r+   zget_samples.<locals>.<listcomp>)r,   r?   r-   r7   r1   r>   r.   r   )r1   r>   r   r?   r-   samplesr    r)   r!   get_samples6   s   rC   samplec              
      sV   t |}z|j| |j|j|j|j|jdW S  ty* } ztdt	|dd }~ww )N)r1   contentlabelr>   source_task_idr   r2   r4   )
r   
add_samplerE   rF   r>   rG   r   
ValueErrorr   str)r1   rD   r   r   r   er    r    r!   rH   E   s   rH   z/{dataset_id}/splitgffffff?g333333?train_ratiovalidation_ratio
test_ratioc              
      sF   t |}z	|| |||W S  ty" } ztdt|dd }~ww )Ni  r4   )r   split_datasetrI   r   rJ   )r1   rL   rM   rN   r   r   rK   r    r    r!   rO   Y   s   rO   z/{dataset_id}/qualityc              
      s@   t |}z|| W S  ty } ztdt|dd }~ww )Nr2   r4   )r   get_quality_metricsrI   r   rJ   )r1   r   r   rK   r    r    r!   rP   g   s   rP   c                    sp   ddl m}m} |||j| k }|stddd|||j| k	  |	| |
  ddiS )Nr   )r#   r?   r2   r3   r4   messagezDataset deleted)r,   r#   r?   r-   r7   r   r8   r   r1   deletecommit)r1   r   r   r#   r?   r   r    r    r!   delete_dataseto   s   
rT   z/{dataset_id}/exportjsonformatc                    sP   t |}|| ||}dddd}tt|g||ddd|  d| id	S )
Nzapplication/jsonzapplication/x-ndjsonztext/csv)rU   jsonlcsvz
text/plainzContent-Dispositionzattachment; filename=dataset_.)
media_typeheaders)r   export_datasetr   iterget)r1   rV   r>   r   r   r   rE   media_typesr    r    r!   r\   ~   s   
r\   ))fastapir   r   r   r   fastapi.responsesr   sqlalchemy.ormr   typingr   ior	   app.core.databaser
   app.schemasr   r   r   %app.services.training_dataset_managerr   app.api.depsr   r   routerpostr   r^   r0   intr9   r=   rJ   rC   rH   floatrO   rP   rR   rT   r\   r    r    r    r!   <module>   s    