o
    Zh$                     @  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rvd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<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promptllmr   toolkitOptional[SQLDatabaseToolkit]
agent_typeCOptional[Union[AgentType, Literal['openai-tools', 'tool-calling']]]callback_managerOptional[BaseCallbackManager]prefixOptional[str]suffixformat_instructionsinput_variablesOptional[List[str]]top_kintmax_iterationsOptional[int]max_execution_timeOptional[float]early_stopping_methodstrverboseboolagent_executor_kwargsOptional[Dict[str, Any]]extra_toolsSequence[BaseTool]r$   Optional[SQLDatabase]r%   Optional[BasePromptTemplate]kwargsr   returnr   c          !        s  ddl m}m}m}m} ddlm}m}m} ddl	m
} |du r(|du r(td|r0|r0td|p7t| |d}|p<|j}| t| }|du rKt} du rX|j|j|d	}nPd
 jv re jt|d d jv rq j|jd t fdddD r| }d jv r j|d d dd |D }d jv r j|d d dd |D }||jkrވ du rddlm} |p|j}d|d||ptg}t| |d(|| | dgdgd|}n||jkr du rt t!t|dt"dt#|pt$dt%d d!g}t&'| |d(|| | dgdgd|}nO|d"v r^ du r>t t!t|dt"dt#|p1t$dt%d d!g}t&'| |d#krJ|| | } n|| | } |d(| dgdgd|}ntd$| d%|d(d&|||||	|
|d'|pvi 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$   )dialectr3   r3   )r3   rK   )rK   c                 3  s    | ]}| j v V  qd S )N)r1   ).0keyr%   r#   b/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/agent_toolkits/sql/base.py	<genexpr>   s    z#create_sql_agent.<locals>.<genexpr>)
table_infotable_namesrQ   )rQ   c                 S     g | ]	}t |ts|qS r#   )
isinstancer   rL   Ztoolr#   r#   rO   
<listcomp>   
    
z$create_sql_agent.<locals>.<listcomp>rR   )rR   c                 S  rS   r#   )rT   r   rU   r#   r#   rO   rV      rW   rN   z

z{tools}inputoutput)runnableZinput_keys_argZreturn_keys_arg)contentz{input}Zagent_scratchpad)Zvariable_name)openai-toolsztool-callingr\   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+   r;   r5   r7   r9   r#   )(Zlangchain.agentsrE   rF   rG   rH   langchain.agents.agentr   rI   rJ   langchain.agents.agent_typesr   
ValueErrorr   ZZERO_SHOT_REACT_DESCRIPTIONZ	get_toolslistr   formatrK   r1   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/   r0   r1   r3   r5   r7   r9   r;   r=   r?   r$   r%   rC   rE   rF   rG   rH   r   rI   rJ   r   r_   Z
db_contextZreact_prompttemplater^   messagesrZ   r#   rN   rO   create_sql_agent.   s   I















	rj   )NNNNNNNr    r!   Nr"   FNr#   )&r&   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   r.   r0   r.   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   r$   rA   r%   rB   rC   r   rD   r   )-__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   r`   r   ra   r   Zlangchain_core.callbacksr   Zlangchain_core.language_modelsr   Zlangchain_core.toolsr   Z*langchain_community.utilities.sql_databaser   rj   r#   r#   r#   rO   <module>   sD    ,