o
    Zhc
                     @   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model_validatorc                   @   s   e Zd ZU dZ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dedefddZdedefddZdS )StackExchangeAPIWrapperzWrapper for Stack Exchange API.Nclient   max_resultsall)r   titlebody
query_type)default_factoryfetch_paramsz

result_separatorbefore)modevaluesreturnc                 C   s6   zddl m} |d|d< W |S  ty   tdw )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   b/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/utilities/stackexchange.pyvalidate_environment   s   z,StackExchangeAPIWrapper.validate_environmentqueryc                    s  | j dkrdn| j }| jj	di ||i| j}t|d dk r'd| dS dd	 |d D d
| j }dd	 |d D }g }|D ]= d d  d d  } fdd	|D }dd	 |D }	|rz|	rh|	d n|d }
t|
d }|d| 7 }|| qB| 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      g | ]
}|d  dkr|qS )	item_typequestionr   .0itemr   r   r   
<listcomp>.   s    z/StackExchangeAPIWrapper.run.<locals>.<listcomp>Nc                 S   r"   )r#   answerr   r%   r   r   r   r(   1   s    z
Question: r   
excerptc                    s    g | ]}|d   d  kr|qS )Zquestion_idr   r&   r)   r$   r   r   r(   5   s
    c                 S   s   g | ]}|d  r|qS )Zis_acceptedr   r,   r   r   r   r(   :   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.run)__name__
__module____qualname____doc__r	   r   __annotations__r   intr   r   r   dictr   r   strr   r   classmethodr   r7   r   r   r   r   r      s   
 r   )
r0   typingr   r   r   Zpydanticr   r   r   r   r   r   r   r   <module>   s    