
    PRg                       S SK Jr  S SKJr  S SKJr  S SKJr  S SKrS SK	r	S SK
r
S SKrS SKJrJrJr  S SKJr  S SKJr  S S	KJr  \" 5         \R,                  " S
S5      r\" \5      r\R2                  " SS9  \ " S S5      5       rSr\" \\\SS9rSS jr\R<                        SS j5       r\R<                  SS j5       r \R<                  SS j5       r!g)    )annotations)	dataclass)load_dotenv)AsyncOpenAIN)Agent
ModelRetry
RunContext)OpenAIModel)List)
Collection	LLM_MODELzgpt-4-0125-previewzif-token-present)send_to_logfirec                  *    \ rS rSr% S\S'   S\S'   Srg)PydanticAIDeps   r   
collectionr   openai_client N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       [C:\xampp\htdocs\LEARNing\AI\Crawl4AI\crawl4ai-rag-system\gen-rag-crawl\pydantic_ai_agent.pyr   r      s    r   r   a;  
You are an expert assistant with access to a knowledge base of documentation and content.
Your job is to help users understand and work with the content they've provided.

Always make sure you look at the relevant documentation before answering unless you're certain about the answer.
Be honest when you can't find relevant information in the knowledge base.

When analyzing the content, make sure to:
1. Provide accurate information based on the stored content
2. Cite specific examples when possible
3. Be clear when you're making assumptions or inferring information
   )system_prompt	deps_typeretriesc                   #     UR                   R                  SU S9I Sh  vN nUR                  S   R                  $  N! [         a  n[        SU 35        S/S-  s SnA$ SnAff = f7f)z!Get embedding vector from OpenAI.ztext-embedding-3-small)modelinputNr   zError getting embedding: i   )
embeddingscreatedata	embedding	Exceptionprint)textr   responsees       r   get_embeddingr-   1   sx     &1188*$ 9 
 
 }}Q)))
  )!-.sTzsA   A,A ?A A,A 
A)A$A)A,$A))A,c                  #     [        XR                  R                  5      I Sh  vN nU R                  R                  R	                  U/SSS/S9nUS   S   (       d  g/ n[        US   S   US   S   5       H(  u  pVSUS	    S
U SUS    S3nUR                  U5        M*     SR                  U5      $  N! [         a&  n[        SU 35        S[        U5       3s SnA$ SnAff = f7f)z:Retrieve relevant documentation chunks based on the query.N   	documents	metadatas)query_embeddings	n_resultsincluder   z No relevant documentation found.z
# title

z


Source: url
z

---

z Error retrieving documentation: )r-   depsr   r   queryzipappendjoinr(   r)   str)	ctx
user_queryquery_embeddingresultsformatted_chunksdocmetadata
chunk_textr,   s	            r   retrieve_relevant_documentationrG   =   s"    
; -j((:P:P QQ((%%++-. +. , 
 {#A&5 !5a!8'+:Nq:QRMCG  		% J ##J/ S !!"233- R0  ;0451#a&::;sQ   C-"B: B89B:  C-!AB: 7C-8B: :
C*C%C* C-%C**C-c                   #     U R                   R                  R                  S/S9nUS   (       d  / $ [        [	        S US    5       5      5      nU$ ! [
         a  n[        SU 35        / s SnA$ SnAff = f7f)z5Retrieve a list of all available documentation pages.r1   )r4   c              3  *   #    U  H	  oS    v   M     g7f)r7   Nr   ).0metas     r   	<genexpr>+list_documentation_pages.<locals>.<genexpr>i   s     G2F$u+2Fs   z&Error retrieving documentation pages: N)r9   r   getsortedsetr(   r)   )r?   rB   urlsr,   s       r   list_documentation_pagesrR   `   sy     ((%%));-)@{#IcG'+2FGGH 6qc:;	s>   A;/A A;A A;
A8A3-A8.A;3A88A;c                  #     U R                   R                  R                  SU0SS/S9nUS   (       d  SU 3$ [        [	        US   US   5      S S9nUS   S	   S
   R                  S5      S   nSU S3/nU H  u  pgUR                  U5        M     SR                  U5      $ ! [         a&  n[        SU 35        S[        U5       3s SnA$ SnAff = f7f)z;Retrieve the full content of a specific documentation page.r7   r0   r1   )wherer4   zNo content found for URL: c                    U S   S   $ )N   chunk_numberr   )xs    r   <lambda>"get_page_content.<locals>.<lambda>~   s    !A$~.r   )keyr   rV   r5   z - z# r8   r6   zError retrieving page content: N)r9   r   rN   rO   r;   splitr<   r=   r(   r)   r>   )	r?   r7   rB   sorted_results
page_titleformatted_contentrD   _r,   s	            r   get_page_contentra   q   s    :((%%))#,k(B * 
 {#/u55$gk&:;.

 $A&q)'288?B
!*R01$FC$$S) % {{,-- :/s340Q99:s?   C6B' CA+B' &C'
C1CCCCC)r*   r>   r   r   returnzList[float])r?   RunContext[PydanticAIDeps]r@   r>   rb   r>   )r?   rc   rb   z	List[str])r?   rc   r7   r>   rb   r>   )"
__future__r   dataclassesr   dotenvr   litellmr   logfireasynciohttpxospydantic_air   r   r	   pydantic_ai.models.openair
   typingr   chromadb.api.models.Collectionr   getenvllmr"   	configurer   r   pydantic_ai_agentr-   toolrG   rR   ra   r   r   r   <module>ru      s    " !      	 5 5 1  5 ii12C   "4 5   
 	.! 
	 ;	#;14;; ;D    : :r   