U
    hW
                     @   sD   d dl Z d dlmZmZmZ d dlmZmZmZ G dd deZ	dS )    N)AnyDictLiteral)	BaseModelFieldroot_validatorc                   @   s   e Zd ZU dZeed< dZeed< dZe	d ed< e
edZeeef ed	< d
Zeed< eddeedddZeedddZdS )StackExchangeAPIWrapperzWrapper for Stack Exchange API.client   max_resultsall)r   titlebody
query_type)default_factoryfetch_paramsz

result_separatorT)pre)valuesreturnc                 C   s>   zddl m} |d|d< W n tk
r8   tdY nX |S )z1Validate that the required Python package exists.r   )StackAPIZstackoverflowr	   z^The 'stackapi' Python package is not installed. Please install it with `pip install stackapi`.)Zstackapir   ImportError)clsr   r    r   O/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/utilities/stackexchange.pyvalidate_environment   s    
z,StackExchangeAPIWrapper.validate_environment)queryr   c                    s  | j dkrdn| j }| jjd||i| j}t|d dk rHd| dS dd	 |d D d
| j }dd	 |d D }g }|D ]z d d  d d  } fdd	|D }dd	 |D }	|r|	r|	d n|d }
t|
d }|d| 7 }|| q~| j	
|S )z6Run query through StackExchange API and parse results.r   qsearch/excerptsitems   zNo relevant results found for 'z' on Stack Overflow.c                 S   s   g | ]}|d  dkr|qS )	item_typequestionr   .0itemr   r   r   
<listcomp>-   s     z/StackExchangeAPIWrapper.run.<locals>.<listcomp>Nc                 S   s   g | ]}|d  dkr|qS )r!   answerr   r#   r   r   r   r&   0   s      z
Question: r   
excerptc                    s    g | ]}|d   d  kr|qS )Zquestion_idr   r$   r'   r"   r   r   r&   4   s   c                 S   s   g | ]}|d  r|qS )Zis_acceptedr   r*   r   r   r   r&   9   s     r   z	
Answer: )r   )r   r	   fetchr   lenr   htmlunescapeappendr   join)selfr   Z	query_keyoutputZ	questionsZanswersresultsZres_textZrelevant_answersZaccepted_answersZ
top_answerr)   r   r+   r   run$   s>      
zStackExchangeAPIWrapper.runN)__name__
__module____qualname____doc__r   __annotations__r   intr   r   r   dictr   r   strr   r   r   r5   r   r   r   r   r      s   
r   )
r.   typingr   r   r   Zlangchain_core.pydantic_v1r   r   r   r   r   r   r   r   <module>   s   