Skip to content

Commit db4ac63

Browse files
committed
parameters tags
1 parent 8928640 commit db4ac63

5 files changed

Lines changed: 42 additions & 1 deletion

File tree

py/src/braintrust/framework2.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ class CodeParameters:
128128
schema: EvalParameters
129129
if_exists: IfExists | None
130130
metadata: Mapping[str, Any] | None = None
131+
tags: Sequence[str] | None = None
131132

132133
def to_function_definition(self, if_exists: IfExists | None, project_ids: ProjectIdCache) -> dict[str, Any]:
133134
schema = parameters_to_json_schema(self.schema)
@@ -146,6 +147,8 @@ def to_function_definition(self, if_exists: IfExists | None, project_ids: Projec
146147
}
147148
if self.metadata is not None:
148149
j["metadata"] = self.metadata
150+
if self.tags is not None:
151+
j["tags"] = list(self.tags)
149152
return j
150153

151154

@@ -353,6 +356,7 @@ def create(
353356
description: str | None = None,
354357
if_exists: IfExists | None = None,
355358
metadata: Mapping[str, Any] | None = None,
359+
tags: Sequence[str] | None = None,
356360
) -> EvalParameters:
357361
if slug is None or len(slug) == 0:
358362
slug = slugify.slugify(name)
@@ -365,6 +369,7 @@ def create(
365369
schema=schema,
366370
if_exists=if_exists,
367371
metadata=metadata,
372+
tags=tags,
368373
)
369374
self.project.add_parameters(parameters)
370375
return schema

py/src/braintrust/parameters.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,12 @@ class RemoteEvalParameters(SerializableDataClass):
6868
version: str | None
6969
schema: ParametersSchema
7070
data: dict[str, Any]
71+
tags: list[str] | None = None
7172

7273
@classmethod
7374
def from_function_row(cls, row: dict[str, Any]) -> "RemoteEvalParameters":
7475
function_data = row.get("function_data") or {}
76+
tags = row.get("tags")
7577
return cls(
7678
id=row.get("id"),
7779
project_id=row.get("project_id"),
@@ -80,6 +82,7 @@ def from_function_row(cls, row: dict[str, Any]) -> "RemoteEvalParameters":
8082
version=row.get("_xact_id"),
8183
schema=function_data.get("__schema") or {},
8284
data=function_data.get("data") or {},
85+
tags=list(tags) if tags is not None else None,
8386
)
8487

8588
def validate(self, data: Any) -> bool:

py/src/braintrust/test_framework2.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,3 +331,34 @@ class RequiredParam(BaseModel):
331331
}
332332
assert func_def["function_data"]["__schema"]["properties"]["model"]["x-bt-type"] == "model"
333333
assert "required_text" not in func_def["function_data"]["data"]
334+
335+
336+
def test_project_parameters_create_includes_tags(mock_project_ids):
337+
project = projects.create("test-project")
338+
project.parameters.create(
339+
name="test-parameters",
340+
schema={"model": {"type": "model", "default": "gpt-5-mini"}},
341+
tags=["production", "v1"],
342+
)
343+
344+
parameters = project._publishable_parameters
345+
assert len(parameters) == 1
346+
347+
func_def = parameters[0].to_function_definition(None, mock_project_ids)
348+
349+
assert func_def["tags"] == ["production", "v1"]
350+
351+
352+
def test_project_parameters_create_excludes_tags_when_none(mock_project_ids):
353+
project = projects.create("test-project")
354+
project.parameters.create(
355+
name="test-parameters",
356+
schema={"model": {"type": "model", "default": "gpt-5-mini"}},
357+
)
358+
359+
parameters = project._publishable_parameters
360+
assert len(parameters) == 1
361+
362+
func_def = parameters[0].to_function_definition(None, mock_project_ids)
363+
364+
assert "tags" not in func_def

py/src/braintrust/test_logger.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ def test_load_parameters_returns_remote_object(self):
331331
"name": "Saved parameters",
332332
"slug": "saved-parameters",
333333
"_xact_id": "v1",
334+
"tags": ["production", "v1"],
334335
"function_data": {
335336
"type": "parameters",
336337
"data": {"prefix": "hello"},
@@ -353,6 +354,7 @@ def test_load_parameters_returns_remote_object(self):
353354
assert isinstance(parameters, RemoteEvalParameters)
354355
assert parameters.id == "params-123"
355356
assert parameters.version == "v1"
357+
assert parameters.tags == ["production", "v1"]
356358
assert parameters.data == {"prefix": "hello"}
357359
assert (
358360
logger._state._parameters_cache.get(

py/src/braintrust/type_tests/test_parameters_schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ def test_parameters_create_accepts_discriminated_schema_entries() -> None:
2626
},
2727
}
2828

29-
created = project.parameters.create(name="test-parameters", schema=schema)
29+
created = project.parameters.create(name="test-parameters", schema=schema, tags=["production", "v1"])
3030

3131
assert created is schema

0 commit comments

Comments
 (0)