o
    Zh                     @  s   d Z ddlmZ ddl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mZ ddlmZ ddlmZ er>dd	lmZ d
d
d
eed
d
d
ddd
fd)d'd(Zd
S )*zPower BI agent.    )annotations)TYPE_CHECKINGAnyDictListOptional)BaseCallbackManager)BaseLanguageModel)POWERBI_PREFIXPOWERBI_SUFFIX)PowerBIToolkit)PowerBIDatasetAgentExecutorN
   Fllmr	   toolkitOptional[PowerBIToolkit]powerbiOptional[PowerBIDataset]callback_managerOptional[BaseCallbackManager]prefixstrsuffixformat_instructionsOptional[str]examplesinput_variablesOptional[List[str]]top_kintverboseboolagent_executor_kwargsOptional[Dict[str, Any]]kwargsr   returnr   c              
   K  s   ddl m} ddlm} ddlm} |du r%|du rtdt|| |d}| }|r.|j	n|j
j	}|dur:d|ini }|d|| |j|f|j|	d	j|d
||d|||
ddd |D d|}|jd||||
d|ppi S )a(  Construct a Power BI agent from an LLM and tools.

    Args:
        llm: The language model to use.
        toolkit: Optional. The Power BI toolkit. Default is None.
        powerbi: Optional. The Power BI dataset. Default is None.
        callback_manager: Optional. The callback manager. Default is None.
        prefix: Optional. The prefix for the prompt. Default is POWERBI_PREFIX.
        suffix: Optional. The suffix for the prompt. Default is POWERBI_SUFFIX.
        format_instructions: Optional. The format instructions for the prompt.
            Default is None.
        examples: Optional. The examples for the prompt. Default is None.
        input_variables: Optional. The input variables for the prompt. Default is None.
        top_k: Optional. The top k for the prompt. Default is 10.
        verbose: Optional. Whether to print verbose output. Default is False.
        agent_executor_kwargs: Optional. The agent executor kwargs. Default is None.
        kwargs: Any. Additional keyword arguments.

    Returns:
        The agent executor.
    r   r   )ZeroShotAgent)LLMChainNz0Must provide either a toolkit or powerbi dataset)r   r   r   r   )r    )tables)r   r   r   )r   promptr   r"   c                 S  s   g | ]}|j qS  )name).0Ztoolr,   r,   f/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/agent_toolkits/powerbi/base.py
<listcomp>U   s    z$create_pbi_agent.<locals>.<listcomp>)Z	llm_chainZallowed_tools)agenttoolsr   r"   r,   )langchain.agentsr   Zlangchain.agents.mrkl.baser(   Zlangchain.chains.llmr)   
ValueErrorr   Z	get_toolsZtable_namesr   Zcreate_promptformatZfrom_agent_and_tools)r   r   r   r   r   r   r   r   r   r    r"   r$   r&   r   r(   r)   r2   r*   Zprompt_paramsr1   r,   r,   r/   create_pbi_agent   sP   $r6   )r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r   r'   r   )__doc__
__future__r   typingr   r   r   r   r   Zlangchain_core.callbacksr   Zlangchain_core.language_modelsr	   Z1langchain_community.agent_toolkits.powerbi.promptr
   r   Z2langchain_community.agent_toolkits.powerbi.toolkitr   Z%langchain_community.utilities.powerbir   r3   r   r6   r,   r,   r,   r/   <module>   s,    