o
    Zhr                     @   s   d Z ddlZddlZddlmZmZmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZ eeZG dd	 d	eZdS )
z)Wrapper around Konko AI's Completion API.    N)AnyDictListOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)
ConfigDict	SecretStrmodel_validator)is_openai_v1c                   @   s  e Zd ZU dZdZeed< 	 eed< 	 eed< 	 dZe	e
 ed< 	 dZe	e
 ed< 	 dZe	e ed	< 	 dZe	e ed
< 	 dZe	e
 ed< 	 dZe	e ed< 	 eddZeddedeeef defddZ	d%dede	ee  dedeeef fddZedefddZedefddZedeeef fddZ		d&dede	ee  d e	e dedef
d!d"Z 		d&dede	ee  d e	e! dedef
d#d$Z"dS )'KonkozKonko AI models.

    To use, you'll need an API key. This can be passed in as init param
    ``konko_api_key`` or set as environment variable ``KONKO_API_KEY``.

    Konko AI API reference: https://docs.konko.ai/reference/
    z#https://api.konko.ai/v1/completionsbase_urlZkonko_api_keymodelNtemperaturetop_ptop_k
max_tokensrepetition_penaltylogprobsZforbid)extrabefore)modevaluesreturnc                 C   s<   zddl }W n ty   tdw t|dstd |S )z3Validate that python package exists in environment.r   NzRCould not import konko python package. Please install it with `pip install konko`.Z_is_legacy_openaizYou are using an older version of the 'konko' package. Please consider upgrading to access new featuresincluding the completion endpoint.)konkoImportErrorhasattrwarningswarn)clsr   r    r!   U/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/llms/konko.pyvalidate_environmentC   s   
zKonko.validate_environmentpromptstopkwargsc                 K   sF   |rt |dkr|d n|}i | j||d|}dd | D S )N   r   )r$   r%   c                 S   s   i | ]\}}|d ur||qS Nr!   ).0kvr!   r!   r"   
<dictcomp>d   s    z+Konko.construct_payload.<locals>.<dictcomp>)lendefault_paramsitems)selfr$   r%   r&   Zstop_to_usepayloadr!   r!   r"   construct_payloadW   s   zKonko.construct_payloadc                 C   s   dS )zReturn type of model.r   r!   r0   r!   r!   r"   	_llm_typef   s   zKonko._llm_typec                  C   s   ddl m}  d|  S )Nr   __version__z
langchain/)Zlangchain_communityr6   r5   r!   r!   r"   get_user_agentk   s   
zKonko.get_user_agentc                 C   s   | j | j| j| j| j| jdS )Nr   r   r   r   r   r   r8   r3   r!   r!   r"   r.   q   s   zKonko.default_paramsrun_managerc           	      K   s   ddl }| j||fi |}zt r|jjdi |}n	|jjdi |}W n ty1   tdw t r=|jd j	}|S |d d d }|S )zCall out to Konko's text generation endpoint.

        Args:
            prompt: The prompt to pass into the model.

        Returns:
            The string generated by the model..
        r   N`konko` has no `Completion` attribute, this is likely due to an old version of the konko package. Try upgrading it with `pip install --upgrade konko`.choicestextr!   )
r   r2   r   completionscreate
CompletionAttributeError
ValueErrorr;   r<   )	r0   r$   r%   r9   r&   r   r1   responseoutputr!   r!   r"   _call|   s"   zKonko._callc           
         s   ddl }| j||fi |}z"t r$| }|jjdi |I dH }n|jjdi |I dH }W n ty<   t	dw t rH|j
d j}	|	S |d d d }	|	S )zAsynchronously call out to Konko's text generation endpoint.

        Args:
            prompt: The prompt to pass into the model.

        Returns:
            The string generated by the model.
        r   Nr:   r;   r<   r!   )r   r2   r   Z
AsyncKonkor=   r>   r?   Zacreater@   rA   r;   r<   )
r0   r$   r%   r9   r&   r   r1   clientrB   rC   r!   r!   r"   _acall   s&   zKonko._acallr(   )NN)#__name__
__module____qualname____doc__r   str__annotations__r
   r   r   floatr   r   intr   r   r   r	   Zmodel_configr   classmethodr   r   r#   r   r2   propertyr4   staticmethodr7   r.   r   rD   r   rF   r!   r!   r!   r"   r      s   
 




*
r   )rJ   loggingr   typingr   r   r   r   Zlangchain_core.callbacksr   r   Z#langchain_core.language_models.llmsr   Zpydanticr	   r
   r   Z langchain_community.utils.openair   	getLoggerrG   loggerr   r!   r!   r!   r"   <module>   s    
