From 2f2253220e747a05cefeb10ba12359246e9d6b45 Mon Sep 17 00:00:00 2001 From: Zishan Date: Wed, 5 Feb 2025 15:49:11 +0100 Subject: [PATCH] add test claude agent --- proxy/__pycache__/serve.cpython-310.pyc | Bin 639 -> 766 bytes proxy/requirements.txt | 4 +- .../__pycache__/anthropic.cpython-310.pyc | Bin 1627 -> 4327 bytes .../__pycache__/open_ai.cpython-310.pyc | Bin 7222 -> 7222 bytes proxy/tests/claude_weather_agent | 117 ++++++++++++++++++ 5 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 proxy/tests/claude_weather_agent diff --git a/proxy/__pycache__/serve.cpython-310.pyc b/proxy/__pycache__/serve.cpython-310.pyc index d3f6587dc652ee6474b56018b61964ad80bdd0f6..ca4e2fc86ceae7f7c5e328409e6d88885a6e4286 100644 GIT binary patch delta 333 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 diff --git a/proxy/routes/__pycache__/open_ai.cpython-310.pyc b/proxy/routes/__pycache__/open_ai.cpython-310.pyc index f486d96b5f7100f890610c22eddc7b06c7ccc950..ec37170683a2d880d9807c3e0fc61663a128bff4 100644 GIT binary patch delta 841 zcmZ9K!EX{#5XOBAT`A213xUGgsxc}dsY#_!K^tw2##kz%)^b1;B(}MfNZ|l*^ zjgxP*cLC=0J_Qc4NKqvDJa7ug_kN8Reaxe*_KX$iy_Skg(SR7*wb6I&%lX|hDd+!t zt|N*A*MJ0&6{w1@qY5Zbj8Le+v!sSi^)%!&bT3?quOh4fE5H??-1{7!VC*t|jT9rJ z8m09awoI$~33VCfYVWDO#PSP>&jROwMFDTjX<7CrXNdj0?b_bB+37f)uG#9AGd^CU zLDap35%)HSTWvJkPQ&Ik{0ZBeqQ+@$)OWIXP$4fXAuqc|uVZtOH7M(V^q9RLu`M=r z8;P3&Ua;G4yY+_Yx*d5oU!V{1qemPV?h0i5J878x-N*NB-h@`CU}Acy0f)Bd{4z8X zI4&Rx#Oc*x4|#QOzwGB&eAt1SiEO+M|H$+fy-L)WMH7?XqH|VC k^Es_9ms=wr%7P#V%F%@b+qy1h{HrL+pP)|}DE`pze_iXhApigX delta 841 zcmZ9KO-~b16o$RiVJs!n&$P57s4;5O1QTe%wh}cM5~vcuj|7+kb!-QiICji!7r1k0 z;?naA^be?M>_*+WFfQHMg$Z%#QWq?&df!U}q?62(Gv|HJJ@?)@?Lxbtd%7MtAs%1y z)pqu+{=v`8)))V27A}Y+p8_reldb*1qK}!B)t|FGebiHNDH;%iM>hJYf4gy1CgsUP z&oZJoummK42?0~Q4NX9KY6OD?K0#W@(u$C;(4)|D{0_oJ;3jYjSZI9>4KX%H-^0al zzeefE7@MbikxSY<%&V$let-PJO%5%Wj}T9#%pgc7@)=a^V#yRX}<+TfbuO z*hm?Py8>pQ>3MFYYPoJhuFa?EQ~dln8-^``jM__!xT7|oJhpia+ByXiqciv6(2uRZ z0BsYvC}65sz1Kq?-8?D#IW>OJfp!wv_&WT3ySM0dqRcEB8vYTLyM>-n_!)Q~yhtwV zxKMFr^0&LRksM9SD|-looDx?=9aiaIxkN9Mv6!MTl_@OT Dict: + """ + Parse user query to extract weather-related parameters using Claude. + """ + messages = [ + { + "role": "user", + "content": user_query + } + ] + while True: + response = self.client.messages.create( + # system=self.system_prompt, + tools = [self.example_function], + model="claude-3-5-sonnet-20241022", + max_tokens=1024, + messages=messages + ) + print("response content:",response.content[0].text) + + # If there's tool call, Extract the tool call parameters from the response + if len(response.content) > 1 and response.content[1].type == "tool_use": + print("response tools:",response.content[1].input) + tool_call_params = response.content[1].input + tool_call_result = self.get_weather(tool_call_params["location"]) + tool_call_id = response.content[1].id + messages.append({ + "role": response.role, + "content": response.content + } + ) + messages.append({ + "role": "user", + "content": [{ + "type": "tool_result", + "tool_use_id": tool_call_id, + "content": tool_call_result + }] + }) + print("messages:",messages,type(messages)) + else: + return response.content[0].text + + def get_weather(self, location: str): + """Get the current weather in a given location using latitude and longitude.""" + query = f"What is the weather in {location}?" + response = tavily_client.search(query) + # breakpoint() + response_content = response["results"][0]["content"] + return response["results"][0]["title"] + ":\n" + response_content + +# Example usage +def main(): + # Initialize agent with your Anthropic API key + api_key = os.getenv("ANTHROPIC_API_KEY") + weather_agent = WeatherAgent(api_key) + + # Example queries + queries = [ + "What's the weather like in Zurich city?", + "Tell me the forecast for New York", + "How's the weather in London next week?" + ] + + # Process each query + for query in queries: + print(f"\nQuery: {query}") + response = weather_agent.parse_weather_query(query) + print(f"Response: {response}") + +if __name__ == "__main__": + main() \ No newline at end of file