Skip to content

Commit c01300c

Browse files
feat: add tools to completion configs with test coverage
Co-Authored-By: Paul Loeb <ploeb@launchdarkly.com>
1 parent d47de6d commit c01300c

3 files changed

Lines changed: 395 additions & 1 deletion

File tree

packages/sdk/server-ai/src/ldai/client.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,31 @@ def _completion_config(
5252
default: AICompletionConfigDefault,
5353
variables: Optional[Dict[str, Any]] = None,
5454
) -> AICompletionConfig:
55-
model, provider, messages, instructions, tracker, enabled, judge_configuration, _ = self.__evaluate(
55+
model, provider, messages, instructions, tracker, enabled, judge_configuration, variation = self.__evaluate(
5656
key, context, default.to_dict(), variables
5757
)
5858

59+
# Parse tools from variation data
60+
tools = None
61+
if 'tools' in variation and isinstance(variation['tools'], list):
62+
tools = [
63+
AITool(
64+
key=tool['key'],
65+
version=tool.get('version', 0),
66+
instructions=tool.get('instructions'),
67+
examples=tool.get('examples'),
68+
custom_parameters=tool.get('customParameters'),
69+
)
70+
for tool in variation['tools']
71+
if isinstance(tool, dict) and 'key' in tool
72+
] or None
73+
5974
config = AICompletionConfig(
6075
key=key,
6176
enabled=bool(enabled),
6277
model=model,
6378
messages=messages,
79+
tools=tools if tools is not None else (default.tools if default.tools else None),
6480
provider=provider,
6581
tracker=tracker,
6682
judge_configuration=judge_configuration,

packages/sdk/server-ai/src/ldai/models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ class AICompletionConfigDefault(AIConfigDefault):
239239
Default Completion AI Config (default mode).
240240
"""
241241
messages: Optional[List[LDMessage]] = None
242+
tools: Optional[List[AITool]] = None
242243
judge_configuration: Optional[JudgeConfiguration] = None
243244

244245
def to_dict(self) -> dict:
@@ -247,6 +248,8 @@ def to_dict(self) -> dict:
247248
"""
248249
result = self._base_to_dict()
249250
result['messages'] = [message.to_dict() for message in self.messages] if self.messages else None
251+
if self.tools is not None:
252+
result['tools'] = [tool.to_dict() for tool in self.tools]
250253
if self.judge_configuration is not None:
251254
result['judgeConfiguration'] = self.judge_configuration.to_dict()
252255
return result
@@ -258,6 +261,7 @@ class AICompletionConfig(AIConfig):
258261
Completion AI Config (default mode).
259262
"""
260263
messages: Optional[List[LDMessage]] = None
264+
tools: Optional[List[AITool]] = None
261265
judge_configuration: Optional[JudgeConfiguration] = None
262266

263267
def to_dict(self) -> dict:
@@ -266,6 +270,8 @@ def to_dict(self) -> dict:
266270
"""
267271
result = self._base_to_dict()
268272
result['messages'] = [message.to_dict() for message in self.messages] if self.messages else None
273+
if self.tools is not None:
274+
result['tools'] = [tool.to_dict() for tool in self.tools]
269275
if self.judge_configuration is not None:
270276
result['judgeConfiguration'] = self.judge_configuration.to_dict()
271277
return result

0 commit comments

Comments
 (0)