
    Ng$                        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r$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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                  ddl m}m}m}m} ddlm}m}m} ddl	m
} ||t          d          |r|rt          d          |pt          | |          }|p|j        }|                                t          |          z   }|t           }|                    |j        |	          }nd
j        v r#                    t+          |                    dj        v r                    |j                  t-          fddD                       rv|                                }dj        v r(                    |d                   d |D             }dj        v r(                    |d                   d |D             }||j        k    r`Cddlm} |p|j        }d                    |d||pt8          g          }t;          j        |           |d& || |          dgdgd|}nP||j        k    rptA          tC          t*          |                    tE          j        d          tG          |ptH                    tK          d          g}tM          j'        |           |d& || |          dgdgd|}n|d v rptA          tC          t*          |                    tE          j        d          tG          |ptH                    tK          d          g}tM          j'        |          |d!k    r || |          } n || |          }  |d&| dgdgd|}nt          d"| d#           |d&d$|||||	|
|d%|pi 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%   )dialectr4   r4   )r4   rM   )rM   c              3  *   K   | ]}|j         v V  d S )N)r2   ).0keyr&   s     g/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/agent_toolkits/sql/base.py	<genexpr>z#create_sql_agent.<locals>.<genexpr>   s+      VVsf,,VVVVVV    )
table_infotable_namesrT   )rT   c                <    g | ]}t          |t                    |S r$   )
isinstancer   rO   tools     rQ   
<listcomp>z$create_sql_agent.<locals>.<listcomp>   8       !*TCV2W2W  rS   rU   )rU   c                <    g | ]}t          |t                    |S r$   )rW   r   rX   s     rQ   rZ   z$create_sql_agent.<locals>.<listcomp>   r[   rS   )r&   z

z{tools}inputoutput)runnableinput_keys_argreturn_keys_arg)contentz{input}agent_scratchpad)variable_name)openai-toolsztool-callingre   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<   r6   r8   r:   r$   )(langchain.agentsrG   rH   rI   rJ   langchain.agents.agentr   rK   rL   langchain.agents.agent_typesr   
ValueErrorr   ZERO_SHOT_REACT_DESCRIPTION	get_toolslistr   formatrM   r2   partialr;   anyget_contextlangchain.agents.mrklr&   FORMAT_INSTRUCTIONSjoinr   r   from_templateOPENAI_FUNCTIONSr   r   r   r   r   r   r   from_messages)!r'   r(   r*   r,   r.   r0   r1   r2   r4   r6   r8   r:   r<   r>   r@   r%   r&   rD   rG   rH   rI   rJ   r   rK   rL   r   rh   
db_contextreact_prompttemplaterg   messagesr_   s!                   `                rQ   create_sql_agentr~   .   s   R                    
 7666662:N
 
 	
  
2 
K
 
 	
 ;+;;;GDyDJ${"3"33E~~weDDf,,,^^#e**^55F...^^GO^<<FVVVV8UVVVVV 	 ,,..Jv555:l3KLL %*    666J}4MNN %*   Y:::>DDDDDD $G|'G   {{'(j	 H $1(;;F 
''UF;;#9%J
 
 	
 
 
y1	1	1>d3&7&7888*8CC&"@,@AAA#2DEEE	H (5h??F 
223vFF#9%J
 
 	
 
 
7	7	7>d3&7&7888*8CC&"@,@AAA#2DEEE	H (5h??F''00eVDDHH00eVDDH(( 
#9%J
 
 	
 
 -* - - -
 
 	
 = 
!)%-3
 
 !&B
 
 
rS   )NNNNNNNr!   r"   Nr#   FNr$   )&r'   r   r(   r)   r*   r+   r,   r-   r.   r/   r0   r/   r1   r/   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   r%   rB   r&   rC   rD   r   rE   r   )-__doc__
__future__r   typingr   r   r   r   r   r	   r
   r   r   langchain_core.messagesr   r   langchain_core.promptsr   r   langchain_core.prompts.chatr   r   r   -langchain_community.agent_toolkits.sql.promptr   r   r   .langchain_community.agent_toolkits.sql.toolkitr   +langchain_community.tools.sql_database.toolr   r   rj   r   rk   r   langchain_core.callbacksr   langchain_core.language_modelsr   langchain_core.toolsr   *langchain_community.utilities.sql_databaser    r~   r$   rS   rQ   <module>r      sA     " " " " " "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 = < < < < < < < E E E E E E E E                  
 N M M M M M       
  G444444666666<<<<<<@@@@@@------FFFFFF
 -1 	6:  )-+/$&*.!(6:&(#C& !%+/)C C C C C C C CrS   