Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .sampo/changesets/gallant-queen-vainamoinen.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
pypi/posthog: patch
---

Honor `default_cache_ttl_seconds=0` in AI prompts so callers can disable default prompt caching.
4 changes: 3 additions & 1 deletion posthog/ai/prompts.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,9 @@ def __init__(
failures are reported to PostHog error tracking via capture_exception().
"""
self._default_cache_ttl_seconds = (
default_cache_ttl_seconds or DEFAULT_CACHE_TTL_SECONDS
default_cache_ttl_seconds
if default_cache_ttl_seconds is not None
else DEFAULT_CACHE_TTL_SECONDS
)
self._cache: Dict[PromptCacheKey, CachedPrompt] = {}
self._has_warned_deprecation = False
Expand Down
20 changes: 20 additions & 0 deletions posthog/test/ai/test_prompts.py
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,26 @@ def test_use_custom_default_cache_ttl_from_constructor(
prompts.get("test-prompt", with_metadata=False)
self.assertEqual(mock_get.call_count, 2)

@patch("posthog.ai.prompts._get_session")
@patch("posthog.ai.prompts.time.time")
def test_default_cache_ttl_seconds_zero_disables_caching(
self, mock_time, mock_get_session
):
"""A default TTL of 0 should disable caching, matching the per-call option."""
mock_get = mock_get_session.return_value.get
mock_get.return_value = MockResponse(json_data=self.mock_prompt_response)
mock_time.return_value = 1000.0

posthog = self.create_mock_posthog()
prompts = Prompts(posthog, default_cache_ttl_seconds=0)

prompts.get("test-prompt", with_metadata=False)
self.assertEqual(mock_get.call_count, 1)

# No time has passed, and a TTL of 0 still means every read refetches.
prompts.get("test-prompt", with_metadata=False)
self.assertEqual(mock_get.call_count, 2)

@patch("posthog.ai.prompts._get_session")
def test_url_encode_prompt_names_with_special_characters(self, mock_get_session):
"""Should URL-encode prompt names with special characters."""
Expand Down
Loading