
    :j                         d Z ddlZddlZddlmZ ddlmZ  ed      Zddl	Z	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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  G d de      Z  ede        y)z&
StabilityAI provider implementation.
    N)
get_logger   )register_providerprovider)DictListOptionalTuple)NO_RETRY_ERROR_CODES)ErrorReason)CheckResult	Condition)get_user_agent)trim   )http_error_messagehttp_error_statusrequest)AIBaseProviderc                        e Zd ZdZdee   f fdZddedee	   dee	   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 )StabilityAIProviderz$StabilityAI provider implementation.
conditionsc           	      ~    | j                  |dddddd      }t        |   |d   |d   |d	   |d
   |d   |fi | y )Nstabilityaizhttps://api.stability.aiz/v2beta/stable-image/generate core)namebase_urlcompletion_path
model_pathdefault_modelr   r   r   r    r!   )extractsuper__init__)selfr   kwargsconfig	__class__s       B/root/.openclaw/workspace/harvester/search/provider/stabilityai.pyr$   zStabilityAIProvider.__init__    sl    %6#B !'	
 	6N:$%< ?#	
 	
    token
additionalreturnc                 T    t        |      }|syd| ddd}| j                  ||      S )z)Get headers for StabilityAI API requests.NBearer zmultipart/form-dataapplication/json)AuthorizationzContent-TypeAccept)r   _merge_headers)r%   r+   r,   keyheaderss        r)   _get_headersz StabilityAIProvider._get_headers7   s>    5k  'se_1(

 ""7J77r*   addressendpointmodelc                     	 ddt         dt         dt        t           dt        t           dt        dt        t        t         f   f fd}t        |      }|s#t        j                  t        j                        S t        |      xs  j                  }t        j                  j                   j                   j                         d	| }d
dd} |||| j!                  d            \  }}	 j#                  ||	      S )z!Check StabilityAI token validity.   urlr+   fieldsfilesretriesr-   c                 |   t        |       t        |      }} | r|syt        |t              s
t               }t        |t              s
t               }|j                         D ci c]
  \  }}|d |f }}}|j                         D ]  \  }}|\  }}	||	df||<    dddt	        d|      f\  }
}}}||k  r]	 t        d| dd	| t               d
|j                  d            }|j                  }
|j                  }|j                          	 |
|fS |
|fS c c}}w # t        j                  j                  $ rV}t        |      }
|
dk7  r,t        |      }t         j#                  d|  d| d|
 d|        |
t$        v rY d }~|
|fS Y d }~nd }~wt&        $ r Y nw xY w|dz  }t)        j*                  d       ||k  r)N)  r   zapplication/octet-streamrA   r   r   r   POSTr0   r/   )r2   r1   z
User-Agent   default)r5   r>   timeoutz[chat] failed to request URL: z	, token: z, status code: z, message: )r   
isinstancedictitemsmaxr   r   _get_timeoutstatus_codetextcloserequests
exceptions	HTTPErrorr   r   loggererrorr   	Exceptiontimesleep)r<   r+   r=   r>   r?   r   valuemultipart_filesfilenamedatacodemessageattemptresponseer%   s                  r)   post_multipartz1StabilityAIProvider.check.<locals>.post_multipartG   s    cDKCefd+eT*FLllnU{tUtdE]2UOU${{} Ue!&$)149S(T%U
 /22q#a/.I+D'7GG#&&8/6ug->*8*:!
 . $ 1 1" 1 =
 H $//D&mmGNN$$ = 4= S V0  **44 
,Q/Ds{"4Q"7<SE5'Q`ae`ffqryqz{ 33 =  4   1

1A G#s&   $D6AD F9AF

FF/z+Lighthouse on a cliff overlooking the oceanz3:2)promptaspect_ratiorD   )r<   r+   r=   r?   )r[   r\   )NNr;   )strr	   r   intr
   r   r   failr   INVALID_KEY_default_modelurllibparseurljoin	_base_urlr   _get_retries_judge)
r%   r+   r7   r8   r9   r`   r<   r=   r[   r\   s
   `         r)   checkzStabilityAIProvider.checkD   s     op5	!5	! 5	!*24.5	!HPQU5	!hk5	!38_5	!n U##K$;$;<<U2t22%%dnnd6J6JKLAeWUI[`a&3eFTXTeTenoTeTpqg{{g{66r*   c                     g S )z"List available StabilityAI models. )r%   r+   r7   r8   s       r)   inspectzStabilityAIProvider.inspect   s    	r*   )N)r   r   r   )r   r   )__name__
__module____qualname____doc__r   r   r$   rd   r	   r   r6   r   ro   rr   __classcell__)r(   s   @r)   r   r      s    .
4	? 
.8# 88D> 8XVZ^ 8C73 C7 C7S C7c C7[f C7JS 3 s DQTI r*   r   r   )!rv   urllib.parseri   rO   tools.loggerr   registryr   rR   rU   typingr   r   r	   r
   constant.systemr   
core.enumsr   core.modelsr   r   tools.coordinatorr   tools.utilsr   clientr   r   r   baser   r   rq   r*   r)   <module>r      s_      # '	J	  . . 0 " . ,  C C  n. nb -!4 5r*   