o
    }!g                     @   s   d Z ddlmZ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 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ dZ G dd deZ!dS )zOpenAI Agent.

Simple wrapper around AgentRunner + OpenAIAgentWorker.

For the legacy implementation see:
```python
from llama_index.agent.legacy.openai.base import OpenAIAgent
```
    )AnyDictListCallableOptionalType)OpenAIAgentWorker)AgentRunner)CallbackManager)ChatMessage)LLM)ChatMemoryBuffer)
BaseMemory)ObjectRetriever)Settings)BaseTool)OpenAI)OpenAIToolCall   c                        s&  e Zd ZdZdeddddfdee dededee	 d	e
d
ededee deee  deeegef  ddf fddZedddddededddddfdeee  deee  dee deee	  dee dee d	e
d
ededee dee deee	  deeegef  dedd fddZ  ZS )OpenAIAgentzOpenAI agent.

    Subclasses AgentRunner with a OpenAIAgentWorker.

    For the legacy implementation see:
    ```python
    from llama_index.agent.legacy.openai.base import OpenAIAgent
    ```

    FautoNtoolsllmmemoryprefix_messagesverbosemax_function_callsdefault_tool_choicecallback_managertool_retrievertool_call_parserreturnc              
      s>   |p|j }tj||	||||||
d}t j|||||d dS )zInit params.)r   r   r   r   r   r   r   r    )r   r   r   r   N)r   r   
from_toolssuper__init__)selfr   r   r   r   r   r   r   r   r   r    step_engine	__class__ _/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/llama_index/agent/openai/base.pyr$   0   s$   


zOpenAIAgent.__init__chat_history
memory_clssystem_promptkwargsc                 K   s   |pg }|pg }|pt j}t|tstd|
dur|
|_|p%|j||d}|jjs3td|j	 d|durF|dur?tdt
|ddg}|pIg }| ||||||||
|	|d	
S )
zCreate an OpenAIAgent from a list of tools.

        Similar to `from_defaults` in other classes, this method will
        infer defaults for a variety of parameters, including the LLM,
        if they are not specified.

        zllm must be a OpenAI instanceN)r   zModel name z( does not support function calling API. z5Cannot specify both system_prompt and prefix_messagessystem)contentrole)
r   r   r   r   r   r   r   r   r   r    )r   r   
isinstancer   
ValueErrorr   from_defaultsmetadatais_function_calling_modelmodelr   )clsr   r   r   r+   r   r,   r   r   r   r   r-   r   r    r.   r)   r)   r*   r"   Q   s>   

zOpenAIAgent.from_tools)__name__
__module____qualname____doc__DEFAULT_MAX_FUNCTION_CALLSr   r   r   r   r   boolintstrr   r
   r   r   r   r   r$   classmethodr   r   r   r   r"   __classcell__r)   r)   r'   r*   r   $   s    	

!


	

r   N)"r<   typingr   r   r   r   r   r   llama_index.agent.openai.stepr   "llama_index.core.agent.runner.baser	   llama_index.core.callbacksr
    llama_index.core.base.llms.typesr   llama_index.core.llms.llmr   *llama_index.core.memory.chat_memory_bufferr   llama_index.core.memory.typesr   llama_index.core.objects.baser   llama_index.core.settingsr   llama_index.core.toolsr   llama_index.llms.openair   llama_index.llms.openai.utilsr   r=   r   r)   r)   r)   r*   <module>   s      
	