kiln-ai 0.14.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 (58) hide show
  1. kiln_ai/adapters/eval/base_eval.py +7 -2
  2. kiln_ai/adapters/eval/eval_runner.py +5 -64
  3. kiln_ai/adapters/eval/g_eval.py +3 -3
  4. kiln_ai/adapters/fine_tune/base_finetune.py +6 -3
  5. kiln_ai/adapters/fine_tune/dataset_formatter.py +128 -38
  6. kiln_ai/adapters/fine_tune/finetune_registry.py +2 -0
  7. kiln_ai/adapters/fine_tune/fireworks_finetune.py +2 -1
  8. kiln_ai/adapters/fine_tune/test_base_finetune.py +7 -0
  9. kiln_ai/adapters/fine_tune/test_dataset_formatter.py +267 -10
  10. kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py +1 -1
  11. kiln_ai/adapters/fine_tune/test_vertex_finetune.py +586 -0
  12. kiln_ai/adapters/fine_tune/vertex_finetune.py +217 -0
  13. kiln_ai/adapters/ml_model_list.py +817 -62
  14. kiln_ai/adapters/model_adapters/base_adapter.py +33 -10
  15. kiln_ai/adapters/model_adapters/litellm_adapter.py +51 -12
  16. kiln_ai/adapters/model_adapters/test_base_adapter.py +74 -2
  17. kiln_ai/adapters/model_adapters/test_litellm_adapter.py +65 -1
  18. kiln_ai/adapters/model_adapters/test_saving_adapter_results.py +3 -2
  19. kiln_ai/adapters/model_adapters/test_structured_output.py +4 -6
  20. kiln_ai/adapters/parsers/base_parser.py +0 -3
  21. kiln_ai/adapters/parsers/parser_registry.py +5 -3
  22. kiln_ai/adapters/parsers/r1_parser.py +17 -2
  23. kiln_ai/adapters/parsers/request_formatters.py +40 -0
  24. kiln_ai/adapters/parsers/test_parser_registry.py +2 -2
  25. kiln_ai/adapters/parsers/test_r1_parser.py +44 -1
  26. kiln_ai/adapters/parsers/test_request_formatters.py +76 -0
  27. kiln_ai/adapters/prompt_builders.py +14 -1
  28. kiln_ai/adapters/provider_tools.py +25 -1
  29. kiln_ai/adapters/repair/test_repair_task.py +3 -2
  30. kiln_ai/adapters/test_prompt_builders.py +24 -3
  31. kiln_ai/adapters/test_provider_tools.py +86 -1
  32. kiln_ai/datamodel/__init__.py +2 -0
  33. kiln_ai/datamodel/datamodel_enums.py +14 -0
  34. kiln_ai/datamodel/dataset_filters.py +69 -1
  35. kiln_ai/datamodel/dataset_split.py +4 -0
  36. kiln_ai/datamodel/eval.py +8 -0
  37. kiln_ai/datamodel/finetune.py +1 -0
  38. kiln_ai/datamodel/json_schema.py +24 -7
  39. kiln_ai/datamodel/prompt_id.py +1 -0
  40. kiln_ai/datamodel/task_output.py +10 -6
  41. kiln_ai/datamodel/task_run.py +68 -12
  42. kiln_ai/datamodel/test_basemodel.py +3 -7
  43. kiln_ai/datamodel/test_dataset_filters.py +82 -0
  44. kiln_ai/datamodel/test_dataset_split.py +2 -0
  45. kiln_ai/datamodel/test_example_models.py +158 -3
  46. kiln_ai/datamodel/test_json_schema.py +22 -3
  47. kiln_ai/datamodel/test_model_perf.py +3 -2
  48. kiln_ai/datamodel/test_models.py +50 -2
  49. kiln_ai/utils/async_job_runner.py +106 -0
  50. kiln_ai/utils/dataset_import.py +80 -18
  51. kiln_ai/utils/test_async_job_runner.py +199 -0
  52. kiln_ai/utils/test_dataset_import.py +242 -10
  53. {kiln_ai-0.14.0.dist-info → kiln_ai-0.16.0.dist-info}/METADATA +3 -2
  54. kiln_ai-0.16.0.dist-info/RECORD +108 -0
  55. kiln_ai/adapters/test_generate_docs.py +0 -69
  56. kiln_ai-0.14.0.dist-info/RECORD +0 -103
  57. {kiln_ai-0.14.0.dist-info → kiln_ai-0.16.0.dist-info}/WHEEL +0 -0
  58. {kiln_ai-0.14.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.14.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
@@ -19,7 +19,7 @@ Requires-Dist: boto3>=1.37.10
19
19
  Requires-Dist: coverage>=7.6.4
20
20
  Requires-Dist: google-cloud-aiplatform>=1.84.0
21
21
  Requires-Dist: jsonschema>=4.23.0
22
- Requires-Dist: litellm>=1.63.5
22
+ Requires-Dist: litellm>=1.67.0
23
23
  Requires-Dist: openai>=1.53.0
24
24
  Requires-Dist: pdoc>=15.0.0
25
25
  Requires-Dist: pydantic>=2.9.2
@@ -28,6 +28,7 @@ Requires-Dist: pytest-cov>=6.0.0
28
28
  Requires-Dist: pyyaml>=6.0.2
29
29
  Requires-Dist: together
30
30
  Requires-Dist: typing-extensions>=4.12.2
31
+ Requires-Dist: vertexai>=1.43.0
31
32
  Description-Content-Type: text/markdown
32
33
 
33
34
  # Kiln AI Core Library
@@ -0,0 +1,108 @@
1
+ kiln_ai/__init__.py,sha256=Sc4z8LRVFMwJUoc_DPVUriSXTZ6PO9MaJ80PhRbKyB8,34
2
+ kiln_ai/adapters/__init__.py,sha256=XjGmWagEyOEVwVIAxjN5rYNsQWIEACT5DB7MMTxdPss,1005
3
+ kiln_ai/adapters/adapter_registry.py,sha256=KmMHYQ3mxpjVLE6D-hMNWCGt6Cw9JvnFn6nMb48GE8Y,9166
4
+ kiln_ai/adapters/ml_model_list.py,sha256=DOl3kULrWOUwqEdOaKHk_LEPgnFhxLjcubpLk9Norek,87307
5
+ kiln_ai/adapters/ollama_tools.py,sha256=uObtLWfqKb9RXHN-TGGw2Y1FQlEMe0u8FgszI0zQn6U,3550
6
+ kiln_ai/adapters/prompt_builders.py,sha256=Af4u0Oco0SfErBUGP7ujIu_qTK27d9VnOLumz2eqCmU,15639
7
+ kiln_ai/adapters/provider_tools.py,sha256=7NjkxGD58P9s0NEbWDY2yToE2dTthlObU7qS_4oA4b4,15900
8
+ kiln_ai/adapters/run_output.py,sha256=RAi2Qp6dmqJVNm3CxbNTdAuhitHfH5NiUGbf6ygUP-k,257
9
+ kiln_ai/adapters/test_adapter_registry.py,sha256=eDLHqv9mwgdde221pa47bTV87vCXwkUyjqsas-iFUrY,6123
10
+ kiln_ai/adapters/test_ollama_tools.py,sha256=xAUzL0IVmmXadVehJu1WjqbhpKEYGAgGt3pWx7hrubc,2514
11
+ kiln_ai/adapters/test_prompt_adaptors.py,sha256=J1ZGZ8GG7SxP3_J3Zw0e6XmZY4NyPmUGX3IPgjh2LD8,7767
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
+ kiln_ai/adapters/data_gen/__init__.py,sha256=QTZWaf7kq5BorhPvexJfwDEKmjRmIbhwW9ei8LW2SIs,276
15
+ kiln_ai/adapters/data_gen/data_gen_prompts.py,sha256=kudjHnAz7L3q0k_NLyTlaIV7M0uRFrxXNcfcnjOE2uc,5810
16
+ kiln_ai/adapters/data_gen/data_gen_task.py,sha256=0PuYCcj09BtpgNj23mKj_L45mKZBdV5VreUeZ-Tj_xM,6642
17
+ kiln_ai/adapters/data_gen/test_data_gen_task.py,sha256=cRKUKMvC0uVompbmPTKwbnQ_N3c0cQDm4J_9H4Y5U18,10129
18
+ kiln_ai/adapters/eval/__init__.py,sha256=0ptbK0ZxWuraxGn_WMgmE1tcaq0k5t-g-52kVohvWCg,693
19
+ kiln_ai/adapters/eval/base_eval.py,sha256=IF4kYGt93bqJqSfj8UUaTng38fwPmi3cFKRSKUZhXJs,7381
20
+ kiln_ai/adapters/eval/eval_runner.py,sha256=Wulelqb-qqcpjI33fgYhWiZhqFl7SqD0Q2o5xLEQQXQ,8729
21
+ kiln_ai/adapters/eval/g_eval.py,sha256=4r2J091Q67EvxZ0LA0iEqrGsKMF54Am071tbW05nBrA,15239
22
+ kiln_ai/adapters/eval/registry.py,sha256=gZ_s0VgEx79Fswkgi1tS4yOl7lzpkvUBJZ62RldhM_w,626
23
+ kiln_ai/adapters/eval/test_base_eval.py,sha256=_1CiOUOiBt1R_gGYMcRblrPkHf-H4uIlvfcHj5-Wh7o,10724
24
+ kiln_ai/adapters/eval/test_eval_runner.py,sha256=82WPE_frNRTSQ2lylqT0inkqcDgM72nWt8GEuoDkJ7w,18568
25
+ kiln_ai/adapters/eval/test_g_eval.py,sha256=-Stx7E0D-WAH1HWrRSp48CiGsf-no1SHeFF9IqVXeMI,16433
26
+ kiln_ai/adapters/eval/test_g_eval_data.py,sha256=8caiZfLWnXVX8alrBPrH7L7gqqSS9vO7u6PzcHurQcA,27769
27
+ kiln_ai/adapters/fine_tune/__init__.py,sha256=DxdTR60chwgck1aEoVYWyfWi6Ed2ZkdJj0lar-SEAj4,257
28
+ kiln_ai/adapters/fine_tune/base_finetune.py,sha256=g-lWuZMkOj2djcczuHke_Ai7Z7RPg41AFSgoxHgsw3U,5889
29
+ kiln_ai/adapters/fine_tune/dataset_formatter.py,sha256=OCfU-hVR_pM9Y_rQCPjyq7sMR2f20A8gKfyh45AQN28,17931
30
+ kiln_ai/adapters/fine_tune/finetune_registry.py,sha256=9RJLjviSoN3dQnKJE9Ss7df7dtdJgbuShB8IUcI-q9k,726
31
+ kiln_ai/adapters/fine_tune/fireworks_finetune.py,sha256=ze0QxghpHAqwO9nXOTkDEC9irmqduX5bjIhZDU0DCZQ,20101
32
+ kiln_ai/adapters/fine_tune/openai_finetune.py,sha256=Dz9E_0BWfrIkvv8ArZe-RKPwbIKPZ3v8rfbc3JELyTY,8571
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=cHeiUts5rNJooslAy8SlnUgSejT0WGGwgNl_3WYj7lI,32949
35
+ kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py,sha256=NCl2U6ZqqJ8dnysGGmfir9RGcV-StPtoi5cetRjW6Zc,36754
36
+ kiln_ai/adapters/fine_tune/test_openai_finetune.py,sha256=H63Xk2PNHbt5Ev5IQpdR9JZ4uz-Huo2gfuC4mHHqe0w,20011
37
+ kiln_ai/adapters/fine_tune/test_together_finetune.py,sha256=BUJFsyq_g77gU0JN3hg6FMBvqb0DIyTeAek-wxomKIg,18090
38
+ kiln_ai/adapters/fine_tune/test_vertex_finetune.py,sha256=rAmcQJNPXqRacxg6RzjEQ8FNLKCp9qZRHToH7fm-7W0,19214
39
+ kiln_ai/adapters/fine_tune/together_finetune.py,sha256=EbMPsTyKMubfwOalkFLiNFlMFIRKxLibzMTyLeUkle4,14010
40
+ kiln_ai/adapters/fine_tune/vertex_finetune.py,sha256=Ik6Ov711-oruJnMHpVZTPimWJY2W_JnfdKIdR2djGrc,8545
41
+ kiln_ai/adapters/model_adapters/__init__.py,sha256=m5GRtOHwVVvp_XDOss8c1X3NFf1wQQlC2eBgI4tXQhM,212
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
+ kiln_ai/adapters/model_adapters/litellm_config.py,sha256=7-tIh5cuVu23Uy2Sd6q7UCT_4VgevBsAzVhQMj6Svgw,425
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
+ kiln_ai/adapters/parsers/__init__.py,sha256=TGJS_8JhjUwg5Bnq4cDmwt5eIRo4vowmcL2A72L1Hzk,202
50
+ kiln_ai/adapters/parsers/base_parser.py,sha256=AE8UYCttmVXbilpICotnDdFYTFhGMiBJHrxIUgPTAWM,280
51
+ kiln_ai/adapters/parsers/json_parser.py,sha256=IszrBrhIFrrVr76UZsuejkBdqpZG27mU72264HVgVzE,1274
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
55
+ kiln_ai/adapters/parsers/test_json_parser.py,sha256=9kdWe_vRC5wjP8A1Ym6Zu6enDIz4ARCNiRpcZr7_3ak,1971
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
59
+ kiln_ai/adapters/repair/__init__.py,sha256=dOO9MEpEhjiwzDVFg3MNfA2bKMPlax9iekDatpTkX8E,217
60
+ kiln_ai/adapters/repair/repair_task.py,sha256=iW0bHWQq6Tir6ULTATWFS0zpwNji8Tbwhm2lZu52RsM,3342
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
63
+ kiln_ai/datamodel/basemodel.py,sha256=Qsr3Kxq5B5rfPZxQFrfOMTGwInnfYy5srd8nK0nwOs0,22204
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
69
+ kiln_ai/datamodel/json_schema.py,sha256=o50wSp8frRXjT-NZjml4-Is7LNoF7DQP4g3AaaYzBfI,3379
70
+ kiln_ai/datamodel/model_cache.py,sha256=9X4aAigbkFdytckgw8InCMh86uBna0ME_1HJSeMPEn0,4495
71
+ kiln_ai/datamodel/project.py,sha256=uVH2_3TDFtsG_tpts81A-zbd9uPDFxAwMCKZt_km3IE,727
72
+ kiln_ai/datamodel/prompt.py,sha256=70JPYHfgyX18cHW_DXoMzIOA28Jbaz6gyabElmpycyc,1161
73
+ kiln_ai/datamodel/prompt_id.py,sha256=S4Wcrt05USN-JrO8BeDlNYGrcoTOVocR3iUxBbgoq1c,2566
74
+ kiln_ai/datamodel/registry.py,sha256=XwGFXJFKZtOpR1Z9ven6SftggfADdZRm8TFxCEVtfUQ,957
75
+ kiln_ai/datamodel/strict_mode.py,sha256=sm4Xka8mnJHCShtbh6MMU5dDQv-cLj8lHgHkmFKpsl0,849
76
+ kiln_ai/datamodel/task.py,sha256=r-_zgrQCIiIkN8gvBISdU449Z9oKp7E1XL0lkik_rVI,7036
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
82
+ kiln_ai/datamodel/test_datasource.py,sha256=H4Kc-Im9eM7WnADWZXdoiOIrOl05RtkyuhTCKiRimyU,3905
83
+ kiln_ai/datamodel/test_eval_model.py,sha256=J7MqwWBgPpeXGqh3IacVUUHdZFJSZ2MgTsUNu-hNOJw,19528
84
+ kiln_ai/datamodel/test_example_models.py,sha256=dwLAAOXLvdKupE5Q1m6VNcHtfdhpi2qWtoEbC0nfJg8,26156
85
+ kiln_ai/datamodel/test_json_schema.py,sha256=R0Cfc9WbieMslgvYsj2HFx8RHIq2fF9NcT5jH-kEqh4,4793
86
+ kiln_ai/datamodel/test_model_cache.py,sha256=Fy-ucYNzS5JEG-8SFY4nVHA8iRbXXxai20f8_oGl97o,8184
87
+ kiln_ai/datamodel/test_model_perf.py,sha256=9_76f__5XtZSHSjuaoiHRj2t-z3OWn-sSA4S9kH1jpY,3306
88
+ kiln_ai/datamodel/test_models.py,sha256=ZZZdhN6-uWDBfyVr7b7LZhDA7B2NIcPlNGfnb3HI7II,21084
89
+ kiln_ai/datamodel/test_nested_save.py,sha256=xciCddqvPyKyoyjC5Lx_3Kh1t4LJv1xYRAPazR3SRcs,5588
90
+ kiln_ai/datamodel/test_output_rating.py,sha256=zvPIp2shAgCs2RQBgwYoL09fRA3krHvgAqUa91RlWR0,15125
91
+ kiln_ai/datamodel/test_prompt_id.py,sha256=ihyXVPQi0dSLGnBM7rTXRnVaiWXhh7HJmSy4nZZKmso,4225
92
+ kiln_ai/datamodel/test_registry.py,sha256=PhS4anLi5Bf_023obuTlO5DALhtPB8WIc_bX12Yg6Po,2705
93
+ kiln_ai/datamodel/test_task.py,sha256=FYyoEqJXQIy8rcBsLTdki4-1z9COnZQk1-aoS3ZoNuU,5307
94
+ kiln_ai/utils/__init__.py,sha256=PTD0MwBCKAMIOGsTAwsFaJOusTJJoRFTfOGqRvCaU-E,142
95
+ kiln_ai/utils/async_job_runner.py,sha256=1gjoEq5yc2MOVjDo05O1wztguEuMC6l3haDZsltlvuw,3457
96
+ kiln_ai/utils/config.py,sha256=kAgb_4nSnb-IWbLVS4FBygYmnHypJADjDEk_Fh-eLeg,8479
97
+ kiln_ai/utils/dataset_import.py,sha256=zz8O4RniellZ0vPipeTUltWU7J7aCO018beD_cNHMb4,8993
98
+ kiln_ai/utils/exhaustive_error.py,sha256=TkkRixIAR3CPEKHeAJzyv0mtxp6BxUBKMvobA3vzQug,262
99
+ kiln_ai/utils/formatting.py,sha256=VtB9oag0lOGv17dwT7OPX_3HzBfaU9GsLH-iLete0yM,97
100
+ kiln_ai/utils/name_generator.py,sha256=v26TgpCwQbhQFcZvzgjZvURinjrOyyFhxpsI6NQrHKc,1914
101
+ kiln_ai/utils/test_async_job_runner.py,sha256=8AwPfOlR09qzfhVm-djpkmuoyHxJJ19QEzs0WV5KFSQ,6813
102
+ kiln_ai/utils/test_config.py,sha256=Jw3nMFeIgZUsZDRJJY2HpB-2EkR2NoZ-rDe_o9oA7ws,9174
103
+ kiln_ai/utils/test_dataset_import.py,sha256=WxyjquKod8szKNA2HYs7tNTn71Apg5G9MNI8GRWhAlI,24965
104
+ kiln_ai/utils/test_name_geneator.py,sha256=9-hSTBshyakqlPbFnNcggwLrL7lcPTitauBYHg9jFWI,1513
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,,
@@ -1,69 +0,0 @@
1
- import logging
2
- from typing import List
3
-
4
- import pytest
5
-
6
- from libs.core.kiln_ai.adapters.ml_model_list import KilnModelProvider, built_in_models
7
- from libs.core.kiln_ai.adapters.provider_tools import provider_name_from_id
8
-
9
- logger = logging.getLogger(__name__)
10
-
11
-
12
- def _all_providers_support(providers: List[KilnModelProvider], attribute: str) -> bool:
13
- """Check if all providers support a given feature"""
14
- return all(getattr(provider, attribute) for provider in providers)
15
-
16
-
17
- def _any_providers_support(providers: List[KilnModelProvider], attribute: str) -> bool:
18
- """Check if any providers support a given feature"""
19
- return any(getattr(provider, attribute) for provider in providers)
20
-
21
-
22
- def _get_support_status(providers: List[KilnModelProvider], attribute: str) -> str:
23
- """Get the support status for a feature"""
24
- if _all_providers_support(providers, attribute):
25
- return "✅︎"
26
- elif _any_providers_support(providers, attribute):
27
- return "✅︎ (some providers)"
28
- return ""
29
-
30
-
31
- def _has_finetune_support(providers: List[KilnModelProvider]) -> str:
32
- """Check if any provider supports fine-tuning"""
33
- return "✅︎" if any(p.provider_finetune_id for p in providers) else ""
34
-
35
-
36
- @pytest.mark.paid(reason="Marking as paid so it isn't run by default")
37
- def test_generate_model_table():
38
- """Generate a markdown table of all models and their capabilities"""
39
-
40
- # Table header
41
- table = [
42
- "| Model Name | Providers | Structured Output | Reasoning | Synthetic Data | API Fine-Tuneable |",
43
- "|------------|-----------|-------------------|-----------|----------------|-------------------|",
44
- ]
45
-
46
- for model in built_in_models:
47
- provider_names = ", ".join(
48
- sorted(provider_name_from_id(p.name.value) for p in model.providers)
49
- )
50
- structured_output = _get_support_status(
51
- model.providers, "supports_structured_output"
52
- )
53
- reasoning = _get_support_status(model.providers, "reasoning_capable")
54
- data_gen = _get_support_status(model.providers, "supports_data_gen")
55
- finetune = _has_finetune_support(model.providers)
56
-
57
- row = f"| {model.friendly_name} | {provider_names} | {structured_output} | {reasoning} | {data_gen} | {finetune} |"
58
- table.append(row)
59
-
60
- # Print the table (useful for documentation)
61
- print("\nModel Capability Matrix:\n")
62
- print("\n".join(table))
63
-
64
- # Basic assertions to ensure the table is well-formed
65
- assert len(table) > 2, "Table should have header and at least one row"
66
- assert all("|" in row for row in table), "All rows should be properly formatted"
67
- assert len(table[0].split("|")) == len(table[1].split("|")), (
68
- "Header and separator should have same number of columns"
69
- )
@@ -1,103 +0,0 @@
1
- kiln_ai/__init__.py,sha256=Sc4z8LRVFMwJUoc_DPVUriSXTZ6PO9MaJ80PhRbKyB8,34
2
- kiln_ai/adapters/__init__.py,sha256=XjGmWagEyOEVwVIAxjN5rYNsQWIEACT5DB7MMTxdPss,1005
3
- kiln_ai/adapters/adapter_registry.py,sha256=KmMHYQ3mxpjVLE6D-hMNWCGt6Cw9JvnFn6nMb48GE8Y,9166
4
- kiln_ai/adapters/ml_model_list.py,sha256=f_z1daFR_w4-ccJ4OWwqlIMY0ILFJt4X5LdQb3AMt_c,58592
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=UL3XEnnxs1TrbqPPxxHSvnL7aBd84ggh38lI0yEsX6A,14725
8
- kiln_ai/adapters/run_output.py,sha256=RAi2Qp6dmqJVNm3CxbNTdAuhitHfH5NiUGbf6ygUP-k,257
9
- kiln_ai/adapters/test_adapter_registry.py,sha256=eDLHqv9mwgdde221pa47bTV87vCXwkUyjqsas-iFUrY,6123
10
- kiln_ai/adapters/test_generate_docs.py,sha256=M-uKcgF3hQmlEFOJ0o7DyL-9RgitGzkfROV-Dxtooec,2770
11
- kiln_ai/adapters/test_ollama_tools.py,sha256=xAUzL0IVmmXadVehJu1WjqbhpKEYGAgGt3pWx7hrubc,2514
12
- kiln_ai/adapters/test_prompt_adaptors.py,sha256=J1ZGZ8GG7SxP3_J3Zw0e6XmZY4NyPmUGX3IPgjh2LD8,7767
13
- kiln_ai/adapters/test_prompt_builders.py,sha256=5Xvfr-oQg_LLrle6UqfpRHWcPUYa8ywG3aL1rM7q1Jw,22054
14
- kiln_ai/adapters/test_provider_tools.py,sha256=mzMubpUupQu8pXhjDTj0_Kgrr-xcu_crj9xpcgcAzzA,26671
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=0PuYCcj09BtpgNj23mKj_L45mKZBdV5VreUeZ-Tj_xM,6642
18
- kiln_ai/adapters/data_gen/test_data_gen_task.py,sha256=cRKUKMvC0uVompbmPTKwbnQ_N3c0cQDm4J_9H4Y5U18,10129
19
- kiln_ai/adapters/eval/__init__.py,sha256=0ptbK0ZxWuraxGn_WMgmE1tcaq0k5t-g-52kVohvWCg,693
20
- kiln_ai/adapters/eval/base_eval.py,sha256=jVXMiVBC07ZnLEuZVAjUAYewsnuV99put39n_GZcG1M,7261
21
- kiln_ai/adapters/eval/eval_runner.py,sha256=h3DvRFM5J5LDJqaLzNJ-q9i5LRycv2J9Ev5nw1mUDUQ,10806
22
- kiln_ai/adapters/eval/g_eval.py,sha256=d3UcBsZWeDt7cWp4uvDcfG7qdGLsGaZEBsIEqkpiWh4,15253
23
- kiln_ai/adapters/eval/registry.py,sha256=gZ_s0VgEx79Fswkgi1tS4yOl7lzpkvUBJZ62RldhM_w,626
24
- kiln_ai/adapters/eval/test_base_eval.py,sha256=_1CiOUOiBt1R_gGYMcRblrPkHf-H4uIlvfcHj5-Wh7o,10724
25
- kiln_ai/adapters/eval/test_eval_runner.py,sha256=82WPE_frNRTSQ2lylqT0inkqcDgM72nWt8GEuoDkJ7w,18568
26
- kiln_ai/adapters/eval/test_g_eval.py,sha256=-Stx7E0D-WAH1HWrRSp48CiGsf-no1SHeFF9IqVXeMI,16433
27
- kiln_ai/adapters/eval/test_g_eval_data.py,sha256=8caiZfLWnXVX8alrBPrH7L7gqqSS9vO7u6PzcHurQcA,27769
28
- kiln_ai/adapters/fine_tune/__init__.py,sha256=DxdTR60chwgck1aEoVYWyfWi6Ed2ZkdJj0lar-SEAj4,257
29
- kiln_ai/adapters/fine_tune/base_finetune.py,sha256=ORTclQTQYksMWPu7vNoD7wBzOIqNVK0YOwFEnvsKPWA,5759
30
- kiln_ai/adapters/fine_tune/dataset_formatter.py,sha256=qRhSSkMhTWn13OMb6LKPVwAU7uY4bB49GDiVSuhDkNg,14449
31
- kiln_ai/adapters/fine_tune/finetune_registry.py,sha256=CvcEVxtKwjgCMA-oYH9Tpjn1DVWmMzgHpXJOZ0YQA8k,610
32
- kiln_ai/adapters/fine_tune/fireworks_finetune.py,sha256=OlXp8j6Afwvk6-ySwA3Q7iuqBlKO7VLeAfNCnB3pZPI,19963
33
- kiln_ai/adapters/fine_tune/openai_finetune.py,sha256=Dz9E_0BWfrIkvv8ArZe-RKPwbIKPZ3v8rfbc3JELyTY,8571
34
- kiln_ai/adapters/fine_tune/test_base_finetune.py,sha256=sjuDgJDA_dynGRelx9_wXdssaxAYIuEG-Z8NzRx9Hl0,10559
35
- kiln_ai/adapters/fine_tune/test_dataset_formatter.py,sha256=T3jbFZooLVBaGCE0LUVxwPxzM3l8IY41zUj3jPk-Zi8,24027
36
- kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py,sha256=oLyLEG4TwW452lV2mvUo-wImLxzSwOuoKKeYFuGh3k8,36744
37
- kiln_ai/adapters/fine_tune/test_openai_finetune.py,sha256=H63Xk2PNHbt5Ev5IQpdR9JZ4uz-Huo2gfuC4mHHqe0w,20011
38
- kiln_ai/adapters/fine_tune/test_together_finetune.py,sha256=BUJFsyq_g77gU0JN3hg6FMBvqb0DIyTeAek-wxomKIg,18090
39
- kiln_ai/adapters/fine_tune/together_finetune.py,sha256=EbMPsTyKMubfwOalkFLiNFlMFIRKxLibzMTyLeUkle4,14010
40
- kiln_ai/adapters/model_adapters/__init__.py,sha256=m5GRtOHwVVvp_XDOss8c1X3NFf1wQQlC2eBgI4tXQhM,212
41
- kiln_ai/adapters/model_adapters/base_adapter.py,sha256=ifPJMg0nEKamfOSmBIsnp_MRFfBs47FLeQrLbav34yA,9872
42
- kiln_ai/adapters/model_adapters/litellm_adapter.py,sha256=c4J_tIpM96KWS2qzoPaQmBj7X7mHyRMShdkmEh7_EHM,16129
43
- kiln_ai/adapters/model_adapters/litellm_config.py,sha256=7-tIh5cuVu23Uy2Sd6q7UCT_4VgevBsAzVhQMj6Svgw,425
44
- kiln_ai/adapters/model_adapters/test_base_adapter.py,sha256=uQyKrHLN3Jha6R-6SWkEME6brQecVFdPTSXogo-xpt0,6556
45
- kiln_ai/adapters/model_adapters/test_litellm_adapter.py,sha256=QpnzuReNeBzvvRYnNj_5c8l1PS7NyrDDUQx_o21IIH4,13731
46
- kiln_ai/adapters/model_adapters/test_saving_adapter_results.py,sha256=1XFQQxdSIbqSoQEdxHOYJcY0cMb59qpTDPOmL9bW4B8,7870
47
- kiln_ai/adapters/model_adapters/test_structured_output.py,sha256=lHZSuPyvr--WCCEIik5OFqfvufmooPBbbUlSMUVvqmE,12516
48
- kiln_ai/adapters/parsers/__init__.py,sha256=TGJS_8JhjUwg5Bnq4cDmwt5eIRo4vowmcL2A72L1Hzk,202
49
- kiln_ai/adapters/parsers/base_parser.py,sha256=DaoZVEOOuFTMZd5ZTpl_as6-xc9NPWGP2fAmP12J58M,389
50
- kiln_ai/adapters/parsers/json_parser.py,sha256=IszrBrhIFrrVr76UZsuejkBdqpZG27mU72264HVgVzE,1274
51
- kiln_ai/adapters/parsers/parser_registry.py,sha256=G9bAZrnWrR0a82JAQHsSqA2o7-CjrZUBANZljY_6ZxE,623
52
- kiln_ai/adapters/parsers/r1_parser.py,sha256=XHc_dKxiQjj8wG1w__rTmJVqa4fIg5L1g-igbv5Rl_g,2965
53
- kiln_ai/adapters/parsers/test_json_parser.py,sha256=9kdWe_vRC5wjP8A1Ym6Zu6enDIz4ARCNiRpcZr7_3ak,1971
54
- kiln_ai/adapters/parsers/test_parser_registry.py,sha256=S4MdX7cnhCbmeKq8tZwMwRdGWr-019Z-fw5zey9Wm08,1043
55
- kiln_ai/adapters/parsers/test_r1_parser.py,sha256=VvCT_qCAfIbutFsxnpEzyZg-m5XLg7hI-Sorh2PplYw,4898
56
- kiln_ai/adapters/repair/__init__.py,sha256=dOO9MEpEhjiwzDVFg3MNfA2bKMPlax9iekDatpTkX8E,217
57
- kiln_ai/adapters/repair/repair_task.py,sha256=iW0bHWQq6Tir6ULTATWFS0zpwNji8Tbwhm2lZu52RsM,3342
58
- kiln_ai/adapters/repair/test_repair_task.py,sha256=2jO0_aDPzbmZHC0skZBcKp3t9K4gISko3iSGCFHhQRs,7945
59
- kiln_ai/datamodel/__init__.py,sha256=GbRfDrdSq9d_-HxzmFIicTmLO3qz-O3XGvSwDPh3XCk,1957
60
- kiln_ai/datamodel/basemodel.py,sha256=Qsr3Kxq5B5rfPZxQFrfOMTGwInnfYy5srd8nK0nwOs0,22204
61
- kiln_ai/datamodel/datamodel_enums.py,sha256=HUnGI_ZGQqyOicqEFFutZRWSANlQRQwfBu3XhVQFQSc,2270
62
- kiln_ai/datamodel/dataset_filters.py,sha256=hWKxGJ-mSl4y0igyNcpmRoRYCiGrf0_uN4MMU9Fe_ng,3180
63
- kiln_ai/datamodel/dataset_split.py,sha256=q4l4SlUvjLV547bzk7Z-fbmj_o26GDcYOZ2rA5RPh3c,5612
64
- kiln_ai/datamodel/eval.py,sha256=kio2LqQ87MsP75DJTiIVdVfopTZXH4xjGN9g11V1mUU,13826
65
- kiln_ai/datamodel/finetune.py,sha256=TYoNVRAfbjqvrY-1YmHwG6xSoDljiJWuuVcTbvQAJL4,4569
66
- kiln_ai/datamodel/json_schema.py,sha256=qIlR8btXhN-8Yj5GhwebzPLUHPw2sJC3uM1axV2xV7w,3032
67
- kiln_ai/datamodel/model_cache.py,sha256=9X4aAigbkFdytckgw8InCMh86uBna0ME_1HJSeMPEn0,4495
68
- kiln_ai/datamodel/project.py,sha256=uVH2_3TDFtsG_tpts81A-zbd9uPDFxAwMCKZt_km3IE,727
69
- kiln_ai/datamodel/prompt.py,sha256=70JPYHfgyX18cHW_DXoMzIOA28Jbaz6gyabElmpycyc,1161
70
- kiln_ai/datamodel/prompt_id.py,sha256=eU2TV0RZapn-BgnZ4sOSNOOVEQ3aPaLzW4YSYCd3OBo,2531
71
- kiln_ai/datamodel/registry.py,sha256=XwGFXJFKZtOpR1Z9ven6SftggfADdZRm8TFxCEVtfUQ,957
72
- kiln_ai/datamodel/strict_mode.py,sha256=sm4Xka8mnJHCShtbh6MMU5dDQv-cLj8lHgHkmFKpsl0,849
73
- kiln_ai/datamodel/task.py,sha256=r-_zgrQCIiIkN8gvBISdU449Z9oKp7E1XL0lkik_rVI,7036
74
- kiln_ai/datamodel/task_output.py,sha256=uIYR8EyWv8Bbl60gPRuTIUSvfGGzP9Ltc5P280HyTpY,12931
75
- kiln_ai/datamodel/task_run.py,sha256=yquE0jyr_9WzcvrMsEmZfXUnn8zZDEZIXZhVcVBMrT8,7038
76
- kiln_ai/datamodel/test_basemodel.py,sha256=sJ8wXGef2WxzbrbMTYgrOwmkd5J6sHkly-cQBO2IZh4,18126
77
- kiln_ai/datamodel/test_dataset_filters.py,sha256=v88QPkIsq4diUmoUF3-qj5KAW2rLRp0KDAm_pexbFy4,1894
78
- kiln_ai/datamodel/test_dataset_split.py,sha256=5CHO1Lq4xQBB72tV2SPER7OZODJNvj15qxi_cYBV2Rs,11157
79
- kiln_ai/datamodel/test_datasource.py,sha256=H4Kc-Im9eM7WnADWZXdoiOIrOl05RtkyuhTCKiRimyU,3905
80
- kiln_ai/datamodel/test_eval_model.py,sha256=J7MqwWBgPpeXGqh3IacVUUHdZFJSZ2MgTsUNu-hNOJw,19528
81
- kiln_ai/datamodel/test_example_models.py,sha256=fpqh0u7zFhWHcRHgtxCjX8RD2oKHYOP_mJJymaUhEZU,20944
82
- kiln_ai/datamodel/test_json_schema.py,sha256=UgKwAFcdrJTq2byh7Yf-HoSAtiHiGAsNZxfkIvoMxIg,3915
83
- kiln_ai/datamodel/test_model_cache.py,sha256=Fy-ucYNzS5JEG-8SFY4nVHA8iRbXXxai20f8_oGl97o,8184
84
- kiln_ai/datamodel/test_model_perf.py,sha256=NdD7L8XraGkunaEKGPsfYwdcbIgdjhFanOO3G6hU158,3235
85
- kiln_ai/datamodel/test_models.py,sha256=hmV7sTbOamWJCwOY96w-g4PQRv4Uai-XaHtg0QKH-ak,19295
86
- kiln_ai/datamodel/test_nested_save.py,sha256=xciCddqvPyKyoyjC5Lx_3Kh1t4LJv1xYRAPazR3SRcs,5588
87
- kiln_ai/datamodel/test_output_rating.py,sha256=zvPIp2shAgCs2RQBgwYoL09fRA3krHvgAqUa91RlWR0,15125
88
- kiln_ai/datamodel/test_prompt_id.py,sha256=ihyXVPQi0dSLGnBM7rTXRnVaiWXhh7HJmSy4nZZKmso,4225
89
- kiln_ai/datamodel/test_registry.py,sha256=PhS4anLi5Bf_023obuTlO5DALhtPB8WIc_bX12Yg6Po,2705
90
- kiln_ai/datamodel/test_task.py,sha256=FYyoEqJXQIy8rcBsLTdki4-1z9COnZQk1-aoS3ZoNuU,5307
91
- kiln_ai/utils/__init__.py,sha256=PTD0MwBCKAMIOGsTAwsFaJOusTJJoRFTfOGqRvCaU-E,142
92
- kiln_ai/utils/config.py,sha256=kAgb_4nSnb-IWbLVS4FBygYmnHypJADjDEk_Fh-eLeg,8479
93
- kiln_ai/utils/dataset_import.py,sha256=HvTCdK9OO8WE3Runn8_Vsks5KpCTckGIzAA7JKe-cWI,6956
94
- kiln_ai/utils/exhaustive_error.py,sha256=TkkRixIAR3CPEKHeAJzyv0mtxp6BxUBKMvobA3vzQug,262
95
- kiln_ai/utils/formatting.py,sha256=VtB9oag0lOGv17dwT7OPX_3HzBfaU9GsLH-iLete0yM,97
96
- kiln_ai/utils/name_generator.py,sha256=v26TgpCwQbhQFcZvzgjZvURinjrOyyFhxpsI6NQrHKc,1914
97
- kiln_ai/utils/test_config.py,sha256=Jw3nMFeIgZUsZDRJJY2HpB-2EkR2NoZ-rDe_o9oA7ws,9174
98
- kiln_ai/utils/test_dataset_import.py,sha256=ZZOt7zqtaEIlMMx0VNXyRegDvnVqbWY2bcz-iMY_Oag,17427
99
- kiln_ai/utils/test_name_geneator.py,sha256=9-hSTBshyakqlPbFnNcggwLrL7lcPTitauBYHg9jFWI,1513
100
- kiln_ai-0.14.0.dist-info/METADATA,sha256=EjgZOnknE7P9uW5BsIFJZYQAN-aUQ817SAEXjtqtjK0,12231
101
- kiln_ai-0.14.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
102
- kiln_ai-0.14.0.dist-info/licenses/LICENSE.txt,sha256=_NA5pnTYgRRr4qH6lE3X-TuZJ8iRcMUi5ASoGr-lEx8,1209
103
- kiln_ai-0.14.0.dist-info/RECORD,,