diff --git a/tests/sdk_v1/agents_test.py b/tests/sdk_v1/agents_test.py index 55501bef..941876cc 100644 --- a/tests/sdk_v1/agents_test.py +++ b/tests/sdk_v1/agents_test.py @@ -20,12 +20,12 @@ AGENTS_CREATE_PARAMS = [ ), ] -AGENTS_MODIFY_PARAMS = [ +AGENTS_UPDATE_PARAMS = [ ( "caren_agent", {"name": "caren_updated"}, { - # After modifying just the name, model_settings should still be present + # After updating just the name, model_settings should still be present "model_settings": { "max_output_tokens": 4096, "parallel_tool_calls": False, @@ -50,7 +50,7 @@ globals().update( resource_name="agents", id_param_name="agent_id", create_params=AGENTS_CREATE_PARAMS, - modify_params=AGENTS_MODIFY_PARAMS, + update_params=AGENTS_UPDATE_PARAMS, list_params=AGENTS_LIST_PARAMS, ) ) diff --git a/tests/sdk_v1/blocks_test.py b/tests/sdk_v1/blocks_test.py index 9b370673..cfc65b5a 100644 --- a/tests/sdk_v1/blocks_test.py +++ b/tests/sdk_v1/blocks_test.py @@ -8,7 +8,7 @@ BLOCKS_CREATE_PARAMS = [ ("persona_block", {"label": "persona", "value": "test1"}, {"limit": CORE_MEMORY_PERSONA_CHAR_LIMIT}, None), ] -BLOCKS_MODIFY_PARAMS = [ +BLOCKS_UPDATE_PARAMS = [ ("human_block", {"value": "test2"}, {}, None), ("persona_block", {"value": "testing testing testing", "limit": 10}, {}, UnprocessableEntityError), ] @@ -25,7 +25,7 @@ globals().update( resource_name="blocks", id_param_name="block_id", create_params=BLOCKS_CREATE_PARAMS, - modify_params=BLOCKS_MODIFY_PARAMS, + update_params=BLOCKS_UPDATE_PARAMS, list_params=BLOCKS_LIST_PARAMS, ) ) diff --git a/tests/sdk_v1/conftest.py b/tests/sdk_v1/conftest.py index d32c8e28..6fadeead 100644 --- a/tests/sdk_v1/conftest.py +++ b/tests/sdk_v1/conftest.py @@ -66,7 +66,7 @@ def create_test_module( id_param_name: str, create_params: List[Tuple[str, Dict[str, Any], Dict[str, Any], Optional[Exception]]] = [], upsert_params: List[Tuple[str, Dict[str, Any], Dict[str, Any], Optional[Exception]]] = [], - modify_params: List[Tuple[str, Dict[str, Any], Dict[str, Any], Optional[Exception]]] = [], + update_params: List[Tuple[str, Dict[str, Any], Dict[str, Any], Optional[Exception]]] = [], list_params: List[Tuple[Dict[str, Any], int]] = [], ) -> Dict[str, Any]: """Create a test module for a resource. @@ -78,7 +78,7 @@ def create_test_module( resource_name: Name of the resource (e.g., "blocks", "tools") id_param_name: Name of the ID parameter (e.g., "block_id", "tool_id") create_params: List of (name, params, expected_error) tuples for create tests - modify_params: List of (name, params, expected_error) tuples for modify tests + update_params: List of (name, params, expected_error) tuples for update tests list_params: List of (query_params, expected_count) tuples for list tests Returns: @@ -174,9 +174,9 @@ def create_test_module( assert custom_model_dump(getattr(item, key)) == value @pytest.mark.order(3) - def test_modify(handler, caren_agent, name, params, extra_expected_values, expected_error): - """Test modifying a resource.""" - skip_test_if_not_implemented(handler, resource_name, "modify") + def test_update(handler, caren_agent, name, params, extra_expected_values, expected_error): + """Test updating a resource.""" + skip_test_if_not_implemented(handler, resource_name, "update") if name not in test_item_ids: pytest.skip(f"Item '{name}' not found in test_items") @@ -186,7 +186,7 @@ def create_test_module( processed_extra_expected = preprocess_params(extra_expected_values, caren_agent) try: - item = handler.modify(**processed_params) + item = handler.update(**processed_params) except Exception as e: if expected_error is not None: assert isinstance(e, expected_error), f"Expected error with type {expected_error}, but got {type(e)}: {e}" @@ -248,7 +248,7 @@ def create_test_module( "test_create": pytest.mark.parametrize("name, params, extra_expected_values, expected_error", create_params)(test_create), "test_retrieve": test_retrieve, "test_upsert": pytest.mark.parametrize("name, params, extra_expected_values, expected_error", upsert_params)(test_upsert), - "test_modify": pytest.mark.parametrize("name, params, extra_expected_values, expected_error", modify_params)(test_modify), + "test_update": pytest.mark.parametrize("name, params, extra_expected_values, expected_error", update_params)(test_update), "test_delete": test_delete, "test_list": pytest.mark.parametrize("query_params, count", list_params)(test_list), } diff --git a/tests/sdk_v1/groups_test.py b/tests/sdk_v1/groups_test.py index e52a906b..ab7b42ea 100644 --- a/tests/sdk_v1/groups_test.py +++ b/tests/sdk_v1/groups_test.py @@ -10,7 +10,7 @@ GROUPS_CREATE_PARAMS = [ ), ] -GROUPS_MODIFY_PARAMS = [ +GROUPS_UPDATE_PARAMS = [ ( "round_robin_group", {"manager_config": {"manager_type": "round_robin", "max_turns": 10}}, @@ -30,7 +30,7 @@ globals().update( resource_name="groups", id_param_name="group_id", create_params=GROUPS_CREATE_PARAMS, - modify_params=GROUPS_MODIFY_PARAMS, + update_params=GROUPS_UPDATE_PARAMS, list_params=GROUPS_LIST_PARAMS, ) ) diff --git a/tests/sdk_v1/identities_test.py b/tests/sdk_v1/identities_test.py index 9b06a410..215e9fbc 100644 --- a/tests/sdk_v1/identities_test.py +++ b/tests/sdk_v1/identities_test.py @@ -5,7 +5,7 @@ IDENTITIES_CREATE_PARAMS = [ ("caren2", {"identifier_key": "456", "name": "caren", "identity_type": "user"}, {}, None), ] -IDENTITIES_MODIFY_PARAMS = [ +IDENTITIES_UPDATE_PARAMS = [ ("caren1", {"properties": [{"key": "email", "value": "caren@letta.com", "type": "string"}]}, {}, None), ("caren2", {"properties": [{"key": "email", "value": "caren@gmail.com", "type": "string"}]}, {}, None), ] @@ -37,7 +37,7 @@ globals().update( id_param_name="identity_id", create_params=IDENTITIES_CREATE_PARAMS, upsert_params=IDENTITIES_UPSERT_PARAMS, - modify_params=IDENTITIES_MODIFY_PARAMS, + update_params=IDENTITIES_UPDATE_PARAMS, list_params=IDENTITIES_LIST_PARAMS, ) ) diff --git a/tests/sdk_v1/integration/integration_test_builtin_tools.py b/tests/sdk_v1/integration/integration_test_builtin_tools.py index c30d53cd..827d0f8c 100644 --- a/tests/sdk_v1/integration/integration_test_builtin_tools.py +++ b/tests/sdk_v1/integration/integration_test_builtin_tools.py @@ -143,7 +143,7 @@ def test_run_code( otid=USER_MESSAGE_OTID, ) - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent_state.id, messages=[user_message], ) diff --git a/tests/sdk_v1/integration/integration_test_human_in_the_loop.py b/tests/sdk_v1/integration/integration_test_human_in_the_loop.py index 0c546d7d..d9d171a1 100644 --- a/tests/sdk_v1/integration/integration_test_human_in_the_loop.py +++ b/tests/sdk_v1/integration/integration_test_human_in_the_loop.py @@ -100,7 +100,7 @@ def accumulate_chunks(stream): def approve_tool_call(client: Letta, agent_id: str, tool_call_id: str): - client.agents.messages.send( + client.agents.messages.create( agent_id=agent_id, messages=[ ApprovalCreateParam( @@ -168,7 +168,7 @@ def agent(client: Letta, approval_tool_fixture, dice_tool_fixture) -> AgentState tags=["approval_test"], ) # Enable parallel tool calls for testing - agent_state = client.agents.modify(agent_id=agent_state.id, parallel_tool_calls=True) + agent_state = client.agents.update(agent_id=agent_state.id, parallel_tool_calls=True) yield agent_state client.agents.delete(agent_id=agent_state.id) @@ -181,7 +181,7 @@ def agent(client: Letta, approval_tool_fixture, dice_tool_fixture) -> AgentState def test_send_approval_without_pending_request(client, agent): with pytest.raises(APIError, match="No tool call is currently awaiting approval"): - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ ApprovalCreateParam( @@ -200,13 +200,13 @@ def test_send_approval_without_pending_request(client, agent): def test_send_user_message_with_pending_request(client, agent): - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) with pytest.raises(APIError, match="Please approve or deny the pending request before continuing"): - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[MessageCreateParam(role="user", content="hi")], ) @@ -215,13 +215,13 @@ def test_send_user_message_with_pending_request(client, agent): def test_send_approval_message_with_incorrect_request_id(client, agent): - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) with pytest.raises(APIError, match="Invalid tool call IDs"): - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ ApprovalCreateParam( @@ -250,7 +250,7 @@ def test_invoke_approval_request( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -311,7 +311,7 @@ def test_invoke_tool_after_turning_off_requires_approval( agent: AgentState, approval_tool_fixture, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -385,7 +385,7 @@ def test_approve_tool_call_request( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -437,7 +437,7 @@ def test_approve_cursor_fetch( agent: AgentState, ) -> None: last_message_cursor = client.agents.messages.list(agent_id=agent.id, limit=1).items[0].id - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -457,7 +457,7 @@ def test_approve_cursor_fetch( _args = _json.loads(messages[3].tool_call.arguments) assert "request_heartbeat" not in _args - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ ApprovalCreateParam( @@ -493,7 +493,7 @@ def test_approve_with_context_check( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -531,13 +531,13 @@ def test_approve_and_follow_up( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) tool_call_id = response.messages[2].tool_call.tool_call_id - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ ApprovalCreateParam( @@ -586,7 +586,7 @@ def test_deny_tool_call_request( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -630,7 +630,7 @@ def test_deny_cursor_fetch( agent: AgentState, ) -> None: last_message_cursor = client.agents.messages.list(agent_id=agent.id, limit=1).items[0].id - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -651,7 +651,7 @@ def test_deny_cursor_fetch( # _args = _json.loads(messages[2].tool_call.arguments) # assert "request_heartbeat" not in _args - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ ApprovalCreateParam( @@ -687,7 +687,7 @@ def test_deny_with_context_check( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -727,13 +727,13 @@ def test_deny_and_follow_up( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) tool_call_id = response.messages[2].tool_call.tool_call_id - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ ApprovalCreateParam( @@ -781,7 +781,7 @@ def test_agent_records_last_stop_reason_after_approval_flow( initial_stop_reason = initial_agent.last_stop_reason # Trigger approval request - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -805,7 +805,7 @@ def test_agent_records_last_stop_reason_after_approval_flow( assert agent_after_approval.last_stop_reason != initial_stop_reason # Send follow-up message to complete the flow - response2 = client.agents.messages.send( + response2 = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_FOLLOW_UP, ) @@ -824,7 +824,7 @@ def test_client_side_tool_call_request( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -869,7 +869,7 @@ def test_client_side_tool_call_cursor_fetch( agent: AgentState, ) -> None: last_message_cursor = client.agents.messages.list(agent_id=agent.id, limit=1).items[0].id - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -890,7 +890,7 @@ def test_client_side_tool_call_cursor_fetch( # _args = _json.loads(messages[2].tool_call.arguments) # assert "request_heartbeat" not in _args - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ ApprovalCreateParam( @@ -929,7 +929,7 @@ def test_client_side_tool_call_with_context_check( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -969,13 +969,13 @@ def test_client_side_tool_call_and_follow_up( client: Letta, agent: AgentState, ) -> None: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) tool_call_id = response.messages[2].tool_call.tool_call_id - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ ApprovalCreateParam( @@ -1026,7 +1026,7 @@ def test_parallel_tool_calling( pytest.skip("Parallel tool calling test only applies to Anthropic models.") last_message_cursor = client.agents.messages.list(agent_id=agent.id, limit=1).items[0].id - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_PARALLEL_TOOL_CALL, ) @@ -1145,7 +1145,7 @@ def test_parallel_tool_calling( # ensure context is not bricked client.agents.retrieve(agent_id=agent.id) - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[ ApprovalCreateParam( @@ -1241,7 +1241,7 @@ def test_agent_records_last_stop_reason_after_approval_flow( initial_stop_reason = initial_agent.last_stop_reason # Trigger approval request - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_TEST_APPROVAL, ) @@ -1265,7 +1265,7 @@ def test_agent_records_last_stop_reason_after_approval_flow( assert agent_after_approval.last_stop_reason != initial_stop_reason # Send follow-up message to complete the flow - response2 = client.agents.messages.send( + response2 = client.agents.messages.create( agent_id=agent.id, messages=USER_MESSAGE_FOLLOW_UP, ) diff --git a/tests/sdk_v1/integration/integration_test_multi_agent.py b/tests/sdk_v1/integration/integration_test_multi_agent.py index 255cbb8a..57021fc8 100644 --- a/tests/sdk_v1/integration/integration_test_multi_agent.py +++ b/tests/sdk_v1/integration/integration_test_multi_agent.py @@ -121,7 +121,7 @@ def test_send_message_to_agent(client: Letta, agent_obj: AgentState, other_agent secret_word = "banana" # Encourage the agent to send a message to the other agent_obj with the secret string - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent_obj.id, messages=[ MessageCreateParam( @@ -187,7 +187,7 @@ def test_send_message_to_agent(client: Letta, agent_obj: AgentState, other_agent raise Exception(f"Was not able to find an instance of the target snippet: {target_snippet}") # Test that the agent can still receive messages fine - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent_obj.id, messages=[ MessageCreateParam( @@ -243,7 +243,7 @@ def test_send_message_to_agents_with_tags_simple(client: Letta): worker_agents_456.append(worker_agent_state) # Encourage the manager to send a message to the other agent_obj with the secret string - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=manager_agent_state.id, messages=[ MessageCreateParam( @@ -294,7 +294,7 @@ def test_send_message_to_agents_with_tags_simple(client: Letta): assert secret_word not in m.content, f"Secret word should not be in agent {agent_state.id}" # Test that the agent can still receive messages fine - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=manager_agent_state.id, messages=[ MessageCreateParam( @@ -333,7 +333,7 @@ def test_send_message_to_agents_with_tags_complex_tool_use(client: Letta, roll_d # Encourage the manager to send a message to the other agent_obj with the secret string broadcast_message = f"Send a message to all agents with tags {worker_tags} asking them to roll a dice for you!" - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=manager_agent_state.id, messages=[ MessageCreateParam( @@ -363,7 +363,7 @@ def test_send_message_to_agents_with_tags_complex_tool_use(client: Letta, roll_d break # Test that the agent can still receive messages fine - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=manager_agent_state.id, messages=[ MessageCreateParam( diff --git a/tests/sdk_v1/integration/integration_test_send_message.py b/tests/sdk_v1/integration/integration_test_send_message.py index 5851d5a8..b877da11 100644 --- a/tests/sdk_v1/integration/integration_test_send_message.py +++ b/tests/sdk_v1/integration/integration_test_send_message.py @@ -931,8 +931,8 @@ def test_greeting_with_assistant_message( pytest.skip(f"Skipping deprecated model {llm_config.model}") last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) - response = client.agents.messages.send( + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) + response = client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, ) @@ -964,8 +964,8 @@ def test_greeting_without_assistant_message( pytest.skip(f"Skipping deprecated model {llm_config.model}") last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) - response = client.agents.messages.send( + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) + response = client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, use_assistant_message=False, @@ -1001,7 +1001,7 @@ def test_tool_call( pytest.skip(f"Skipping {llm_config.model} due to OTID chain issue and incomplete agent response") last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use the thinking prompt for Anthropic models with extended reasoning to ensure second reasoning step if llm_config.model_endpoint_type == "anthropic" and llm_config.enable_reasoner: messages_to_send = USER_MESSAGE_ROLL_DICE_LONG_THINKING @@ -1010,7 +1010,7 @@ def test_tool_call( else: messages_to_send = USER_MESSAGE_ROLL_DICE try: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent_state.id, messages=messages_to_send, ) @@ -1065,8 +1065,8 @@ def test_base64_image_input( last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) - response = client.agents.messages.send( + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) + response = client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_BASE64_IMAGE, ) @@ -1093,13 +1093,13 @@ def test_agent_loop_error( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) with patch("letta.agents.letta_agent_v2.LettaAgentV2.step") as mock_step: mock_step.side_effect = LLMError("No tool calls found in response, model must make a tool call") with pytest.raises(APIError): - client.agents.messages.send( + client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, ) @@ -1127,7 +1127,7 @@ def test_step_streaming_greeting_with_assistant_message( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) response = client.agents.messages.stream( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, @@ -1160,7 +1160,7 @@ def test_step_streaming_greeting_without_assistant_message( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) response = client.agents.messages.stream( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, @@ -1204,7 +1204,7 @@ def test_step_streaming_tool_call( last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use the thinking prompt for Anthropic models with extended reasoning to ensure second reasoning step if llm_config.model_endpoint_type == "anthropic" and llm_config.enable_reasoner: messages_to_send = USER_MESSAGE_ROLL_DICE_LONG_THINKING @@ -1256,7 +1256,7 @@ def test_step_stream_agent_loop_error( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) with patch("letta.agents.letta_agent_v2.LettaAgentV2.stream") as mock_step: mock_step.side_effect = ValueError("No tool calls found in response, model must make a tool call") @@ -1290,7 +1290,7 @@ def test_token_streaming_greeting_with_assistant_message( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use longer message for Anthropic models to test if they stream in chunks if llm_config.model_endpoint_type == "anthropic": messages_to_send = USER_MESSAGE_FORCE_LONG_REPLY @@ -1328,7 +1328,7 @@ def test_token_streaming_greeting_without_assistant_message( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use longer message for Anthropic models to force chunking if llm_config.model_endpoint_type == "anthropic": messages_to_send = USER_MESSAGE_FORCE_LONG_REPLY @@ -1381,7 +1381,7 @@ def test_token_streaming_tool_call( last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use longer message for Anthropic models to force chunking if llm_config.model_endpoint_type == "anthropic": if llm_config.enable_reasoner: @@ -1437,7 +1437,7 @@ def test_token_streaming_agent_loop_error( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) with patch("letta.agents.letta_agent_v2.LettaAgentV2.stream") as mock_step: mock_step.side_effect = ValueError("No tool calls found in response, model must make a tool call") @@ -1472,7 +1472,7 @@ def test_background_token_streaming_greeting_with_assistant_message( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use longer message for Anthropic models to test if they stream in chunks if llm_config.model_endpoint_type == "anthropic": messages_to_send = USER_MESSAGE_FORCE_LONG_REPLY @@ -1531,7 +1531,7 @@ def test_background_token_streaming_greeting_without_assistant_message( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use longer message for Anthropic models to force chunking if llm_config.model_endpoint_type == "anthropic": messages_to_send = USER_MESSAGE_FORCE_LONG_REPLY @@ -1585,7 +1585,7 @@ def test_background_token_streaming_tool_call( last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use longer message for Anthropic models to force chunking if llm_config.model_endpoint_type == "anthropic": if llm_config.enable_reasoner: @@ -1645,9 +1645,9 @@ def test_async_greeting_with_assistant_message( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + client.agents.update(agent_id=agent_state.id, llm_config=llm_config) - run = client.agents.messages.send_async( + run = client.agents.messages.create_async( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, ) @@ -1681,9 +1681,9 @@ def test_async_greeting_with_assistant_message( # """ # last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - # client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + # client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # - # run = client.agents.messages.send_async( + # run = client.agents.messages.create_async( # agent_id=agent_state.id, # messages=USER_MESSAGE_FORCE_REPLY, # use_assistant_message=False, @@ -1732,7 +1732,7 @@ def test_async_tool_call( last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use the thinking prompt for Anthropic models with extended reasoning to ensure second reasoning step if llm_config.model_endpoint_type == "anthropic" and llm_config.enable_reasoner: @@ -1741,7 +1741,7 @@ def test_async_tool_call( messages_to_send = USER_MESSAGE_ROLL_DICE_GEMINI_FLASH else: messages_to_send = USER_MESSAGE_ROLL_DICE - run = client.agents.messages.send_async( + run = client.agents.messages.create_async( agent_id=agent_state.id, messages=messages_to_send, ) @@ -1865,11 +1865,11 @@ def test_async_greeting_with_callback_url( if not config_filename or config_filename in limited_configs: pytest.skip(f"Skipping test for limited model {llm_config.model}") - client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + client.agents.update(agent_id=agent_state.id, llm_config=llm_config) with callback_server() as server: # Create async job with callback URL - run = client.agents.messages.send_async( + run = client.agents.messages.create_async( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, callback_url=server.url, @@ -1957,7 +1957,7 @@ def test_auto_summarize(disable_e2b_api_key: Any, client: Letta, llm_config: LLM for attempt in range(MAX_ATTEMPTS): try: - client.agents.messages.send( + client.agents.messages.create( agent_id=temp_agent_state.id, messages=[MessageCreateParam(role="user", content=philosophical_question)], ) @@ -2014,10 +2014,10 @@ def test_job_creation_for_send_message( Test that send_message endpoint creates a job and the job completes successfully. """ previous_runs = client.runs.list(agent_ids=[agent_state.id]) - client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Send a simple message and verify a job was created - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, ) @@ -2050,11 +2050,11 @@ def test_job_creation_for_send_message( # """ # Test that an async job can be cancelled and the cancellation is reflected in the job status. # """ -# client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) +# client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # # # client.runs.cancel # # Start an async job -# run = client.agents.messages.send_async( +# run = client.agents.messages.create_async( # agent_id=agent_state.id, # messages=USER_MESSAGE_FORCE_REPLY, # ) @@ -2107,10 +2107,10 @@ def test_job_creation_for_send_message( # """ # Test that completed jobs cannot be cancelled. # """ -# client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) +# client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # # # Start an async job and wait for it to complete -# run = client.agents.messages.send_async( +# run = client.agents.messages.create_async( # agent_id=agent_state.id, # messages=USER_MESSAGE_FORCE_REPLY, # ) @@ -2141,7 +2141,7 @@ def test_job_creation_for_send_message( # Test that streaming jobs are independent of client connection state. # This verifies that jobs continue even if the client "disconnects" (simulated by not consuming the stream). # """ -# client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) +# client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # # # Create a streaming request # import threading @@ -2222,8 +2222,8 @@ def test_inner_thoughts_false_non_reasoner_models( last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=adjusted_llm_config) - response = client.agents.messages.send( + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=adjusted_llm_config) + response = client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, ) @@ -2269,7 +2269,7 @@ def test_inner_thoughts_false_non_reasoner_models_streaming( last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=adjusted_llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=adjusted_llm_config) response = client.agents.messages.stream( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, @@ -2309,10 +2309,10 @@ def test_inner_thoughts_toggle_interleaved( pytest.skip(f"Skipping `test_inner_thoughts_toggle_interleaved` for model endpoint type {llm_config.model_endpoint_type}") assert not is_reasoning_completely_disabled(llm_config), "Reasoning should be enabled" - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Send a message with inner thoughts - client.agents.messages.send( + client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_GREETING, ) @@ -2323,7 +2323,7 @@ def test_inner_thoughts_toggle_interleaved( new_llm_config["enable_reasoner"] = False new_llm_config["max_reasoning_tokens"] = 0 adjusted_llm_config = LLMConfig(**new_llm_config) - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=adjusted_llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=adjusted_llm_config) # Preview the message payload of the next message # response = client.agents.messages.preview_raw_payload( @@ -2370,10 +2370,10 @@ def test_input_parameter_basic( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) # Use input parameter instead of messages - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent_state.id, input=f"This is an automated test message. Call the send_message tool with the message '{USER_MESSAGE_RESPONSE}'.", ) @@ -2402,7 +2402,7 @@ def test_input_parameter_streaming( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = client.agents.update(agent_id=agent_state.id, llm_config=llm_config) response = client.agents.messages.stream( agent_id=agent_state.id, @@ -2436,9 +2436,9 @@ def test_input_parameter_async( """ last_message_page = client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + client.agents.update(agent_id=agent_state.id, llm_config=llm_config) - run = client.agents.messages.send_async( + run = client.agents.messages.create_async( agent_id=agent_state.id, input=f"This is an automated test message. Call the send_message tool with the message '{USER_MESSAGE_RESPONSE}'.", ) @@ -2461,7 +2461,7 @@ def test_input_and_messages_both_provided_error( Tests that providing both input and messages raises a validation error. """ with pytest.raises(APIError) as exc_info: - client.agents.messages.send( + client.agents.messages.create( agent_id=agent_state.id, input="This is a test message", messages=USER_MESSAGE_FORCE_REPLY, @@ -2479,7 +2479,7 @@ def test_input_and_messages_neither_provided_error( Tests that providing neither input nor messages raises a validation error. """ with pytest.raises(APIError) as exc_info: - client.agents.messages.send( + client.agents.messages.create( agent_id=agent_state.id, ) # Should get a 422 validation error diff --git a/tests/sdk_v1/integration/integration_test_send_message_v2.py b/tests/sdk_v1/integration/integration_test_send_message_v2.py index 03a38e93..80dcf82f 100644 --- a/tests/sdk_v1/integration/integration_test_send_message_v2.py +++ b/tests/sdk_v1/integration/integration_test_send_message_v2.py @@ -548,17 +548,17 @@ async def test_greeting( ) -> None: last_message_page = await client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = await client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = await client.agents.update(agent_id=agent_state.id, llm_config=llm_config) if send_type == "step": - response = await client.agents.messages.send( + response = await client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, ) messages = response.messages run_id = next((msg.run_id for msg in messages if hasattr(msg, "run_id")), None) elif send_type == "async": - run = await client.agents.messages.send_async( + run = await client.agents.messages.create_async( agent_id=agent_state.id, messages=USER_MESSAGE_FORCE_REPLY, ) @@ -630,19 +630,19 @@ async def test_parallel_tool_calls( # IMPORTANT: Set parallel_tool_calls at BOTH the agent level and llm_config level # There are two different parallel_tool_calls fields that need to be set - agent_state = await client.agents.modify( + agent_state = await client.agents.update( agent_id=agent_state.id, llm_config=modified_llm_config, parallel_tool_calls=True, # Set at agent level as well! ) if send_type == "step": - await client.agents.messages.send( + await client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_PARALLEL_TOOL_CALL, ) elif send_type == "async": - run = await client.agents.messages.send_async( + run = await client.agents.messages.create_async( agent_id=agent_state.id, messages=USER_MESSAGE_PARALLEL_TOOL_CALL, ) @@ -815,21 +815,21 @@ async def test_tool_call( last_message_page = await client.agents.messages.list(agent_id=agent_state.id, limit=1) last_message = last_message_page.items[0] if last_message_page.items else None - agent_state = await client.agents.modify(agent_id=agent_state.id, llm_config=llm_config) + agent_state = await client.agents.update(agent_id=agent_state.id, llm_config=llm_config) if cancellation == "with_cancellation": delay = 5 if llm_config.model == "gpt-5" else 0.5 # increase delay for responses api _cancellation_task = asyncio.create_task(cancel_run_after_delay(client, agent_state.id, delay=delay)) if send_type == "step": - response = await client.agents.messages.send( + response = await client.agents.messages.create( agent_id=agent_state.id, messages=USER_MESSAGE_ROLL_DICE, ) messages = response.messages run_id = next((msg.run_id for msg in messages if hasattr(msg, "run_id")), None) elif send_type == "async": - run = await client.agents.messages.send_async( + run = await client.agents.messages.create_async( agent_id=agent_state.id, messages=USER_MESSAGE_ROLL_DICE, ) diff --git a/tests/sdk_v1/mcp_servers_test.py b/tests/sdk_v1/mcp_servers_test.py index 4ffb493e..59d76789 100644 --- a/tests/sdk_v1/mcp_servers_test.py +++ b/tests/sdk_v1/mcp_servers_test.py @@ -412,7 +412,7 @@ def test_update_stdio_mcp_server(client: Letta): "env": {"NEW_ENV": "new_value", "PORT": "3000"}, } - updated_server = client.mcp_servers.modify(server_id, **update_request) + updated_server = client.mcp_servers.update(server_id, **update_request) assert get_attr(updated_server, "server_name") == "updated-stdio-server" assert get_attr(updated_server, "args") == ["new_server.js", "--port", "3000"] @@ -445,7 +445,7 @@ def test_update_sse_mcp_server(client: Letta): "custom_headers": {"X-Updated": "true", "X-Version": "2.0"}, } - updated_server = client.mcp_servers.modify(server_id, **update_request) + updated_server = client.mcp_servers.update(server_id, **update_request) assert get_attr(updated_server, "server_name") == "updated-sse-server" assert get_attr(updated_server, "server_url") == "https://new.example.com/sse/v2" @@ -594,7 +594,7 @@ def test_partial_update_preserves_fields(client: Letta): # Update only the server name update_request = {"server_name": "renamed-server"} - updated_server = client.mcp_servers.modify(server_id, **update_request) + updated_server = client.mcp_servers.update(server_id, **update_request) assert get_attr(updated_server, "server_name") == "renamed-server" # Other fields should be preserved @@ -622,7 +622,7 @@ def test_concurrent_server_operations(client: Letta): for i, server_id in enumerate(servers_created): update_request = {"server_name": f"updated-concurrent-{i}"} - updated_server = client.mcp_servers.modify(server_id, **update_request) + updated_server = client.mcp_servers.update(server_id, **update_request) assert get_attr(updated_server, "server_name") == f"updated-concurrent-{i}" # Get all servers @@ -657,7 +657,7 @@ def test_full_server_lifecycle(client: Letta): # 4. Update server update_request = {"server_name": "lifecycle-updated", "env": {"TEST": "false", "NEW_VAR": "value"}} - updated_server = client.mcp_servers.modify(server_id, **update_request) + updated_server = client.mcp_servers.update(server_id, **update_request) assert get_attr(updated_server, "server_name") == "lifecycle-updated" # 5. List tools @@ -734,7 +734,7 @@ def test_mcp_echo_tool_with_agent(client: Letta, agent_with_mcp_tools: AgentStat """ test_message = "Hello from MCP integration test!" - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent_with_mcp_tools.id, messages=[ { @@ -772,7 +772,7 @@ def test_mcp_add_tool_with_agent(client: Letta, agent_with_mcp_tools: AgentState a, b = 42, 58 expected_sum = a + b - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent_with_mcp_tools.id, messages=[ { @@ -860,7 +860,7 @@ def test_mcp_multiple_tools_in_sequence_with_agent(client: Letta): ) # Send message requiring multiple tool calls - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[ { @@ -963,7 +963,7 @@ def test_mcp_complex_schema_tool_with_agent(client: Letta): ) # Test 1: Simple call with just preset - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[ { @@ -988,7 +988,7 @@ def test_mcp_complex_schema_tool_with_agent(client: Letta): assert "Preset: a" in complex_return.tool_return, f"Expected 'Preset: a' in return, got: {complex_return.tool_return}" # Test 2: Complex call with nested data - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[ { @@ -1018,7 +1018,7 @@ def test_mcp_complex_schema_tool_with_agent(client: Letta): # Test 3: If create_person tool is available, test it if create_person_tool: - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[ { diff --git a/tests/sdk_v1/test_sdk_client.py b/tests/sdk_v1/test_sdk_client.py index e08cb5d5..2e0305e4 100644 --- a/tests/sdk_v1/test_sdk_client.py +++ b/tests/sdk_v1/test_sdk_client.py @@ -290,7 +290,7 @@ def test_shared_blocks(client: LettaSDKClient): ) # update memory - client.agents.messages.send( + client.agents.messages.create( agent_id=agent_state1.id, messages=[ MessageCreateParam( @@ -304,7 +304,7 @@ def test_shared_blocks(client: LettaSDKClient): block_value = client.blocks.retrieve(block_id=block.id).value assert "charles" in block_value.lower(), f"Shared block update failed {block_value}" - client.agents.messages.send( + client.agents.messages.create( agent_id=agent_state2.id, messages=[ MessageCreateParam( @@ -336,7 +336,7 @@ def test_read_only_block(client: LettaSDKClient): ) # make sure agent cannot update read-only block - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ MessageCreateParam( @@ -352,7 +352,7 @@ def test_read_only_block(client: LettaSDKClient): # make sure can update from client new_value = "hello" - client.agents.blocks.modify(agent_id=agent.id, block_label="human", value=new_value) + client.agents.blocks.update(agent_id=agent.id, block_label="human", value=new_value) block = client.agents.blocks.retrieve(agent_id=agent.id, block_label="human") assert block.value == new_value @@ -380,7 +380,7 @@ def test_add_and_manage_tags_for_agent(client: LettaSDKClient): assert len(agent.tags) == 0 # Step 1: Add multiple tags to the agent - updated_agent = client.agents.modify(agent_id=agent.id, tags=tags_to_add) + updated_agent = client.agents.update(agent_id=agent.id, tags=tags_to_add) # Add small delay to ensure tags are persisted time.sleep(0.1) @@ -398,7 +398,7 @@ def test_add_and_manage_tags_for_agent(client: LettaSDKClient): # Step 4: Delete a specific tag from the agent and verify its removal tag_to_delete = tags_to_add.pop() - updated_agent = client.agents.modify(agent_id=agent.id, tags=tags_to_add) + updated_agent = client.agents.update(agent_id=agent.id, tags=tags_to_add) # Verify the tag is removed from the agent's tags - explicitly request tags remaining_tags = client.agents.retrieve(agent_id=agent.id, include=["agent.tags"]).tags @@ -406,7 +406,7 @@ def test_add_and_manage_tags_for_agent(client: LettaSDKClient): assert set(remaining_tags) == set(tags_to_add), f"Expected remaining tags to be {tags_to_add[1:]}, but got {remaining_tags}" # Step 5: Delete all remaining tags from the agent - client.agents.modify(agent_id=agent.id, tags=[]) + client.agents.update(agent_id=agent.id, tags=[]) # Verify all tags are removed - explicitly request tags final_tags = client.agents.retrieve(agent_id=agent.id, include=["agent.tags"]).tags @@ -427,7 +427,7 @@ def test_reset_messages(client: LettaSDKClient): try: # Send a message - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[MessageCreateParam(role="user", content="Hello")], ) @@ -596,7 +596,7 @@ def test_modify_message(client: LettaSDKClient): try: # Send a message - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[MessageCreateParam(role="user", content="Original message")], ) @@ -624,7 +624,7 @@ def test_modify_message(client: LettaSDKClient): try: # Check if modify method exists if hasattr(client.agents.messages, "modify"): - updated_message = client.agents.messages.modify( + updated_message = client.agents.messages.update( agent_id=agent.id, message_id=message_id, content="Modified message content", @@ -751,7 +751,7 @@ def test_update_agent_memory_label(client: LettaSDKClient, agent: AgentState): example_new_label = "example_new_label" assert example_new_label not in current_labels - client.agents.blocks.modify( + client.agents.blocks.update( agent_id=agent.id, block_label=example_label, label=example_new_label, @@ -809,7 +809,7 @@ def test_update_agent_memory_limit(client: LettaSDKClient, agent: AgentState): # We expect this to throw a value error with pytest.raises(APIError): - client.agents.blocks.modify( + client.agents.blocks.update( agent_id=agent.id, block_label=example_label, limit=example_new_limit, @@ -818,7 +818,7 @@ def test_update_agent_memory_limit(client: LettaSDKClient, agent: AgentState): # Now try the same thing with a higher limit example_new_limit = current_block_length + 10000 assert example_new_limit > current_block_length - client.agents.blocks.modify( + client.agents.blocks.update( agent_id=agent.id, block_label=example_label, limit=example_new_limit, @@ -828,7 +828,7 @@ def test_update_agent_memory_limit(client: LettaSDKClient, agent: AgentState): def test_messages(client: LettaSDKClient, agent: AgentState): - send_message_response = client.agents.messages.send( + send_message_response = client.agents.messages.create( agent_id=agent.id, messages=[ MessageCreateParam( @@ -848,7 +848,7 @@ def test_messages(client: LettaSDKClient, agent: AgentState): def test_send_system_message(client: LettaSDKClient, agent: AgentState): """Important unit test since the Letta API exposes sending system messages, but some backends don't natively support it (eg Anthropic)""" - send_system_message_response = client.agents.messages.send( + send_system_message_response = client.agents.messages.create( agent_id=agent.id, messages=[ MessageCreateParam( @@ -877,7 +877,7 @@ def test_function_return_limit(disable_e2b_api_key, client: LettaSDKClient, agen client.agents.tools.attach(agent_id=agent.id, tool_id=tool.id) # get function response - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[ MessageCreateParam( @@ -914,7 +914,7 @@ def test_function_always_error(client: LettaSDKClient, agent: AgentState): client.agents.tools.attach(agent_id=agent.id, tool_id=tool.id) # get function response - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[ MessageCreateParam( @@ -1129,7 +1129,7 @@ def test_include_return_message_types(client: LettaSDKClient, agent: AgentState, verify_message_types(messages, message_types) elif message_create == "async": - response = client.agents.messages.send_async( + response = client.agents.messages.create_async( agent_id=agent.id, messages=[ MessageCreateParam( @@ -1165,7 +1165,7 @@ def test_include_return_message_types(client: LettaSDKClient, agent: AgentState, verify_message_types(messages, message_types) elif message_create == "sync": - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=agent.id, messages=[ MessageCreateParam( @@ -1287,7 +1287,7 @@ def test_pydantic_inventory_management_tool(e2b_sandbox_mode, client: LettaSDKCl include_base_tools=False, ) - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=temp_agent.id, messages=[ MessageCreateParam( @@ -1377,7 +1377,7 @@ def test_pydantic_task_planning_tool(e2b_sandbox_mode, client: LettaSDKClient): ], ) - response = client.agents.messages.send( + response = client.agents.messages.create( agent_id=temp_agent.id, messages=[ MessageCreateParam( @@ -1619,7 +1619,7 @@ def test_agent_tool_rules_deduplication(client: LettaSDKClient): MaxCountPerStepToolRule(tool_name="test_tool", max_count_limit=3, type="max_count_per_step"), # different limit, not a duplicate ] - updated_agent = client.agents.modify(agent_id=agent_state.id, tool_rules=update_rules) + updated_agent = client.agents.update(agent_id=agent_state.id, tool_rules=update_rules) # Check that duplicates were removed assert len(updated_agent.tool_rules) == 3, f"Expected 3 unique tool rules after update, got {len(updated_agent.tool_rules)}" @@ -1806,7 +1806,7 @@ def test_add_tool_with_multiple_functions_in_source_code(client: LettaSDKClient) # ).strip() # # # Modify the tool with new source code -# modified_tool = client.tools.modify(name="helper_utility", tool_id=tool.id, source_code=new_source_code) +# modified_tool = client.tools.update(name="helper_utility", tool_id=tool.id, source_code=new_source_code) # # # Verify the name automatically updated to the last function # assert modified_tool.name == "helper_utility" @@ -1844,7 +1844,7 @@ def test_add_tool_with_multiple_functions_in_source_code(client: LettaSDKClient) # ).strip() # # # Modify again -# final_tool = client.tools.modify(tool_id=tool.id, source_code=single_function_code) +# final_tool = client.tools.update(tool_id=tool.id, source_code=single_function_code) # # # Verify name updated again # assert final_tool.name == "calculate_total" @@ -1911,12 +1911,12 @@ def test_tool_rename_with_json_schema_and_source_code(client: LettaSDKClient): # verify there is a 400 error when both source code and json schema are provided with pytest.raises(Exception) as e: - client.tools.modify(tool_id=tool.id, source_code=new_source_code, json_schema=custom_json_schema) + client.tools.update(tool_id=tool.id, source_code=new_source_code, json_schema=custom_json_schema) assert e.value.status_code == 400 # update with consistent name and schema custom_json_schema["name"] = "renamed_function" - tool = client.tools.modify(tool_id=tool.id, json_schema=custom_json_schema) + tool = client.tools.update(tool_id=tool.id, json_schema=custom_json_schema) assert tool.json_schema == custom_json_schema assert tool.name == "renamed_function" @@ -2108,7 +2108,7 @@ def test_run_list(client: LettaSDKClient): ) # message an agent - client.agents.messages.send( + client.agents.messages.create( agent_id=agent.id, messages=[ MessageCreateParam(role="user", content="Hello, how are you?"), @@ -2116,7 +2116,7 @@ def test_run_list(client: LettaSDKClient): ) # message an agent async - async_run = client.agents.messages.send_async( + async_run = client.agents.messages.create_async( agent_id=agent.id, messages=[ MessageCreateParam(role="user", content="Hello, how are you?"), diff --git a/tests/sdk_v1/tools_test.py b/tests/sdk_v1/tools_test.py index 51cdab31..97d63b38 100644 --- a/tests/sdk_v1/tools_test.py +++ b/tests/sdk_v1/tools_test.py @@ -44,7 +44,7 @@ TOOLS_UPSERT_PARAMS = [ ("unfriendly_func", {"source_code": UNFRIENDLY_FUNC_SOURCE_CODE_V2}, {}, None), ] -TOOLS_MODIFY_PARAMS = [ +TOOLS_UPDATE_PARAMS = [ ("friendly_func", {"tags": ["sdk_test"]}, {}, None), ("unfriendly_func", {"return_char_limit": 300}, {}, None), ] @@ -61,7 +61,7 @@ globals().update( id_param_name="tool_id", create_params=TOOLS_CREATE_PARAMS, upsert_params=TOOLS_UPSERT_PARAMS, - modify_params=TOOLS_MODIFY_PARAMS, + update_params=TOOLS_UPDATE_PARAMS, list_params=TOOLS_LIST_PARAMS, ) )