
    dhT                         S SK JrJrJrJr  S SKrS SKJr  S SKJ	r	  S SK
JrJrJr  S SKJrJrJrJrJr  S SKJr  SrS	r " S
 S\5      r " S S\5      r " S S\\	5      rg)    )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                   F    \ rS rSr% Sr\\S'    \r\	\S'   S\
S\
4S jrSrg	)
_SolarClient   z-An API client that talks to the Solar server.api_keybase_urlrequestreturnc                 *   SSU R                   R                  5        30n[        R                  " U R                   S3UUS9nUR
                  (       d%  [        SUR                   SUR                   35      eUR                  5       S   S   S	   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       V/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/solar.py
completion_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____firstlineno____doc__r   __annotations__SOLAR_SERVICE_URL_BASEr   strr   r*   __static_attributes__r-   r,   r)   r   r      s.    70*Hc*	C# 	C# 	Cr,   r   c                   j   \ rS rSr% Sr\\S'   \r\	\S'   \
" SSS9r\\   \S'    \
" S	S
S9r\	\S'    \
" SS9r\\S'   Sr\\S'   \" SSSSS9r\S\4S j5       r\S\\	\4   4S j5       r\S\\	\4   4S j5       r\" SS9\S\\	\4   S\4S j5       5       r\S\S\4S j5       r \S\	4S j5       r!Sr"g)SolarCommon(   z$Common configuration for Solar LLMs._clientr   Nr   )defaultaliassolar_api_keyz
solar-minimodel
model_namei   )r;   
max_tokensg333333?temperatureTignorer-   )populate_by_namearbitrary_types_allowedextraprotected_namespacesr   c                 
    SS0$ )Nr=   SOLAR_API_KEYr-   r'   s    r)   
lc_secretsSolarCommon.lc_secrets;   s    11r,   c                 J    U R                   U R                  U R                  S.$ )N)r>   r@   rA   )r?   r@   rA   rI   s    r)   _default_paramsSolarCommon._default_params?   s%     __//++
 	
r,   c                 :    0 SU R                   0EU R                  E$ )Nr>   )r?   rM   rI   s    r)   _invocation_paramsSolarCommon._invocation_paramsG   s!    E7DOO,E0D0DEEr,   before)modevaluesc                     U$ )Nr-   )clsrT   s     r)   build_extraSolarCommon.build_extraK   s	     r,   c                 $   [        USS5      nUb  [        U5      S:X  a  [        S5      e[        U5      US'   SU;  a	  [        US'   SU;   a/  US   R                  [        5      (       d  [        S[        -   5      e[        US   US   S9US'   U$ )	Nr=   rH   r   z SOLAR_API_KEY must be configuredr   zbase_url must match with: )r   r   r:   )r
   lenr$   r	   r4   
startswithSOLAR_SERVICEr   )rV   rT   r   s      r)   validate_environment SolarCommon.validate_environmentP   s    &vP?c'la/?@@"7"@V#!7F:z(:(E(Em(T(T9MIJJ(?+fZ6H
y r,   c                     g)Nsolarr-   rI   s    r)   	_llm_typeSolarCommon._llm_typec   s    r,   )#r.   r/   r0   r1   r2   r   r3   r4   r   r5   r   r=   r   r   r?   r@   intrA   floatr   model_configpropertydictrJ   r   r   rM   rP   r   classmethodrW   r   r]   ra   r6   r-   r,   r)   r8   r8   (   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,   r8   c                   \    \ rS rSrSr\" SS9r  SS\S\\	\      S\\
   S	\S
\4
S jjrSrg)Solarh   zSolar 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)rC   Npromptstoprun_managerkwargsr   c                     U R                   nSUS./US'   UR                  U5        U R                  R                  U5      nUb  [	        Xb5      nU$ )Nuser)roler   messages)rP   updater:   r*   r   )r'   rl   rm   rn   ro   r   r&   s          r)   _callSolar._callt   sX     ))(.6BC
v||&&w/ 't2Dr,   r-   )NN)r.   r/   r0   r1   r2   r   re   r5   r   r   r   r   ru   r6   r-   r,   r)   rj   rj   h   sg     L %):>	 tCy! 67	
  
 r,   rj   )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   r4   r\   r   r8   rj   r-   r,   r)   <module>r}      s]    , ,  = . V V  ?: (C9 C&=) =@K r,   