(hYfddlmZddlmZmZmZmZmZmZddl m Z m Z m Z ddl mZddlmZddlmZmZmZmZddlmZddlmZmZmZmZdd lmZdd lm Z dd l!m"Z"dd l#m$Z$dd l%m&Z&ddl%m'Z'ddl(m)Z)ddl*m+Z+m,Z,ddl-m.Z.ede/de/fdZ0e"de/dee/e/ffdZ1e"de/dee/e/ffdZ2e"de/dee/e/ffdZ3ee.Z4e2e1e3gZ5dZ6e7dk(rTdZ8e6Z9ee8gZ:e;de8e9jyde:iZ:e;de:dD]Z=e=j}y y )!) load_dotenv) TypedDictListDictAnyOptional Annotated)ChatHuggingFaceHuggingFaceEndpointHuggingFaceEmbeddings)ChatGoogleGenerativeAI)ChatGroq) StateGraph MessagesStateSTARTEND) add_messages) SystemMessage HumanMessage AnyMessage AIMessage)subtract_usage)Tool)tool)TavilySearchResults)WikipediaLoader) ArxivLoader) BM25Retriever)ToolNodetools_condition) system_promptcontentreturnc4|jd}|D]}|jjds#|jj}|sD|d}|jddj}|jdd}d|cSy)z7Extract arXiv ID from text content and format as a URL. zarXiv:rvzhttps://arxiv.org/abs/unknown)splitstrip startswithreplace)r"lineslinepartsarxiv_id_with_prefixarxiv_id base_arxiv_ids T/Users/eric/Documents/study/hf-agents-course/hfagentscourse-finalassignment/agent.py get_arxiv_urlr4s MM$ E ::< " "8 ,JJL&&(E',Qx$/77"EKKM!)s 3A 6 / ?? queryc td| t|dj}tdt|d|ddj |Dcgc]L}d|j j d d d |j j d d d|jdNc}}|s tdd|iScc}w#t$r(}td|ddt|icYd}~Sd}~wwxYw)zfSearch Wikipedia for a query and return maximum 2 results. Args: query: The search query.z# executing search_wiki with query: r6 load_max_docsFound  documents for query '' ---  Empty search results wiki_resultszError in search_wiki: Search error: N) printrloadlenjoinmetadataget page_content Exceptionstrr6 search_docsdocformatted_search_docses r3 search_wikirV0s,  /w 78;%ECHHJ  s;'((>ugQGH - 2 2' &C%S\\%5%5h %J$K8TWT`T`TdTdekmoTpSqqvwzxHxHwIIVW& !  % ) * 566  ; &qc*+.Q 9::;s1ACAB>&C>C C4 C/)C4/C4ctd| tdj|}tdt|td|tdt |d|dd j |Dcgc]>}d |j d d d |j ddd|j ddd@c}}|s tdd|iScc}w#t$r(}td|ddt|icYd}~Sd}~wwxYw)zcSearch Tavily for a query and return maximum 3 results. Args: query: The search query.z" executing search_web with query: ) max_resultsDEBUG: search_docs type: DEBUG: search_docs content: r;r<r=r>r?urlr(rArBN/ArCr"r&rDrE web_resultszError in search_web: rGN) rHrruntyperJrKrMrOrPrQs r3 search_webraIs@  .ug 67:)a8< ,[M:; s;'((>ugQGH - 2 2' &C%SWWUI%>$?xPVX]H^G__dehelelmvxze{d|}JK& !  % ) *455  : %aS)*Ax899:s1A*C:AC=CC D #DD D c 0td| t|dj}tdt|td|tdt |d|dd j |Dcgc]H}d t |jd |jjd d d|jdddJc}}|s tdd|iScc}w#t$r(}td|ddt|icYd}~Sd}~wwxYw)zaSearch Arxiv for a query and return maximum 3 result. Args: query: The search query.z$ executing search_arxiv with query: rXr9rZr[r;r<r=r>r?rArBr]rCNirDrE arxiv_resultszError in search_arxiv: rG) rHrrIr`rJrKr4rNrLrMrOrPrQs r3 search_arxivrdfs^  0 89<!Q?DDF  )${*;)<=> ,[M:; s;'((>ugQGH - 2 2' &C%]33C3C%D$EXcllN^N^_eglNmMnnstwuEuEFKGKuLtMMZ[& !  % ) *!677  < 's+,>#a&!:;;.AgentStatemessagesN)__name__ __module__ __qualname__r listrr__annotations__r5r3 AgentStaterisD,l:;;r5rqstatecj|d}td|t|tr|j dddd|_d|giS)NrjzDEBUG: LLM result = r) input_tokens output_tokens total_tokens)invokerH isinstancerusage_metadata)rrresultllm_with_toolss r3 assistantzbuild_graph..assistantsb&&uZ'89 $VH-. fi (V-B-B-J56\]$^F !   r5r|tools)r rH bind_toolsr}rradd_noderadd_edgeradd_conditional_edgesr rcompile)llmrqr|builderr{s @r3 build_graphrs . C  &'^^E*N +N+; <=rsmBB]]9#AA0VV5 %G@<88! 33$;s;tCH~;;0:c:d38n::8<<S#X<<<  . 3l z5H MEX./H )( 45||Z23H /0 j ! "r5