o
    ȳgc
                     @   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   )StackAPIstackoverflowr	   z^The 'stackapi' Python package is not installed. Please install it with `pip install stackapi`.)stackapir   ImportError)clsr   r    r   g/var/www/html/chatdoc2/venv/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 )question_idr   r(   r+   r&   r   r   r*   5   s
    c                 S   s   g | ]}|d  r|qS )is_acceptedr   r/   r   r   r   r*   :   s
    r   z	
Answer: )r!   )r   r	   fetchr   lenr   htmlunescapeappendr   join)selfr   	query_keyoutput	questionsanswersresultsres_textrelevant_answersaccepted_answers
top_answerr-   r   r0   r   run%   s@   
zStackExchangeAPIWrapper.run)__name__
__module____qualname____doc__r	   r   __annotations__r   intr   r   r   dictr   r   strr   r   classmethodr   rB   r   r   r   r   r      s   
 r   )
r4   typingr   r   r   pydanticr   r   r   r   r   r   r   r   <module>   s    