
    7|hT                         d dl mZmZmZmZ d dl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mZmZmZmZ d dlmZ dZd	Z G d
 de      Z G d de      Z G d dee	      Zy)    )AnyDictListOptionalN)CallbackManagerForLLMRun)LLM)convert_to_secret_strget_from_dict_or_envpre_init)	BaseModel
ConfigDictField	SecretStrmodel_validator)enforce_stop_tokenszhttps://api.upstage.ai/v1/solarzhttps://api.upstage.aic                   <    e Zd ZU dZeed<   	 eZeed<   de	de	fdZ
y)_SolarClientz-An API client that talks to the Solar server.api_keybase_urlrequestreturnc                 $   dd| j                   j                          i}t        j                  | j                   d||      }|j
                  s%t        d|j                   d|j                         |j                         d   d   d	   d
   S )NAuthorizationzBearer z/chat/completions)headersjsonzHTTP z error: choicesr   messagecontent)
r   get_secret_valuerequestspostr   ok
ValueErrorstatus_codetextr   )selfr   r   responses       ]/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/solar.py
completionz_SolarClient.completion   s    "gdll.K.K.M-N$OP==}}o./

 {{uX%9%9$:(8==/RSS}}y)!,Y7	BB    N)__name__
__module____qualname____doc__r   __annotations__SOLAR_SERVICE_URL_BASEr   strr   r)    r*   r(   r   r      s.    70*Hc*	C# 	C# 	Cr*   r   c                   t   e Zd ZU dZeed<   eZeed<    e	dd      Z
ee   ed<   	  e	dd	      Zeed
<   	  e	d      Zeed<   dZeed<    edddd      Zedefd       Zedeeef   fd       Zedeeef   fd       Z ed      edeeef   defd              Zededefd       Zedefd       Z y)SolarCommonz$Common configuration for Solar LLMs._clientr   Nr   )defaultaliassolar_api_keyz
solar-minimodel
model_namei   )r6   
max_tokensg333333?temperatureTignorer2   )populate_by_namearbitrary_types_allowedextraprotected_namespacesr   c                 
    ddiS )Nr8   SOLAR_API_KEYr2   r&   s    r(   
lc_secretszSolarCommon.lc_secrets;   s    11r*   c                 J    | j                   | j                  | j                  dS )N)r9   r;   r<   )r:   r;   r<   rD   s    r(   _default_paramszSolarCommon._default_params?   s%     __//++
 	
r*   c                 :    i d| j                   i| j                  S )Nr9   )r:   rG   rD   s    r(   _invocation_paramszSolarCommon._invocation_paramsG   s!    E7DOO,E0D0DEEr*   before)modevaluesc                     |S )Nr2   )clsrL   s     r(   build_extrazSolarCommon.build_extraK   s	     r*   c                    t        |dd      }|t        |      dk(  rt        d      t        |      |d<   d|vr	t        |d<   d|v r*|d   j                  t              st        dt        z         t        |d   |d         |d<   |S )	Nr8   rC   r   z SOLAR_API_KEY must be configuredr   zbase_url must match with: )r   r   r5   )r
   lenr#   r	   r0   
startswithSOLAR_SERVICEr   )rN   rL   r   s      r(   validate_environmentz SolarCommon.validate_environmentP   s    &vP?c'la/?@@"7"@V#!7F:z(:(E(Em(T9MIJJ(?+fZ6H
y r*   c                      y)Nsolarr2   rD   s    r(   	_llm_typezSolarCommon._llm_typec   s    r*   )!r+   r,   r-   r.   r   r/   r0   r   r1   r   r8   r   r   r:   r;   intr<   floatr   model_configpropertydictrE   r   r   rG   rI   r   classmethodrO   r   rT   rW   r2   r*   r(   r4   r4   (   sI   .*Hc*).t9)MM8I&MOL@J@]D)J)K $	L 2D 2 2 
c3h 
 
 FDcN F F (#c3h C   $ $ 4  $ 3  r*   r4   c                   V    e Zd ZdZ ed      Z	 	 ddedeee      dee	   de
d	ef
d
Zy)SolarzSolar large language models.

    To use, you should have the environment variable
    ``SOLAR_API_KEY`` set with your API key.
    Referenced from https://console.upstage.ai/services/solar
    T)r>   Npromptstoprun_managerkwargsr   c                     | j                   }d|dg|d<   |j                  |       | j                  j                  |      }|t	        ||      }|S )Nuser)roler   messages)rI   updater5   r)   r   )r&   r`   ra   rb   rc   r   r%   s          r(   _callzSolar._callt   sZ     ))(.6BC
v||&&w/ 'tT2Dr*   )NN)r+   r,   r-   r.   r   rZ   r1   r   r   r   r   ri   r2   r*   r(   r_   r_   h   sb     L %):>	 tCy! 67	
  
r*   r_   )typingr   r   r   r   r    langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.utilsr	   r
   r   pydanticr   r   r   r   r   langchain_community.llms.utilsr   r0   rS   r   r4   r_   r2   r*   r(   <module>rp      s]    , ,  = . V V  ?: (C9 C&=) =@K r*   