
    :j	                         d Z ddl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 d	d
lmZ d	dlmZ  G d de      Z ede       y)z"
QianFan provider implementation.
    N)List)ErrorReason)CheckResult	Condition)trim   )chat   )OpenAILikeProvider)register_providerc                        e Zd ZdZdee   f fdZdedede	f fdZ
dded	ed
edede	f
dZdded	ed
edee   fdZ xZS )QianFanProviderz QianFan provider implementation.
conditionsc           
      Z    | j                  |ddddddd       t        |   d	d|i| y )
Nqianfanzhttps://qianfan.baidubce.comz/v2/chat/completionsz
/v2/modelszernie-4.0-8k-latestz+[a-z0-9]{8}(?:-[a-z0-9]{4}){3}-[a-z0-9]{12})namebase_urlcompletion_path
model_pathdefault_modelendpoint_patternr    )defaultssuper__init__)selfr   kwargs	__class__s      >/root/.openclaw/workspace/harvester/search/provider/qianfan.pyr   zQianFanProvider.__init__   s@    !:#9*!6$R
	
 	9J9&9    codemessagereturnc                 t    |dk(  r#t        j                  t        j                        S t        |   ||      S )zJudge QianFan API response.i  )r   failr   INVALID_KEYr   _judge)r   r!   r"   r   s      r   r'   zQianFanProvider._judge&   s2    3;##K$;$;<<w~dG,,r    tokenaddressendpointmodelc           	         | j                  |      }|s#t        j                  t        j                        S t        |      }|r||d<   t        |      xs | j                  }t        j                  j                  | j                  | j                        }t        |||| j                  d      | j                  d            \  }}| j                  ||      S )zCheck QianFan token validity.r(   appidr   )default
   )urlheadersr+   retriestimeout)r!   r"   )_get_headersr   r%   r   BAD_REQUESTr   _default_modelurllibparseurljoin	_base_urlr   r	   _get_retries_get_timeoutr'   )	r   r(   r)   r*   r+   r2   r1   r!   r"   s	            r   checkzQianFanProvider.check-   s    ##%#0##K$;$;<<>'GGU2t22ll""4>>43G3GH%%a%0%%b%1
g {{g{66r    c                     | j                  |      }|sg S t        |      }|r||d<   t        j                  j	                  | j
                  | j                        }| j                  ||      S )zList available QianFan models.r-   r.   )r1   r2   )r5   r   r8   r9   r:   r;   r   _fetch_models)r   r(   r)   r*   r2   r1   s         r   inspectzQianFanProvider.inspectC   sg    ##%#0I>'GGll""4>>4??C!!c7!;;r    ) rB   rB   )rB   rB   )__name__
__module____qualname____doc__r   r   r   intstrr   r'   r>   rA   __classcell__)r   s   @r   r   r      s    *:4	? : -3 - - -73 7 7S 7c 7[f 7,<S <3 <s <DQTI <r    r   r   )rF   urllib.parser8   typingr   
core.enumsr   core.modelsr   r   tools.utilsr   clientr	   openai_liker   registryr   r   r   r    r   <module>rR      s>      " .   + ';<( ;<| )_ -r    