Files
letta-ai--letta/tests/test_openai_prompt_cache_request_fields.py
wehub-resource-sync 4deafc5b1e
🌿 Preview Python SDK / changed-files (push) Has been cancelled
🌿 Preview Python SDK / preview-python-sdk (push) Has been cancelled
🌿 Preview TypeScript SDK / changed-files (push) Has been cancelled
🌿 Preview TypeScript SDK / preview-typescript-sdk (push) Has been cancelled
Sync Code / notify (push) Has been cancelled
Test Package Installation / test-install (3.13) (push) Has been cancelled
Test Package Installation / test-install (3.12) (push) Has been cancelled
Notify Submodule Repos / notify (push) Has been cancelled
Run Docker integration tests / test (push) Has been cancelled
🌿 Publish Docs / run (push) Has been cancelled
Test Package Installation / test-install (3.11) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:40:25 +08:00

151 lines
4.6 KiB
Python

from letta.llm_api.openai_client import OpenAIClient
from letta.schemas.enums import AgentType, MessageRole
from letta.schemas.letta_message_content import TextContent
from letta.schemas.llm_config import LLMConfig
from letta.schemas.message import Message
def _message(text: str = "hello") -> Message:
return Message(
role=MessageRole.user,
content=[TextContent(text=text)],
agent_id="agent-abc",
)
def _openai_config(model: str, endpoint_type: str = "openai", provider_name: str | None = "openai") -> LLMConfig:
return LLMConfig(
model=model,
model_endpoint_type=endpoint_type,
model_endpoint="https://api.openai.com/v1",
context_window=256000,
provider_name=provider_name,
)
def test_responses_request_sets_24h_retention_for_supported_model():
client = OpenAIClient()
llm_config = _openai_config(model="gpt-5.1")
messages = [_message()]
request_data = client.build_request_data(
agent_type=AgentType.letta_v1_agent,
messages=messages,
llm_config=llm_config,
tools=[],
)
assert "input" in request_data
assert "prompt_cache_key" not in request_data
assert request_data.get("prompt_cache_retention") == "24h"
def test_responses_request_omits_24h_for_unsupported_model():
client = OpenAIClient()
llm_config = _openai_config(model="o3-mini")
messages = [_message()]
request_data = client.build_request_data(
agent_type=AgentType.letta_v1_agent,
messages=messages,
llm_config=llm_config,
tools=[],
)
assert "prompt_cache_key" not in request_data
assert "prompt_cache_retention" not in request_data
def test_chat_completions_request_sets_24h_retention_for_supported_model():
client = OpenAIClient()
llm_config = _openai_config(model="gpt-4.1")
messages = [_message()]
request_data = client.build_request_data(
agent_type=AgentType.memgpt_v2_agent,
messages=messages,
llm_config=llm_config,
tools=[],
)
assert "messages" in request_data
assert "prompt_cache_key" not in request_data
assert request_data.get("prompt_cache_retention") == "24h"
def test_chat_completions_request_omits_24h_for_unsupported_model():
client = OpenAIClient()
llm_config = _openai_config(model="gpt-4o-mini")
messages = [_message()]
request_data = client.build_request_data(
agent_type=AgentType.memgpt_v2_agent,
messages=messages,
llm_config=llm_config,
tools=[],
)
assert "prompt_cache_key" not in request_data
assert "prompt_cache_retention" not in request_data
def test_openrouter_request_omits_all_prompt_cache_fields():
client = OpenAIClient()
llm_config = LLMConfig(
model="gpt-5.1",
handle="openrouter/gpt-5.1",
model_endpoint_type="openai",
model_endpoint="https://openrouter.ai/api/v1",
context_window=256000,
provider_name="openrouter",
)
messages = [_message()]
responses_request_data = client.build_request_data(
agent_type=AgentType.letta_v1_agent,
messages=messages,
llm_config=llm_config,
tools=[],
)
chat_request_data = client.build_request_data(
agent_type=AgentType.memgpt_v2_agent,
messages=messages,
llm_config=llm_config,
tools=[],
)
assert "prompt_cache_key" not in responses_request_data
assert "prompt_cache_retention" not in responses_request_data
assert "prompt_cache_key" not in chat_request_data
assert "prompt_cache_retention" not in chat_request_data
def test_gpt5_family_gets_24h_retention():
"""gpt-5, gpt-5-codex, gpt-5.1, gpt-5.2 all get 24h retention."""
client = OpenAIClient()
for model in ["gpt-5", "gpt-5-codex", "gpt-5.1", "gpt-5.1-codex", "gpt-5.2"]:
llm_config = _openai_config(model=model)
request_data = client.build_request_data(
agent_type=AgentType.letta_v1_agent,
messages=[_message()],
llm_config=llm_config,
tools=[],
)
assert request_data.get("prompt_cache_retention") == "24h", f"{model} should get 24h retention"
def test_gpt5_mini_excluded_from_24h_retention():
"""gpt-5-mini is not listed in OpenAI docs for extended retention."""
client = OpenAIClient()
llm_config = _openai_config(model="gpt-5-mini")
request_data = client.build_request_data(
agent_type=AgentType.letta_v1_agent,
messages=[_message()],
llm_config=llm_config,
tools=[],
)
assert "prompt_cache_retention" not in request_data