U
    h                     @   s   d Z ddlZddlmZ ddlmZmZ ddlZddlm	Z	 ddl
mZ ddlmZ dZeee	d	d
dZeeef ee	dddZdS )z5Base interface for loading large language model APIs.    N)Path)AnyUnion)BaseLLM)
get_fields)get_type_to_cls_dictZallow_dangerous_deserialization)configkwargsreturnc                 K   sp   d| krt d| d}t }||kr8t d| d||  }i }tt|krb|td|t< |f | |S )zLoad LLM from Config Dict._typez"Must specify an LLM Type in configzLoading z LLM not supportedF)
ValueErrorpopr   $_ALLOW_DANGEROUS_DESERIALIZATION_ARGr   get)r   r	   Zconfig_typeZtype_to_cls_dictZllm_clsZload_kwargs r   D/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/llms/loading.pyload_llm_from_config   s    

 r   )filer	   r
   c              	   K   s   t | trt| }n| }|jdkrBt|}t|}W 5 Q R X n6|jdrpt|d}t	|}W 5 Q R X nt
dt|f|S )zLoad LLM from a file.z.json)z.yamlz.ymlrzFile type must be json or yaml)
isinstancestrr   suffixopenjsonloadendswithyamlZ	safe_loadr   r   )r   r	   	file_pathfr   r   r   r   load_llm&   s    



r   )__doc__r   pathlibr   typingr   r   r   Z#langchain_core.language_models.llmsr   Zlangchain_core.utils.pydanticr   Zlangchain_community.llmsr   r   dictr   r   r   r   r   r   r   <module>   s   