
    dh%                         S r SSKrSSKJrJrJrJr  SSKrSSKJ	r	  SSK
Jr  SSKJrJr  \R                  " \5      rSr " S S	\5      rg)
zUtil that calls Outline.    N)AnyDictListOptional)Documentget_from_dict_or_env)	BaseModelmodel_validatori,  c                       \ rS rSr% SrSr\\S'   Sr\	\S'   Sr
\\S'   S	r\\   \S
'   S	r\\   \S'   Sr\\S'   \" SS9\S\S\4S j5       5       rS\S\4S jrS\S\4S jrS\S\\   4S jrSrg	)OutlineAPIWrapper   zWrapper around OutlineAPI.

This wrapper will use the Outline API to query the documents of your instance.
By default it will return the document content of the top-k results.
It limits the document content by doc_content_chars_max.
   top_k_resultsFload_all_available_metai  doc_content_chars_maxNoutline_instance_urloutline_api_keyz/api/documents.searchoutline_search_endpointbefore)modevaluesreturnc                 J    [        USS5      nX!S'   [        USS5      nX1S'   U$ )z=Validate that instance url and api key exists in environment.r   OUTLINE_INSTANCE_URLr   OUTLINE_API_KEYr   )clsr   r   r   s       ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/outline.pyvalidate_environment&OutlineAPIWrapper.validate_environment   sF      4*,B 
 *>%&.%'8
 %4 !    outline_resc                    US   S   U R                   US   S   -   S.nU R                  (       a-  US   S   US   US   S   US   S   US   S	   US   S
   S   S.O0 n[        US   S   S U R                   0 UEUES9nU$ )Ndocumenttitleurl)r%   sourceidrankingcollectionIdparentDocumentIdrevision	createdByname)r(   r)   collection_idparent_document_idr,   
created_bytext)page_contentmetadata)r   r   r   r   )selfr"   	main_metaadd_metadocs        r   _result_to_document%OutlineAPIWrapper._result_to_document/   s     ,W5//+j2I%2PP
	 ++ "*-d3&y1!,Z!8!H&1*&=>P&Q'
3J?)*5kB6J  	 $Z089U4;U;UV
 
r!   queryc                    [         R                  " U R                   U R                   3XR                  S.SSU R
                   30S9nUR                  (       d  [        SUR                  5      eUR                  5       S   $ )N)r;   limitAuthorizationzBearer )dataheaderszOutline API returned an error: r?   )
requestspostr   r   r   r   ok
ValueErrorr2   json)r5   r;   
raw_results      r   _outline_api_query$OutlineAPIWrapper._outline_api_queryI   sy    ]](()$*F*F)GH +=+=>$0D0D/E&FG

 }}>
PP ((r!   c                     U R                  US[         5      n/ nUSU R                    H.  nU R                  U5      =n(       d  M  UR	                  U5        M0     U$ )zl
Run Outline search and get the document content plus the meta information.

Returns: a list of documents.

N)rG   OUTLINE_MAX_QUERY_LENGTHr   r9   append)r5   r;   resultsdocsresultr8   s         r   runOutlineAPIWrapper.runU   sc     ))%0I1I*JK2 2 23F..v66s6C  4 r!    )__name__
__module____qualname____firstlineno____doc__r   int__annotations__r   boolr   r   r   strr   r   r   classmethodr   r   r   r   r9   r   rG   rO   __static_attributes__rQ   r!   r   r   r      s     M3$)T)!%3%*.(3-.%)OXc])#:S:(#$ 3   $s x 4
) 
) 
) h r!   r   )rV   loggingtypingr   r   r   r   rA   langchain_core.documentsr   langchain_core.utilsr	   pydanticr
   r   	getLoggerrR   loggerrJ   r   rQ   r!   r   <module>rd      sA      , ,  - 5 /			8	$ Q	 Qr!   