Skip to content

Commit ceb46c3

Browse files
committed
RDBC-1041: add Version field to GenAiConfiguration for hash version backward compatibility
1 parent 5fb83c0 commit ceb46c3

2 files changed

Lines changed: 69 additions & 0 deletions

File tree

ravendb/documents/operations/ai/gen_ai_configuration.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def __init__(
3333
queries: List[AiAgentToolQuery] = None,
3434
enable_tracing: bool = False,
3535
expiration_in_sec: int = None,
36+
version: int = None,
3637
disabled: bool = False,
3738
mentor_node: str = None,
3839
pin_to_mentor_node: bool = False,
@@ -60,6 +61,7 @@ def __init__(
6061
self.queries: List[AiAgentToolQuery] = queries or []
6162
self.enable_tracing = enable_tracing
6263
self.expiration_in_sec: Optional[int] = expiration_in_sec
64+
self.version: Optional[int] = version
6365

6466
self._transforms: Optional[List[Transformation]] = None
6567

@@ -179,6 +181,8 @@ def to_json(self) -> Dict[str, Any]:
179181
"ExpirationInSec": self.expiration_in_sec,
180182
}
181183
)
184+
if self.version is not None:
185+
result["Version"] = self.version
182186
return result
183187

184188
@classmethod
@@ -201,6 +205,7 @@ def from_json(cls, json_dict: Dict[str, Any]) -> "GenAiConfiguration":
201205
queries=[AiAgentToolQuery.from_json(q) for q in queries_data] if queries_data else None,
202206
enable_tracing=json_dict.get("EnableTracing", False),
203207
expiration_in_sec=json_dict.get("ExpirationInSec"),
208+
version=json_dict.get("Version"),
204209
disabled=json_dict.get("Disabled", False),
205210
mentor_node=json_dict.get("MentorNode"),
206211
pin_to_mentor_node=json_dict.get("PinToMentorNode", False),

ravendb/tests/gen_ai_tests/test_gen_ai_operations.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,70 @@ def test_gen_ai_configuration_round_trip(self):
253253
self.assertEqual(original.max_concurrency, restored.max_concurrency)
254254
self.assertEqual(original.enable_tracing, restored.enable_tracing)
255255

256+
def test_version_not_in_json_when_none(self):
257+
"""Tests that Version key is omitted from JSON when version is None."""
258+
config = GenAiConfiguration(
259+
name="TestGenAi",
260+
identifier="test-gen-ai-1",
261+
collection="Documents",
262+
connection_string_name="my-connection",
263+
prompt="Test prompt",
264+
gen_ai_transformation=GenAiTransformation(script="ai.genContext(ctx);"),
265+
update_script="this.Summary = $result;",
266+
sample_object='{"summary": "test"}',
267+
)
268+
json_data = config.to_json()
269+
self.assertNotIn("Version", json_data)
270+
271+
def test_version_in_json_when_set(self):
272+
"""Tests that Version key is included in JSON when version has a value."""
273+
config = GenAiConfiguration(
274+
name="TestGenAi",
275+
identifier="test-gen-ai-1",
276+
collection="Documents",
277+
connection_string_name="my-connection",
278+
prompt="Test prompt",
279+
gen_ai_transformation=GenAiTransformation(script="ai.genContext(ctx);"),
280+
update_script="this.Summary = $result;",
281+
sample_object='{"summary": "test"}',
282+
version=1,
283+
)
284+
json_data = config.to_json()
285+
self.assertEqual(1, json_data["Version"])
286+
287+
def test_version_round_trip(self):
288+
"""Tests that version survives serialization -> deserialization."""
289+
config = GenAiConfiguration(
290+
name="TestGenAi",
291+
identifier="test-gen-ai-1",
292+
collection="Documents",
293+
connection_string_name="my-connection",
294+
prompt="Test prompt",
295+
gen_ai_transformation=GenAiTransformation(script="ai.genContext(ctx);"),
296+
update_script="this.Summary = $result;",
297+
sample_object='{"summary": "test"}',
298+
version=1,
299+
)
300+
json_data = config.to_json()
301+
restored = GenAiConfiguration.from_json(json_data)
302+
self.assertEqual(1, restored.version)
303+
304+
def test_version_none_round_trip(self):
305+
"""Tests that None version survives serialization -> deserialization."""
306+
config = GenAiConfiguration(
307+
name="TestGenAi",
308+
identifier="test-gen-ai-1",
309+
collection="Documents",
310+
connection_string_name="my-connection",
311+
prompt="Test prompt",
312+
gen_ai_transformation=GenAiTransformation(script="ai.genContext(ctx);"),
313+
update_script="this.Summary = $result;",
314+
sample_object='{"summary": "test"}',
315+
)
316+
json_data = config.to_json()
317+
restored = GenAiConfiguration.from_json(json_data)
318+
self.assertIsNone(restored.version)
319+
256320

257321
class TestGenAiTransformation(unittest.TestCase):
258322
"""Tests for GenAiTransformation. No server required."""

0 commit comments

Comments
 (0)