U
    hY                     @   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 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)	SecretStrroot_validator)is_openai_v1c                   @   sr  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< G dd dZeddeeef eeef dddZd#ee	ee  eeeef dddZeedddZeedddZeeeef dddZd$ee	ee  e	e eeddd Zd%ee	ee  e	e eed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logprobsc                   @   s   e Zd ZdZdS )zKonko.ConfigZforbidN)__name__
__module____qualname__extra r   r   B/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/llms/konko.pyConfig?   s   r   T)pre)valuesreturnc                 C   sB   zddl }W n tk
r(   tdY nX 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   r   r   validate_environmentB   s    

zKonko.validate_environment)promptstopkwargsr   c                 K   s@   |rt |dkr|d n|}| j||d|}dd | D S )N   r   )r&   r'   c                 S   s   i | ]\}}|d k	r||qS )Nr   ).0kvr   r   r   
<dictcomp>b   s       z+Konko.construct_payload.<locals>.<dictcomp>)lendefault_paramsitems)selfr&   r'   r(   Zstop_to_usepayloadr   r   r   construct_payloadU   s    zKonko.construct_payload)r   c                 C   s   dS )zReturn type of model.r   r   r1   r   r   r   	_llm_typed   s    zKonko._llm_typec                  C   s   ddl m}  d|  S )Nr   __version__z
langchain/)Zlangchain_communityr7   r6   r   r   r   get_user_agenti   s    zKonko.get_user_agentc                 C   s   | j | j| j| j| j| jdS )Nr   r   r   r   r   r   r9   r4   r   r   r   r/   o   s    zKonko.default_params)r&   r'   run_managerr(   r   c           	      K   s   ddl }| j||f|}z(t r0|jjf |}n|jjf |}W n tk
r\   tdY nX t rr|jd j	}n|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text)
r   r3   r   completionscreate
CompletionAttributeError
ValueErrorr<   r=   )	r1   r&   r'   r:   r(   r   r2   responseoutputr   r   r   _callz   s    
zKonko._callc           
         s   ddl }| j||f|}z<t r>| }|jjf |I dH }n|jjf |I dH }W n tk
rp   t	dY nX t r|j
d j}	n|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   r3   r   Z
AsyncKonkor>   r?   r@   ZacreaterA   rB   r<   r=   )
r1   r&   r'   r:   r(   r   r2   clientrC   rD   r   r   r   _acall   s    
zKonko._acall)N)NN)NN)!r   r   r   __doc__r   str__annotations__r	   r   r   floatr   r   intr   r   r   r   r
   r   r   r%   r   r3   propertyr5   staticmethodr8   r/   r   rE   r   rG   r   r   r   r   r      sX   
" 

  
*  
r   )rH   loggingr"   typingr   r   r   r   Zlangchain_core.callbacksr   r   Z#langchain_core.language_models.llmsr   Zlangchain_core.pydantic_v1r	   r
   Z langchain_community.utils.openair   	getLoggerr   loggerr   r   r   r   r   <module>   s   
