o
    iIj                     @   sF   d Z ddlZddlZddlZddlmZ ddddddZdd	 ZdS )
uR   Vultr Serverless Inference — OpenAI-compatible chat with deterministic fallback.    N)configi   )model
max_tokenstoolsc          
      C   s  |pt j}t  }|rt  st| |S || |d}|r$||d< d|d< t| }tj	j
t j d|ddd| d	d
}z*tj	j|dd}t|  }	W d   n1 s\w   Y  |	d d d W S  tjjtjjttjfy   t| | Y S w )zTReturn assistant message dict {role, content, tool_calls?}. Uses fallback if no key.)r   messagesr   r   autotool_choicez/chat/completionsPOSTzapplication/jsonzBearer )zContent-TypeAuthorization)datamethodheadersx   )timeoutNchoicesr   message)r   MODEL_BRAINinference_keyuse_live_llm	_fallbackjsondumpsencodeurllibrequestRequestVULTR_INFERENCE_APIurlopenloadsreaddecodeerror	HTTPErrorURLErrorKeyErrorJSONDecodeError)
r   r   r   r   keypayloadbodyreqrr    r+   !/opt/greenlight/greenlight/llm.pychat	   s.   


r-   c                 C   s8   t dd t| D d}dd| d|d d  dd	S )
Nc                 s   s&    | ]}| d dkr|d V  qdS )roleusercontentN)get).0mr+   r+   r,   	<genexpr>#   s   $ z_fallback.<locals>.<genexpr> 	assistantz[offline fallback / z] Acknowledged: r   u   …)r.   r0   )nextreversed)r   r   r/   r+   r+   r,   r   "   s   r   )	__doc__r   urllib.errorr   urllib.request
greenlightr   r-   r   r+   r+   r+   r,   <module>   s    