,"huZddlZddlmZddlmZmZmZmZmZm Z ddl m Z m Z m Z ddlmZmZmZmZddlmZddlmZmZmZmZddlmZdd lmZdd lmZdd l m!Z!dd l"m#Z#dd l"m$Z$ddl"m%Z%ddl&m'Z'ddl(m)Z)m*Z*eejVdZ,e-de,ede.de.de.fdZ/ede.de.de.fdZ0ede.de.de.fdZ1ede.de.de2fdZ3ede.de.de.fdZ4ede5dee5e5ffdZ6ede5dee5e5ffdZ7ede5dee5e5ffdZ8e9dd d!"5Z:e:jwZd$Z?e@d%k(rAd&ZAe?ZBeeA#gZCeBjd'eCiZCeCd'D]ZEeEjyy#1swYfxYw)(N) load_dotenv) TypedDictListDictAnyOptional Annotated)ChatHuggingFaceHuggingFaceEndpointHuggingFaceEmbeddings) StateGraph MessagesStateSTARTEND) add_messages) SystemMessage HumanMessage AnyMessage AIMessage)subtract_usage)Tool)tool)WikipediaQueryRun)WikipediaAPIWrapper)SerpAPIWrapper)ArxivAPIWrapper) BM25Retriever)ToolNodetools_conditionHUGGINGFACEHUB_API_TOKENz"DEBUG: HUGGINGFACEHUB_API_TOKEN = abreturnc ||zS)zJadd two numbers. args: a: first int b: second int r!r"s S/Users/eric/Documents/study/hf-agent-course/hfagentscourse-finalassignment/agent.pyaddr(  q5Lc ||z S)zOsubtract two numbers. args: a: first int b: second int r%r&s r'subtractr,(r)r*c ||zS)zOmultiply two numbers. args: a: first int b: second int r%r&s r'multiplyr.2r)r*cB ||z }|S#t$r tdwxYw)zMdivide two numbers. args: a: first int b: second int zCannot divide by zero.)ZeroDivisionError ValueError)r!r"results r'divider3<s03Q 31223s c ||zS)z[modulus remainder of two numbers. args: a: first int b: second int r%r&s r'modulusr5Lr)r*queryctt}|j|d|jdd|jj ddd|j d}d |iS) zJsearch wikipedia with a query args: query: a search query ) api_wrapper wiki_results)rrrunmetadataget page_contentr6docsformatted_results r' search_wikirHWs )<)> ?DHHUO+DMM(,C+DHT]]M^M^_egiMjLkkpqurCrCqDDQR , --r*ct}|j|d|jdd|jjddd|jd}d|iS) zIsearch internet with a query args: query: a search query r9r:r;r<r=r>r? web_results)rrArBrCrDrEs r' search_webrKdsy  DHHUO+DMM(,C+DHT]]M^M^_egiMjLkkpqurCrCqDDQR + ,,r*ct}|j|}d|jdd|jjddd|jd}d|iS) zfsearch ArXiv for the paper with the given identifier args: query: a search identifier r9r:r;r<r=r>r? arxiv_results)rrArBrCrD)r6arxivrFrGs r' search_arxivrOqs|  E 99U D+DMM(,C+DHT]]M^M^_egiMjLkkpqurCrCqDDQR - ..r*zsystem_prompt.txtrzutf-8)encoding)contentctdt}td|t|d}td||j t tdGdd t }d |ffd }t|}|jd ||jd tt |jtd |jd td d tti|jd d |jS)Nzdeepseek-ai/DeepSeek-R1)repo_idhuggingfacehub_api_tokenzDEBUG: llm object = F)llmverbosezDEBUG: chat object = z DEBUG: chat_with_tools object = c(eZdZUeeeefed<y)build_graph..AgentStatemessagesN)__name__ __module__ __qualname__r listrr__annotations__r%r*r' AgentStaterYsD,l:;;r*r`statecj|d}t|tr|j dddd|_d|giS)NrZr) input_tokens output_tokens total_tokens)invoke isinstancerusage_metadata)rar2chat_with_toolss r' assistantzbuild_graph..assistantsR ''j(9: fi (V-B-B-J56\]$^F !   r*rjtools)r r printr bind_toolsrkrr add_noderadd_edgeradd_conditional_edgesrrcompile)rVchatr`rjbuilderris @r' build_graphrts )!9 C  &' sE 2D !$ ()ooe,O ,_,= >?rsi BB]]AA0VV5 %7=8988 $299%?@*+C*DEF#sccscc 3S 3C 3E 3 3cSS.s.tCH~..-c-d38n--//S#X//  sW5FFHM6  .     5p z~H MEX./H||Z23H j ! " [65s +F!!F*