
    9ix3                        S r SSKrSSK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rSSKrSSKJr  SSKJr  SS	KJr  SS
KJr  SSKr " S S\5      r\R0                  R3                  S5      rSrS rS rS rS(S jrS r Sr!S r"S r#S r$S)S jr%S)S jr&S r' S)S\(4S jjr)S*S\(S\(S\(4S jjr*S*S\(S\(S\(4S  jjr+ S+S\(S!\(S"\,4S# jjr-S+S\(S!\(S"\,4S$ jjr.S\(S%\/S"\,4S& jr0S\(S%\/S"\,4S' jr1g),uS   
本文件实现了请求产线任务

Authors: suoyi@baidu.com
Date:    2024/7/20
    N)configlog)BceClientConfiguration)BceCredentials)	BosClient)ThreadPoolExecutor)tqdm)urljoin)Pathc                       \ rS rSrSrSrg)RequestDatasetException   z)
exception for requesting dataset server
 N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       ]/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/aistudio_sdk/requests/dataset.pyr   r      s     	r   r   z~/.download_max_workers   c                       [        [        S5       n [        U R                  5       R	                  5       5      sSSS5        $ ! , (       d  f       g= f! [
         a  n[        s SnA$ SnAff = f)zmax download workerrN)openMAX_WORKERS_FILEintreadstrip	ExceptionDEFAULT_MAX_WORKERS)fes     r   get_max_workersr$   (   sJ    #"C(Aqvvx~~'( )(( #""#s9   A 'A	A 
AA A 
A.A)#A.)A.c                     SU0n[         R                  " XS9nUR                  5         UR                  5       R	                  S0 5      nUR	                  S/ 5      nU$ )z	file info	datasetId)dataresultfileIds)requestspostraise_for_statusjsonget)urlr&   r'   responser(   file_idss         r   post_request_get_file_idsr2   1   sS    #D}}S,H]]_  2.Fzz)R(HOr   c                     [         R                  R                  [        R                  5      (       d  g[        [        R                  S5       n U R                  5       R                  5       sSSS5        $ ! , (       d  f       g= f)z
load
Nr   )ospathexistsr   
TOKEN_FILEr   r   r   )r"   s    r   
load_tokenr8   ;   sN     77>>&++,,	f	%vvx~~ 
&	%	%s   A66
Bc                     U(       a  U nO[         R                  " SSS9 nSUS.nU (       a  UR                  U 5        U$ )u   
填充header
AISTUDIO_ACCESS_TOKEN defaultapplication/json)Content-TypeAuthorization)r4   getenvupdate)paramstokenauthheaderss       r   _header_fillrG   E   sE     ))3R@A*G vNr   c                 (   SU SU S3n[        X5      n[        5       n[        U5        Ub
  [        US9nO
[        5       n[        R
                  " XFS9nUR                  5         [        UR                  5       5        UR                  5       S   S   $ )zget url/llm/files/datasets/z/file/z	/download)rD   )rF   r(   fileUrl)r
   r8   printrG   r*   r.   r,   r-   )hostr&   fileIdr5   r/   rD   rF   r0   s           r   get_file_urlrN   V   s    !)F6()DD
$
CLE	%LU+.||C1H	(--/==?8$Y//r   i   
c                 \    U (       d  g[         R                  " SU 5      nU(       a  US   $ S$ )filenameNzfilename="?([^";]+)"?r   )refindall)	cd_headerfnames     r   parse_filename_from_cdrU   h   s*    JJ.	:E58&$&r   c                 Z   [         R                  " U SS9nUR                  5         [        UR                  R                  SS5      5      nUR                  R                  SS5      n[        U5      nU(       d1  [        R                  R                  U R                  S5      S   5      nX$4$ )u   获取文件大小和文件名T)allow_redirectszContent-Lengthr   zContent-Dispositionr;   ?)r*   headr,   r   rF   r.   rU   r4   r5   basenamesplit)file_urlr   	file_sizecdrP   s        r   get_file_infor_   p   s    h5AAIIMM"2A67I	
,b	1B%b)H77##HNN3$7$:;r   c                    SSU SU 30n[         R                  " XSS9nUR                  5         [        US5       nUR	                  U5        UR                  SS9 HB  n	U	(       d  M  UR                  U	5        U   UR                  [        U	5      5        S	S	S	5        MD     S	S	S	5        g	! , (       d  f       M^  = f! , (       d  f       g	= f)
downloadRangezbytes=-T)rF   streamzrb+i    )
chunk_sizeN)	r*   r.   r,   r   seekiter_contentwriterB   len)
r\   startend
local_pathpbarlockrF   r0   r"   chunks
             r   download_chunkrp   |   s    &q./G||HdCH	j%	 A	u**d*;EuKKE
+ T < 
!	 
 T 
!	 s)   )B>)B><B,B>,
B;6B>>
Cc                    Uc
  [        5       n[        U 5      u  p4[        R                  R	                  X5      n[        R
                  " USS9  [        R                  R                  U5      (       d&  [        US5       nUR                  U5        SSS5        / n[        SU[        5       H0  nUn	[        U[        -   S-
  US-
  5      n
UR                  X45        M2     SSKJn  [        USSUS	9nU" 5       n[!        US
9 n/ nU H  u  p[        R                  R                  U5      (       a@  [        R                  R#                  U5      nUU
S-   :  a  UR%                  X-
  S-   5        Mi  UR                  UR'                  [(        X	XX5      5        M     U H  nUR+                  5         M     SSS5        UR-                  5         g! , (       d  f       GNC= f! , (       d  f       N1= f)zmulti threadNTexist_okwbr      )LockB)totalunit
unit_scaledescmax_workers)r$   r_   r4   r5   joinmakedirsr6   r   truncaterange
CHUNK_SIZEminappend	threadingrv   r	   r   getsizerB   submitrp   r(   close)r\   	local_dirr}   r]   rP   rl   r"   chunksirj   rk   rv   rm   rn   executorfuturescurrent_sizes                    r   download_file_multithreadedr      s   %' (1Ii2JKK	D) 77>>*%%*d#qJJy! $ F1i,!j.1$i!m4ul# - icdJD6D		4 JEww~~j))!wwz:37*KKa0NNRV] ! AHHJ  
5 	JJL; $# 
5	4s   ?GB2G
G
G-c                     Uc  [         R                  " S5      n[         R                  " S[        R                  S9nU S3n[	        X2X5        g)zold datasetNHOMESTUDIO_GIT_HOSTr<   z/studio/dataset/detail)r4   rA   r   #STUDIO_MODEL_API_URL_PREFIX_DEFAULTdownload_all_files)r&   r   rL   r/   s       r   download_datasetsr      sD    IIf%	99&0Z0Z[DF(
)Cs)7r   c           
      `   [        X5      n[        R                  " USS9  / n[        R                  " 5       n[        SS9 nU H5  n[        XU5      n	UR                  UR                  [        XU5      5        M7     SSS5        U H  n
U
R                  5         M     g! , (       d  f       N(= f)z
all
Trr      r|   N)r2   r4   r   r   rv   r   rN   r   r   r   r(   )r/   rL   r&   localDirr1   tasks	pbar_lockr   rM   r\   tasks              r   r   r      s     )8HKK4(E I		*hF#DV<HLL)DhZcde  
+
   
+	*s   <B
B-rD   c                     [         R                   S3nU  SS.n0 nU(       a  XS'   [        R                  " X#US9nUR                  S:X  a  UR                  5       $ [        SUR                   35      e)uM  
申请ak/sk
response:
{
    "logId": "",
    "errorCode": 0,
    "errorMsg": "",
    "timestamp": 0,
    "result": {
        "accessKeyId": "",
        "secretAccessKey": "",
        "sessionToken": "",
        "fileKey": "",
        "serverTime": 0,
        "expiresIn": 0,
        "endpoint": "",
        "bucketName": ""
    }
}
z/llm/files/aclr>   r@   r?   
bucketName)rF   rC      zFailed to get bos acl: )r   r   r*   r.   status_coder-   r   text)rD   bucket_namer/   rF   rC   r0   s         r   bos_acl_dataset_filer      sy    0 778
GC!7*G F*|||C@Hs"}}%(?&OPPr   file_origin_namefile_keyc                     [        S5       H  n [        XX#U5      nUs  $    g! [         a>  n[        R                  " SUS-    S35        [        R                  " U5         SnAM[  SnAff = f)u7   
上传文件到指定的bucket，并返回文件ID。
   u   add file 失败，重试第ru      次N)r   add_filer   r   error)rD   r   r   r   file_absr   file_idr#   s           r   add_file_with_retryr      sc     1X	uxXGN  ' 	II3AaC5<=IIaLL	   $
A,3A''A,c                 :   [         R                  " S5        [        R                   S3nU  SS.nUUUUS.n[        R
                  " XVUS9nUR                  S:X  a  UR                  5       R                  S5      S	:X  aI  [         R                  " S
5        UR                  5       n	U	R                  S0 5      R                  S5      n
U
$ [         R                  " S5        [         R                  " SU SUR                   35        g[        SUR                   35      e)u)  
上传文件到指定的bucket，并返回文件ID。

Args:
    token (str): 认证token。
    file_origin_name (str): 文件的原始名称。
    file_key (str): 文件在存储中的键值。
    bucket_name (str, optional): 如果提供，则上传到此bucket，否则使用默认bucket。
    file_abs (str, optional): 文件的绝对路径，可选。

Returns:
    dict: 包含操作结果的字典，其中包括logId, errorCode, errorMsg, timestamp和result（包含fileId）。

Raises:
    HTTPError: 如果请求失败，抛出异常。
z
add file..z/llm/files/addfiler>   r   )fileOriginNamefileKeyr   fileAbsrF   r-   r   	errorCoder   add file successr(   rM   u   落库失败add file failed, response:  NzFailed to add file: )r   debugr   r   r*   r+   r   r-   r.   r   r   r   )rD   r   r   r   r   r/   rF   r'   r0   r(   r   s              r   r   r     s    " IIl7788J
KC!7*G
 +!	D }}S=Hs"==?{+q0II(*]]_Fjj2.228<GNIIn%II3D68==/JK%(<X]]O&LMMr   dataset_namer1   c           	          [        S5       H  n [        XX#XE5      nUs  $    g! [         a>  n[        R                  " SUS-    S35        [        R                  " U5         SnAM[  SnAff = f)u7   
创建一个新的数据集，并返回数据集ID。
r   u!   create dataset 失败，重试第ru   r   N)r   create_datasetr   r   r   )	rD   r   r1   dataset_typedataset_absdataset_licenser   
dataset_idr#   s	            r   create_dataset_with_retryr   1  se    
 1X	'XU`rJ  ' 	II9!A#cBCIIaLL	r   c                 P   [         R                   S3nU  SS.nUUUUUS.n[        R                  " XgUS9n	U	R                  S:X  a  [
        R                  " S5        U	R                  5       R                  S5      S	:X  a3  U	R                  5       n
U
R                  S
0 5      R                  S5      nU$ [
        R                  " SU	R                  5       R                  S5       35        [
        R                  " SU SU	R                   35        g[        SU	R                   35      e)u8  
创建一个新的数据集，并返回数据集ID。

Args:
    token (str): 认证token。
    dataset_name (str): 数据集的名称。
    file_ids (list of int): 包含在数据集中的文件ID列表。
    dataset_type (int, optional): 数据集的类型，1 表示私有，2 表示公开。默认为0（私有）。
    dataset_abs (str, optional): 数据集的简介，可选。

Returns:
    dict: 包含操作结果的字典，其中包括logId, errorCode, errorMsg, timestamp和result（包含datasetId）。
    None: 如果请求失败，返回None。

z/llm/files/datasetsr>   r   )datasetName
datasetAbsr)   datasetType
protocolIdr   r   r   r   r   r(   r&   u   数据集创建失败:errorMsgr   r   NzFailed to create dataset: )r   r   r*   r+   r   r   r   r-   r.   r   r   r   )rD   r   r1   r   r   r   r/   rF   r'   r0   r(   r   s               r   r   r   ?  s     7788K
LC!7*G $!#%D }}S=H s"		$&==?{+q0]]_FHb155kBJII.x}}/B/B:/N.OPQII3D68==/JK%(B8==/&RSSr   r   c                     [        S5       H  n [        XU5      nUs  $    g! [         a>  n[        R                  " SUS-    S35        [        R                  " U5         SnAMZ  SnAff = f)u)   
向指定的数据集中添加文件。
r   u&   add file to dataset 失败，重试第ru   r   N)r   add_files_to_datasetr   r   r   )rD   r   r1   r   r(   r#   s         r   add_files_to_dataset_with_retryr   n  sa     1X	)%XFFM  ' 	II>qse3GHIIaLL	s   #
A+3A&&A+c                 J   [         R                   SU S3nU  SS.nSU0n[        R                  " X4US9nUR                  S:X  a  UR                  5       R                  S5      S	:X  aG  [        R                  " S
U S35        [        R                  " S
U SU S35        UR                  5       $ [        R                  " SUR                  5       R                  S5       35        [        R                  " SU SUR                   35        g[        SUR                   35      e)u_  
向指定的数据集中添加文件。

Args:
    token (str): 认证token。
    dataset_id (int): 数据集的ID。
    file_ids (list of int): 需要添加到数据集的文件ID列表。

Returns:
    dict: 包含操作结果的字典，其中包括logId, errorCode, errorMsg, timestamp和result。
    None: 如果请求失败，返回None。

rI   z/addfiler>   r   r)   r   r   r   r   u   向数据集[u   ]中添加文件成功!u   ]中添加文件成功[]u   添加文件失败: r   r   r   Nz Failed to add files to dataset: )r   r   r*   r+   r   r-   r.   r   infor   r   r   r   )rD   r   r1   r/   rF   r'   r0   s          r   r   r   z  s    7788LZLX`
aC!7*G 	8D }}S=Hs"==?{+q0HH}ZL0GHIIIj\1H
RSTU==?"II,X]]_-@-@-L,MNOII3D68==/JK &(H&XYYr   )Nr;   )N)NN)ru   r;   ru   )2r   r-   r*   aistudio_sdkr   r   !baidubce.bce_client_configurationr   baidubce.auth.bce_credentialsr    baidubce.services.bos.bos_clientr   r4   r   concurrent.futuresr   r	   urllib.parser
   pathlibr   rQ   r    r   r5   
expanduserr   r!   r$   r2   r8   rG   rN   r   rU   r_   rp   r   r   r   strr   r   r   listr   r   r   r   r   r   r   r   <module>r      sd     $ D 8 6 	  1     		i 	
 77%%&?@   # "0 
'	,)X8& %Q%QN
s 
c 
S 
*NC *N3 *N# *NZ OPS  t -T# -TS -TD -T^
3 
C 
4 
$Z $Z $Z $Zr   