o
    پi                  
   @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 zd dl
Z
d dlmZmZmZ W n eyD Z zeZW Y dZ[ndZ[ww G dd deZdS )	    N)BaseBackend)get_chat_template)StreamExecutor)SglSamplingParams)GenerationConfigGenerativeModelImagec                       sZ   e Zd Zd fdd	Zdd Zdedefdd	Zdedefd
dZdd Z	dd Z
  ZS )VertexAINc                    sV   t    tttrttjd }tjd}tj	||d || _
td| _|| _d S )NGCP_PROJECT_IDGCP_LOCATION)projectlocationdefault)super__init__
isinstancer   	Exceptionosenvirongetvertexaiinit
model_namer   chat_templatesafety_settings)selfr   r   
project_idr   	__class__ P/home/ubuntu/.local/lib/python3.10/site-packages/sglang/lang/backend/vertexai.pyr      s   




zVertexAI.__init__c                 C   s   | j S N)r   )r   r   r   r    r   #   s   zVertexAI.get_chat_templatessampling_paramsc                 C   sd   |j r
| |j }n|jr| |j|jn|j}t| jj|tdi |	 | j
d}|j}|i fS )N)generation_configr   r   	messages_messages_to_vertexai_input
cur_imagestext_to_vertexai_inputtext_r   r   generate_contentr   to_vertexai_kwargsr   text)r   r"   r#   promptretcompr   r   r    generate&   s   
zVertexAI.generatec                 c   st    |j r| |j }n|jr| |j|jn|j}t| jj|dtdi |	 | j
d}|D ]}|ji fV  q/d S )NT)streamr$   r   r   r%   )r   r"   r#   r.   	generatorr/   r   r   r    generate_stream>   s    
zVertexAI.generate_streamc                 C   sl   g }| | jj}|D ]\}}|d}|dkr|| |t| q|d}|dkr4|| |S )Nr    )splitr   image_tokenpopappendr   
from_bytes)r   r-   imagesinput	text_segs
image_pathimage_base64_datatext_segr   r   r    r)   U   s   



zVertexAI.text_to_vertexai_inputc                 C   s4  g }|D ]}t |d tr|d }n|d d d }|d dkr>td |ddd| igd	 |d
ddigd	 q|d dkrMdd|igd	}n|d dkr[d
d|igd	}t |d trt|d dkr|d dd  D ]}|d dks|J |d d|d d dd ddi qr|| q|S )Ncontentr   r-   rolesystemz4Warning: system prompt is not supported in VertexAI.userzSystem prompt: )rB   partsmodelzUnderstood.	assistant   type	image_urlrE   inline_dataurl,z
image/jpeg)data	mime_type)r   strwarningswarnr9   listlenr6   )r   messagesvertexai_messagemsgr-   vertexai_msgimager   r   r    r'   c   sL   

	z#VertexAI.messages_to_vertexai_inputr!   )__name__
__module____qualname__r   r   r   r   r1   r4   r)   r'   __classcell__r   r   r   r    r	      s    

r	   )r   rQ    sglang.lang.backend.base_backendr   sglang.lang.chat_templater   sglang.lang.interpreterr   sglang.lang.irr   r   "vertexai.preview.generative_modelsr   r   r   ImportErrorer	   r   r   r   r    <module>   s    