o
    hp                     @   sF   d dl Z d dlZd dlmZ d dlmZ d dlmZ G dd dZdS )    N)Path)AsyncLogger)AsyncLLMTextManagerc                   @   s\   e Zd ZdddZdd ZdefddZdee fd	d
ZdddZ	ddede
fddZdS )DocsManagerNc                 C   s\   t  d d | _t tjjd d | _| jjddd |p"tdd| _t	| j| j| _
d S )Nz	.crawl4aidocszllm.txtT)parentsexist_ok)verbose)r   homedocs_dir__file__parent
local_docsmkdirr   loggerr   llm_text)selfr    r   R/var/www/Befach/backend/venv/lib/python3.10/site-packages/crawl4ai/docs_manager.py__init__   s
   zDocsManager.__init__c                    s&   t | j s|  I dH  dS dS )zFetch docs if not presentN)anyr   iterdir
fetch_docs)r   r   r   r   ensure_docs_exist   s   zDocsManager.ensure_docs_existreturnc              
      s>  z| j  r:t| j dst| j dr:| jdD ]}|  q| j dD ]}t|| j|j  q*W dS t	j
dddid}|  | D ]8}|d d	kr|d
 drt	
|d j}t| j|d
  ddd}|| W d   n1 s~w   Y  qKW dS  ty } z| jdt|   d}~ww )z,Copy from local docs or download from GitHub*.mdz*.tokensTzEhttps://api.github.com/repos/unclecode/crawl4ai/contents/docs/llm.txtAcceptzapplication/vnd.github.v3+json)headerstypefilenamez.mddownload_urlwzutf-8)encodingNzFailed to fetch docs: )r   existsr   globr   unlinkshutilcopy2r    requestsgetraise_for_statusjsonendswithtextopenwrite	Exceptionr   errorstr)r   	file_pathresponseitemcontentfer   r   r   r      s4   *
zDocsManager.fetch_docsc                 C   s6   dd | j dD }dd |D }dd |D }|S )zList available topicsc                 S   s   g | ]}|j qS r   )stem).0r4   r   r   r   
<listcomp>8   s    z$DocsManager.list.<locals>.<listcomp>r   c                 S   s,   g | ]}|d    r|ddd n|qS )r   _   )isdigitsplitr;   r    r   r   r   r<   :   s   , c                 S   s$   g | ]}| d s| ds|qS )z.xsz.q)r-   rA   r   r   r   r<   <   s   $ )r   r%   )r   namesr   r   r   list6   s   zDocsManager.listextendedc                 C      | j ||S N)r   generate)r   sectionsmoder   r   r   rG   ?      zDocsManager.generate   querytop_kc                 C   rE   rF   )r   search)r   rL   rM   r   r   r   rN   B   rJ   zDocsManager.searchrF   )rD   )rK   )__name__
__module____qualname__r   r   boolr   rC   r3   rG   intrN   r   r   r   r   r      s    
"
	r   )	r)   r'   pathlibr   crawl4ai.async_loggerr   crawl4ai.llmtxtr   r   r   r   r   r   <module>   s    