
    NgL                         d dl Z d dlmZmZmZmZm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  e j        e          Z G d de
          ZdS )	    N)AnyDictListMappingOptional)CallbackManagerForLLMRun)LLM)convert_to_secret_strget_from_dict_or_envget_pydantic_field_names)
ConfigDictField	SecretStrmodel_validatorc                   V   e Zd ZU dZdZeed<   dZeed<   	 dZ	e
ed<   	 dZeed	<   	 d
Ze
ed<   	 d
Zeed<   	 dZe
ed<   	 dZe
ed<   	 d
Zeed<   	  ee          Zeeef         ed<   	  ee          Zeeee
f                  ed<   	 dZee         ed<    ed          Z ed          edeeef         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fd            Z#	 	 d$ded ee$e                  d!ee%         d"edef
d#Z&dS )%GooseAIa  GooseAI large language models.

    To use, you should have the ``openai`` python package installed, and the
    environment variable ``GOOSEAI_API_KEY`` set with your API key.

    Any parameters that are valid to be passed to the openai.create call can be passed
    in, even if not explicitly saved on this class.

    Example:
        .. code-block:: python

            from langchain_community.llms import GooseAI
            gooseai = GooseAI(model_name="gpt-neo-20b")

    Nclientzgpt-neo-20b
model_namegffffff?temperature   
max_tokens   top_p
min_tokensr   frequency_penaltypresence_penaltyn)default_factorymodel_kwargs
logit_biasgooseai_api_keyignore)extrabefore)modevaluesreturnc           
         t          |           }|                    di           }t          |          D ]Y}||vrS||v rt          d| d          t                              d| d| d| d           |                    |          ||<   Z||d<   t          t          |dd	                    }||d<   	 d
dl	}|
                                |_        d|_        |j        |d<   n# t          $ r t          d          w xY w|S )z>Build extra kwargs from additional params that were passed in.r   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.r!   GOOSEAI_API_KEYr   Nzhttps://api.goose.ai/v1r   zTCould not import openai python package. Please install it with `pip install openai`.)r   getlist
ValueErrorloggerwarningpopr
   r   openaiget_secret_valueapi_keyapi_base
CompletionImportError)clsr&   all_required_field_namesr#   
field_namer!   r0   s          \/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/gooseai.pybuild_extrazGooseAI.build_extraI   sz    $<C#@#@ 

>2..v,, 		; 		;J!999&&$%Jj%J%J%JKKKN* N NN N)3N N N  
 %+JJz$:$:j!!&~/ ):<MNN
 
 %4 !
	MMM,==??FN7FO%0F8 	 	 	?  	
 s   8.C' 'Dc           	      ~    | j         | j        | j        | j        | j        | j        | j        | j        d}i || j        S )z3Get the default parameters for calling GooseAI API.)r   r   r   r   r   r   r   r    )	r   r   r   r   r   r   r   r    r   )selfnormal_paramss     r9   _default_paramszGooseAI._default_paramsm   sP      +/Z/!%!7 $ 5/	
 	
 6-54#455    c                 &    i d| j         i| j        S )zGet the identifying parameters.r   )r   r>   r<   s    r9   _identifying_paramszGooseAI._identifying_params|   s     K<1JT5IJJr?   c                     dS )zReturn type of llm.gooseai rA   s    r9   	_llm_typezGooseAI._llm_type   s	     yr?   promptstoprun_managerkwargsc                     | j         }|d|v rt          d          ||d<   i ||} | j        j        d| j        |d|}|j        d         j        }|S )zCall the GooseAI API.NrH   z2`stop` found in both the input and default params.)enginerG   r   rE   )r>   r,   r   creater   choicestext)r<   rG   rH   rI   rJ   paramsresponserO   s           r9   _callzGooseAI._call   s|     % !UVVV!F6N%F%f%%4;%VT_VVVvVV"'r?   )NN)'__name__
__module____qualname____doc__r   r   __annotations__r   strr   floatr   intr   r   r   r   r   r   dictr   r   r    r   r!   r   r   model_configr   classmethodr:   propertyr>   r   rB   rF   r   r   rR   rE   r?   r9   r   r      s           FC#J###K*J( E5DJE u   ;e$AsJJJ;#(5#>#>#>L$sCx.>>>V-2U4-H-H-HJc5j)*HHHD+/OXi(///:  L _(### c3h  C       [ $# D 6c3h 6 6 6 X6 KWS#X%6 K K K XK 3    X %):>	  tCy! 67	
  
     r?   r   )loggingtypingr   r   r   r   r   langchain_core.callbacksr   #langchain_core.language_models.llmsr	   langchain_core.utilsr
   r   r   pydanticr   r   r   r   	getLoggerrS   r-   r   rE   r?   r9   <module>rf      s    5 5 5 5 5 5 5 5 5 5 5 5 5 5 = = = = = = 3 3 3 3 3 3         
 C B B B B B B B B B B B		8	$	$H H H H Hc H H H H Hr?   