a
    bg$                     @  s,  d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
mZmZ ddlmZmZ ddlmZmZ ddlmZmZmZ ddlmZmZmZ ddlmZ dd	lmZmZ erd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dddddddddddddd d!d"d#d$d%d&d'd(d)d*Z,dS ),z
SQL agent.    )annotations)	TYPE_CHECKINGAnyDictListLiteralOptionalSequenceUnioncast)	AIMessageSystemMessage)BasePromptTemplatePromptTemplate)ChatPromptTemplateHumanMessagePromptTemplateMessagesPlaceholder)SQL_FUNCTIONS_SUFFIX
SQL_PREFIX
SQL_SUFFIX)SQLDatabaseToolkit)InfoSQLDatabaseToolListSQLDatabaseTool)AgentExecutor	AgentType)BaseCallbackManager)BaseLanguageModel)BaseTool)SQLDatabaseN
      forceF )dbpromptr   zOptional[SQLDatabaseToolkit]zCOptional[Union[AgentType, Literal['openai-tools', 'tool-calling']]]zOptional[BaseCallbackManager]zOptional[str]zOptional[List[str]]intzOptional[int]zOptional[float]strboolzOptional[Dict[str, Any]]zSequence[BaseTool]zOptional[SQLDatabase]zOptional[BasePromptTemplate]r   r   )llmtoolkit
agent_typecallback_managerprefixsuffixformat_instructionsinput_variablestop_kmax_iterationsmax_execution_timeearly_stopping_methodverboseagent_executor_kwargsextra_toolsr$   r%   kwargsreturnc          !        s  ddl m}m}m}m} ddlm}m}m} ddl	m
} |du rP|du rPtd|r`|r`td|pnt| |d}|px|j}| t| }|du rt} du r|j|j|d	}nd
 jv rʈ jt|d d jv r j|jd t fdddD rV| }d jv r, j|d d dd |D }d jv rV j|d d dd |D }||jkr̈ du rddlm} |p|j}d|d||ptg}t| |f || | dgdgd|}n||jkr@ du rt t!t|dt"dt#|pt$dt%d d!g}t&'| |f || | dgdgd|}n|d"v rΈ du rt t!t|dt"dt#|ptt$dt%d d!g}t&'| |d#kr|| | } n|| | } |f | dgdgd|}ntd$| d%|f d&|||||	|
|d'|pi S )(a8
  Construct a SQL agent from an LLM and toolkit or database.

    Args:
        llm: Language model to use for the agent. If agent_type is "tool-calling" then
            llm is expected to support tool calling.
        toolkit: SQLDatabaseToolkit for the agent to use. Must provide exactly one of
            'toolkit' or 'db'. Specify 'toolkit' if you want to use a different model
            for the agent and the toolkit.
        agent_type: One of "tool-calling", "openai-tools", "openai-functions", or
            "zero-shot-react-description". Defaults to "zero-shot-react-description".
            "tool-calling" is recommended over the legacy "openai-tools" and
            "openai-functions" types.
        callback_manager: DEPRECATED. Pass "callbacks" key into 'agent_executor_kwargs'
            instead to pass constructor callbacks to AgentExecutor.
        prefix: Prompt prefix string. Must contain variables "top_k" and "dialect".
        suffix: Prompt suffix string. Default depends on agent type.
        format_instructions: Formatting instructions to pass to
            ZeroShotAgent.create_prompt() when 'agent_type' is
            "zero-shot-react-description". Otherwise ignored.
        input_variables: DEPRECATED.
        top_k: Number of rows to query for by default.
        max_iterations: Passed to AgentExecutor init.
        max_execution_time: Passed to AgentExecutor init.
        early_stopping_method: Passed to AgentExecutor init.
        verbose: AgentExecutor verbosity.
        agent_executor_kwargs: Arbitrary additional AgentExecutor args.
        extra_tools: Additional tools to give to agent on top of the ones that come with
            SQLDatabaseToolkit.
        db: SQLDatabase from which to create a SQLDatabaseToolkit. Toolkit is created
            using 'db' and 'llm'. Must provide exactly one of 'db' or 'toolkit'.
        prompt: Complete agent prompt. prompt and {prefix, suffix, format_instructions,
            input_variables} are mutually exclusive.
        **kwargs: Arbitrary additional Agent args.

    Returns:
        An AgentExecutor with the specified agent_type agent.

    Example:

        .. code-block:: python

            from langchain_openai import ChatOpenAI
            from langchain_community.agent_toolkits import create_sql_agent
            from langchain_community.utilities import SQLDatabase

            db = SQLDatabase.from_uri("sqlite:///Chinook.db")
            llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
            agent_executor = create_sql_agent(llm, db=db, agent_type="tool-calling", verbose=True)

    r   )create_openai_functions_agentcreate_openai_tools_agentcreate_react_agentcreate_tool_calling_agent)r   RunnableAgentRunnableMultiActionAgentr   Nz@Must provide exactly one of 'toolkit' or 'db'. Received neither.z=Must provide exactly one of 'toolkit' or 'db'. Received both.)r)   r$   )dialectr1   r1   )r1   r@   )r@   c                 3  s   | ]}| j v V  qd S )N)r0   ).0keyr%   r#   y/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/agent_toolkits/sql/base.py	<genexpr>       z#create_sql_agent.<locals>.<genexpr>)
table_infotable_namesrG   )rG   c                 S  s   g | ]}t |ts|qS r#   )
isinstancer   rA   Ztoolr#   r#   rD   
<listcomp>   s   z$create_sql_agent.<locals>.<listcomp>rH   )rH   c                 S  s   g | ]}t |ts|qS r#   )rI   r   rJ   r#   r#   rD   rK      s   rC   z

z{tools}inputoutput)runnableZinput_keys_argZreturn_keys_arg)contentz{input}Zagent_scratchpad)Zvariable_name)openai-toolsztool-callingrP   zAgent type z not supported at the moment. Must be one of 'tool-calling', 'openai-tools', 'openai-functions', or 'zero-shot-react-description'.zSQL Agent Executor)nameagenttoolsr,   r5   r2   r3   r4   )(Zlangchain.agentsr:   r;   r<   r=   langchain.agents.agentr   r>   r?   langchain.agents.agent_typesr   
ValueErrorr   ZZERO_SHOT_REACT_DESCRIPTIONZ	get_toolslistr   formatr@   r0   partialr'   anyZget_contextZlangchain.agents.mrklr%   ZFORMAT_INSTRUCTIONSjoinr   r   Zfrom_templateZOPENAI_FUNCTIONSr   r   r   r   r   r   r   Zfrom_messages)!r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r$   r%   r8   r:   r;   r<   r=   r   r>   r?   r   rS   Z
db_contextZreact_prompttemplaterR   messagesrN   r#   rC   rD   create_sql_agent.   s    I















	r^   )NNNNNNNr    r!   Nr"   FNr#   )-__doc__
__future__r   typingr   r   r   r   r   r   r	   r
   r   Zlangchain_core.messagesr   r   Zlangchain_core.promptsr   r   Zlangchain_core.prompts.chatr   r   r   Z-langchain_community.agent_toolkits.sql.promptr   r   r   Z.langchain_community.agent_toolkits.sql.toolkitr   Z+langchain_community.tools.sql_database.toolr   r   rT   r   rU   r   Zlangchain_core.callbacksr   Zlangchain_core.language_modelsr   Zlangchain_core.toolsr   Z*langchain_community.utilities.sql_databaser   r^   r#   r#   r#   rD   <module>   sB   ,              