1
1
import pytest
2
- from ldclient import LDClient , Context , Config
2
+ from ldclient import Config , Context , LDClient
3
3
from ldclient .integrations .test_data import TestData
4
+ from ldclient .testing .builders import *
5
+
4
6
from ldai .client import AIConfig , AIConfigData , LDAIClient , LDMessage
5
7
from ldai .tracker import LDAIConfigTracker
6
- from ldclient .testing .builders import *
7
8
8
9
9
10
@pytest .fixture
10
11
def td () -> TestData :
11
12
td = TestData .data_source ()
12
- td .update (td .flag ('model-config' ).variations ({
13
- 'model' : { 'modelId' : 'fakeModel' },
14
- 'prompt' : [{'role' : 'system' , 'content' : 'Hello, {{name}}!' }],
15
- '_ldMeta' : {'enabled' : True , 'versionKey' : 'abcd' }
16
- }, "green" ).variation_for_all (0 ))
17
-
18
- td .update (td .flag ('multiple-prompt' ).variations ({
19
- 'model' : { 'modelId' : 'fakeModel' },
20
- 'prompt' : [{'role' : 'system' , 'content' : 'Hello, {{name}}!' }, {'role' : 'user' , 'content' : 'The day is, {{day}}!' }],
21
- '_ldMeta' : {'enabled' : True , 'versionKey' : 'abcd' }
22
- }, "green" ).variation_for_all (0 ))
23
-
24
- td .update (td .flag ('ctx-interpolation' ).variations ({
25
- 'model' : { 'modelId' : 'fakeModel' },
26
- 'prompt' : [{'role' : 'system' , 'content' : 'Hello, {{ldctx.name}}!' }],
27
- '_ldMeta' : {'enabled' : True , 'versionKey' : 'abcd' }
28
- }).variation_for_all (0 ))
29
-
30
- td .update (td .flag ('off-config' ).variations ({
31
- 'model' : { 'modelId' : 'fakeModel' },
32
- 'prompt' : [{'role' : 'system' , 'content' : 'Hello, {{name}}!' }],
33
- '_ldMeta' : {'enabled' : False , 'versionKey' : 'abcd' }
34
- }).variation_for_all (0 ))
13
+ td .update (
14
+ td .flag ('model-config' )
15
+ .variations (
16
+ {
17
+ 'model' : {'modelId' : 'fakeModel' },
18
+ 'prompt' : [{'role' : 'system' , 'content' : 'Hello, {{name}}!' }],
19
+ '_ldMeta' : {'enabled' : True , 'versionKey' : 'abcd' },
20
+ },
21
+ "green" ,
22
+ )
23
+ .variation_for_all (0 )
24
+ )
25
+
26
+ td .update (
27
+ td .flag ('multiple-prompt' )
28
+ .variations (
29
+ {
30
+ 'model' : {'modelId' : 'fakeModel' },
31
+ 'prompt' : [
32
+ {'role' : 'system' , 'content' : 'Hello, {{name}}!' },
33
+ {'role' : 'user' , 'content' : 'The day is, {{day}}!' },
34
+ ],
35
+ '_ldMeta' : {'enabled' : True , 'versionKey' : 'abcd' },
36
+ },
37
+ "green" ,
38
+ )
39
+ .variation_for_all (0 )
40
+ )
41
+
42
+ td .update (
43
+ td .flag ('ctx-interpolation' )
44
+ .variations (
45
+ {
46
+ 'model' : {'modelId' : 'fakeModel' },
47
+ 'prompt' : [{'role' : 'system' , 'content' : 'Hello, {{ldctx.name}}!' }],
48
+ '_ldMeta' : {'enabled' : True , 'versionKey' : 'abcd' },
49
+ }
50
+ )
51
+ .variation_for_all (0 )
52
+ )
53
+
54
+ td .update (
55
+ td .flag ('off-config' )
56
+ .variations (
57
+ {
58
+ 'model' : {'modelId' : 'fakeModel' },
59
+ 'prompt' : [{'role' : 'system' , 'content' : 'Hello, {{name}}!' }],
60
+ '_ldMeta' : {'enabled' : False , 'versionKey' : 'abcd' },
61
+ }
62
+ )
63
+ .variation_for_all (0 )
64
+ )
35
65
36
66
return td
37
67
68
+
38
69
@pytest .fixture
39
70
def client (td : TestData ) -> LDClient :
40
71
config = Config ('sdk-key' , update_processor_class = td , send_events = False )
41
72
return LDClient (config = config )
42
73
74
+
43
75
@pytest .fixture
44
76
def tracker (client : LDClient ) -> LDAIConfigTracker :
45
77
return LDAIConfigTracker (client , 'abcd' , 'model-config' , Context .create ('user-key' ))
46
78
79
+
47
80
@pytest .fixture
48
81
def ldai_client (client : LDClient ) -> LDAIClient :
49
82
return LDAIClient (client )
50
83
84
+
51
85
def test_model_config_interpolation (ldai_client : LDAIClient , tracker ):
52
86
context = Context .create ('user-key' )
53
- default_value = AIConfig (config = AIConfigData (model = { 'modelId' : 'fakeModel' }, prompt = [LDMessage (role = 'system' , content = 'Hello, {{name}}!' )]), tracker = tracker , enabled = True )
87
+ default_value = AIConfig (
88
+ config = AIConfigData (
89
+ model = {'modelId' : 'fakeModel' },
90
+ prompt = [LDMessage (role = 'system' , content = 'Hello, {{name}}!' )],
91
+ ),
92
+ tracker = tracker ,
93
+ enabled = True ,
94
+ )
54
95
variables = {'name' : 'World' }
55
96
56
97
config = ldai_client .model_config ('model-config' , context , default_value , variables )
@@ -60,9 +101,12 @@ def test_model_config_interpolation(ldai_client: LDAIClient, tracker):
60
101
assert config .config .prompt [0 ].content == 'Hello, World!'
61
102
assert config .enabled is True
62
103
104
+
63
105
def test_model_config_no_variables (ldai_client : LDAIClient , tracker ):
64
106
context = Context .create ('user-key' )
65
- default_value = AIConfig (config = AIConfigData (model = {}, prompt = []), tracker = tracker , enabled = True )
107
+ default_value = AIConfig (
108
+ config = AIConfigData (model = {}, prompt = []), tracker = tracker , enabled = True
109
+ )
66
110
67
111
config = ldai_client .model_config ('model-config' , context , default_value , {})
68
112
@@ -71,34 +115,47 @@ def test_model_config_no_variables(ldai_client: LDAIClient, tracker):
71
115
assert config .config .prompt [0 ].content == 'Hello, !'
72
116
assert config .enabled is True
73
117
118
+
74
119
def test_context_interpolation (ldai_client : LDAIClient , tracker ):
75
120
context = Context .builder ('user-key' ).name ("Sandy" ).build ()
76
- default_value = AIConfig (config = AIConfigData (model = {}, prompt = []), tracker = tracker , enabled = True )
121
+ default_value = AIConfig (
122
+ config = AIConfigData (model = {}, prompt = []), tracker = tracker , enabled = True
123
+ )
77
124
variables = {'name' : 'World' }
78
125
79
- config = ldai_client .model_config ('ctx-interpolation' , context , default_value , variables )
126
+ config = ldai_client .model_config (
127
+ 'ctx-interpolation' , context , default_value , variables
128
+ )
80
129
81
130
assert config .config .prompt is not None
82
131
assert len (config .config .prompt ) > 0
83
132
assert config .config .prompt [0 ].content == 'Hello, Sandy!'
84
133
assert config .enabled is True
85
134
135
+
86
136
def test_model_config_multiple (ldai_client : LDAIClient , tracker ):
87
137
context = Context .create ('user-key' )
88
- default_value = AIConfig (config = AIConfigData (model = {}, prompt = []), tracker = tracker , enabled = True )
138
+ default_value = AIConfig (
139
+ config = AIConfigData (model = {}, prompt = []), tracker = tracker , enabled = True
140
+ )
89
141
variables = {'name' : 'World' , 'day' : 'Monday' }
90
142
91
- config = ldai_client .model_config ('multiple-prompt' , context , default_value , variables )
143
+ config = ldai_client .model_config (
144
+ 'multiple-prompt' , context , default_value , variables
145
+ )
92
146
93
147
assert config .config .prompt is not None
94
148
assert len (config .config .prompt ) > 0
95
149
assert config .config .prompt [0 ].content == 'Hello, World!'
96
150
assert config .config .prompt [1 ].content == 'The day is, Monday!'
97
151
assert config .enabled is True
98
152
153
+
99
154
def test_model_config_disabled (ldai_client : LDAIClient , tracker ):
100
155
context = Context .create ('user-key' )
101
- default_value = AIConfig (config = AIConfigData (model = {}, prompt = []), tracker = tracker , enabled = False )
156
+ default_value = AIConfig (
157
+ config = AIConfigData (model = {}, prompt = []), tracker = tracker , enabled = False
158
+ )
102
159
103
160
config = ldai_client .model_config ('off-config' , context , default_value , {})
104
161
0 commit comments