From 76caa060d3c180ee21ae1dde5f64977c665c59be Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 14 Aug 2025 14:44:18 +0000 Subject: [PATCH 1/2] feat: add usage tracking to config method - Add tracking call for :ai:config:function:single event - Include test to verify tracking functionality - Follows SDK spec requirement 1.2.3.5 Co-Authored-By: jbailey@launchdarkly.com --- ldai/client.py | 2 ++ ldai/testing/test_model_config.py | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/ldai/client.py b/ldai/client.py index 261012c..a8bd888 100644 --- a/ldai/client.py +++ b/ldai/client.py @@ -222,6 +222,8 @@ def config( :param variables: Additional variables for the model configuration. :return: The value of the model configuration along with a tracker used for gathering metrics. """ + self._client.track('$ld:ai:config:function:single', context, key, 1) + model, provider, messages, instructions, tracker, enabled = self.__evaluate(key, context, default_value.to_dict(), variables) config = AIConfig( diff --git a/ldai/testing/test_model_config.py b/ldai/testing/test_model_config.py index 6e2c40c..94c502a 100644 --- a/ldai/testing/test_model_config.py +++ b/ldai/testing/test_model_config.py @@ -303,3 +303,28 @@ def test_model_initial_config_enabled(ldai_client: LDAIClient): assert config.model is None assert config.messages is None assert config.provider is None + + +def test_config_method_tracking(ldai_client: LDAIClient): + from unittest.mock import Mock + + mock_client = Mock() + mock_client.variation.return_value = { + '_ldMeta': {'enabled': True, 'variationKey': 'test-variation', 'version': 1}, + 'model': {'name': 'test-model'}, + 'provider': {'name': 'test-provider'}, + 'messages': [] + } + + client = LDAIClient(mock_client) + context = Context.create('user-key') + default_value = AIConfig(enabled=False, model=ModelConfig('fake-model'), messages=[]) + + config, tracker = client.config('test-config-key', context, default_value) + + mock_client.track.assert_called_once_with( + '$ld:ai:config:function:single', + context, + 'test-config-key', + 1 + ) From fe6f8e6f947c8e8e8a4e4501a29b63d01aff097f Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 14 Aug 2025 15:02:31 +0000 Subject: [PATCH 2/2] fix: remove whitespace from blank lines in test file Co-Authored-By: jbailey@launchdarkly.com --- ldai/testing/test_model_config.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ldai/testing/test_model_config.py b/ldai/testing/test_model_config.py index 94c502a..1ffc033 100644 --- a/ldai/testing/test_model_config.py +++ b/ldai/testing/test_model_config.py @@ -307,7 +307,7 @@ def test_model_initial_config_enabled(ldai_client: LDAIClient): def test_config_method_tracking(ldai_client: LDAIClient): from unittest.mock import Mock - + mock_client = Mock() mock_client.variation.return_value = { '_ldMeta': {'enabled': True, 'variationKey': 'test-variation', 'version': 1}, @@ -315,13 +315,13 @@ def test_config_method_tracking(ldai_client: LDAIClient): 'provider': {'name': 'test-provider'}, 'messages': [] } - + client = LDAIClient(mock_client) context = Context.create('user-key') default_value = AIConfig(enabled=False, model=ModelConfig('fake-model'), messages=[]) - + config, tracker = client.config('test-config-key', context, default_value) - + mock_client.track.assert_called_once_with( '$ld:ai:config:function:single', context,