kiln-ai 0.15.0__py3-none-any.whl → 0.16.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.
Files changed (45) hide show
  1. kiln_ai/adapters/eval/eval_runner.py +5 -64
  2. kiln_ai/adapters/eval/g_eval.py +3 -3
  3. kiln_ai/adapters/fine_tune/dataset_formatter.py +124 -34
  4. kiln_ai/adapters/fine_tune/test_dataset_formatter.py +264 -7
  5. kiln_ai/adapters/ml_model_list.py +478 -4
  6. kiln_ai/adapters/model_adapters/base_adapter.py +26 -8
  7. kiln_ai/adapters/model_adapters/litellm_adapter.py +41 -7
  8. kiln_ai/adapters/model_adapters/test_base_adapter.py +74 -2
  9. kiln_ai/adapters/model_adapters/test_litellm_adapter.py +65 -1
  10. kiln_ai/adapters/model_adapters/test_saving_adapter_results.py +3 -2
  11. kiln_ai/adapters/model_adapters/test_structured_output.py +4 -6
  12. kiln_ai/adapters/parsers/base_parser.py +0 -3
  13. kiln_ai/adapters/parsers/parser_registry.py +5 -3
  14. kiln_ai/adapters/parsers/r1_parser.py +17 -2
  15. kiln_ai/adapters/parsers/request_formatters.py +40 -0
  16. kiln_ai/adapters/parsers/test_parser_registry.py +2 -2
  17. kiln_ai/adapters/parsers/test_r1_parser.py +44 -1
  18. kiln_ai/adapters/parsers/test_request_formatters.py +76 -0
  19. kiln_ai/adapters/prompt_builders.py +14 -1
  20. kiln_ai/adapters/provider_tools.py +18 -1
  21. kiln_ai/adapters/repair/test_repair_task.py +3 -2
  22. kiln_ai/adapters/test_prompt_builders.py +24 -3
  23. kiln_ai/adapters/test_provider_tools.py +70 -1
  24. kiln_ai/datamodel/__init__.py +2 -0
  25. kiln_ai/datamodel/datamodel_enums.py +14 -0
  26. kiln_ai/datamodel/dataset_filters.py +69 -1
  27. kiln_ai/datamodel/dataset_split.py +4 -0
  28. kiln_ai/datamodel/eval.py +8 -0
  29. kiln_ai/datamodel/finetune.py +1 -0
  30. kiln_ai/datamodel/prompt_id.py +1 -0
  31. kiln_ai/datamodel/task_output.py +1 -1
  32. kiln_ai/datamodel/task_run.py +39 -7
  33. kiln_ai/datamodel/test_basemodel.py +3 -7
  34. kiln_ai/datamodel/test_dataset_filters.py +82 -0
  35. kiln_ai/datamodel/test_dataset_split.py +2 -0
  36. kiln_ai/datamodel/test_example_models.py +54 -0
  37. kiln_ai/datamodel/test_models.py +50 -2
  38. kiln_ai/utils/async_job_runner.py +106 -0
  39. kiln_ai/utils/dataset_import.py +80 -18
  40. kiln_ai/utils/test_async_job_runner.py +199 -0
  41. kiln_ai/utils/test_dataset_import.py +242 -10
  42. {kiln_ai-0.15.0.dist-info → kiln_ai-0.16.0.dist-info}/METADATA +1 -1
  43. {kiln_ai-0.15.0.dist-info → kiln_ai-0.16.0.dist-info}/RECORD +45 -41
  44. {kiln_ai-0.15.0.dist-info → kiln_ai-0.16.0.dist-info}/WHEEL +0 -0
  45. {kiln_ai-0.15.0.dist-info → kiln_ai-0.16.0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -3,16 +3,25 @@ import json
3
3
  import logging
4
4
  from io import StringIO
5
5
  from pathlib import Path
6
+ from unittest.mock import patch
6
7
 
7
8
  import pytest
8
9
  from pydantic import BaseModel, ValidationError
9
10
 
10
- from kiln_ai.datamodel import Project, Task
11
+ from kiln_ai.datamodel import (
12
+ DataSource,
13
+ DataSourceType,
14
+ Project,
15
+ Task,
16
+ TaskOutput,
17
+ TaskRun,
18
+ )
11
19
  from kiln_ai.utils.dataset_import import (
12
20
  DatasetFileImporter,
13
21
  DatasetImportFormat,
14
22
  ImportConfig,
15
23
  KilnInvalidImportFormat,
24
+ add_tag_splits,
16
25
  deserialize_tags,
17
26
  format_validation_error,
18
27
  generate_import_tags,
@@ -144,16 +153,20 @@ def test_import_csv_plain_text(base_task: Task, tmp_path):
144
153
 
145
154
  file_path = dicts_to_file_as_csv(row_data, "test.csv", tmp_path)
146
155
 
147
- importer = DatasetFileImporter(
148
- base_task,
149
- ImportConfig(
150
- dataset_type=DatasetImportFormat.CSV,
151
- dataset_path=file_path,
152
- dataset_name="test.csv",
153
- ),
154
- )
156
+ with patch("kiln_ai.utils.dataset_import.add_tag_splits") as mock_add_tag_splits:
157
+ importer = DatasetFileImporter(
158
+ base_task,
159
+ ImportConfig(
160
+ dataset_type=DatasetImportFormat.CSV,
161
+ dataset_path=file_path,
162
+ dataset_name="test.csv",
163
+ ),
164
+ )
155
165
 
156
- importer.create_runs_from_file()
166
+ importer.create_runs_from_file()
167
+
168
+ # Verify add_tag_splits was called
169
+ mock_add_tag_splits.assert_called_once()
157
170
 
158
171
  assert len(base_task.runs()) == 4
159
172
 
@@ -594,3 +607,222 @@ def test_format_validation_error():
594
607
 
595
608
  def test_generate_import_tags():
596
609
  assert generate_import_tags("123") == ["imported", "imported_123"]
610
+
611
+
612
+ def test_add_tag_splits(base_task: Task):
613
+ """Test that tag splits are assigned correctly with exact proportions."""
614
+ # Create some test runs
615
+ runs = []
616
+ for i in range(10):
617
+ run = TaskRun(
618
+ parent=base_task,
619
+ input=f"input {i}",
620
+ input_source=DataSource(
621
+ type=DataSourceType.file_import,
622
+ properties={"file_name": "test.csv"},
623
+ ),
624
+ output=TaskOutput(
625
+ output=f"output {i}",
626
+ source=DataSource(
627
+ type=DataSourceType.file_import,
628
+ properties={"file_name": "test.csv"},
629
+ ),
630
+ ),
631
+ )
632
+ runs.append(run)
633
+
634
+ # Test with 70/30 split
635
+ tag_splits = {"train": 0.7, "test": 0.3}
636
+ add_tag_splits(runs, tag_splits)
637
+
638
+ # Count the tags
639
+ train_count = sum(1 for run in runs if "train" in run.tags)
640
+ test_count = sum(1 for run in runs if "test" in run.tags)
641
+
642
+ # With 10 runs, we should get exactly 7 train and 3 test
643
+ assert train_count == 7
644
+ assert test_count == 3
645
+ assert len(runs) == train_count + test_count
646
+
647
+
648
+ def test_add_tag_splits_rounding(base_task: Task):
649
+ """Test that tag splits handle rounding correctly."""
650
+ # Test a 33/33/34 split
651
+ runs = []
652
+ for i in range(34):
653
+ run = TaskRun(
654
+ parent=base_task,
655
+ input=f"input {i}",
656
+ input_source=DataSource(
657
+ type=DataSourceType.file_import,
658
+ properties={"file_name": "test.csv"},
659
+ ),
660
+ output=TaskOutput(
661
+ output=f"output {i}",
662
+ source=DataSource(
663
+ type=DataSourceType.file_import,
664
+ properties={"file_name": "test.csv"},
665
+ ),
666
+ ),
667
+ )
668
+ runs.append(run)
669
+
670
+ # Test with three equal splits
671
+ tag_splits = {"train": 0.33, "val": 0.33, "test": 0.34}
672
+ add_tag_splits(runs, tag_splits)
673
+
674
+ # Count the tags
675
+ train_count = sum(1 for run in runs if "train" in run.tags)
676
+ val_count = sum(1 for run in runs if "val" in run.tags)
677
+ test_count = sum(1 for run in runs if "test" in run.tags)
678
+
679
+ # Should have one of each
680
+ assert train_count in [11, 12]
681
+ assert val_count in [11, 12]
682
+ assert test_count in [11, 12]
683
+ assert len(runs) == train_count + val_count + test_count
684
+
685
+
686
+ def test_add_tag_splits_none(base_task: Task):
687
+ """Test that None tag_splits is handled correctly."""
688
+ runs = []
689
+ for i in range(5):
690
+ run = TaskRun(
691
+ parent=base_task,
692
+ input=f"input {i}",
693
+ input_source=DataSource(
694
+ type=DataSourceType.file_import,
695
+ properties={"file_name": "test.csv"},
696
+ ),
697
+ output=TaskOutput(
698
+ output=f"output {i}",
699
+ source=DataSource(
700
+ type=DataSourceType.file_import,
701
+ properties={"file_name": "test.csv"},
702
+ ),
703
+ ),
704
+ )
705
+ runs.append(run)
706
+
707
+ # Should not modify any tags
708
+ original_tags = [run.tags.copy() for run in runs]
709
+ add_tag_splits(runs, None)
710
+ for run, original in zip(runs, original_tags):
711
+ assert run.tags == original
712
+
713
+
714
+ def test_add_tag_splits_randomness(base_task: Task):
715
+ """Test that tag assignment is random but maintains proportions."""
716
+ # Create 100 runs for better statistical significance
717
+ runs = []
718
+ for i in range(100):
719
+ run = TaskRun(
720
+ parent=base_task,
721
+ input=f"input {i}",
722
+ input_source=DataSource(
723
+ type=DataSourceType.file_import,
724
+ properties={"file_name": "test.csv"},
725
+ ),
726
+ output=TaskOutput(
727
+ output=f"output {i}",
728
+ source=DataSource(
729
+ type=DataSourceType.file_import,
730
+ properties={"file_name": "test.csv"},
731
+ ),
732
+ ),
733
+ )
734
+ runs.append(run)
735
+
736
+ # Test with 60/40 split
737
+ tag_splits = {"train": 0.6, "test": 0.4}
738
+ add_tag_splits(runs, tag_splits)
739
+
740
+ # Count the tags
741
+ train_count = sum(1 for run in runs if "train" in run.tags)
742
+ test_count = sum(1 for run in runs if "test" in run.tags)
743
+
744
+ # Should have exactly 60 train and 40 test
745
+ assert train_count == 60
746
+ assert test_count == 40
747
+ assert len(runs) == train_count + test_count
748
+
749
+ # Check that the assignment is not just sequential
750
+ # by looking at the first few runs
751
+ first_few_runs = runs[:35]
752
+ train_tags = sum(1 for run in first_few_runs if "train" in run.tags)
753
+ test_tags = sum(1 for run in first_few_runs if "test" in run.tags)
754
+
755
+ # If assignment was sequential, we'd expect all first 35 to be train
756
+ # This test might occasionally fail if we get unlucky with random assignment
757
+ # but it's very unlikely
758
+ assert train_tags < 35
759
+ assert test_tags > 0
760
+
761
+
762
+ def test_validate_tag_splits():
763
+ """Test that validate_tag_splits correctly validates tag split proportions."""
764
+ # Test valid splits
765
+ config = ImportConfig(
766
+ dataset_type=DatasetImportFormat.CSV,
767
+ dataset_path="test.csv",
768
+ dataset_name="test.csv",
769
+ tag_splits={"train": 0.7, "test": 0.3},
770
+ )
771
+ config.validate_tag_splits() # Should not raise
772
+
773
+ # Test valid splits with small floating point errors
774
+ config = ImportConfig(
775
+ dataset_type=DatasetImportFormat.CSV,
776
+ dataset_path="test.csv",
777
+ dataset_name="test.csv",
778
+ tag_splits={"train": 0.7, "test": 0.3000001},
779
+ )
780
+ config.validate_tag_splits() # Should not raise
781
+
782
+ # Test invalid splits that don't sum to 1
783
+ config = ImportConfig(
784
+ dataset_type=DatasetImportFormat.CSV,
785
+ dataset_path="test.csv",
786
+ dataset_name="test.csv",
787
+ tag_splits={"train": 0.7, "test": 0.4},
788
+ )
789
+ with pytest.raises(ValueError) as e:
790
+ config.validate_tag_splits()
791
+ assert "Splits must sum to 1" in str(e.value)
792
+
793
+ # Test None tag_splits
794
+ config = ImportConfig(
795
+ dataset_type=DatasetImportFormat.CSV,
796
+ dataset_path="test.csv",
797
+ dataset_name="test.csv",
798
+ tag_splits=None,
799
+ )
800
+ config.validate_tag_splits() # Should not raise
801
+
802
+
803
+ def test_dataset_file_importer_validates_tag_splits(base_task: Task, tmp_path):
804
+ """Test that DatasetFileImporter validates tag splits on initialization."""
805
+ # Test with invalid splits
806
+ with pytest.raises(ValueError) as e:
807
+ DatasetFileImporter(
808
+ base_task,
809
+ ImportConfig(
810
+ dataset_type=DatasetImportFormat.CSV,
811
+ dataset_path="test.csv",
812
+ dataset_name="test.csv",
813
+ tag_splits={"train": 0.7, "test": 0.4}, # Sums to 1.1
814
+ ),
815
+ )
816
+ assert "Splits must sum to 1" in str(e.value)
817
+
818
+ # Test with valid splits
819
+ importer = DatasetFileImporter(
820
+ base_task,
821
+ ImportConfig(
822
+ dataset_type=DatasetImportFormat.CSV,
823
+ dataset_path="test.csv",
824
+ dataset_name="test.csv",
825
+ tag_splits={"train": 0.7, "test": 0.3},
826
+ ),
827
+ )
828
+ assert importer.config.tag_splits == {"train": 0.7, "test": 0.3}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kiln-ai
3
- Version: 0.15.0
3
+ Version: 0.16.0
4
4
  Summary: Kiln AI
5
5
  Project-URL: Homepage, https://getkiln.ai
6
6
  Project-URL: Repository, https://github.com/Kiln-AI/kiln
@@ -1,24 +1,24 @@
1
1
  kiln_ai/__init__.py,sha256=Sc4z8LRVFMwJUoc_DPVUriSXTZ6PO9MaJ80PhRbKyB8,34
2
2
  kiln_ai/adapters/__init__.py,sha256=XjGmWagEyOEVwVIAxjN5rYNsQWIEACT5DB7MMTxdPss,1005
3
3
  kiln_ai/adapters/adapter_registry.py,sha256=KmMHYQ3mxpjVLE6D-hMNWCGt6Cw9JvnFn6nMb48GE8Y,9166
4
- kiln_ai/adapters/ml_model_list.py,sha256=RyRvPStx2TNGDjmRKSE02bOZjSWSWuJ030Ythu4Fgh4,68593
4
+ kiln_ai/adapters/ml_model_list.py,sha256=DOl3kULrWOUwqEdOaKHk_LEPgnFhxLjcubpLk9Norek,87307
5
5
  kiln_ai/adapters/ollama_tools.py,sha256=uObtLWfqKb9RXHN-TGGw2Y1FQlEMe0u8FgszI0zQn6U,3550
6
- kiln_ai/adapters/prompt_builders.py,sha256=LYHTIaisQMBFtWDRIGo1QJgOsmQ-NBpQ8fI4eImHxaQ,15269
7
- kiln_ai/adapters/provider_tools.py,sha256=ciFQfGJuTuHDj3FARY-sUqbSb-7oAT9lMGJGCBJoF4I,15309
6
+ kiln_ai/adapters/prompt_builders.py,sha256=Af4u0Oco0SfErBUGP7ujIu_qTK27d9VnOLumz2eqCmU,15639
7
+ kiln_ai/adapters/provider_tools.py,sha256=7NjkxGD58P9s0NEbWDY2yToE2dTthlObU7qS_4oA4b4,15900
8
8
  kiln_ai/adapters/run_output.py,sha256=RAi2Qp6dmqJVNm3CxbNTdAuhitHfH5NiUGbf6ygUP-k,257
9
9
  kiln_ai/adapters/test_adapter_registry.py,sha256=eDLHqv9mwgdde221pa47bTV87vCXwkUyjqsas-iFUrY,6123
10
10
  kiln_ai/adapters/test_ollama_tools.py,sha256=xAUzL0IVmmXadVehJu1WjqbhpKEYGAgGt3pWx7hrubc,2514
11
11
  kiln_ai/adapters/test_prompt_adaptors.py,sha256=J1ZGZ8GG7SxP3_J3Zw0e6XmZY4NyPmUGX3IPgjh2LD8,7767
12
- kiln_ai/adapters/test_prompt_builders.py,sha256=5Xvfr-oQg_LLrle6UqfpRHWcPUYa8ywG3aL1rM7q1Jw,22054
13
- kiln_ai/adapters/test_provider_tools.py,sha256=7s-njUBm_TJCTeNOh4TrP7R-Q6TXILAxbv-GK0p3YPU,27446
12
+ kiln_ai/adapters/test_prompt_builders.py,sha256=ZwSpKjI0DFVZwmwdbBkooWVCwmwo6UAXsz4X9TyFtyw,22965
13
+ kiln_ai/adapters/test_provider_tools.py,sha256=wdr9SUKt2dwapiYkIrbxbhtQ-vJLUP0PBn_ihIWXevc,30099
14
14
  kiln_ai/adapters/data_gen/__init__.py,sha256=QTZWaf7kq5BorhPvexJfwDEKmjRmIbhwW9ei8LW2SIs,276
15
15
  kiln_ai/adapters/data_gen/data_gen_prompts.py,sha256=kudjHnAz7L3q0k_NLyTlaIV7M0uRFrxXNcfcnjOE2uc,5810
16
16
  kiln_ai/adapters/data_gen/data_gen_task.py,sha256=0PuYCcj09BtpgNj23mKj_L45mKZBdV5VreUeZ-Tj_xM,6642
17
17
  kiln_ai/adapters/data_gen/test_data_gen_task.py,sha256=cRKUKMvC0uVompbmPTKwbnQ_N3c0cQDm4J_9H4Y5U18,10129
18
18
  kiln_ai/adapters/eval/__init__.py,sha256=0ptbK0ZxWuraxGn_WMgmE1tcaq0k5t-g-52kVohvWCg,693
19
19
  kiln_ai/adapters/eval/base_eval.py,sha256=IF4kYGt93bqJqSfj8UUaTng38fwPmi3cFKRSKUZhXJs,7381
20
- kiln_ai/adapters/eval/eval_runner.py,sha256=h3DvRFM5J5LDJqaLzNJ-q9i5LRycv2J9Ev5nw1mUDUQ,10806
21
- kiln_ai/adapters/eval/g_eval.py,sha256=d3UcBsZWeDt7cWp4uvDcfG7qdGLsGaZEBsIEqkpiWh4,15253
20
+ kiln_ai/adapters/eval/eval_runner.py,sha256=Wulelqb-qqcpjI33fgYhWiZhqFl7SqD0Q2o5xLEQQXQ,8729
21
+ kiln_ai/adapters/eval/g_eval.py,sha256=4r2J091Q67EvxZ0LA0iEqrGsKMF54Am071tbW05nBrA,15239
22
22
  kiln_ai/adapters/eval/registry.py,sha256=gZ_s0VgEx79Fswkgi1tS4yOl7lzpkvUBJZ62RldhM_w,626
23
23
  kiln_ai/adapters/eval/test_base_eval.py,sha256=_1CiOUOiBt1R_gGYMcRblrPkHf-H4uIlvfcHj5-Wh7o,10724
24
24
  kiln_ai/adapters/eval/test_eval_runner.py,sha256=82WPE_frNRTSQ2lylqT0inkqcDgM72nWt8GEuoDkJ7w,18568
@@ -26,12 +26,12 @@ kiln_ai/adapters/eval/test_g_eval.py,sha256=-Stx7E0D-WAH1HWrRSp48CiGsf-no1SHeFF9
26
26
  kiln_ai/adapters/eval/test_g_eval_data.py,sha256=8caiZfLWnXVX8alrBPrH7L7gqqSS9vO7u6PzcHurQcA,27769
27
27
  kiln_ai/adapters/fine_tune/__init__.py,sha256=DxdTR60chwgck1aEoVYWyfWi6Ed2ZkdJj0lar-SEAj4,257
28
28
  kiln_ai/adapters/fine_tune/base_finetune.py,sha256=g-lWuZMkOj2djcczuHke_Ai7Z7RPg41AFSgoxHgsw3U,5889
29
- kiln_ai/adapters/fine_tune/dataset_formatter.py,sha256=ky48er7lMIS3Kv5WflaLpUDvWiVGYgl8QlI0M_wy6Vo,14409
29
+ kiln_ai/adapters/fine_tune/dataset_formatter.py,sha256=OCfU-hVR_pM9Y_rQCPjyq7sMR2f20A8gKfyh45AQN28,17931
30
30
  kiln_ai/adapters/fine_tune/finetune_registry.py,sha256=9RJLjviSoN3dQnKJE9Ss7df7dtdJgbuShB8IUcI-q9k,726
31
31
  kiln_ai/adapters/fine_tune/fireworks_finetune.py,sha256=ze0QxghpHAqwO9nXOTkDEC9irmqduX5bjIhZDU0DCZQ,20101
32
32
  kiln_ai/adapters/fine_tune/openai_finetune.py,sha256=Dz9E_0BWfrIkvv8ArZe-RKPwbIKPZ3v8rfbc3JELyTY,8571
33
33
  kiln_ai/adapters/fine_tune/test_base_finetune.py,sha256=Tq0Klw7ou5_6H_bouTbI3PxYw7H30K32wlgWJE_luYk,10751
34
- kiln_ai/adapters/fine_tune/test_dataset_formatter.py,sha256=kUGn2kv2jwosuabuhYgA3oXJXAdqK1AAaJI496ScOGY,24015
34
+ kiln_ai/adapters/fine_tune/test_dataset_formatter.py,sha256=cHeiUts5rNJooslAy8SlnUgSejT0WGGwgNl_3WYj7lI,32949
35
35
  kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py,sha256=NCl2U6ZqqJ8dnysGGmfir9RGcV-StPtoi5cetRjW6Zc,36754
36
36
  kiln_ai/adapters/fine_tune/test_openai_finetune.py,sha256=H63Xk2PNHbt5Ev5IQpdR9JZ4uz-Huo2gfuC4mHHqe0w,20011
37
37
  kiln_ai/adapters/fine_tune/test_together_finetune.py,sha256=BUJFsyq_g77gU0JN3hg6FMBvqb0DIyTeAek-wxomKIg,18090
@@ -39,66 +39,70 @@ kiln_ai/adapters/fine_tune/test_vertex_finetune.py,sha256=rAmcQJNPXqRacxg6RzjEQ8
39
39
  kiln_ai/adapters/fine_tune/together_finetune.py,sha256=EbMPsTyKMubfwOalkFLiNFlMFIRKxLibzMTyLeUkle4,14010
40
40
  kiln_ai/adapters/fine_tune/vertex_finetune.py,sha256=Ik6Ov711-oruJnMHpVZTPimWJY2W_JnfdKIdR2djGrc,8545
41
41
  kiln_ai/adapters/model_adapters/__init__.py,sha256=m5GRtOHwVVvp_XDOss8c1X3NFf1wQQlC2eBgI4tXQhM,212
42
- kiln_ai/adapters/model_adapters/base_adapter.py,sha256=ishm_oVTNxSDC0GPrydHnyOPqp_U4XiTOx0-iI2fEiU,10433
43
- kiln_ai/adapters/model_adapters/litellm_adapter.py,sha256=pbXFfJckyvptp577-YXGMG2hltYMFQrUT97PsSWa2KQ,16437
42
+ kiln_ai/adapters/model_adapters/base_adapter.py,sha256=2CVGoKVfPSqiC9j0SdAPUj4HiFb8-io5zNG0IIKQtBc,10965
43
+ kiln_ai/adapters/model_adapters/litellm_adapter.py,sha256=ic4eLbmFZDcUNDTRNT6WQ1Qw_haf3ciu10cvzqcsg18,17791
44
44
  kiln_ai/adapters/model_adapters/litellm_config.py,sha256=7-tIh5cuVu23Uy2Sd6q7UCT_4VgevBsAzVhQMj6Svgw,425
45
- kiln_ai/adapters/model_adapters/test_base_adapter.py,sha256=uQyKrHLN3Jha6R-6SWkEME6brQecVFdPTSXogo-xpt0,6556
46
- kiln_ai/adapters/model_adapters/test_litellm_adapter.py,sha256=QpnzuReNeBzvvRYnNj_5c8l1PS7NyrDDUQx_o21IIH4,13731
47
- kiln_ai/adapters/model_adapters/test_saving_adapter_results.py,sha256=1XFQQxdSIbqSoQEdxHOYJcY0cMb59qpTDPOmL9bW4B8,7870
48
- kiln_ai/adapters/model_adapters/test_structured_output.py,sha256=lHZSuPyvr--WCCEIik5OFqfvufmooPBbbUlSMUVvqmE,12516
45
+ kiln_ai/adapters/model_adapters/test_base_adapter.py,sha256=E9XnCOJm9DNEPpt4otyMYn_AzK3WU4xVDRwxlSvPBI4,9007
46
+ kiln_ai/adapters/model_adapters/test_litellm_adapter.py,sha256=8koRwW3yxmECJamYeRc53g4dq0SwwCa0g2i6nt9xNXA,15896
47
+ kiln_ai/adapters/model_adapters/test_saving_adapter_results.py,sha256=XGainAeG3PkvmKhlHZG56POfiOjZ1Fl8pHvci_ouFiY,7907
48
+ kiln_ai/adapters/model_adapters/test_structured_output.py,sha256=Dqoy4zKi8rG0S3vbnpx1XBDHHj3oj-ayPY3xLpuVyU4,12457
49
49
  kiln_ai/adapters/parsers/__init__.py,sha256=TGJS_8JhjUwg5Bnq4cDmwt5eIRo4vowmcL2A72L1Hzk,202
50
- kiln_ai/adapters/parsers/base_parser.py,sha256=DaoZVEOOuFTMZd5ZTpl_as6-xc9NPWGP2fAmP12J58M,389
50
+ kiln_ai/adapters/parsers/base_parser.py,sha256=AE8UYCttmVXbilpICotnDdFYTFhGMiBJHrxIUgPTAWM,280
51
51
  kiln_ai/adapters/parsers/json_parser.py,sha256=IszrBrhIFrrVr76UZsuejkBdqpZG27mU72264HVgVzE,1274
52
- kiln_ai/adapters/parsers/parser_registry.py,sha256=G9bAZrnWrR0a82JAQHsSqA2o7-CjrZUBANZljY_6ZxE,623
53
- kiln_ai/adapters/parsers/r1_parser.py,sha256=XHc_dKxiQjj8wG1w__rTmJVqa4fIg5L1g-igbv5Rl_g,2965
52
+ kiln_ai/adapters/parsers/parser_registry.py,sha256=Lna-uYHBigKeq9e-mUbNQKcsZM1M7cDvxu7Gv4ECjLI,735
53
+ kiln_ai/adapters/parsers/r1_parser.py,sha256=ucDRHPoFrmr1eOSNFEG0won6TPxkCKfGJQNNJng5qHA,3626
54
+ kiln_ai/adapters/parsers/request_formatters.py,sha256=NdZO8zcZy9tkea8JaD5c_OeoeVjoYYTG0GjwF812STw,1124
54
55
  kiln_ai/adapters/parsers/test_json_parser.py,sha256=9kdWe_vRC5wjP8A1Ym6Zu6enDIz4ARCNiRpcZr7_3ak,1971
55
- kiln_ai/adapters/parsers/test_parser_registry.py,sha256=S4MdX7cnhCbmeKq8tZwMwRdGWr-019Z-fw5zey9Wm08,1043
56
- kiln_ai/adapters/parsers/test_r1_parser.py,sha256=VvCT_qCAfIbutFsxnpEzyZg-m5XLg7hI-Sorh2PplYw,4898
56
+ kiln_ai/adapters/parsers/test_parser_registry.py,sha256=FFJQgaKVu67yK4W7w_b26tuEYPPYGppfttJ0y5ctWUo,1041
57
+ kiln_ai/adapters/parsers/test_r1_parser.py,sha256=XbB0saThkcgOvoYNq3TxDgILUu5Me38yeKoQonqaN-g,6296
58
+ kiln_ai/adapters/parsers/test_request_formatters.py,sha256=t3FlKT_Tte2u8zXJTMl8VaE8IrSzumuBysahbGesrbU,2090
57
59
  kiln_ai/adapters/repair/__init__.py,sha256=dOO9MEpEhjiwzDVFg3MNfA2bKMPlax9iekDatpTkX8E,217
58
60
  kiln_ai/adapters/repair/repair_task.py,sha256=iW0bHWQq6Tir6ULTATWFS0zpwNji8Tbwhm2lZu52RsM,3342
59
- kiln_ai/adapters/repair/test_repair_task.py,sha256=2jO0_aDPzbmZHC0skZBcKp3t9K4gISko3iSGCFHhQRs,7945
60
- kiln_ai/datamodel/__init__.py,sha256=GbRfDrdSq9d_-HxzmFIicTmLO3qz-O3XGvSwDPh3XCk,1957
61
+ kiln_ai/adapters/repair/test_repair_task.py,sha256=ZMoQcIpD_-O9lhtlMD6pN-VgzJURpMIZ-faVz1-taXs,7966
62
+ kiln_ai/datamodel/__init__.py,sha256=MCEPLNpNFNP0zCwQfDaM8yKs7stdtY8c7scf0pEtfdQ,1981
61
63
  kiln_ai/datamodel/basemodel.py,sha256=Qsr3Kxq5B5rfPZxQFrfOMTGwInnfYy5srd8nK0nwOs0,22204
62
- kiln_ai/datamodel/datamodel_enums.py,sha256=HUnGI_ZGQqyOicqEFFutZRWSANlQRQwfBu3XhVQFQSc,2270
63
- kiln_ai/datamodel/dataset_filters.py,sha256=hWKxGJ-mSl4y0igyNcpmRoRYCiGrf0_uN4MMU9Fe_ng,3180
64
- kiln_ai/datamodel/dataset_split.py,sha256=q4l4SlUvjLV547bzk7Z-fbmj_o26GDcYOZ2rA5RPh3c,5612
65
- kiln_ai/datamodel/eval.py,sha256=kio2LqQ87MsP75DJTiIVdVfopTZXH4xjGN9g11V1mUU,13826
66
- kiln_ai/datamodel/finetune.py,sha256=TYoNVRAfbjqvrY-1YmHwG6xSoDljiJWuuVcTbvQAJL4,4569
64
+ kiln_ai/datamodel/datamodel_enums.py,sha256=5ktCfKzNM2lHUFv-BUjrHj2GOtDoB4kd2E8Lh1giirk,2877
65
+ kiln_ai/datamodel/dataset_filters.py,sha256=zXS5QeCqWa1vAxs3Pyy5FJtySx9yYJzxsCMANd23-3c,5502
66
+ kiln_ai/datamodel/dataset_split.py,sha256=GDF3Pj3NLG42X8kjR606R_aN14rpqx8Ig56FG8NCn9k,5790
67
+ kiln_ai/datamodel/eval.py,sha256=larT3emjpLVYOSB2ga5GHTS4O7l9mJwtIO4EqCyYF7g,14214
68
+ kiln_ai/datamodel/finetune.py,sha256=XvwpYDNiqZEJeMzmc81jqG5ZSXR2hWcBOS6hXiZASu8,4599
67
69
  kiln_ai/datamodel/json_schema.py,sha256=o50wSp8frRXjT-NZjml4-Is7LNoF7DQP4g3AaaYzBfI,3379
68
70
  kiln_ai/datamodel/model_cache.py,sha256=9X4aAigbkFdytckgw8InCMh86uBna0ME_1HJSeMPEn0,4495
69
71
  kiln_ai/datamodel/project.py,sha256=uVH2_3TDFtsG_tpts81A-zbd9uPDFxAwMCKZt_km3IE,727
70
72
  kiln_ai/datamodel/prompt.py,sha256=70JPYHfgyX18cHW_DXoMzIOA28Jbaz6gyabElmpycyc,1161
71
- kiln_ai/datamodel/prompt_id.py,sha256=eU2TV0RZapn-BgnZ4sOSNOOVEQ3aPaLzW4YSYCd3OBo,2531
73
+ kiln_ai/datamodel/prompt_id.py,sha256=S4Wcrt05USN-JrO8BeDlNYGrcoTOVocR3iUxBbgoq1c,2566
72
74
  kiln_ai/datamodel/registry.py,sha256=XwGFXJFKZtOpR1Z9ven6SftggfADdZRm8TFxCEVtfUQ,957
73
75
  kiln_ai/datamodel/strict_mode.py,sha256=sm4Xka8mnJHCShtbh6MMU5dDQv-cLj8lHgHkmFKpsl0,849
74
76
  kiln_ai/datamodel/task.py,sha256=r-_zgrQCIiIkN8gvBISdU449Z9oKp7E1XL0lkik_rVI,7036
75
- kiln_ai/datamodel/task_output.py,sha256=PqI7Lyeox5lh9mItMOtpqP9Rk_K9dyMltKYu1c2p7A4,13125
76
- kiln_ai/datamodel/task_run.py,sha256=mVKmHn90iPmwXGja7TNgDA3iFzXBlamJ_6KndRPkhRA,7745
77
- kiln_ai/datamodel/test_basemodel.py,sha256=sJ8wXGef2WxzbrbMTYgrOwmkd5J6sHkly-cQBO2IZh4,18126
78
- kiln_ai/datamodel/test_dataset_filters.py,sha256=v88QPkIsq4diUmoUF3-qj5KAW2rLRp0KDAm_pexbFy4,1894
79
- kiln_ai/datamodel/test_dataset_split.py,sha256=5CHO1Lq4xQBB72tV2SPER7OZODJNvj15qxi_cYBV2Rs,11157
77
+ kiln_ai/datamodel/task_output.py,sha256=P7bRI-Qn2n7f8XpR7hwgSTKhx3gzvsZ1aJOQMl-YW4s,13245
78
+ kiln_ai/datamodel/task_run.py,sha256=0Lwc7zQoeWzuvHYv00lUGfsNQp8gCKmCVKAq3FDrruY,8806
79
+ kiln_ai/datamodel/test_basemodel.py,sha256=arzlXwtPi0H3BRTCILn7WkcBV9bFFAI87iiEs5BsWVA,17978
80
+ kiln_ai/datamodel/test_dataset_filters.py,sha256=TFHQZLB0rJxnxsFjD546eXVFxZNAJi0sPZ8j24wYd1w,5322
81
+ kiln_ai/datamodel/test_dataset_split.py,sha256=NdJ042JNq9A6JGaMt6LS19DMz1IiwcVCZpUHw0AqJrE,11253
80
82
  kiln_ai/datamodel/test_datasource.py,sha256=H4Kc-Im9eM7WnADWZXdoiOIrOl05RtkyuhTCKiRimyU,3905
81
83
  kiln_ai/datamodel/test_eval_model.py,sha256=J7MqwWBgPpeXGqh3IacVUUHdZFJSZ2MgTsUNu-hNOJw,19528
82
- kiln_ai/datamodel/test_example_models.py,sha256=nrr13ZseFn-OVGa9bjCwoVHTVqydy0O0yJah4QiqqbU,24326
84
+ kiln_ai/datamodel/test_example_models.py,sha256=dwLAAOXLvdKupE5Q1m6VNcHtfdhpi2qWtoEbC0nfJg8,26156
83
85
  kiln_ai/datamodel/test_json_schema.py,sha256=R0Cfc9WbieMslgvYsj2HFx8RHIq2fF9NcT5jH-kEqh4,4793
84
86
  kiln_ai/datamodel/test_model_cache.py,sha256=Fy-ucYNzS5JEG-8SFY4nVHA8iRbXXxai20f8_oGl97o,8184
85
87
  kiln_ai/datamodel/test_model_perf.py,sha256=9_76f__5XtZSHSjuaoiHRj2t-z3OWn-sSA4S9kH1jpY,3306
86
- kiln_ai/datamodel/test_models.py,sha256=hmV7sTbOamWJCwOY96w-g4PQRv4Uai-XaHtg0QKH-ak,19295
88
+ kiln_ai/datamodel/test_models.py,sha256=ZZZdhN6-uWDBfyVr7b7LZhDA7B2NIcPlNGfnb3HI7II,21084
87
89
  kiln_ai/datamodel/test_nested_save.py,sha256=xciCddqvPyKyoyjC5Lx_3Kh1t4LJv1xYRAPazR3SRcs,5588
88
90
  kiln_ai/datamodel/test_output_rating.py,sha256=zvPIp2shAgCs2RQBgwYoL09fRA3krHvgAqUa91RlWR0,15125
89
91
  kiln_ai/datamodel/test_prompt_id.py,sha256=ihyXVPQi0dSLGnBM7rTXRnVaiWXhh7HJmSy4nZZKmso,4225
90
92
  kiln_ai/datamodel/test_registry.py,sha256=PhS4anLi5Bf_023obuTlO5DALhtPB8WIc_bX12Yg6Po,2705
91
93
  kiln_ai/datamodel/test_task.py,sha256=FYyoEqJXQIy8rcBsLTdki4-1z9COnZQk1-aoS3ZoNuU,5307
92
94
  kiln_ai/utils/__init__.py,sha256=PTD0MwBCKAMIOGsTAwsFaJOusTJJoRFTfOGqRvCaU-E,142
95
+ kiln_ai/utils/async_job_runner.py,sha256=1gjoEq5yc2MOVjDo05O1wztguEuMC6l3haDZsltlvuw,3457
93
96
  kiln_ai/utils/config.py,sha256=kAgb_4nSnb-IWbLVS4FBygYmnHypJADjDEk_Fh-eLeg,8479
94
- kiln_ai/utils/dataset_import.py,sha256=HvTCdK9OO8WE3Runn8_Vsks5KpCTckGIzAA7JKe-cWI,6956
97
+ kiln_ai/utils/dataset_import.py,sha256=zz8O4RniellZ0vPipeTUltWU7J7aCO018beD_cNHMb4,8993
95
98
  kiln_ai/utils/exhaustive_error.py,sha256=TkkRixIAR3CPEKHeAJzyv0mtxp6BxUBKMvobA3vzQug,262
96
99
  kiln_ai/utils/formatting.py,sha256=VtB9oag0lOGv17dwT7OPX_3HzBfaU9GsLH-iLete0yM,97
97
100
  kiln_ai/utils/name_generator.py,sha256=v26TgpCwQbhQFcZvzgjZvURinjrOyyFhxpsI6NQrHKc,1914
101
+ kiln_ai/utils/test_async_job_runner.py,sha256=8AwPfOlR09qzfhVm-djpkmuoyHxJJ19QEzs0WV5KFSQ,6813
98
102
  kiln_ai/utils/test_config.py,sha256=Jw3nMFeIgZUsZDRJJY2HpB-2EkR2NoZ-rDe_o9oA7ws,9174
99
- kiln_ai/utils/test_dataset_import.py,sha256=ZZOt7zqtaEIlMMx0VNXyRegDvnVqbWY2bcz-iMY_Oag,17427
103
+ kiln_ai/utils/test_dataset_import.py,sha256=WxyjquKod8szKNA2HYs7tNTn71Apg5G9MNI8GRWhAlI,24965
100
104
  kiln_ai/utils/test_name_geneator.py,sha256=9-hSTBshyakqlPbFnNcggwLrL7lcPTitauBYHg9jFWI,1513
101
- kiln_ai-0.15.0.dist-info/METADATA,sha256=80EooOjbu5b-7YgyfnOY9uYjFk8bo5czNWm3QgWaFys,12263
102
- kiln_ai-0.15.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
103
- kiln_ai-0.15.0.dist-info/licenses/LICENSE.txt,sha256=_NA5pnTYgRRr4qH6lE3X-TuZJ8iRcMUi5ASoGr-lEx8,1209
104
- kiln_ai-0.15.0.dist-info/RECORD,,
105
+ kiln_ai-0.16.0.dist-info/METADATA,sha256=9BCNdJP6PBasSKgtPdVZGdhQM-IGpJFHgJhezj9Lplw,12263
106
+ kiln_ai-0.16.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
107
+ kiln_ai-0.16.0.dist-info/licenses/LICENSE.txt,sha256=_NA5pnTYgRRr4qH6lE3X-TuZJ8iRcMUi5ASoGr-lEx8,1209
108
+ kiln_ai-0.16.0.dist-info/RECORD,,