kiln-ai 0.17.0__py3-none-any.whl → 0.19.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.
- kiln_ai/adapters/adapter_registry.py +28 -0
- kiln_ai/adapters/chat/chat_formatter.py +0 -1
- kiln_ai/adapters/data_gen/data_gen_prompts.py +121 -36
- kiln_ai/adapters/data_gen/data_gen_task.py +51 -38
- kiln_ai/adapters/data_gen/test_data_gen_task.py +318 -37
- kiln_ai/adapters/eval/base_eval.py +6 -7
- kiln_ai/adapters/eval/eval_runner.py +5 -1
- kiln_ai/adapters/eval/g_eval.py +17 -12
- kiln_ai/adapters/eval/test_base_eval.py +8 -2
- kiln_ai/adapters/eval/test_eval_runner.py +6 -12
- kiln_ai/adapters/eval/test_g_eval.py +115 -5
- kiln_ai/adapters/eval/test_g_eval_data.py +1 -1
- kiln_ai/adapters/fine_tune/base_finetune.py +2 -6
- kiln_ai/adapters/fine_tune/dataset_formatter.py +1 -5
- kiln_ai/adapters/fine_tune/fireworks_finetune.py +32 -20
- kiln_ai/adapters/fine_tune/test_dataset_formatter.py +1 -1
- kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py +30 -21
- kiln_ai/adapters/fine_tune/test_vertex_finetune.py +2 -7
- kiln_ai/adapters/fine_tune/together_finetune.py +1 -1
- kiln_ai/adapters/ml_model_list.py +926 -125
- kiln_ai/adapters/model_adapters/base_adapter.py +11 -7
- kiln_ai/adapters/model_adapters/litellm_adapter.py +23 -1
- kiln_ai/adapters/model_adapters/test_base_adapter.py +1 -2
- kiln_ai/adapters/model_adapters/test_litellm_adapter.py +70 -3
- kiln_ai/adapters/model_adapters/test_structured_output.py +13 -13
- kiln_ai/adapters/parsers/parser_registry.py +0 -2
- kiln_ai/adapters/parsers/r1_parser.py +0 -1
- kiln_ai/adapters/parsers/test_r1_parser.py +1 -1
- kiln_ai/adapters/provider_tools.py +20 -19
- kiln_ai/adapters/remote_config.py +113 -0
- kiln_ai/adapters/repair/repair_task.py +2 -7
- kiln_ai/adapters/test_adapter_registry.py +30 -2
- kiln_ai/adapters/test_ml_model_list.py +30 -0
- kiln_ai/adapters/test_prompt_adaptors.py +0 -4
- kiln_ai/adapters/test_provider_tools.py +18 -12
- kiln_ai/adapters/test_remote_config.py +456 -0
- kiln_ai/datamodel/basemodel.py +54 -28
- kiln_ai/datamodel/datamodel_enums.py +2 -0
- kiln_ai/datamodel/dataset_split.py +5 -3
- kiln_ai/datamodel/eval.py +35 -3
- kiln_ai/datamodel/finetune.py +2 -3
- kiln_ai/datamodel/project.py +3 -3
- kiln_ai/datamodel/prompt.py +2 -2
- kiln_ai/datamodel/prompt_id.py +4 -4
- kiln_ai/datamodel/task.py +6 -6
- kiln_ai/datamodel/task_output.py +1 -3
- kiln_ai/datamodel/task_run.py +0 -2
- kiln_ai/datamodel/test_basemodel.py +210 -18
- kiln_ai/datamodel/test_eval_model.py +152 -10
- kiln_ai/datamodel/test_model_perf.py +1 -1
- kiln_ai/datamodel/test_prompt_id.py +5 -1
- kiln_ai/datamodel/test_task.py +5 -0
- kiln_ai/utils/config.py +10 -0
- kiln_ai/utils/logging.py +4 -3
- {kiln_ai-0.17.0.dist-info → kiln_ai-0.19.0.dist-info}/METADATA +33 -3
- {kiln_ai-0.17.0.dist-info → kiln_ai-0.19.0.dist-info}/RECORD +58 -56
- {kiln_ai-0.17.0.dist-info → kiln_ai-0.19.0.dist-info}/WHEEL +0 -0
- {kiln_ai-0.17.0.dist-info → kiln_ai-0.19.0.dist-info}/licenses/LICENSE.txt +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
from pydantic import ValidationError
|
|
3
3
|
|
|
4
|
-
from kiln_ai.datamodel import BasePrompt
|
|
5
4
|
from kiln_ai.datamodel.basemodel import KilnParentModel
|
|
6
5
|
from kiln_ai.datamodel.eval import (
|
|
7
6
|
Eval,
|
|
@@ -9,11 +8,10 @@ from kiln_ai.datamodel.eval import (
|
|
|
9
8
|
EvalConfigType,
|
|
10
9
|
EvalOutputScore,
|
|
11
10
|
EvalRun,
|
|
11
|
+
EvalTemplateId,
|
|
12
12
|
)
|
|
13
13
|
from kiln_ai.datamodel.task import Task
|
|
14
|
-
from kiln_ai.datamodel.task_output import
|
|
15
|
-
TaskOutputRatingType,
|
|
16
|
-
)
|
|
14
|
+
from kiln_ai.datamodel.task_output import TaskOutputRatingType
|
|
17
15
|
|
|
18
16
|
|
|
19
17
|
@pytest.fixture
|
|
@@ -519,13 +517,13 @@ def test_eval_run_score_keys_must_match(valid_eval_config, valid_eval_run_data):
|
|
|
519
517
|
valid_eval_config.parent = eval
|
|
520
518
|
|
|
521
519
|
# Correct
|
|
522
|
-
|
|
520
|
+
EvalRun(
|
|
523
521
|
parent=valid_eval_config,
|
|
524
522
|
**{**valid_eval_run_data, "scores": {"accuracy": 4.5, "critical": 1.0}},
|
|
525
523
|
)
|
|
526
524
|
|
|
527
525
|
# Correct but wrong order still okay
|
|
528
|
-
|
|
526
|
+
EvalRun(
|
|
529
527
|
parent=valid_eval_config,
|
|
530
528
|
**{**valid_eval_run_data, "scores": {"critical": 1.0, "accuracy": 4.5}},
|
|
531
529
|
)
|
|
@@ -535,7 +533,7 @@ def test_eval_run_score_keys_must_match(valid_eval_config, valid_eval_run_data):
|
|
|
535
533
|
ValueError,
|
|
536
534
|
match="The scores produced by the evaluator must match the scores expected by the eval",
|
|
537
535
|
):
|
|
538
|
-
|
|
536
|
+
EvalRun(
|
|
539
537
|
parent=valid_eval_config,
|
|
540
538
|
**{**valid_eval_run_data, "scores": {"accuracy": 4.5}},
|
|
541
539
|
)
|
|
@@ -545,7 +543,7 @@ def test_eval_run_score_keys_must_match(valid_eval_config, valid_eval_run_data):
|
|
|
545
543
|
ValueError,
|
|
546
544
|
match="The scores produced by the evaluator must match the scores expected by the eval",
|
|
547
545
|
):
|
|
548
|
-
|
|
546
|
+
EvalRun(
|
|
549
547
|
parent=valid_eval_config,
|
|
550
548
|
**{
|
|
551
549
|
**valid_eval_run_data,
|
|
@@ -558,7 +556,7 @@ def test_eval_run_score_keys_must_match(valid_eval_config, valid_eval_run_data):
|
|
|
558
556
|
ValueError,
|
|
559
557
|
match="The scores produced by the evaluator must match the scores expected by the eval",
|
|
560
558
|
):
|
|
561
|
-
|
|
559
|
+
EvalRun(
|
|
562
560
|
parent=valid_eval_config,
|
|
563
561
|
**{**valid_eval_run_data, "scores": {"accuracy": 4.5, "wrong": 1.0}},
|
|
564
562
|
)
|
|
@@ -568,7 +566,7 @@ def test_eval_run_custom_scores_not_allowed(valid_eval_config, valid_eval_run_da
|
|
|
568
566
|
with pytest.raises(
|
|
569
567
|
ValueError, match="Custom scores are not supported in evaluators"
|
|
570
568
|
):
|
|
571
|
-
|
|
569
|
+
Eval(
|
|
572
570
|
name="Test Eval",
|
|
573
571
|
eval_set_filter_id="tag::tag1",
|
|
574
572
|
eval_configs_filter_id="tag::tag2",
|
|
@@ -633,3 +631,147 @@ def test_eval_run_eval_config_eval_validation():
|
|
|
633
631
|
output="test output",
|
|
634
632
|
scores={"score": 1.0},
|
|
635
633
|
)
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
@pytest.mark.parametrize(
|
|
637
|
+
"template_properties,should_raise,expected_error",
|
|
638
|
+
[
|
|
639
|
+
# Valid cases
|
|
640
|
+
(
|
|
641
|
+
{"issue_prompt": "Test issue prompt"},
|
|
642
|
+
False,
|
|
643
|
+
None,
|
|
644
|
+
),
|
|
645
|
+
(
|
|
646
|
+
{
|
|
647
|
+
"issue_prompt": "Test issue prompt",
|
|
648
|
+
"failure_example": "Test failure example",
|
|
649
|
+
},
|
|
650
|
+
False,
|
|
651
|
+
None,
|
|
652
|
+
),
|
|
653
|
+
(
|
|
654
|
+
{
|
|
655
|
+
"issue_prompt": "Test issue prompt",
|
|
656
|
+
"failure_example": "Test failure example",
|
|
657
|
+
"pass_example": "Test pass example",
|
|
658
|
+
},
|
|
659
|
+
False,
|
|
660
|
+
None,
|
|
661
|
+
),
|
|
662
|
+
(
|
|
663
|
+
{
|
|
664
|
+
"issue_prompt": "",
|
|
665
|
+
"failure_example": "",
|
|
666
|
+
"pass_example": "",
|
|
667
|
+
},
|
|
668
|
+
False,
|
|
669
|
+
None,
|
|
670
|
+
),
|
|
671
|
+
# Invalid cases
|
|
672
|
+
(
|
|
673
|
+
{},
|
|
674
|
+
True,
|
|
675
|
+
"issue_prompt is required for issue template",
|
|
676
|
+
),
|
|
677
|
+
(
|
|
678
|
+
{"failure_example": "Test failure example"},
|
|
679
|
+
True,
|
|
680
|
+
"issue_prompt is required for issue template",
|
|
681
|
+
),
|
|
682
|
+
(
|
|
683
|
+
{"issue_prompt": 123},
|
|
684
|
+
True,
|
|
685
|
+
"issue_prompt is required for issue template",
|
|
686
|
+
),
|
|
687
|
+
(
|
|
688
|
+
{
|
|
689
|
+
"issue_prompt": "Test issue prompt",
|
|
690
|
+
"failure_example": 456,
|
|
691
|
+
},
|
|
692
|
+
True,
|
|
693
|
+
"failure_example is optional for issue template, but if provided must be a string",
|
|
694
|
+
),
|
|
695
|
+
(
|
|
696
|
+
{
|
|
697
|
+
"issue_prompt": "Test issue prompt",
|
|
698
|
+
"failure_example": "Test failure example",
|
|
699
|
+
"pass_example": 789,
|
|
700
|
+
},
|
|
701
|
+
True,
|
|
702
|
+
"pass_example is optional for issue template, but if provided must be a string",
|
|
703
|
+
),
|
|
704
|
+
],
|
|
705
|
+
)
|
|
706
|
+
def test_eval_template_properties_issue_template_validation(
|
|
707
|
+
template_properties, should_raise, expected_error
|
|
708
|
+
):
|
|
709
|
+
"""Test issue template validation with various property combinations"""
|
|
710
|
+
if should_raise:
|
|
711
|
+
with pytest.raises(ValueError, match=expected_error):
|
|
712
|
+
Eval(
|
|
713
|
+
name="Test Eval",
|
|
714
|
+
template=EvalTemplateId.issue,
|
|
715
|
+
eval_set_filter_id="tag::tag1",
|
|
716
|
+
eval_configs_filter_id="tag::tag2",
|
|
717
|
+
output_scores=[
|
|
718
|
+
EvalOutputScore(
|
|
719
|
+
name="score",
|
|
720
|
+
type=TaskOutputRatingType.pass_fail,
|
|
721
|
+
)
|
|
722
|
+
],
|
|
723
|
+
template_properties=template_properties,
|
|
724
|
+
)
|
|
725
|
+
else:
|
|
726
|
+
eval = Eval(
|
|
727
|
+
name="Test Eval",
|
|
728
|
+
template=EvalTemplateId.issue,
|
|
729
|
+
eval_set_filter_id="tag::tag1",
|
|
730
|
+
eval_configs_filter_id="tag::tag2",
|
|
731
|
+
output_scores=[
|
|
732
|
+
EvalOutputScore(
|
|
733
|
+
name="score",
|
|
734
|
+
type=TaskOutputRatingType.pass_fail,
|
|
735
|
+
)
|
|
736
|
+
],
|
|
737
|
+
template_properties=template_properties,
|
|
738
|
+
)
|
|
739
|
+
assert eval.template == EvalTemplateId.issue
|
|
740
|
+
for key, value in template_properties.items():
|
|
741
|
+
assert eval.template_properties[key] == value
|
|
742
|
+
|
|
743
|
+
|
|
744
|
+
@pytest.mark.parametrize(
|
|
745
|
+
"template,template_properties",
|
|
746
|
+
[
|
|
747
|
+
(EvalTemplateId.kiln_requirements, {"random_property": "random_value"}),
|
|
748
|
+
(EvalTemplateId.toxicity, {}),
|
|
749
|
+
(EvalTemplateId.bias, {"some_property": 123}),
|
|
750
|
+
(EvalTemplateId.maliciousness, {"test": True}),
|
|
751
|
+
(EvalTemplateId.factual_correctness, {"score": 4.5}),
|
|
752
|
+
(EvalTemplateId.jailbreak, {"prompt": "test"}),
|
|
753
|
+
(
|
|
754
|
+
None,
|
|
755
|
+
{"issue_prompt": "This should not be validated", "failure_example": 123},
|
|
756
|
+
),
|
|
757
|
+
],
|
|
758
|
+
)
|
|
759
|
+
def test_eval_template_properties_non_issue_templates(template, template_properties):
|
|
760
|
+
"""Test that non-issue templates pass validation regardless of template_properties"""
|
|
761
|
+
eval = Eval(
|
|
762
|
+
name="Test Eval",
|
|
763
|
+
template=template,
|
|
764
|
+
eval_set_filter_id="tag::tag1",
|
|
765
|
+
eval_configs_filter_id="tag::tag2",
|
|
766
|
+
output_scores=[
|
|
767
|
+
EvalOutputScore(
|
|
768
|
+
name="score",
|
|
769
|
+
type=TaskOutputRatingType.pass_fail,
|
|
770
|
+
)
|
|
771
|
+
],
|
|
772
|
+
template_properties=template_properties,
|
|
773
|
+
)
|
|
774
|
+
|
|
775
|
+
assert eval.template == template
|
|
776
|
+
for key, value in template_properties.items():
|
|
777
|
+
assert eval.template_properties[key] == value
|
|
@@ -121,6 +121,6 @@ def test_benchmark_load_from_file(benchmark, task_run):
|
|
|
121
121
|
|
|
122
122
|
# I get 8k ops per second on my MBP. Lower value here for CI and parallel testing.
|
|
123
123
|
# Prior to optimization was 290 ops per second.
|
|
124
|
-
|
|
124
|
+
# sys.stdout.write(f"Ops per second: {ops_per_second:.6f}")
|
|
125
125
|
if ops_per_second < 500:
|
|
126
126
|
pytest.fail(f"Ops per second: {ops_per_second:.6f}, expected more than 1k ops")
|
|
@@ -29,7 +29,7 @@ def test_valid_saved_prompt_id():
|
|
|
29
29
|
|
|
30
30
|
def test_valid_fine_tune_prompt_id():
|
|
31
31
|
"""Test that valid fine-tune prompt IDs are accepted"""
|
|
32
|
-
valid_id = "fine_tune_prompt::ft_123456"
|
|
32
|
+
valid_id = "fine_tune_prompt::project_123::task_456::ft_123456"
|
|
33
33
|
model = ModelTester(prompt_id=valid_id)
|
|
34
34
|
assert model.prompt_id == valid_id
|
|
35
35
|
|
|
@@ -53,6 +53,10 @@ def test_invalid_saved_prompt_id_format(invalid_id):
|
|
|
53
53
|
[
|
|
54
54
|
("fine_tune_prompt::", "Invalid fine-tune prompt ID: fine_tune_prompt::"),
|
|
55
55
|
("fine_tune_prompt", "Invalid prompt ID: fine_tune_prompt"),
|
|
56
|
+
(
|
|
57
|
+
"fine_tune_prompt::ft_123456",
|
|
58
|
+
"Invalid fine-tune prompt ID: fine_tune_prompt::ft_123456",
|
|
59
|
+
),
|
|
56
60
|
],
|
|
57
61
|
)
|
|
58
62
|
def test_invalid_fine_tune_prompt_id_format(invalid_id, expected_error):
|
kiln_ai/datamodel/test_task.py
CHANGED
|
@@ -323,3 +323,8 @@ def test_run_config_upgrade_old_entries():
|
|
|
323
323
|
assert parsed.name == "test name"
|
|
324
324
|
assert parsed.created_by == "scosman"
|
|
325
325
|
assert parsed.run_config_properties.structured_output_mode == "unknown"
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
def test_task_name_unicode_name():
|
|
329
|
+
task = Task(name="你好", instruction="Do something")
|
|
330
|
+
assert task.name == "你好"
|
kiln_ai/utils/config.py
CHANGED
|
@@ -124,6 +124,11 @@ class Config:
|
|
|
124
124
|
env_var="WANDB_API_KEY",
|
|
125
125
|
sensitive=True,
|
|
126
126
|
),
|
|
127
|
+
"siliconflow_cn_api_key": ConfigProperty(
|
|
128
|
+
str,
|
|
129
|
+
env_var="SILICONFLOW_CN_API_KEY",
|
|
130
|
+
sensitive=True,
|
|
131
|
+
),
|
|
127
132
|
"wandb_base_url": ConfigProperty(
|
|
128
133
|
str,
|
|
129
134
|
env_var="WANDB_BASE_URL",
|
|
@@ -137,6 +142,11 @@ class Config:
|
|
|
137
142
|
default_lambda=lambda: [],
|
|
138
143
|
sensitive_keys=["api_key"],
|
|
139
144
|
),
|
|
145
|
+
"cerebras_api_key": ConfigProperty(
|
|
146
|
+
str,
|
|
147
|
+
env_var="CEREBRAS_API_KEY",
|
|
148
|
+
sensitive=True,
|
|
149
|
+
),
|
|
140
150
|
}
|
|
141
151
|
self._lock = threading.Lock()
|
|
142
152
|
self._settings = self.load_settings()
|
kiln_ai/utils/logging.py
CHANGED
|
@@ -63,14 +63,14 @@ class CustomLiteLLMLogger(CustomLogger):
|
|
|
63
63
|
# Print the formatted input data for the request in API format, pretty print
|
|
64
64
|
try:
|
|
65
65
|
self.logger.info(
|
|
66
|
-
f"Formatted Input Data (API):\n{json.dumps(data, indent=2)}"
|
|
66
|
+
f"Formatted Input Data (API):\n{json.dumps(data, indent=2, ensure_ascii=False)}"
|
|
67
67
|
)
|
|
68
68
|
except Exception as e:
|
|
69
69
|
self.logger.info(f"Formatted Input Data (API): Could not print {e}")
|
|
70
70
|
|
|
71
71
|
# Print the messages for the request in LiteLLM Message list, pretty print
|
|
72
72
|
try:
|
|
73
|
-
json_messages = json.dumps(messages, indent=2)
|
|
73
|
+
json_messages = json.dumps(messages, indent=2, ensure_ascii=False)
|
|
74
74
|
self.logger.info(f"Messages:\n{json_messages}")
|
|
75
75
|
except Exception as e:
|
|
76
76
|
self.logger.info(f"Messages: Could not print {e}")
|
|
@@ -115,7 +115,7 @@ class CustomLiteLLMLogger(CustomLogger):
|
|
|
115
115
|
# JSON format logs if possible
|
|
116
116
|
json_content = json.loads(content)
|
|
117
117
|
self.logger.info(
|
|
118
|
-
f"Model Response Content:\n{json.dumps(json_content, indent=2)}"
|
|
118
|
+
f"Model Response Content:\n{json.dumps(json_content, indent=2, ensure_ascii=False)}"
|
|
119
119
|
)
|
|
120
120
|
except Exception:
|
|
121
121
|
self.logger.info(f"Model Response Content:\n{content}")
|
|
@@ -149,6 +149,7 @@ def setup_litellm_logging(filename: str = "model_calls.log"):
|
|
|
149
149
|
get_log_file_path(filename),
|
|
150
150
|
maxBytes=5 * 1024 * 1024, # 5MB
|
|
151
151
|
backupCount=3,
|
|
152
|
+
encoding="utf-8",
|
|
152
153
|
)
|
|
153
154
|
|
|
154
155
|
# Set formatter to match the default formatting
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kiln-ai
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.19.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.
|
|
22
|
+
Requires-Dist: litellm>=1.72.6
|
|
23
23
|
Requires-Dist: openai>=1.53.0
|
|
24
24
|
Requires-Dist: pdoc>=15.0.0
|
|
25
25
|
Requires-Dist: pydantic>=2.9.2
|
|
@@ -65,6 +65,7 @@ The library has a [comprehensive set of docs](https://kiln-ai.github.io/Kiln/kil
|
|
|
65
65
|
|
|
66
66
|
## Table of Contents
|
|
67
67
|
|
|
68
|
+
- [Connecting AI Providers](#connecting-ai-providers-openai-openrouter-ollama-etc)
|
|
68
69
|
- [Using the Kiln Data Model](#using-the-kiln-data-model)
|
|
69
70
|
- [Understanding the Kiln Data Model](#understanding-the-kiln-data-model)
|
|
70
71
|
- [Datamodel Overview](#datamodel-overview)
|
|
@@ -73,6 +74,7 @@ The library has a [comprehensive set of docs](https://kiln-ai.github.io/Kiln/kil
|
|
|
73
74
|
- [Using your Kiln Dataset in a Notebook or Project](#using-your-kiln-dataset-in-a-notebook-or-project)
|
|
74
75
|
- [Using Kiln Dataset in Pandas](#using-kiln-dataset-in-pandas)
|
|
75
76
|
- [Building and Running a Kiln Task from Code](#building-and-running-a-kiln-task-from-code)
|
|
77
|
+
- [Tagging Task Runs Programmatically](#tagging-task-runs-programmatically)
|
|
76
78
|
- [Adding Custom Model or AI Provider from Code](#adding-custom-model-or-ai-provider-from-code)
|
|
77
79
|
- [Full API Reference](#full-api-reference)
|
|
78
80
|
|
|
@@ -82,6 +84,12 @@ The library has a [comprehensive set of docs](https://kiln-ai.github.io/Kiln/kil
|
|
|
82
84
|
pip install kiln-ai
|
|
83
85
|
```
|
|
84
86
|
|
|
87
|
+
## Connecting AI Providers (OpenAI, OpenRouter, Ollama, etc)
|
|
88
|
+
|
|
89
|
+
The easiest way to connect AI providers is to use the Kiln app UI. Once connected in the UI, credentials will be stored to `~/.kiln_ai/settings.yml`, which will be available to the library.
|
|
90
|
+
|
|
91
|
+
For configuring credentials from code or connecting custom servers/model, see [Adding Custom Model or AI Provider from Code](#adding-custom-model-or-ai-provider-from-code).
|
|
92
|
+
|
|
85
93
|
## Using the Kiln Data Model
|
|
86
94
|
|
|
87
95
|
### Understanding the Kiln Data Model
|
|
@@ -179,7 +187,10 @@ item = kiln_ai.datamodel.TaskRun(
|
|
|
179
187
|
type=kiln_ai.datamodel.DataSourceType.human,
|
|
180
188
|
properties={"created_by": "Jane Doe"},
|
|
181
189
|
),
|
|
182
|
-
rating=kiln_ai.datamodel.TaskOutputRating(
|
|
190
|
+
rating=kiln_ai.datamodel.TaskOutputRating(
|
|
191
|
+
value=5,
|
|
192
|
+
type=kiln_ai.datamodel.datamodel_enums.five_star,
|
|
193
|
+
),
|
|
183
194
|
),
|
|
184
195
|
)
|
|
185
196
|
item.save_to_file()
|
|
@@ -270,6 +281,25 @@ for run in task.runs():
|
|
|
270
281
|
|
|
271
282
|
```
|
|
272
283
|
|
|
284
|
+
## Tagging Task Runs Programmatically
|
|
285
|
+
|
|
286
|
+
You can also tag your Kiln Task runs programmatically:
|
|
287
|
+
|
|
288
|
+
```py
|
|
289
|
+
# Load your Kiln Task from disk
|
|
290
|
+
task_path = "/Users/youruser/Kiln Projects/test project/tasks/632780983478 - Joke Generator/task.kiln"
|
|
291
|
+
task = kiln_ai.datamodel.Task.load_from_file(task_path)
|
|
292
|
+
|
|
293
|
+
for run in task.runs():
|
|
294
|
+
# Parse the task output from JSON
|
|
295
|
+
output = json.loads(run.output.output)
|
|
296
|
+
|
|
297
|
+
# Add a tag if the punchline is unusually short
|
|
298
|
+
if len(output["punchline"]) < 100:
|
|
299
|
+
run.tags.append("very_short")
|
|
300
|
+
run.save_to_file() # Persist the updated tags
|
|
301
|
+
```
|
|
302
|
+
|
|
273
303
|
### Adding Custom Model or AI Provider from Code
|
|
274
304
|
|
|
275
305
|
You can add additional AI models and providers to Kiln.
|
|
@@ -1,113 +1,115 @@
|
|
|
1
1
|
kiln_ai/__init__.py,sha256=Sc4z8LRVFMwJUoc_DPVUriSXTZ6PO9MaJ80PhRbKyB8,34
|
|
2
2
|
kiln_ai/adapters/__init__.py,sha256=5GTN1bnEWz1NxWrlzsI6CfUio-D1jG74_-fx_PXJkY8,1027
|
|
3
|
-
kiln_ai/adapters/adapter_registry.py,sha256=
|
|
4
|
-
kiln_ai/adapters/ml_model_list.py,sha256=
|
|
3
|
+
kiln_ai/adapters/adapter_registry.py,sha256=K5GdKwtfj4Cgpx1xzI1WS1uAxi12yhfUdjOq9gT7eWA,9725
|
|
4
|
+
kiln_ai/adapters/ml_model_list.py,sha256=cURwa5ovOCkHxx5yCMMl5T7vclbUltaPyOBt__FIxg8,119552
|
|
5
5
|
kiln_ai/adapters/ollama_tools.py,sha256=uObtLWfqKb9RXHN-TGGw2Y1FQlEMe0u8FgszI0zQn6U,3550
|
|
6
6
|
kiln_ai/adapters/prompt_builders.py,sha256=R5IgZ7I2Ftx7i67xQb9UwcHE5gbPxgvgys_UAs3fc6A,15165
|
|
7
|
-
kiln_ai/adapters/provider_tools.py,sha256=
|
|
7
|
+
kiln_ai/adapters/provider_tools.py,sha256=gLRG3s2UTZ_DCOQILXuhTAMmcVgj6e5sIIPPIKZ7dKk,17217
|
|
8
|
+
kiln_ai/adapters/remote_config.py,sha256=qXRjXVoF_f31XomSGdOdFyZL-_fNO66rp8JK5Wji1PE,3954
|
|
8
9
|
kiln_ai/adapters/run_output.py,sha256=RAi2Qp6dmqJVNm3CxbNTdAuhitHfH5NiUGbf6ygUP-k,257
|
|
9
|
-
kiln_ai/adapters/test_adapter_registry.py,sha256=
|
|
10
|
-
kiln_ai/adapters/test_ml_model_list.py,sha256=
|
|
10
|
+
kiln_ai/adapters/test_adapter_registry.py,sha256=QofH8Gzx7tWk3wvzf7HL476xh9GGqwabFmoWZUDE4rA,9415
|
|
11
|
+
kiln_ai/adapters/test_ml_model_list.py,sha256=yoJUTd7TxDU2G_mJmZqX46e0EZgE7z60c71Anm0RiCw,7940
|
|
11
12
|
kiln_ai/adapters/test_ollama_tools.py,sha256=xAUzL0IVmmXadVehJu1WjqbhpKEYGAgGt3pWx7hrubc,2514
|
|
12
|
-
kiln_ai/adapters/test_prompt_adaptors.py,sha256=
|
|
13
|
+
kiln_ai/adapters/test_prompt_adaptors.py,sha256=ikEeaWvBI4OQ_bVRYkUGPtjZIz37Ej2P8bAr85DGYNQ,8180
|
|
13
14
|
kiln_ai/adapters/test_prompt_builders.py,sha256=SqGkluKZd7m7SPuq64NAprG0db11RDqoYai1m-1QgeQ,22585
|
|
14
|
-
kiln_ai/adapters/test_provider_tools.py,sha256=
|
|
15
|
+
kiln_ai/adapters/test_provider_tools.py,sha256=Qts7nt8_9_WP0LPVlEJcwswcbqtVNtIa6u0IGpeQO1Y,32448
|
|
16
|
+
kiln_ai/adapters/test_remote_config.py,sha256=RxAJtTtzonum9LW0nT5HMcwCvhgSZLqjFs8a9gbJkEY,17095
|
|
15
17
|
kiln_ai/adapters/chat/__init__.py,sha256=ELydKUGeCcTiBJogzZUT8VXqr5kDtmoB8_GoyO28qR0,192
|
|
16
|
-
kiln_ai/adapters/chat/chat_formatter.py,sha256=
|
|
18
|
+
kiln_ai/adapters/chat/chat_formatter.py,sha256=lr2zIj-jbZNStaM1VZSvoaN_e6KDKNWiNNPC6RDQ6ug,8321
|
|
17
19
|
kiln_ai/adapters/chat/test_chat_formatter.py,sha256=MVEZTSIFBwLvplOmit-4TDdcmPXsaMZMQEwoXWmq1FI,4603
|
|
18
20
|
kiln_ai/adapters/data_gen/__init__.py,sha256=QTZWaf7kq5BorhPvexJfwDEKmjRmIbhwW9ei8LW2SIs,276
|
|
19
|
-
kiln_ai/adapters/data_gen/data_gen_prompts.py,sha256=
|
|
20
|
-
kiln_ai/adapters/data_gen/data_gen_task.py,sha256=
|
|
21
|
-
kiln_ai/adapters/data_gen/test_data_gen_task.py,sha256=
|
|
21
|
+
kiln_ai/adapters/data_gen/data_gen_prompts.py,sha256=06gqU7uJDBr-G-txeGV9a4_NgKlbxDxhcylWclcVVxg,8792
|
|
22
|
+
kiln_ai/adapters/data_gen/data_gen_task.py,sha256=El-5Dad65JvYkgr9Q40LfdAQ7IUx9BIjxF5c_j8sEq0,7121
|
|
23
|
+
kiln_ai/adapters/data_gen/test_data_gen_task.py,sha256=nIuyJkYWsg9VUaLh95csrx8CnA3d8ivwmPjqTnOoz4Q,21308
|
|
22
24
|
kiln_ai/adapters/eval/__init__.py,sha256=0ptbK0ZxWuraxGn_WMgmE1tcaq0k5t-g-52kVohvWCg,693
|
|
23
|
-
kiln_ai/adapters/eval/base_eval.py,sha256=
|
|
24
|
-
kiln_ai/adapters/eval/eval_runner.py,sha256=
|
|
25
|
-
kiln_ai/adapters/eval/g_eval.py,sha256=
|
|
25
|
+
kiln_ai/adapters/eval/base_eval.py,sha256=g7BWaljeuRquP-ygOBO6jwwzuWyNTYy_QhF0lxZlr-A,7476
|
|
26
|
+
kiln_ai/adapters/eval/eval_runner.py,sha256=W3qBVWBhKQzgxW2jp4ht_WALyjqwDJnsbX9L_85XUDc,8996
|
|
27
|
+
kiln_ai/adapters/eval/g_eval.py,sha256=NVq6iXgKbOG8qimivTciEh2C6lmgrKFXcbNu9yBBeSQ,16304
|
|
26
28
|
kiln_ai/adapters/eval/registry.py,sha256=gZ_s0VgEx79Fswkgi1tS4yOl7lzpkvUBJZ62RldhM_w,626
|
|
27
|
-
kiln_ai/adapters/eval/test_base_eval.py,sha256=
|
|
28
|
-
kiln_ai/adapters/eval/test_eval_runner.py,sha256=
|
|
29
|
-
kiln_ai/adapters/eval/test_g_eval.py,sha256=
|
|
30
|
-
kiln_ai/adapters/eval/test_g_eval_data.py,sha256=
|
|
29
|
+
kiln_ai/adapters/eval/test_base_eval.py,sha256=JRts5jsvD2XMqdegsenVl2yy_sL6ru9W7n9wPEbKD7U,15994
|
|
30
|
+
kiln_ai/adapters/eval/test_eval_runner.py,sha256=vSDlYo_ujB1EReCLUZlcnqNaamG2wB9QRil_X_oTEm0,18587
|
|
31
|
+
kiln_ai/adapters/eval/test_g_eval.py,sha256=4sn0sfZdKHgSW_Y-fbZAE88JAUERl93MhlZxKFkCMiY,21002
|
|
32
|
+
kiln_ai/adapters/eval/test_g_eval_data.py,sha256=9IIQE6YNmf-epogQapJloocTMSpF4dkTIeEEsgF474U,27805
|
|
31
33
|
kiln_ai/adapters/fine_tune/__init__.py,sha256=DxdTR60chwgck1aEoVYWyfWi6Ed2ZkdJj0lar-SEAj4,257
|
|
32
|
-
kiln_ai/adapters/fine_tune/base_finetune.py,sha256=
|
|
33
|
-
kiln_ai/adapters/fine_tune/dataset_formatter.py,sha256=
|
|
34
|
+
kiln_ai/adapters/fine_tune/base_finetune.py,sha256=4mLrFHvERU76_e8bCuOGLTc5UAdFn4UUCuPAe_3uD0Q,5875
|
|
35
|
+
kiln_ai/adapters/fine_tune/dataset_formatter.py,sha256=oWYXOdkRaVZR_mIeox2gLf5_LZJ79hHV9PThk82zHtU,12928
|
|
34
36
|
kiln_ai/adapters/fine_tune/finetune_registry.py,sha256=9RJLjviSoN3dQnKJE9Ss7df7dtdJgbuShB8IUcI-q9k,726
|
|
35
|
-
kiln_ai/adapters/fine_tune/fireworks_finetune.py,sha256=
|
|
37
|
+
kiln_ai/adapters/fine_tune/fireworks_finetune.py,sha256=WuC2zkZQTD6msew81Dd6GMT6OV5mAl33_K9K7Os_OBY,20833
|
|
36
38
|
kiln_ai/adapters/fine_tune/openai_finetune.py,sha256=Dz9E_0BWfrIkvv8ArZe-RKPwbIKPZ3v8rfbc3JELyTY,8571
|
|
37
39
|
kiln_ai/adapters/fine_tune/test_base_finetune.py,sha256=atZI54SC6mVili5dEIuqwv2groLCZWYKSMzDZYjbUxQ,10705
|
|
38
|
-
kiln_ai/adapters/fine_tune/test_dataset_formatter.py,sha256=
|
|
39
|
-
kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py,sha256=
|
|
40
|
+
kiln_ai/adapters/fine_tune/test_dataset_formatter.py,sha256=OmF3jW78FBHvDes6lusY8hWgLLHz5XBgHdDVWv2ccAI,29898
|
|
41
|
+
kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py,sha256=Xq89amS0VyYP8zi8YteTudYHhykEK7-BZXOsIo_7uKE,37146
|
|
40
42
|
kiln_ai/adapters/fine_tune/test_openai_finetune.py,sha256=NtMFo3LZjpAsNHFvIMHsFmWRrHrOKjniRvrZTx4nXhg,20001
|
|
41
43
|
kiln_ai/adapters/fine_tune/test_together_finetune.py,sha256=ZwYmT4pPkhU-45Q-5fs4WL16dQ4OyvI7KXPevsrA24E,18122
|
|
42
|
-
kiln_ai/adapters/fine_tune/test_vertex_finetune.py,sha256=
|
|
43
|
-
kiln_ai/adapters/fine_tune/together_finetune.py,sha256=
|
|
44
|
+
kiln_ai/adapters/fine_tune/test_vertex_finetune.py,sha256=DBQbNUgpqDEvjjk7eHwBvDXPCEkhf4yfUw8QPi5fFPE,19178
|
|
45
|
+
kiln_ai/adapters/fine_tune/together_finetune.py,sha256=KpJBZt0NBNUNLsVEYYC4Dzob1jnlOFQnVI8Q-4kY9d8,14766
|
|
44
46
|
kiln_ai/adapters/fine_tune/vertex_finetune.py,sha256=Ik6Ov711-oruJnMHpVZTPimWJY2W_JnfdKIdR2djGrc,8545
|
|
45
47
|
kiln_ai/adapters/model_adapters/__init__.py,sha256=m5GRtOHwVVvp_XDOss8c1X3NFf1wQQlC2eBgI4tXQhM,212
|
|
46
|
-
kiln_ai/adapters/model_adapters/base_adapter.py,sha256=
|
|
47
|
-
kiln_ai/adapters/model_adapters/litellm_adapter.py,sha256=
|
|
48
|
+
kiln_ai/adapters/model_adapters/base_adapter.py,sha256=9z6i72nX5xIP9cvHFhz47sXl_g2Gv9DPnFjemQUiRSw,13287
|
|
49
|
+
kiln_ai/adapters/model_adapters/litellm_adapter.py,sha256=TGCgCKxJhMEFSgmVRDXwW5OlRnfP8omAAfv2dHMhgks,17938
|
|
48
50
|
kiln_ai/adapters/model_adapters/litellm_config.py,sha256=zOQEkYKeoQ0FIbxTkyyoaGtaQiB9eYK3IuyUgqSwzLE,485
|
|
49
|
-
kiln_ai/adapters/model_adapters/test_base_adapter.py,sha256=
|
|
50
|
-
kiln_ai/adapters/model_adapters/test_litellm_adapter.py,sha256=
|
|
51
|
+
kiln_ai/adapters/model_adapters/test_base_adapter.py,sha256=POHvlGTdZGCZf_ktrds3oBbvT06t5Gp-iGBEGFFN3sA,15958
|
|
52
|
+
kiln_ai/adapters/model_adapters/test_litellm_adapter.py,sha256=28xtjin8RZnf49-3RATtvon05mE4OxTxv0yd0ct1Dhc,19663
|
|
51
53
|
kiln_ai/adapters/model_adapters/test_saving_adapter_results.py,sha256=xkd_b9GS-6ybst97FsS_XrvyTXMlEufYF1Q8CGpE1V8,9697
|
|
52
|
-
kiln_ai/adapters/model_adapters/test_structured_output.py,sha256
|
|
54
|
+
kiln_ai/adapters/model_adapters/test_structured_output.py,sha256=1yYhQDchn3rmC44FMng55ViC-uBmNrqXUxuhwX-CWkc,13860
|
|
53
55
|
kiln_ai/adapters/parsers/__init__.py,sha256=TGJS_8JhjUwg5Bnq4cDmwt5eIRo4vowmcL2A72L1Hzk,202
|
|
54
56
|
kiln_ai/adapters/parsers/base_parser.py,sha256=AE8UYCttmVXbilpICotnDdFYTFhGMiBJHrxIUgPTAWM,280
|
|
55
57
|
kiln_ai/adapters/parsers/json_parser.py,sha256=IszrBrhIFrrVr76UZsuejkBdqpZG27mU72264HVgVzE,1274
|
|
56
|
-
kiln_ai/adapters/parsers/parser_registry.py,sha256=
|
|
57
|
-
kiln_ai/adapters/parsers/r1_parser.py,sha256=
|
|
58
|
+
kiln_ai/adapters/parsers/parser_registry.py,sha256=BbY12zbXj-FgdJ8WqEcBLg26WXoDk2fmriLRo2LYCSk,710
|
|
59
|
+
kiln_ai/adapters/parsers/r1_parser.py,sha256=fbO-Ab2CVj6K756GaLGwNL6kkNqBBq7dWHtenL1oiNI,3559
|
|
58
60
|
kiln_ai/adapters/parsers/request_formatters.py,sha256=NdZO8zcZy9tkea8JaD5c_OeoeVjoYYTG0GjwF812STw,1124
|
|
59
61
|
kiln_ai/adapters/parsers/test_json_parser.py,sha256=9kdWe_vRC5wjP8A1Ym6Zu6enDIz4ARCNiRpcZr7_3ak,1971
|
|
60
62
|
kiln_ai/adapters/parsers/test_parser_registry.py,sha256=FFJQgaKVu67yK4W7w_b26tuEYPPYGppfttJ0y5ctWUo,1041
|
|
61
|
-
kiln_ai/adapters/parsers/test_r1_parser.py,sha256=
|
|
63
|
+
kiln_ai/adapters/parsers/test_r1_parser.py,sha256=gj4N_JZmyBwZRqPDiGY0j30qQ1mrQhGrTuCRAgQv6_M,6306
|
|
62
64
|
kiln_ai/adapters/parsers/test_request_formatters.py,sha256=t3FlKT_Tte2u8zXJTMl8VaE8IrSzumuBysahbGesrbU,2090
|
|
63
65
|
kiln_ai/adapters/repair/__init__.py,sha256=dOO9MEpEhjiwzDVFg3MNfA2bKMPlax9iekDatpTkX8E,217
|
|
64
|
-
kiln_ai/adapters/repair/repair_task.py,sha256=
|
|
66
|
+
kiln_ai/adapters/repair/repair_task.py,sha256=ziOKNo2dT0a4ggLIDk5ETfSTbuxn_xgI60w1Ajd0sww,3286
|
|
65
67
|
kiln_ai/adapters/repair/test_repair_task.py,sha256=fMlad29edA2tTt4t7cv6cXVWhuWOJ9x1Mpb3wJFTD1I,8603
|
|
66
68
|
kiln_ai/datamodel/__init__.py,sha256=eHDUB9ltKmnsx0TAX310o5OMLnZbSznMJLFRnNk6HlA,1927
|
|
67
|
-
kiln_ai/datamodel/basemodel.py,sha256=
|
|
68
|
-
kiln_ai/datamodel/datamodel_enums.py,sha256=
|
|
69
|
+
kiln_ai/datamodel/basemodel.py,sha256=jyB351QSq6ll9JwzxCBaCY1aXNRp5nDF1dBdhVA6KRM,23871
|
|
70
|
+
kiln_ai/datamodel/datamodel_enums.py,sha256=jTICOyCIUJ3hr13T2_CXPLzxgLtSx3JlE4GJ2vPnVKI,3860
|
|
69
71
|
kiln_ai/datamodel/dataset_filters.py,sha256=zXS5QeCqWa1vAxs3Pyy5FJtySx9yYJzxsCMANd23-3c,5502
|
|
70
|
-
kiln_ai/datamodel/dataset_split.py,sha256=
|
|
71
|
-
kiln_ai/datamodel/eval.py,sha256=
|
|
72
|
-
kiln_ai/datamodel/finetune.py,sha256=
|
|
72
|
+
kiln_ai/datamodel/dataset_split.py,sha256=dAqwwNtWhKntEGJtauT0-YDG8aLFISelYS7o8TWG0TE,5923
|
|
73
|
+
kiln_ai/datamodel/eval.py,sha256=xYRSUGxINR-4pZvAUkg8GpemWFlyywtkA707oT3R6OM,15897
|
|
74
|
+
kiln_ai/datamodel/finetune.py,sha256=3cwg9FTbhYDH2DEWS_L8lMS5KPok9mJItWjYHC6LnH0,4835
|
|
73
75
|
kiln_ai/datamodel/json_schema.py,sha256=o50wSp8frRXjT-NZjml4-Is7LNoF7DQP4g3AaaYzBfI,3379
|
|
74
76
|
kiln_ai/datamodel/model_cache.py,sha256=9X4aAigbkFdytckgw8InCMh86uBna0ME_1HJSeMPEn0,4495
|
|
75
|
-
kiln_ai/datamodel/project.py,sha256=
|
|
76
|
-
kiln_ai/datamodel/prompt.py,sha256=
|
|
77
|
-
kiln_ai/datamodel/prompt_id.py,sha256=
|
|
77
|
+
kiln_ai/datamodel/project.py,sha256=xdO0S_pnF1uoTr-DfuF1Xr1tK8WrhbHvXKk6AhfrjB0,778
|
|
78
|
+
kiln_ai/datamodel/prompt.py,sha256=ZvqbycqP3XuEF7lXqCPTXlDHrS0OPZOUhU5T95_ns6M,1210
|
|
79
|
+
kiln_ai/datamodel/prompt_id.py,sha256=oBnU_j8g3Xnj8TJbgQAQfW7I4vcyna-pDxFbiLvPs74,2631
|
|
78
80
|
kiln_ai/datamodel/registry.py,sha256=XwGFXJFKZtOpR1Z9ven6SftggfADdZRm8TFxCEVtfUQ,957
|
|
79
81
|
kiln_ai/datamodel/strict_mode.py,sha256=sm4Xka8mnJHCShtbh6MMU5dDQv-cLj8lHgHkmFKpsl0,849
|
|
80
|
-
kiln_ai/datamodel/task.py,sha256=
|
|
81
|
-
kiln_ai/datamodel/task_output.py,sha256=
|
|
82
|
-
kiln_ai/datamodel/task_run.py,sha256=
|
|
83
|
-
kiln_ai/datamodel/test_basemodel.py,sha256=
|
|
82
|
+
kiln_ai/datamodel/task.py,sha256=rKwPN7xzph94vYvqepTuBpl9mi8E_665i6EwbLtnKDU,9412
|
|
83
|
+
kiln_ai/datamodel/task_output.py,sha256=404qa5jQhdDUzcYj4043v8YERhoHc61AVdaDGsDCY1w,13193
|
|
84
|
+
kiln_ai/datamodel/task_run.py,sha256=rTPqmN0VOiw7P8Fy0cVQXzV7h0sO2-SWqhGsYN0owLU,8759
|
|
85
|
+
kiln_ai/datamodel/test_basemodel.py,sha256=ssa8jZKJHeew2Xx0k9fUPKaCcw-VQKioACNbbPVJo1o,25254
|
|
84
86
|
kiln_ai/datamodel/test_dataset_filters.py,sha256=TFHQZLB0rJxnxsFjD546eXVFxZNAJi0sPZ8j24wYd1w,5322
|
|
85
87
|
kiln_ai/datamodel/test_dataset_split.py,sha256=mXB8udml_6U4BXR0xAGHsFINnhdcTDB1qhuZbQemk-w,11055
|
|
86
88
|
kiln_ai/datamodel/test_datasource.py,sha256=H4Kc-Im9eM7WnADWZXdoiOIrOl05RtkyuhTCKiRimyU,3905
|
|
87
|
-
kiln_ai/datamodel/test_eval_model.py,sha256=
|
|
89
|
+
kiln_ai/datamodel/test_eval_model.py,sha256=WbGWiIP4b6pu-Z117iVNsPLnrpFW2-sj89oOIQ8RLEk,23940
|
|
88
90
|
kiln_ai/datamodel/test_example_models.py,sha256=dwLAAOXLvdKupE5Q1m6VNcHtfdhpi2qWtoEbC0nfJg8,26156
|
|
89
91
|
kiln_ai/datamodel/test_json_schema.py,sha256=R0Cfc9WbieMslgvYsj2HFx8RHIq2fF9NcT5jH-kEqh4,4793
|
|
90
92
|
kiln_ai/datamodel/test_model_cache.py,sha256=Fy-ucYNzS5JEG-8SFY4nVHA8iRbXXxai20f8_oGl97o,8184
|
|
91
|
-
kiln_ai/datamodel/test_model_perf.py,sha256=
|
|
93
|
+
kiln_ai/datamodel/test_model_perf.py,sha256=JcJpedvgK49zj_VIUc5DW0QjuIXhaBQbBpccUJVy2hU,3319
|
|
92
94
|
kiln_ai/datamodel/test_models.py,sha256=wENuBiZ2Y-N_puFkitNZ1T-lBpVgQWotfhGug6k4AMY,21674
|
|
93
95
|
kiln_ai/datamodel/test_nested_save.py,sha256=xciCddqvPyKyoyjC5Lx_3Kh1t4LJv1xYRAPazR3SRcs,5588
|
|
94
96
|
kiln_ai/datamodel/test_output_rating.py,sha256=zvPIp2shAgCs2RQBgwYoL09fRA3krHvgAqUa91RlWR0,15125
|
|
95
|
-
kiln_ai/datamodel/test_prompt_id.py,sha256=
|
|
97
|
+
kiln_ai/datamodel/test_prompt_id.py,sha256=_vcuiDvai8TENb6agk0F9ZsaTrAgoD1VkMxRIT2p9mQ,4384
|
|
96
98
|
kiln_ai/datamodel/test_registry.py,sha256=PhS4anLi5Bf_023obuTlO5DALhtPB8WIc_bX12Yg6Po,2705
|
|
97
|
-
kiln_ai/datamodel/test_task.py,sha256=
|
|
99
|
+
kiln_ai/datamodel/test_task.py,sha256=LdMb2C8emK5vvgE1ACRFRmetWHgXGFgk_dstbgRhO54,12019
|
|
98
100
|
kiln_ai/utils/__init__.py,sha256=PTD0MwBCKAMIOGsTAwsFaJOusTJJoRFTfOGqRvCaU-E,142
|
|
99
101
|
kiln_ai/utils/async_job_runner.py,sha256=1gjoEq5yc2MOVjDo05O1wztguEuMC6l3haDZsltlvuw,3457
|
|
100
|
-
kiln_ai/utils/config.py,sha256=
|
|
102
|
+
kiln_ai/utils/config.py,sha256=GRqq-52F4_ICuWiJzzaIJ-Z77ayqgLbIw3-Gq86zMUY,8852
|
|
101
103
|
kiln_ai/utils/dataset_import.py,sha256=EqBBBopCEUy1JH4-EAsBETwGp4MFjzZGfUUBZ6FLfGY,9011
|
|
102
104
|
kiln_ai/utils/exhaustive_error.py,sha256=TkkRixIAR3CPEKHeAJzyv0mtxp6BxUBKMvobA3vzQug,262
|
|
103
105
|
kiln_ai/utils/formatting.py,sha256=VtB9oag0lOGv17dwT7OPX_3HzBfaU9GsLH-iLete0yM,97
|
|
104
|
-
kiln_ai/utils/logging.py,sha256=
|
|
106
|
+
kiln_ai/utils/logging.py,sha256=ixtv2Mm6-XWB2PVUPAWVRXnPJULvoTDrsp5NTAk3yp0,6815
|
|
105
107
|
kiln_ai/utils/name_generator.py,sha256=v26TgpCwQbhQFcZvzgjZvURinjrOyyFhxpsI6NQrHKc,1914
|
|
106
108
|
kiln_ai/utils/test_async_job_runner.py,sha256=8AwPfOlR09qzfhVm-djpkmuoyHxJJ19QEzs0WV5KFSQ,6813
|
|
107
109
|
kiln_ai/utils/test_config.py,sha256=8goGdVLOO1OiSPnuDLUHbEJWJ8hAjaAIDg0myhR2A00,9687
|
|
108
110
|
kiln_ai/utils/test_dataset_import.py,sha256=BEl38D95HQYpc7_jeB1N-ocOnKM1DLutp669cNrVOuE,25765
|
|
109
111
|
kiln_ai/utils/test_name_geneator.py,sha256=9-hSTBshyakqlPbFnNcggwLrL7lcPTitauBYHg9jFWI,1513
|
|
110
|
-
kiln_ai-0.
|
|
111
|
-
kiln_ai-0.
|
|
112
|
-
kiln_ai-0.
|
|
113
|
-
kiln_ai-0.
|
|
112
|
+
kiln_ai-0.19.0.dist-info/METADATA,sha256=0PTv8ksKamQEk30IKehRIuIQ7TK5LfI0fANyjg8WjKc,13507
|
|
113
|
+
kiln_ai-0.19.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
114
|
+
kiln_ai-0.19.0.dist-info/licenses/LICENSE.txt,sha256=_NA5pnTYgRRr4qH6lE3X-TuZJ8iRcMUi5ASoGr-lEx8,1209
|
|
115
|
+
kiln_ai-0.19.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|