Skip to content

Commit fdc0a3b

Browse files
authored
Merge pull request #979 from Kiln-AI/sfierro/spec-persistence
Persistence moved to python
2 parents 93b3bf8 + 2033c46 commit fdc0a3b

File tree

17 files changed

+1190
-848
lines changed

17 files changed

+1190
-848
lines changed

app/desktop/studio_server/api_client/kiln_ai_server_client/models/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
from .specification_input_spec_fields import SpecificationInputSpecFields
4848
from .submit_answers_request import SubmitAnswersRequest
4949
from .target_task_info import TargetTaskInfo
50+
from .task_info import TaskInfo
5051
from .task_metadata import TaskMetadata
5152
from .validation_error import ValidationError
5253

@@ -96,6 +97,7 @@
9697
"SpecSpecFields",
9798
"SubmitAnswersRequest",
9899
"TargetTaskInfo",
100+
"TaskInfo",
99101
"TaskMetadata",
100102
"ValidationError",
101103
)

app/desktop/studio_server/api_client/kiln_ai_server_client/models/clarify_spec_input.py

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,45 @@
11
from __future__ import annotations
22

33
from collections.abc import Mapping
4-
from typing import Any, TypeVar
4+
from typing import TYPE_CHECKING, Any, TypeVar
55

66
from attrs import define as _attrs_define
77
from attrs import field as _attrs_field
88

99
from ..models.model_provider_name import ModelProviderName
1010
from ..types import UNSET, Unset
1111

12+
if TYPE_CHECKING:
13+
from ..models.task_info import TaskInfo
14+
15+
1216
T = TypeVar("T", bound="ClarifySpecInput")
1317

1418

1519
@_attrs_define
1620
class ClarifySpecInput:
1721
"""
1822
Attributes:
19-
target_task_prompt (str):
20-
task_input_schema (str):
21-
task_output_schema (str):
22-
spec_rendered_prompt_template (str):
23+
target_task_info (TaskInfo): Shared information about a task
24+
target_specification (str):
2325
num_samples_per_topic (int):
2426
num_topics (int):
2527
providers (list[ModelProviderName]):
2628
num_exemplars (int | Unset): Default: 10.
2729
"""
2830

29-
target_task_prompt: str
30-
task_input_schema: str
31-
task_output_schema: str
32-
spec_rendered_prompt_template: str
31+
target_task_info: TaskInfo
32+
target_specification: str
3333
num_samples_per_topic: int
3434
num_topics: int
3535
providers: list[ModelProviderName]
3636
num_exemplars: int | Unset = 10
3737
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
3838

3939
def to_dict(self) -> dict[str, Any]:
40-
target_task_prompt = self.target_task_prompt
41-
42-
task_input_schema = self.task_input_schema
43-
44-
task_output_schema = self.task_output_schema
40+
target_task_info = self.target_task_info.to_dict()
4541

46-
spec_rendered_prompt_template = self.spec_rendered_prompt_template
42+
target_specification = self.target_specification
4743

4844
num_samples_per_topic = self.num_samples_per_topic
4945

@@ -60,10 +56,8 @@ def to_dict(self) -> dict[str, Any]:
6056
field_dict.update(self.additional_properties)
6157
field_dict.update(
6258
{
63-
"target_task_prompt": target_task_prompt,
64-
"task_input_schema": task_input_schema,
65-
"task_output_schema": task_output_schema,
66-
"spec_rendered_prompt_template": spec_rendered_prompt_template,
59+
"target_task_info": target_task_info,
60+
"target_specification": target_specification,
6761
"num_samples_per_topic": num_samples_per_topic,
6862
"num_topics": num_topics,
6963
"providers": providers,
@@ -76,14 +70,12 @@ def to_dict(self) -> dict[str, Any]:
7670

7771
@classmethod
7872
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
79-
d = dict(src_dict)
80-
target_task_prompt = d.pop("target_task_prompt")
81-
82-
task_input_schema = d.pop("task_input_schema")
73+
from ..models.task_info import TaskInfo
8374

84-
task_output_schema = d.pop("task_output_schema")
75+
d = dict(src_dict)
76+
target_task_info = TaskInfo.from_dict(d.pop("target_task_info"))
8577

86-
spec_rendered_prompt_template = d.pop("spec_rendered_prompt_template")
78+
target_specification = d.pop("target_specification")
8779

8880
num_samples_per_topic = d.pop("num_samples_per_topic")
8981

@@ -99,10 +91,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
9991
num_exemplars = d.pop("num_exemplars", UNSET)
10092

10193
clarify_spec_input = cls(
102-
target_task_prompt=target_task_prompt,
103-
task_input_schema=task_input_schema,
104-
task_output_schema=task_output_schema,
105-
spec_rendered_prompt_template=spec_rendered_prompt_template,
94+
target_task_info=target_task_info,
95+
target_specification=target_specification,
10696
num_samples_per_topic=num_samples_per_topic,
10797
num_topics=num_topics,
10898
providers=providers,

app/desktop/studio_server/api_client/kiln_ai_server_client/models/generate_batch_input.py

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
from __future__ import annotations
22

33
from collections.abc import Mapping
4-
from typing import Any, TypeVar
4+
from typing import TYPE_CHECKING, Any, TypeVar
55

66
from attrs import define as _attrs_define
77
from attrs import field as _attrs_field
88

9+
if TYPE_CHECKING:
10+
from ..models.task_info import TaskInfo
11+
12+
913
T = TypeVar("T", bound="GenerateBatchInput")
1014

1115

@@ -14,30 +18,30 @@ class GenerateBatchInput:
1418
"""Input for batch generation (topics, inputs, outputs, optionally with scoring).
1519
1620
Attributes:
17-
target_task_prompt (str):
18-
task_input_schema (str):
19-
task_output_schema (str):
20-
spec_rendered_prompt_template (str):
21+
target_task_info (TaskInfo): Shared information about a task
22+
topic_generation_task_info (TaskInfo): Shared information about a task
23+
input_generation_task_info (TaskInfo): Shared information about a task
24+
target_specification (str):
2125
num_samples_per_topic (int):
2226
num_topics (int):
2327
"""
2428

25-
target_task_prompt: str
26-
task_input_schema: str
27-
task_output_schema: str
28-
spec_rendered_prompt_template: str
29+
target_task_info: TaskInfo
30+
topic_generation_task_info: TaskInfo
31+
input_generation_task_info: TaskInfo
32+
target_specification: str
2933
num_samples_per_topic: int
3034
num_topics: int
3135
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
3236

3337
def to_dict(self) -> dict[str, Any]:
34-
target_task_prompt = self.target_task_prompt
38+
target_task_info = self.target_task_info.to_dict()
3539

36-
task_input_schema = self.task_input_schema
40+
topic_generation_task_info = self.topic_generation_task_info.to_dict()
3741

38-
task_output_schema = self.task_output_schema
42+
input_generation_task_info = self.input_generation_task_info.to_dict()
3943

40-
spec_rendered_prompt_template = self.spec_rendered_prompt_template
44+
target_specification = self.target_specification
4145

4246
num_samples_per_topic = self.num_samples_per_topic
4347

@@ -47,10 +51,10 @@ def to_dict(self) -> dict[str, Any]:
4751
field_dict.update(self.additional_properties)
4852
field_dict.update(
4953
{
50-
"target_task_prompt": target_task_prompt,
51-
"task_input_schema": task_input_schema,
52-
"task_output_schema": task_output_schema,
53-
"spec_rendered_prompt_template": spec_rendered_prompt_template,
54+
"target_task_info": target_task_info,
55+
"topic_generation_task_info": topic_generation_task_info,
56+
"input_generation_task_info": input_generation_task_info,
57+
"target_specification": target_specification,
5458
"num_samples_per_topic": num_samples_per_topic,
5559
"num_topics": num_topics,
5660
}
@@ -60,24 +64,26 @@ def to_dict(self) -> dict[str, Any]:
6064

6165
@classmethod
6266
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
67+
from ..models.task_info import TaskInfo
68+
6369
d = dict(src_dict)
64-
target_task_prompt = d.pop("target_task_prompt")
70+
target_task_info = TaskInfo.from_dict(d.pop("target_task_info"))
6571

66-
task_input_schema = d.pop("task_input_schema")
72+
topic_generation_task_info = TaskInfo.from_dict(d.pop("topic_generation_task_info"))
6773

68-
task_output_schema = d.pop("task_output_schema")
74+
input_generation_task_info = TaskInfo.from_dict(d.pop("input_generation_task_info"))
6975

70-
spec_rendered_prompt_template = d.pop("spec_rendered_prompt_template")
76+
target_specification = d.pop("target_specification")
7177

7278
num_samples_per_topic = d.pop("num_samples_per_topic")
7379

7480
num_topics = d.pop("num_topics")
7581

7682
generate_batch_input = cls(
77-
target_task_prompt=target_task_prompt,
78-
task_input_schema=task_input_schema,
79-
task_output_schema=task_output_schema,
80-
spec_rendered_prompt_template=spec_rendered_prompt_template,
83+
target_task_info=target_task_info,
84+
topic_generation_task_info=topic_generation_task_info,
85+
input_generation_task_info=input_generation_task_info,
86+
target_specification=target_specification,
8187
num_samples_per_topic=num_samples_per_topic,
8288
num_topics=num_topics,
8389
)
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
from __future__ import annotations
2+
3+
from collections.abc import Mapping
4+
from typing import Any, TypeVar
5+
6+
from attrs import define as _attrs_define
7+
from attrs import field as _attrs_field
8+
9+
T = TypeVar("T", bound="TaskInfo")
10+
11+
12+
@_attrs_define
13+
class TaskInfo:
14+
"""Shared information about a task
15+
16+
Attributes:
17+
task_prompt (str):
18+
task_input_schema (str):
19+
task_output_schema (str):
20+
"""
21+
22+
task_prompt: str
23+
task_input_schema: str
24+
task_output_schema: str
25+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
26+
27+
def to_dict(self) -> dict[str, Any]:
28+
task_prompt = self.task_prompt
29+
30+
task_input_schema = self.task_input_schema
31+
32+
task_output_schema = self.task_output_schema
33+
34+
field_dict: dict[str, Any] = {}
35+
field_dict.update(self.additional_properties)
36+
field_dict.update(
37+
{
38+
"task_prompt": task_prompt,
39+
"task_input_schema": task_input_schema,
40+
"task_output_schema": task_output_schema,
41+
}
42+
)
43+
44+
return field_dict
45+
46+
@classmethod
47+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
48+
d = dict(src_dict)
49+
task_prompt = d.pop("task_prompt")
50+
51+
task_input_schema = d.pop("task_input_schema")
52+
53+
task_output_schema = d.pop("task_output_schema")
54+
55+
task_info = cls(
56+
task_prompt=task_prompt,
57+
task_input_schema=task_input_schema,
58+
task_output_schema=task_output_schema,
59+
)
60+
61+
task_info.additional_properties = d
62+
return task_info
63+
64+
@property
65+
def additional_keys(self) -> list[str]:
66+
return list(self.additional_properties.keys())
67+
68+
def __getitem__(self, key: str) -> Any:
69+
return self.additional_properties[key]
70+
71+
def __setitem__(self, key: str, value: Any) -> None:
72+
self.additional_properties[key] = value
73+
74+
def __delitem__(self, key: str) -> None:
75+
del self.additional_properties[key]
76+
77+
def __contains__(self, key: str) -> bool:
78+
return key in self.additional_properties

0 commit comments

Comments
 (0)