kiln-ai 0.11.1__py3-none-any.whl → 0.13.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kiln-ai might be problematic. Click here for more details.

Files changed (80) hide show
  1. kiln_ai/adapters/__init__.py +4 -0
  2. kiln_ai/adapters/adapter_registry.py +163 -39
  3. kiln_ai/adapters/data_gen/data_gen_task.py +18 -0
  4. kiln_ai/adapters/eval/__init__.py +28 -0
  5. kiln_ai/adapters/eval/base_eval.py +164 -0
  6. kiln_ai/adapters/eval/eval_runner.py +270 -0
  7. kiln_ai/adapters/eval/g_eval.py +368 -0
  8. kiln_ai/adapters/eval/registry.py +16 -0
  9. kiln_ai/adapters/eval/test_base_eval.py +325 -0
  10. kiln_ai/adapters/eval/test_eval_runner.py +641 -0
  11. kiln_ai/adapters/eval/test_g_eval.py +498 -0
  12. kiln_ai/adapters/eval/test_g_eval_data.py +4 -0
  13. kiln_ai/adapters/fine_tune/base_finetune.py +16 -2
  14. kiln_ai/adapters/fine_tune/finetune_registry.py +2 -0
  15. kiln_ai/adapters/fine_tune/test_dataset_formatter.py +4 -1
  16. kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py +1 -1
  17. kiln_ai/adapters/fine_tune/test_openai_finetune.py +1 -1
  18. kiln_ai/adapters/fine_tune/test_together_finetune.py +531 -0
  19. kiln_ai/adapters/fine_tune/together_finetune.py +325 -0
  20. kiln_ai/adapters/ml_model_list.py +758 -163
  21. kiln_ai/adapters/model_adapters/__init__.py +2 -4
  22. kiln_ai/adapters/model_adapters/base_adapter.py +61 -43
  23. kiln_ai/adapters/model_adapters/litellm_adapter.py +391 -0
  24. kiln_ai/adapters/model_adapters/litellm_config.py +13 -0
  25. kiln_ai/adapters/model_adapters/test_base_adapter.py +22 -13
  26. kiln_ai/adapters/model_adapters/test_litellm_adapter.py +407 -0
  27. kiln_ai/adapters/model_adapters/test_saving_adapter_results.py +41 -19
  28. kiln_ai/adapters/model_adapters/test_structured_output.py +59 -35
  29. kiln_ai/adapters/ollama_tools.py +3 -3
  30. kiln_ai/adapters/parsers/r1_parser.py +19 -14
  31. kiln_ai/adapters/parsers/test_r1_parser.py +17 -5
  32. kiln_ai/adapters/prompt_builders.py +80 -42
  33. kiln_ai/adapters/provider_tools.py +50 -58
  34. kiln_ai/adapters/repair/repair_task.py +9 -21
  35. kiln_ai/adapters/repair/test_repair_task.py +6 -6
  36. kiln_ai/adapters/run_output.py +3 -0
  37. kiln_ai/adapters/test_adapter_registry.py +26 -29
  38. kiln_ai/adapters/test_generate_docs.py +4 -4
  39. kiln_ai/adapters/test_ollama_tools.py +0 -1
  40. kiln_ai/adapters/test_prompt_adaptors.py +47 -33
  41. kiln_ai/adapters/test_prompt_builders.py +91 -31
  42. kiln_ai/adapters/test_provider_tools.py +26 -81
  43. kiln_ai/datamodel/__init__.py +50 -952
  44. kiln_ai/datamodel/basemodel.py +2 -0
  45. kiln_ai/datamodel/datamodel_enums.py +60 -0
  46. kiln_ai/datamodel/dataset_filters.py +114 -0
  47. kiln_ai/datamodel/dataset_split.py +170 -0
  48. kiln_ai/datamodel/eval.py +298 -0
  49. kiln_ai/datamodel/finetune.py +105 -0
  50. kiln_ai/datamodel/json_schema.py +7 -1
  51. kiln_ai/datamodel/project.py +23 -0
  52. kiln_ai/datamodel/prompt.py +37 -0
  53. kiln_ai/datamodel/prompt_id.py +83 -0
  54. kiln_ai/datamodel/strict_mode.py +24 -0
  55. kiln_ai/datamodel/task.py +181 -0
  56. kiln_ai/datamodel/task_output.py +328 -0
  57. kiln_ai/datamodel/task_run.py +164 -0
  58. kiln_ai/datamodel/test_basemodel.py +19 -11
  59. kiln_ai/datamodel/test_dataset_filters.py +71 -0
  60. kiln_ai/datamodel/test_dataset_split.py +32 -8
  61. kiln_ai/datamodel/test_datasource.py +22 -2
  62. kiln_ai/datamodel/test_eval_model.py +635 -0
  63. kiln_ai/datamodel/test_example_models.py +9 -13
  64. kiln_ai/datamodel/test_json_schema.py +23 -0
  65. kiln_ai/datamodel/test_models.py +2 -2
  66. kiln_ai/datamodel/test_prompt_id.py +129 -0
  67. kiln_ai/datamodel/test_task.py +159 -0
  68. kiln_ai/utils/config.py +43 -1
  69. kiln_ai/utils/dataset_import.py +232 -0
  70. kiln_ai/utils/test_dataset_import.py +596 -0
  71. {kiln_ai-0.11.1.dist-info → kiln_ai-0.13.0.dist-info}/METADATA +86 -6
  72. kiln_ai-0.13.0.dist-info/RECORD +103 -0
  73. kiln_ai/adapters/model_adapters/langchain_adapters.py +0 -302
  74. kiln_ai/adapters/model_adapters/openai_compatible_config.py +0 -11
  75. kiln_ai/adapters/model_adapters/openai_model_adapter.py +0 -246
  76. kiln_ai/adapters/model_adapters/test_langchain_adapter.py +0 -350
  77. kiln_ai/adapters/model_adapters/test_openai_model_adapter.py +0 -225
  78. kiln_ai-0.11.1.dist-info/RECORD +0 -76
  79. {kiln_ai-0.11.1.dist-info → kiln_ai-0.13.0.dist-info}/WHEEL +0 -0
  80. {kiln_ai-0.11.1.dist-info → kiln_ai-0.13.0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -1,225 +0,0 @@
1
- import json
2
- from unittest.mock import Mock, patch
3
-
4
- import pytest
5
- from openai import AsyncOpenAI
6
-
7
- from kiln_ai.adapters.ml_model_list import StructuredOutputMode
8
- from kiln_ai.adapters.model_adapters.base_adapter import AdapterInfo, BasePromptBuilder
9
- from kiln_ai.adapters.model_adapters.openai_compatible_config import (
10
- OpenAICompatibleConfig,
11
- )
12
- from kiln_ai.adapters.model_adapters.openai_model_adapter import OpenAICompatibleAdapter
13
- from kiln_ai.datamodel import Project, Task
14
-
15
-
16
- @pytest.fixture
17
- def mock_task(tmp_path):
18
- # Create a project first since Task requires a parent
19
- project_path = tmp_path / "test_project" / "project.kiln"
20
- project_path.parent.mkdir()
21
-
22
- project = Project(name="Test Project", path=str(project_path))
23
- project.save_to_file()
24
-
25
- schema = {
26
- "type": "object",
27
- "properties": {"test": {"type": "string"}},
28
- }
29
-
30
- task = Task(
31
- name="Test Task",
32
- instruction="Test instruction",
33
- parent=project,
34
- output_json_schema=json.dumps(schema),
35
- )
36
- task.save_to_file()
37
- return task
38
-
39
-
40
- @pytest.fixture
41
- def mock_prompt_builder():
42
- builder = Mock(spec=BasePromptBuilder)
43
- type(builder).prompt_builder_name = Mock(return_value="test_prompt_builder")
44
- builder.prompt_id = Mock(return_value="test_prompt_id")
45
- return builder
46
-
47
-
48
- @pytest.fixture
49
- def config():
50
- return OpenAICompatibleConfig(
51
- api_key="test_key",
52
- base_url="https://api.test.com",
53
- model_name="test-model",
54
- provider_name="test-provider",
55
- default_headers={"X-Test": "test"},
56
- )
57
-
58
-
59
- def test_initialization(config, mock_task, mock_prompt_builder):
60
- adapter = OpenAICompatibleAdapter(
61
- config=config,
62
- kiln_task=mock_task,
63
- prompt_builder=mock_prompt_builder,
64
- tags=["test-tag"],
65
- )
66
-
67
- assert isinstance(adapter.client, AsyncOpenAI)
68
- assert adapter.config == config
69
- assert adapter.kiln_task == mock_task
70
- assert adapter.prompt_builder == mock_prompt_builder
71
- assert adapter.default_tags == ["test-tag"]
72
- assert adapter.model_name == config.model_name
73
- assert adapter.model_provider_name == config.provider_name
74
-
75
-
76
- def test_adapter_info(config, mock_task, mock_prompt_builder):
77
- adapter = OpenAICompatibleAdapter(
78
- config=config, kiln_task=mock_task, prompt_builder=mock_prompt_builder
79
- )
80
-
81
- info = adapter.adapter_info()
82
- assert isinstance(info, AdapterInfo)
83
- assert info.model_name == config.model_name
84
- assert info.model_provider == config.provider_name
85
- assert info.adapter_name == "kiln_openai_compatible_adapter"
86
- assert info.prompt_builder_name == "base_prompt_builder"
87
- assert info.prompt_id == "test_prompt_id"
88
-
89
-
90
- @pytest.mark.asyncio
91
- async def test_response_format_options_unstructured(
92
- config, mock_task, mock_prompt_builder
93
- ):
94
- adapter = OpenAICompatibleAdapter(
95
- config=config, kiln_task=mock_task, prompt_builder=mock_prompt_builder
96
- )
97
-
98
- # Mock has_structured_output to return False
99
- with patch.object(adapter, "has_structured_output", return_value=False):
100
- options = await adapter.response_format_options()
101
- assert options == {}
102
-
103
-
104
- @pytest.mark.parametrize(
105
- "mode",
106
- [
107
- StructuredOutputMode.json_mode,
108
- StructuredOutputMode.json_instruction_and_object,
109
- ],
110
- )
111
- @pytest.mark.asyncio
112
- async def test_response_format_options_json_mode(
113
- config, mock_task, mock_prompt_builder, mode
114
- ):
115
- adapter = OpenAICompatibleAdapter(
116
- config=config, kiln_task=mock_task, prompt_builder=mock_prompt_builder
117
- )
118
-
119
- with (
120
- patch.object(adapter, "has_structured_output", return_value=True),
121
- patch.object(adapter, "model_provider") as mock_provider,
122
- ):
123
- mock_provider.return_value.structured_output_mode = mode
124
-
125
- options = await adapter.response_format_options()
126
- assert options == {"response_format": {"type": "json_object"}}
127
-
128
-
129
- @pytest.mark.parametrize(
130
- "mode",
131
- [
132
- StructuredOutputMode.default,
133
- StructuredOutputMode.function_calling,
134
- ],
135
- )
136
- @pytest.mark.asyncio
137
- async def test_response_format_options_function_calling(
138
- config, mock_task, mock_prompt_builder, mode
139
- ):
140
- adapter = OpenAICompatibleAdapter(
141
- config=config, kiln_task=mock_task, prompt_builder=mock_prompt_builder
142
- )
143
-
144
- with (
145
- patch.object(adapter, "has_structured_output", return_value=True),
146
- patch.object(adapter, "model_provider") as mock_provider,
147
- ):
148
- mock_provider.return_value.structured_output_mode = mode
149
-
150
- options = await adapter.response_format_options()
151
- assert "tools" in options
152
- # full tool structure validated below
153
-
154
-
155
- @pytest.mark.asyncio
156
- async def test_response_format_options_json_instructions(
157
- config, mock_task, mock_prompt_builder
158
- ):
159
- adapter = OpenAICompatibleAdapter(
160
- config=config, kiln_task=mock_task, prompt_builder=mock_prompt_builder
161
- )
162
-
163
- with (
164
- patch.object(adapter, "has_structured_output", return_value=True),
165
- patch.object(adapter, "model_provider") as mock_provider,
166
- ):
167
- mock_provider.return_value.structured_output_mode = (
168
- StructuredOutputMode.json_instructions
169
- )
170
- options = await adapter.response_format_options()
171
- assert options == {}
172
-
173
-
174
- @pytest.mark.asyncio
175
- async def test_response_format_options_json_schema(
176
- config, mock_task, mock_prompt_builder
177
- ):
178
- adapter = OpenAICompatibleAdapter(
179
- config=config, kiln_task=mock_task, prompt_builder=mock_prompt_builder
180
- )
181
-
182
- with (
183
- patch.object(adapter, "has_structured_output", return_value=True),
184
- patch.object(adapter, "model_provider") as mock_provider,
185
- ):
186
- mock_provider.return_value.structured_output_mode = (
187
- StructuredOutputMode.json_schema
188
- )
189
- options = await adapter.response_format_options()
190
- assert options == {
191
- "response_format": {
192
- "type": "json_schema",
193
- "json_schema": {
194
- "name": "task_response",
195
- "schema": mock_task.output_schema(),
196
- },
197
- }
198
- }
199
-
200
-
201
- def test_tool_call_params(config, mock_task, mock_prompt_builder):
202
- adapter = OpenAICompatibleAdapter(
203
- config=config, kiln_task=mock_task, prompt_builder=mock_prompt_builder
204
- )
205
-
206
- params = adapter.tool_call_params()
207
- expected_schema = mock_task.output_schema()
208
- expected_schema["additionalProperties"] = False
209
-
210
- assert params == {
211
- "tools": [
212
- {
213
- "type": "function",
214
- "function": {
215
- "name": "task_response",
216
- "parameters": expected_schema,
217
- "strict": True,
218
- },
219
- }
220
- ],
221
- "tool_choice": {
222
- "type": "function",
223
- "function": {"name": "task_response"},
224
- },
225
- }
@@ -1,76 +0,0 @@
1
- kiln_ai/__init__.py,sha256=Sc4z8LRVFMwJUoc_DPVUriSXTZ6PO9MaJ80PhRbKyB8,34
2
- kiln_ai/adapters/__init__.py,sha256=4qEnFkkRSHPKDU7AvYNkqXECjZO_K7PzDCK3HbsY7o4,902
3
- kiln_ai/adapters/adapter_registry.py,sha256=C4ayYVXRClj5-EEEpJEuMEMesbrJgPxz5yRBv6cyLGQ,3697
4
- kiln_ai/adapters/ml_model_list.py,sha256=4V6IinAhgYcGba3Kw3Ps2pJcHv5v7NC6Ob-8JN7fh3Y,36240
5
- kiln_ai/adapters/ollama_tools.py,sha256=0Of6ySbJ2d4j--9laOL6QKgRUQSrqX8dJUIrz20n59s,3561
6
- kiln_ai/adapters/prompt_builders.py,sha256=gnBf4SI_uz6W9gpkRaKOK9oHQX6eTjdSbKX-Tpaj2gQ,13906
7
- kiln_ai/adapters/provider_tools.py,sha256=CGNLW0xhFyj93HFwznCoDrrbyQbQAaS2mJuOKaMB6gU,14435
8
- kiln_ai/adapters/run_output.py,sha256=jANUFb_O_P47aWyA_YjLSl2y0Z7QFWPEUsOGE54BGY4,159
9
- kiln_ai/adapters/test_adapter_registry.py,sha256=obzcaifFLbgcokJwOCrhBe3IU-U3v4rPVBZya7p_hUM,6209
10
- kiln_ai/adapters/test_generate_docs.py,sha256=a0eO4fJdHhmvhB7aM3FW4nPYw-fqy1s5B6ZVDPRZtpQ,2730
11
- kiln_ai/adapters/test_ollama_tools.py,sha256=2KwYVaj3ySV3ld-z51TCGbJEMdb3MZj2eoEicIWz3Q4,2552
12
- kiln_ai/adapters/test_prompt_adaptors.py,sha256=Z-eGy206sDDXhsfngUOuYEUnaerPDOrQb64hipRxfW4,7550
13
- kiln_ai/adapters/test_prompt_builders.py,sha256=I6d888fIFDYzIp8DbnDWCrbRj8nlieLVrgiZzgqMV0s,20200
14
- kiln_ai/adapters/test_provider_tools.py,sha256=DtnC6oFuiBvvbhD-kdCcWzEYqXZfMBM_DexuQdyAVR8,28664
15
- kiln_ai/adapters/data_gen/__init__.py,sha256=QTZWaf7kq5BorhPvexJfwDEKmjRmIbhwW9ei8LW2SIs,276
16
- kiln_ai/adapters/data_gen/data_gen_prompts.py,sha256=kudjHnAz7L3q0k_NLyTlaIV7M0uRFrxXNcfcnjOE2uc,5810
17
- kiln_ai/adapters/data_gen/data_gen_task.py,sha256=0v7ufvuSeY5j-HerfrqXuCo30SYlS6EFIiVyiJM9xj0,5986
18
- kiln_ai/adapters/data_gen/test_data_gen_task.py,sha256=cRKUKMvC0uVompbmPTKwbnQ_N3c0cQDm4J_9H4Y5U18,10129
19
- kiln_ai/adapters/fine_tune/__init__.py,sha256=DxdTR60chwgck1aEoVYWyfWi6Ed2ZkdJj0lar-SEAj4,257
20
- kiln_ai/adapters/fine_tune/base_finetune.py,sha256=n3mfE_3bhhzmN_MQxO5qNezN-qpl4WFamZ3ih41dx4o,6069
21
- kiln_ai/adapters/fine_tune/dataset_formatter.py,sha256=qRhSSkMhTWn13OMb6LKPVwAU7uY4bB49GDiVSuhDkNg,14449
22
- kiln_ai/adapters/fine_tune/finetune_registry.py,sha256=H1B-opCTlIyd9JlIFTKsY_ctxUX9ziEc49_gnmg1SZg,483
23
- kiln_ai/adapters/fine_tune/fireworks_finetune.py,sha256=6IfTDn_8tg6PR0OFudRx6V7Wjvf4P7t0fm_xyRwII68,13978
24
- kiln_ai/adapters/fine_tune/openai_finetune.py,sha256=Dz9E_0BWfrIkvv8ArZe-RKPwbIKPZ3v8rfbc3JELyTY,8571
25
- kiln_ai/adapters/fine_tune/test_base_finetune.py,sha256=0zWxFYrDGVuoQNQmi9vVUEkBc4mstfHnsUjQmiJA-sE,10864
26
- kiln_ai/adapters/fine_tune/test_dataset_formatter.py,sha256=wknJZDgkoj61O1TO5_HLTSdKZjvb78pmTyBRUBfCtYw,23968
27
- kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py,sha256=qQCBUa6kje0P83vH7MWioVQ7IVPti_TFdJG_QaBwqjY,18105
28
- kiln_ai/adapters/fine_tune/test_openai_finetune.py,sha256=-QHKNr5LICTOoCDavGxAUnWoAWvL3eMWHywpMf69n1U,19972
29
- kiln_ai/adapters/model_adapters/__init__.py,sha256=FyNq-twr1zQR55Hd_sDlTcVZ8JsZ9jrIBBURtZNjlss,272
30
- kiln_ai/adapters/model_adapters/base_adapter.py,sha256=f91QR2mmn3x6bTfRFbgWe6N47aIB8ABpQjgv8Scru5Y,9183
31
- kiln_ai/adapters/model_adapters/langchain_adapters.py,sha256=JCCaXSFgtiNkr67tv4DRZRdmxGvq2JOkrQdC7H__ybw,12606
32
- kiln_ai/adapters/model_adapters/openai_compatible_config.py,sha256=o7Ae2uWm1bdqOZaSBbsjH1CH9bnSa1woqTHvP8ds0mY,286
33
- kiln_ai/adapters/model_adapters/openai_model_adapter.py,sha256=nSr_IcubCB7Dk6zkXsjvLrTAvnTedvHpXPZekiYK_cg,9545
34
- kiln_ai/adapters/model_adapters/test_base_adapter.py,sha256=rRN76HPepuXKmAEzZCJjK_cHZ6rJBLQ2poYpWOpxOaE,6408
35
- kiln_ai/adapters/model_adapters/test_langchain_adapter.py,sha256=UyQ-jdTFUpXHTO40nxHELIsV_YRA_RgF1xkAJ5oO-dM,12156
36
- kiln_ai/adapters/model_adapters/test_openai_model_adapter.py,sha256=3pSLHug_GPRpv5C9zE_hivOsbWgs5nLohS6DxtPz1jo,6914
37
- kiln_ai/adapters/model_adapters/test_saving_adapter_results.py,sha256=iIjI4Ox3wUpv6g1dcQ3zDFpma0MUqljJ_Lqbo8MbQuw,7393
38
- kiln_ai/adapters/model_adapters/test_structured_output.py,sha256=BipXAzkoKZuixwG2tPyqle9INuYd3teHDP12arncaXA,11871
39
- kiln_ai/adapters/parsers/__init__.py,sha256=TGJS_8JhjUwg5Bnq4cDmwt5eIRo4vowmcL2A72L1Hzk,202
40
- kiln_ai/adapters/parsers/base_parser.py,sha256=DaoZVEOOuFTMZd5ZTpl_as6-xc9NPWGP2fAmP12J58M,389
41
- kiln_ai/adapters/parsers/json_parser.py,sha256=IszrBrhIFrrVr76UZsuejkBdqpZG27mU72264HVgVzE,1274
42
- kiln_ai/adapters/parsers/parser_registry.py,sha256=G9bAZrnWrR0a82JAQHsSqA2o7-CjrZUBANZljY_6ZxE,623
43
- kiln_ai/adapters/parsers/r1_parser.py,sha256=9nMEWDAbRSTFuu_--0HMVfVg9IYSoUNQHHw9OxETlRw,2558
44
- kiln_ai/adapters/parsers/test_json_parser.py,sha256=9kdWe_vRC5wjP8A1Ym6Zu6enDIz4ARCNiRpcZr7_3ak,1971
45
- kiln_ai/adapters/parsers/test_parser_registry.py,sha256=S4MdX7cnhCbmeKq8tZwMwRdGWr-019Z-fw5zey9Wm08,1043
46
- kiln_ai/adapters/parsers/test_r1_parser.py,sha256=Ys1ICRNVgt54rf8IEKNav5sz9zHYvvcVAUuoSwwftg8,4517
47
- kiln_ai/adapters/repair/__init__.py,sha256=dOO9MEpEhjiwzDVFg3MNfA2bKMPlax9iekDatpTkX8E,217
48
- kiln_ai/adapters/repair/repair_task.py,sha256=xX7GI3QZ9OEWV1BGr6OAAAFvHu3h6dYqJgOpqwRADmI,3842
49
- kiln_ai/adapters/repair/test_repair_task.py,sha256=2pxEwnmJCN_z35_kTNiaFSvnTw_njRinmHV1P9Y7UQw,7974
50
- kiln_ai/datamodel/__init__.py,sha256=aWGqXz4H-NGDFGBHcnArUVj3o-WgJsRACJ3QHF--8-k,36079
51
- kiln_ai/datamodel/basemodel.py,sha256=TwMBfNFJ7-5bp2QOoTQUl_YVrF0pkDAk5Rdk6EWEXxI,22143
52
- kiln_ai/datamodel/json_schema.py,sha256=VjjYkzy8X-QZqOQNZH6x7KitrtdcmZNttVP49iqBJAk,2817
53
- kiln_ai/datamodel/model_cache.py,sha256=9X4aAigbkFdytckgw8InCMh86uBna0ME_1HJSeMPEn0,4495
54
- kiln_ai/datamodel/registry.py,sha256=XwGFXJFKZtOpR1Z9ven6SftggfADdZRm8TFxCEVtfUQ,957
55
- kiln_ai/datamodel/test_basemodel.py,sha256=PqBlx5gIN3DxYjDuLzmNYIp-VwMvOQ9P5hOjPfOs-9g,17813
56
- kiln_ai/datamodel/test_dataset_split.py,sha256=7DXu3WaIGZ4Tyj0ahgrK7jRChDwU1eolXEdz4urkWNc,10530
57
- kiln_ai/datamodel/test_datasource.py,sha256=GAiZz31qezVVPwFqnt8wHMu15WvtlV89jw8C1Ue6YNI,3165
58
- kiln_ai/datamodel/test_example_models.py,sha256=ekAxweFBtkryheBFJMQvy0TkWvjNtlqBsJv3Pcu5uNE,21048
59
- kiln_ai/datamodel/test_json_schema.py,sha256=vdLnTQxxrcmuSrf6iOmkrmpfh7JnxqIw4B4dbDAAcZ4,3199
60
- kiln_ai/datamodel/test_model_cache.py,sha256=Fy-ucYNzS5JEG-8SFY4nVHA8iRbXXxai20f8_oGl97o,8184
61
- kiln_ai/datamodel/test_model_perf.py,sha256=NdD7L8XraGkunaEKGPsfYwdcbIgdjhFanOO3G6hU158,3235
62
- kiln_ai/datamodel/test_models.py,sha256=s3zjlnN3zbSjPyLfz3PDABO8msKeQXDRd4WrpkLWrOE,19274
63
- kiln_ai/datamodel/test_nested_save.py,sha256=xciCddqvPyKyoyjC5Lx_3Kh1t4LJv1xYRAPazR3SRcs,5588
64
- kiln_ai/datamodel/test_output_rating.py,sha256=zvPIp2shAgCs2RQBgwYoL09fRA3krHvgAqUa91RlWR0,15125
65
- kiln_ai/datamodel/test_registry.py,sha256=PhS4anLi5Bf_023obuTlO5DALhtPB8WIc_bX12Yg6Po,2705
66
- kiln_ai/utils/__init__.py,sha256=PTD0MwBCKAMIOGsTAwsFaJOusTJJoRFTfOGqRvCaU-E,142
67
- kiln_ai/utils/config.py,sha256=u289b2AHuQoPup_vILTSpgsO29fxJyU8zy8BwADAtvs,6859
68
- kiln_ai/utils/exhaustive_error.py,sha256=TkkRixIAR3CPEKHeAJzyv0mtxp6BxUBKMvobA3vzQug,262
69
- kiln_ai/utils/formatting.py,sha256=VtB9oag0lOGv17dwT7OPX_3HzBfaU9GsLH-iLete0yM,97
70
- kiln_ai/utils/name_generator.py,sha256=v26TgpCwQbhQFcZvzgjZvURinjrOyyFhxpsI6NQrHKc,1914
71
- kiln_ai/utils/test_config.py,sha256=Jw3nMFeIgZUsZDRJJY2HpB-2EkR2NoZ-rDe_o9oA7ws,9174
72
- kiln_ai/utils/test_name_geneator.py,sha256=9-hSTBshyakqlPbFnNcggwLrL7lcPTitauBYHg9jFWI,1513
73
- kiln_ai-0.11.1.dist-info/METADATA,sha256=Dvlb27BCuxsJOpZHogOzrnlCYiL6FBLFCtCxu3gmee8,9217
74
- kiln_ai-0.11.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
75
- kiln_ai-0.11.1.dist-info/licenses/LICENSE.txt,sha256=_NA5pnTYgRRr4qH6lE3X-TuZJ8iRcMUi5ASoGr-lEx8,1209
76
- kiln_ai-0.11.1.dist-info/RECORD,,