
    :j2=                         d Z ddlZddlZddl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 ddlmZ ddlmZ  ed      Z G d de      Z ede       y)z+
Google Vertex AI provider implementation.
    N)DictListOptional)DEFAULT_QUESTION)ErrorReason)CheckResult	Condition)
get_logger)trim   )chathttp_get   )AIBaseProvider)register_providerproviderc                        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edefd	Zdd
edededede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dee   fdZ xZS )VertexProviderz)Google Vertex AI provider implementation.
conditionsc           	          | j                  |dddddd      }t        |   |d   |d   |d	   |d
   |d   |fi | g ddgddgdgdgddgdgdgd| _        y )Nvertex!https://aiplatform.googleapis.comzY/v1/projects/{project}/locations/{location}/publishers/{publisher}/models/{model}:predictz2/v1/projects/{project}/locations/{location}/modelsgemini-2.5-pro)namebase_urlcompletion_path
model_pathdefault_modelr   r   r   r   r   )gemini
text-bison
chat-bisoncodeytextembeddingmultimodalembeddingclaudellama
code-llamamistraljambacommandembednemotronxgengoogle	anthropicmeta	mistralaiai21coherenvidia
salesforce)extractsuper__init__
publishers)selfr   kwargsconfig	__class__s       =/root/.openclaw/workspace/harvester/search/provider/vertex.pyr9   zVertexProvider.__init__   s     ?#~R!1	
 	6N:$%< ?#	
 	
 n"l+#I '*!l!(	
    token
additionalreturnc                 T    t        |      }|syddd| d}| j                  ||      S )z'Get headers for Vertex AI API requests.Nzapplication/jsonzBearer )acceptzcontent-typeauthorization)r   _merge_headers)r;   rA   rB   headerss       r?   _get_headerszVertexProvider._get_headers>   s?    U ).&ug.

 ""7J77r@   modelc                    t        |      j                         }|j                  d      s|j                  d      sw|j                  d      sf|j                  d      sU|j                  d      sD|j                  d      s3|j                  d      s"|j                  d      s|j                  d	      ry
|j                  d      ry|j                  d      s|j                  d      sd|v ry|j                  d      s|j                  d      sd|v ry|j                  d      ry|j                  d      s|j                  d      sd|v ry|j                  d      ry|j                  d      ryy
)z!Detect publisher from model name.r   r    r!   z
code-bisonzcodechat-bisontext-unicornr"   r#   r$   r/   r%   r0   r&   r'   r1   r(   	codestralr2   r)   r3   r*   r+   r4   r,   r5   r-   r6   )r   lower
startswith)r;   rJ   s     r?   detect_publisherzVertexProvider.detect_publisherK   sT   U!!# X&--- 01/(0 56h'g&%*:*:<*HGW\L\i(E,<,<[,IYZ_M_g&i(E,<,<W,EUZIZj)f% r@   projectlocationactionc                    t        |      }t        |      }t        |      }|r|sy| j                  |      }|dk(  r|dk(  r#d}n |dk(  r|dk(  rd}n|dv r|dk(  r
d}n|dk(  rd}|rd| d	}nd
}d}| d| d| d| d| d| }|S )zBuild Vertex AI API URL. r/   predictgenerateContentr0   
rawPredict)r1   r2   r3   r4   https://-aiplatform.googleapis.comr   global/v1/projects//locations//publishers/z/models/:)r   rP   )r;   rQ   rR   rJ   rS   	publisherr   urls           r?   	build_urlzVertexProvider.build_urln   s    w->Ue))%0	  "*+%"%AA"% "% !(+EFH:HH
-yH:\R[Q\\dejdkklmsltu
r@   codemessagec                    t        |      }|dk(  rt        j                         S |dk(  rt        j                  d|t        j
                        r#t        j                  t        j                        S t        j                  d|t        j
                        rt        j                  t        j                        S |dk(  rlt        j                  d|t        j
                        r#t        j                  t        j                        S t        j                  t        j                        S |dk(  rIt        j                  d	|t        j
                        r#t        j                  t        j                        S t        | 5  ||      S )
zJudge Vertex AI API response.   i  zAPI_KEY_INVALID|invalid.*key)flagszPERMISSION_DENIED|permissioni  zquota|billingi  zmodel.*not.*found)r   r   successrefindallIfailr   INVALID_KEY	NO_ACCESSNO_QUOTANO_MODELr8   _judge)r;   rc   rd   r>   s      r?   rq   zVertexProvider._judge   s   w-3;&&((S[zz97"$$O"''(?(?@@;WBDDQ"''(=(=>>S[zz*G244@"''(<(<=="''(=(=>>S[zz.rttD"''(<(<==w~dG,,r@   addressendpointc           	      "   t        |      }|s#t        j                  t        j                        S t        |      xs d}t        |      }t        |      xs | j
                  }|s8t        j                  d       t        j                  t        j                        S | j                  |||d      }|s>t        j                  d| d|        t        j                  t        j                        S | j                  |      }|s#t        j                  t        j                        S | j                  |      }	|	dk(  rdd	t        igd
gdddd}
nx|	dk(  rdt        dgdddd}
nc|	dk(  rdt        ddddgi}
nN|	dk(  rdt        ddddgi}
n9|	dk(  rddt        dgdddgi}
n"|	dk(  rdt        dddgi}
ndt        ddddgi}
t        |||
| j                  d      | j                  d             \  }}| j!                  ||!      S )"zCheck Vertex AI token validity.r[   $Project ID is required for Vertex AIrV   z!Failed to build URL for project: z	, model: rA   r/   usertext)rolepartsg?d   )temperaturemax_output_tokens)contentsgeneration_configr0   )ry   contentzvertex-2023-10-16)messagesanthropic_version
max_tokensr|   r1   	instances)r|   max_new_tokens)inputs
parametersr2   )r|   r   r3   )r   r   r|   r4   )rd   r   r|   r   )default
   )ra   rH   paramsretriestimeout)rc   rd   )r   r   rl   r   rm   _default_modelloggererrorBAD_REQUESTrb   rI   rP   r   r   _get_retries_get_timeoutrq   )r;   rA   rr   rs   rJ   rR   rQ   ra   rH   r`   r   rc   rd   s                r?   checkzVertexProvider.check   su   U##K$;$;<< =,Hx.U2t22LL?@##K$;$;<<nnWhyALL<WIYugVW##K$;$;<<##%#0##K$;$;<< ))%0	 &,AQ8R7STU58s%SF +% '-9IJK%8!"	F &  "269S&QF +% "269&MF &  .4AQ%R$S&)'*F (" #3&)'*F "269S&QF %%a%0%%b%1
g {{g{66r@   c           	         t        |      }|s%t        j                  d       | j                         S t        |      xs d}t        |      }|st        j	                  d       g S g }g d}|D ]  }	 |r|dk7  rd| d}	nd}	d}|	 d| d	| d
| d}
| j                  |      }|s9t        |
|d      }|sJt        j                  |      }|j                  dg       }|D ]{  }|j                  dd      }|j                  dd      }|s*|j                  d      }t        |      dk\  r|d   dk(  r|d   }|j                  |       h|sk|j                  |       }  |s	 |r|dk7  rd| d}	nd}	d}|	 d| d	| d}
| j                  |      }|rt        |
|d      }|rt        j                  |      }|j                  dg       }|D ]T  }|j                  dd      }|s|j                  d      }t        |      dk\  s8|d   dk(  sA|j                  |d          V t        t!        |            }|s%t        j                  d       | j                         S t#        |      S # t        $ r&}t        j                  d| d|        Y d}~'d}~ww xY w# t        $ r"}t        j	                  d|        Y d}~d}~ww xY w)z List available Vertex AI models.z/No token provided, returning default model listr[   ru   r.   rY   rZ   r   r\   r]   r^   z/modelsrv   r   )ra   rH   intervalmodelsr   rU   displayName/   z$Failed to get models from publisher z: N   z,Failed to get models from general endpoint: z5No models found via API, returning default model list)r   r   warning_get_default_modelsr   rI   r   jsonloadsgetsplitlenappend	Exceptiondebuglistsetsorted)r;   rA   rr   rs   rR   rQ   r   r:   r`   r   ra   rH   r   datarJ   r   display_namerz   model_ideunique_modelss                        r?   inspectzVertexProvider.inspect  s   UNNLM++-- =,Hx.LL?@I  l
# %	I$H 4!)(3MNHBH'H!
-yH:\ZcYddkl++%+8"sGaHzz'*(B/# 8E 99VR0D#(99]B#?L !%

3u:?uRyH/D',RyH"MM(3)"MM,78+%	P QH 4!)(3MNHBH'H!
-yH:WU++%+8&3!LG#zz'2!%(B!7%+ =E#(99VR#8D#(,

3#&u:?uRyH7L$*MM%)$<= S[) NNRS++--m$$O  CI;bQRPSTU8  QKA3OPPQs]   24I+'I+8AI+A I+I+$BJ &J J J +	J4JJ	K&KKc                 
    g dS )z)Get default Vertex AI models list (2025).)(r   zgemini-2.5-flashzgemini-2.0-flash-expzgemini-1.5-pro-002zgemini-1.5-flash-002zgemini-1.5-flash-8bzgemini-exp-1206ztext-bison-32krL   zcode-bison-32kzcodechat-bison-32kzclaude-opus-4zclaude-sonnet-4zclaude-3-7-sonnetzclaude-3-5-sonnet-v2@20241022zclaude-3-5-haiku@20241022zclaude-3-5-sonnetzclaude-3-opus@20240229zclaude-3-sonnet@20240229zclaude-3-haiku@20240307zllama-3.1-405b-instruct-maaszllama-3.1-70b-instruct-maaszllama-3.1-8b-instruct-maasz"llama-3.2-90b-vision-instruct-maasz"llama-3.2-11b-vision-instruct-maaszllama-3.2-3b-instruct-maaszllama-3.2-1b-instruct-maaszcode-llama-34b-instruct-maaszmistral-large-2407zmistral-nemo-2407zcodestral-2405zmistral-7b-instruct-v0.3zjamba-1.5-largezjamba-1.5-minizcommand-r-plus-08-2024zcommand-r-08-2024zembed-english-v3.0zembed-multilingual-v3.0znemotron-4-340b-instructzxgen-7b-8k-instruct )r;   s    r?   r   z"VertexProvider._get_default_modelsn  s    0
 0	
r@   )N)rV   )rU   rU   rU   )rU   rU   )__name__
__module____qualname____doc__r   r	   r9   strr   r   rI   rP   rb   intr   rq   r   r   r   __classcell__)r>   s   @r?   r   r      s    3!
4	? !
F8# 88D> 8XVZ^ 8!c !c !F" " "C " "]` "H-3 - - -,c73 c7 c7S c7c c7[f c7J_%S _%3 _%s _%DQTI _%B2
T#Y 2
r@   r   r   )r   r   ri   typingr   r   r   constant.systemr   
core.enumsr   core.modelsr   r	   tools.loggerr
   tools.utilsr   clientr   r   baser   registryr   r   r   r   r@   r?   <module>r      sU     	 ' ' , " . #  #   '	J	H
^ H
V (N +r@   