* feat: add hidden agent count * feat: add hidden agent count * chore; hiddne agents --------- Co-authored-by: Shubham Naik <shub@memgpt.ai>
151 lines
4.5 KiB
Python
151 lines
4.5 KiB
Python
import os
|
|
from typing import List
|
|
|
|
import httpx
|
|
import pytest
|
|
from letta_client import Letta
|
|
|
|
from letta.schemas.agent import AgentState
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def test_agents(client: Letta) -> List[AgentState]:
|
|
"""
|
|
Creates test agents - some hidden, some not hidden.
|
|
Cleans them up after the test.
|
|
"""
|
|
agents = []
|
|
|
|
# Create 3 non-hidden agents
|
|
for i in range(3):
|
|
agent = client.agents.create(
|
|
name=f"test_agent_visible_{i}",
|
|
tags=["test", "visible"],
|
|
model="openai/gpt-4o-mini",
|
|
embedding="openai/text-embedding-3-small",
|
|
)
|
|
agents.append(agent)
|
|
|
|
# Create 2 hidden agents
|
|
for i in range(2):
|
|
# Create agent as hidden using direct HTTP call (SDK might not support hidden parameter yet)
|
|
response = httpx.post(
|
|
f"{client._client._base_url}/v1/agents/",
|
|
json={
|
|
"name": f"test_agent_hidden_{i}",
|
|
"tags": ["test", "hidden"],
|
|
"model": "openai/gpt-4o-mini",
|
|
"embedding": "openai/text-embedding-3-small",
|
|
"hidden": True,
|
|
},
|
|
headers=client._client._headers,
|
|
timeout=10.0,
|
|
)
|
|
response.raise_for_status()
|
|
agent_data = response.json()
|
|
|
|
# Create a simple AgentState-like object for tracking
|
|
class SimpleAgent:
|
|
def __init__(self, id):
|
|
self.id = id
|
|
|
|
agents.append(SimpleAgent(agent_data["id"]))
|
|
|
|
yield agents
|
|
|
|
# Cleanup
|
|
for agent in agents:
|
|
try:
|
|
client.agents.delete(agent.id)
|
|
except:
|
|
pass
|
|
|
|
|
|
def test_internal_agents_count_exclude_hidden(client: Letta, test_agents: List[AgentState]):
|
|
"""
|
|
Test that the internal agents count endpoint correctly excludes hidden agents
|
|
when exclude_hidden=True (default).
|
|
"""
|
|
# Make a request to the internal endpoint
|
|
# Note: We need to use the raw HTTP client since the SDK might not have this endpoint
|
|
response = httpx.get(
|
|
f"{client._client._base_url}/v1/_internal_agents/count",
|
|
params={"exclude_hidden": True},
|
|
headers=client._client._headers,
|
|
timeout=10.0,
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
count = response.json()
|
|
|
|
# Should count at least the 3 visible agents we created
|
|
# (there might be other agents in the system)
|
|
assert isinstance(count, int)
|
|
assert count >= 3
|
|
|
|
# Get the total count with hidden agents included
|
|
response_with_hidden = httpx.get(
|
|
f"{client._client._base_url}/v1/_internal_agents/count",
|
|
params={"exclude_hidden": False},
|
|
headers=client._client._headers,
|
|
timeout=10.0,
|
|
)
|
|
|
|
assert response_with_hidden.status_code == 200
|
|
count_with_hidden = response_with_hidden.json()
|
|
|
|
# The count with hidden should be at least 2 more than without hidden
|
|
assert count_with_hidden >= count + 2
|
|
|
|
|
|
def test_internal_agents_count_include_all(client: Letta, test_agents: List[AgentState]):
|
|
"""
|
|
Test that the internal agents count endpoint correctly includes all agents
|
|
when exclude_hidden=False.
|
|
"""
|
|
response = httpx.get(
|
|
f"{client._client._base_url}/v1/_internal_agents/count",
|
|
params={"exclude_hidden": False},
|
|
headers=client._client._headers,
|
|
timeout=10.0,
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
count = response.json()
|
|
|
|
# Should count at least all 5 agents we created (3 visible + 2 hidden)
|
|
assert isinstance(count, int)
|
|
assert count >= 5
|
|
|
|
|
|
def test_internal_agents_count_default_behavior(client: Letta, test_agents: List[AgentState]):
|
|
"""
|
|
Test that the default behavior (exclude_hidden=True) works correctly.
|
|
"""
|
|
# Call without specifying exclude_hidden (should default to True)
|
|
response = httpx.get(
|
|
f"{client._client._base_url}/v1/_internal_agents/count",
|
|
headers=client._client._headers,
|
|
timeout=10.0,
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
count = response.json()
|
|
|
|
# Should count at least the 3 visible agents we created
|
|
assert isinstance(count, int)
|
|
assert count >= 3
|
|
|
|
# This should be the same as explicitly setting exclude_hidden=True
|
|
response_explicit = httpx.get(
|
|
f"{client._client._base_url}/v1/_internal_agents/count",
|
|
params={"exclude_hidden": True},
|
|
headers=client._client._headers,
|
|
timeout=10.0,
|
|
)
|
|
|
|
count_explicit = response_explicit.json()
|
|
|
|
# The two counts should be equal
|
|
assert count == count_explicit
|