§
    šŠtjÊ*  ã                  ó   — 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_typeúCOptional[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        |¬	¦  «        }nád
‰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 )'aÔ  Construct a SQL agent from an LLM and toolkit or database.

    !!! warning
        This agent can execute arbitrary SQL against your database.

        By default, the agent is allowed to generate SQL strings and run them via the
        database connection. This is powerful, but it also means the agent can generate
        expensive or dangerous queries (e.g., long-running queries, large scans/joins,
        locking queries, or unintended writes depending on your database permissions).

        ``create_sql_agent`` returns a ``langchain_classic`` ``AgentExecutor``.
        ``AgentExecutor`` is an agent abstraction that has long been considered legacy
        and is not actively supported as the recommended foundation for new production
        applications.

        For production-grade agent development, prefer building with Deep Agents:
        https://github.com/langchain-ai/deepagents

        If you use this in production, coordinate with your security/DB teams and apply
        server-side controls:

        - Use least-privilege database roles (ideally read-only, schema-limited).
        - Enforce statement timeouts / max execution time and other resource limits at the
          role or session level.
        - Apply query guardrails (e.g., restrict accessible schemas/tables, limit
          concurrency, and monitor/alert on slow queries).

        Client-side timeouts do not always guarantee that a running statement is
        cancelled on the database server.

    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     €úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/agent_toolkits/sql/base.pyú	<genexpr>z#create_sql_agent.<locals>.<genexpr>µ   s+   øè è € ÐVÐV°ˆs�fÔ,Ð,Ð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   € ð ð ð Ø!µ*¸TÕCVÑ2WÔ2WðØðð ð 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_classic.agentsrG   rH   rI   rJ   Úlangchain_classic.agents.agentr   rK   rL   Ú$langchain_classic.agents.agent_typesr   Ú
ValueErrorr   ÚZERO_SHOT_REACT_DESCRIPTIONÚ	get_toolsÚlistr   ÚformatrM   r2   Úpartialr;   ÚanyÚget_contextÚlangchain_classic.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  ø€ ðJð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
 ?Ð>Ð>Ð>Ð>Ð>à€˜2˜:ÝØNñ
ô 
ð 	
ð ð 
�2ð 
ÝØKñ
ô 
ð 	
ð Ð;Õ+°¸Ð;Ñ;Ô;€GØÐD˜yÔD€JØ×ÒÑÔ¥$ {Ñ"3Ô"3Ñ3€EØ€~ÝˆØ€~Ø—’ w¤¸e�ÑDÔDˆˆà�fÔ,Ð,Ð,Ø—^’^­#¨e©*¬*�^Ñ5Ô5ˆFØ˜Ô.Ð.Ð.Ø—^’^¨G¬O�^Ñ<Ô<ˆFÝÐVÐVÐVÐVÐ8UÐVÑVÔVÑVÔVð 	Ø ×,Ò,Ñ.Ô.ˆJØ˜vÔ5Ð5Ð5ØŸš°:¸lÔ3K˜ÑLÔL�ðð Ø%*ðñ ô �ð  Ô 6Ð6Ð6ØŸš°J¸}Ô4M˜ÑNÔN�ðð Ø%*ðñ ô �ð �YÔ:Ò:Ð:Øˆ>ØLÐLÐLÐLÐLÐLð $ÐG |Ô'Gð  ð —{’{àØØ'ØÐ(�jð	ñô ˆHõ $Ô1°(Ñ;Ô;ˆFØ�ð 
Ø'Ð'¨¨U°FÑ;Ô;Ø#˜9Ø%˜Jð
ð 
ð ð	
ð 
ˆ‰ð 
�yÔ1Ò	1Ð	1Øˆ>å¥d­3°Ñ&7Ô&7Ð8Ñ8Ô8Ý*Ô8¸ÑCÔCÝ &Ð"@Õ,@ÐAÑAÔAÝ#Ð2DÐEÑEÔEð	ˆHõ (Ô5°hÑ?Ô?ˆFØ�ð 
Ø2Ð2°3¸¸vÑFÔFØ#˜9Ø%˜Jð
ð 
ð ð	
ð 
ˆˆð 
Ð7Ð	7Ð	7Øˆ>å¥d­3°Ñ&7Ô&7Ð8Ñ8Ô8Ý*Ô8¸ÑCÔCÝ &Ð"@Õ,@ÐAÑAÔAÝ#Ð2DÐEÑEÔEð	ˆHõ (Ô5°hÑ?Ô?ˆFØ˜Ò'Ð'Ø0Ð0°°e¸VÑDÔDˆHˆHà0Ð0°°e¸VÑDÔDˆHØ(Ð(ð 
ØØ#˜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Ø<Ð<Ð<Ð<Ð<Ð<Ø>Ð>Ð>Ð>Ð>Ð>Ø<Ð<Ð<Ð<Ð<Ð<Ø@Ð@Ð@Ð@Ð@Ð@Ø-Ð-Ð-Ð-Ð-Ð-àFÐFÐFÐFÐFÐFð
 -1ð 	Ø6:Ø Ø Ø)-Ø+/ØØ$&Ø*.Ø!(ØØ6:Ø&(ð#_ð& !%Ø+/ð)_ð _ð _ð _ð _ð _ð _ð _rS   