kiln-ai 0.11.1__py3-none-any.whl → 0.13.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kiln-ai might be problematic. Click here for more details.
- kiln_ai/adapters/__init__.py +4 -0
- kiln_ai/adapters/adapter_registry.py +163 -39
- kiln_ai/adapters/data_gen/data_gen_task.py +18 -0
- kiln_ai/adapters/eval/__init__.py +28 -0
- kiln_ai/adapters/eval/base_eval.py +164 -0
- kiln_ai/adapters/eval/eval_runner.py +270 -0
- kiln_ai/adapters/eval/g_eval.py +368 -0
- kiln_ai/adapters/eval/registry.py +16 -0
- kiln_ai/adapters/eval/test_base_eval.py +325 -0
- kiln_ai/adapters/eval/test_eval_runner.py +641 -0
- kiln_ai/adapters/eval/test_g_eval.py +498 -0
- kiln_ai/adapters/eval/test_g_eval_data.py +4 -0
- kiln_ai/adapters/fine_tune/base_finetune.py +16 -2
- kiln_ai/adapters/fine_tune/finetune_registry.py +2 -0
- kiln_ai/adapters/fine_tune/test_dataset_formatter.py +4 -1
- kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py +1 -1
- kiln_ai/adapters/fine_tune/test_openai_finetune.py +1 -1
- kiln_ai/adapters/fine_tune/test_together_finetune.py +531 -0
- kiln_ai/adapters/fine_tune/together_finetune.py +325 -0
- kiln_ai/adapters/ml_model_list.py +758 -163
- kiln_ai/adapters/model_adapters/__init__.py +2 -4
- kiln_ai/adapters/model_adapters/base_adapter.py +61 -43
- kiln_ai/adapters/model_adapters/litellm_adapter.py +391 -0
- kiln_ai/adapters/model_adapters/litellm_config.py +13 -0
- kiln_ai/adapters/model_adapters/test_base_adapter.py +22 -13
- kiln_ai/adapters/model_adapters/test_litellm_adapter.py +407 -0
- kiln_ai/adapters/model_adapters/test_saving_adapter_results.py +41 -19
- kiln_ai/adapters/model_adapters/test_structured_output.py +59 -35
- kiln_ai/adapters/ollama_tools.py +3 -3
- kiln_ai/adapters/parsers/r1_parser.py +19 -14
- kiln_ai/adapters/parsers/test_r1_parser.py +17 -5
- kiln_ai/adapters/prompt_builders.py +80 -42
- kiln_ai/adapters/provider_tools.py +50 -58
- kiln_ai/adapters/repair/repair_task.py +9 -21
- kiln_ai/adapters/repair/test_repair_task.py +6 -6
- kiln_ai/adapters/run_output.py +3 -0
- kiln_ai/adapters/test_adapter_registry.py +26 -29
- kiln_ai/adapters/test_generate_docs.py +4 -4
- kiln_ai/adapters/test_ollama_tools.py +0 -1
- kiln_ai/adapters/test_prompt_adaptors.py +47 -33
- kiln_ai/adapters/test_prompt_builders.py +91 -31
- kiln_ai/adapters/test_provider_tools.py +26 -81
- kiln_ai/datamodel/__init__.py +50 -952
- kiln_ai/datamodel/basemodel.py +2 -0
- kiln_ai/datamodel/datamodel_enums.py +60 -0
- kiln_ai/datamodel/dataset_filters.py +114 -0
- kiln_ai/datamodel/dataset_split.py +170 -0
- kiln_ai/datamodel/eval.py +298 -0
- kiln_ai/datamodel/finetune.py +105 -0
- kiln_ai/datamodel/json_schema.py +7 -1
- kiln_ai/datamodel/project.py +23 -0
- kiln_ai/datamodel/prompt.py +37 -0
- kiln_ai/datamodel/prompt_id.py +83 -0
- kiln_ai/datamodel/strict_mode.py +24 -0
- kiln_ai/datamodel/task.py +181 -0
- kiln_ai/datamodel/task_output.py +328 -0
- kiln_ai/datamodel/task_run.py +164 -0
- kiln_ai/datamodel/test_basemodel.py +19 -11
- kiln_ai/datamodel/test_dataset_filters.py +71 -0
- kiln_ai/datamodel/test_dataset_split.py +32 -8
- kiln_ai/datamodel/test_datasource.py +22 -2
- kiln_ai/datamodel/test_eval_model.py +635 -0
- kiln_ai/datamodel/test_example_models.py +9 -13
- kiln_ai/datamodel/test_json_schema.py +23 -0
- kiln_ai/datamodel/test_models.py +2 -2
- kiln_ai/datamodel/test_prompt_id.py +129 -0
- kiln_ai/datamodel/test_task.py +159 -0
- kiln_ai/utils/config.py +43 -1
- kiln_ai/utils/dataset_import.py +232 -0
- kiln_ai/utils/test_dataset_import.py +596 -0
- {kiln_ai-0.11.1.dist-info → kiln_ai-0.13.0.dist-info}/METADATA +86 -6
- kiln_ai-0.13.0.dist-info/RECORD +103 -0
- kiln_ai/adapters/model_adapters/langchain_adapters.py +0 -302
- kiln_ai/adapters/model_adapters/openai_compatible_config.py +0 -11
- kiln_ai/adapters/model_adapters/openai_model_adapter.py +0 -246
- kiln_ai/adapters/model_adapters/test_langchain_adapter.py +0 -350
- kiln_ai/adapters/model_adapters/test_openai_model_adapter.py +0 -225
- kiln_ai-0.11.1.dist-info/RECORD +0 -76
- {kiln_ai-0.11.1.dist-info → kiln_ai-0.13.0.dist-info}/WHEEL +0 -0
- {kiln_ai-0.11.1.dist-info → kiln_ai-0.13.0.dist-info}/licenses/LICENSE.txt +0 -0
|
@@ -17,12 +17,11 @@ from kiln_ai.adapters.provider_tools import (
|
|
|
17
17
|
finetune_provider_model,
|
|
18
18
|
get_model_and_provider,
|
|
19
19
|
kiln_model_provider_from,
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
lite_llm_config,
|
|
21
|
+
lite_llm_provider_model,
|
|
22
22
|
parse_custom_model_id,
|
|
23
23
|
provider_enabled,
|
|
24
24
|
provider_name_from_id,
|
|
25
|
-
provider_options_for_custom_model,
|
|
26
25
|
provider_warnings,
|
|
27
26
|
)
|
|
28
27
|
from kiln_ai.datamodel import Finetune, StructuredOutputMode, Task
|
|
@@ -186,7 +185,7 @@ def test_get_model_and_provider_valid():
|
|
|
186
185
|
assert provider is not None
|
|
187
186
|
assert model.name == ModelName.phi_3_5
|
|
188
187
|
assert provider.name == ModelProviderName.ollama
|
|
189
|
-
assert provider.
|
|
188
|
+
assert provider.model_id == "phi3.5"
|
|
190
189
|
|
|
191
190
|
|
|
192
191
|
def test_get_model_and_provider_invalid_model():
|
|
@@ -227,7 +226,7 @@ def test_get_model_and_provider_multiple_providers():
|
|
|
227
226
|
assert provider is not None
|
|
228
227
|
assert model.name == ModelName.llama_3_3_70b
|
|
229
228
|
assert provider.name == ModelProviderName.groq
|
|
230
|
-
assert provider.
|
|
229
|
+
assert provider.model_id == "llama-3.3-70b-versatile"
|
|
231
230
|
|
|
232
231
|
|
|
233
232
|
@pytest.mark.asyncio
|
|
@@ -324,59 +323,7 @@ async def test_kiln_model_provider_from_custom_model_valid(mock_config):
|
|
|
324
323
|
assert provider.supports_structured_output is False
|
|
325
324
|
assert provider.supports_data_gen is False
|
|
326
325
|
assert provider.untested_model is True
|
|
327
|
-
assert "
|
|
328
|
-
assert provider.provider_options["model"] == "custom_model"
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
def test_provider_options_for_custom_model_basic():
|
|
332
|
-
"""Test basic case with custom model name"""
|
|
333
|
-
options = provider_options_for_custom_model(
|
|
334
|
-
"custom_model_name", ModelProviderName.openai
|
|
335
|
-
)
|
|
336
|
-
assert options == {"model": "custom_model_name"}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
def test_provider_options_for_custom_model_bedrock():
|
|
340
|
-
"""Test Amazon Bedrock provider options"""
|
|
341
|
-
options = provider_options_for_custom_model(
|
|
342
|
-
ModelName.llama_3_1_8b, ModelProviderName.amazon_bedrock
|
|
343
|
-
)
|
|
344
|
-
assert options == {"model": ModelName.llama_3_1_8b, "region_name": "us-west-2"}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
@pytest.mark.parametrize(
|
|
348
|
-
"provider",
|
|
349
|
-
[
|
|
350
|
-
ModelProviderName.openai,
|
|
351
|
-
ModelProviderName.ollama,
|
|
352
|
-
ModelProviderName.fireworks_ai,
|
|
353
|
-
ModelProviderName.openrouter,
|
|
354
|
-
ModelProviderName.groq,
|
|
355
|
-
],
|
|
356
|
-
)
|
|
357
|
-
def test_provider_options_for_custom_model_simple_providers(provider):
|
|
358
|
-
"""Test providers that just need model name"""
|
|
359
|
-
|
|
360
|
-
options = provider_options_for_custom_model(ModelName.llama_3_1_8b, provider)
|
|
361
|
-
assert options == {"model": ModelName.llama_3_1_8b}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
def test_provider_options_for_custom_model_kiln_fine_tune():
|
|
365
|
-
"""Test that kiln_fine_tune raises appropriate error"""
|
|
366
|
-
with pytest.raises(ValueError) as exc_info:
|
|
367
|
-
provider_options_for_custom_model(
|
|
368
|
-
"model_name", ModelProviderName.kiln_fine_tune
|
|
369
|
-
)
|
|
370
|
-
assert (
|
|
371
|
-
str(exc_info.value)
|
|
372
|
-
== "Fine tuned models should populate provider options via another path"
|
|
373
|
-
)
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
def test_provider_options_for_custom_model_invalid_enum():
|
|
377
|
-
"""Test handling of invalid enum value"""
|
|
378
|
-
with pytest.raises(ValueError):
|
|
379
|
-
provider_options_for_custom_model("model_name", "invalid_enum_value")
|
|
326
|
+
assert provider.model_id == "custom_model"
|
|
380
327
|
|
|
381
328
|
|
|
382
329
|
@pytest.mark.asyncio
|
|
@@ -393,7 +340,7 @@ async def test_kiln_model_provider_from_custom_registry(mock_config):
|
|
|
393
340
|
assert provider.supports_structured_output is False
|
|
394
341
|
assert provider.supports_data_gen is False
|
|
395
342
|
assert provider.untested_model is True
|
|
396
|
-
assert provider.
|
|
343
|
+
assert provider.model_id == "gpt-4-turbo"
|
|
397
344
|
|
|
398
345
|
|
|
399
346
|
@pytest.mark.asyncio
|
|
@@ -412,7 +359,7 @@ async def test_builtin_model_from_valid_model_default_provider(mock_config):
|
|
|
412
359
|
|
|
413
360
|
assert provider is not None
|
|
414
361
|
assert provider.name == ModelProviderName.ollama
|
|
415
|
-
assert provider.
|
|
362
|
+
assert provider.model_id == "phi3.5"
|
|
416
363
|
|
|
417
364
|
|
|
418
365
|
@pytest.mark.asyncio
|
|
@@ -426,7 +373,7 @@ async def test_builtin_model_from_valid_model_specific_provider(mock_config):
|
|
|
426
373
|
|
|
427
374
|
assert provider is not None
|
|
428
375
|
assert provider.name == ModelProviderName.groq
|
|
429
|
-
assert provider.
|
|
376
|
+
assert provider.model_id == "llama-3.3-70b-versatile"
|
|
430
377
|
|
|
431
378
|
|
|
432
379
|
@pytest.mark.asyncio
|
|
@@ -477,7 +424,7 @@ def test_finetune_provider_model_success(mock_project, mock_task, mock_finetune)
|
|
|
477
424
|
provider = finetune_provider_model(model_id)
|
|
478
425
|
|
|
479
426
|
assert provider.name == ModelProviderName.openai
|
|
480
|
-
assert provider.
|
|
427
|
+
assert provider.model_id == "ft:gpt-3.5-turbo:custom:model-123"
|
|
481
428
|
assert provider.structured_output_mode == StructuredOutputMode.json_schema
|
|
482
429
|
|
|
483
430
|
|
|
@@ -573,7 +520,7 @@ def test_finetune_provider_model_structured_mode(
|
|
|
573
520
|
provider = finetune_provider_model("project-123::task-456::finetune-789")
|
|
574
521
|
|
|
575
522
|
assert provider.name == provider_name
|
|
576
|
-
assert provider.
|
|
523
|
+
assert provider.model_id == "fireworks-model-123"
|
|
577
524
|
assert provider.structured_output_mode == expected_mode
|
|
578
525
|
|
|
579
526
|
|
|
@@ -581,69 +528,67 @@ def test_openai_compatible_provider_config(mock_shared_config):
|
|
|
581
528
|
"""Test successful creation of an OpenAI compatible provider"""
|
|
582
529
|
model_id = "test_provider::gpt-4"
|
|
583
530
|
|
|
584
|
-
config =
|
|
531
|
+
config = lite_llm_config(model_id)
|
|
585
532
|
|
|
586
533
|
assert config.provider_name == ModelProviderName.openai_compatible
|
|
587
534
|
assert config.model_name == "gpt-4"
|
|
588
|
-
assert config.
|
|
535
|
+
assert config.additional_body_options == {"api_key": "test-key"}
|
|
589
536
|
assert config.base_url == "https://api.test.com"
|
|
590
537
|
|
|
591
538
|
|
|
592
|
-
def
|
|
539
|
+
def test_litellm_provider_model_success(mock_shared_config):
|
|
593
540
|
"""Test successful creation of an OpenAI compatible provider"""
|
|
594
541
|
model_id = "test_provider::gpt-4"
|
|
595
542
|
|
|
596
|
-
provider =
|
|
543
|
+
provider = lite_llm_provider_model(model_id)
|
|
597
544
|
|
|
598
545
|
assert provider.name == ModelProviderName.openai_compatible
|
|
599
|
-
assert provider.
|
|
600
|
-
"model": model_id,
|
|
601
|
-
}
|
|
546
|
+
assert provider.model_id == model_id
|
|
602
547
|
assert provider.supports_structured_output is False
|
|
603
548
|
assert provider.supports_data_gen is False
|
|
604
549
|
assert provider.untested_model is True
|
|
605
550
|
|
|
606
551
|
|
|
607
|
-
def
|
|
552
|
+
def test_lite_llm_config_no_api_key(mock_shared_config):
|
|
608
553
|
"""Test provider creation without API key (should work as some providers don't require it)"""
|
|
609
554
|
model_id = "no_key_provider::gpt-4"
|
|
610
555
|
|
|
611
|
-
config =
|
|
556
|
+
config = lite_llm_config(model_id)
|
|
612
557
|
|
|
613
558
|
assert config.provider_name == ModelProviderName.openai_compatible
|
|
614
559
|
assert config.model_name == "gpt-4"
|
|
615
|
-
assert config.api_key
|
|
560
|
+
assert config.additional_body_options == {"api_key": None}
|
|
616
561
|
assert config.base_url == "https://api.nokey.com"
|
|
617
562
|
|
|
618
563
|
|
|
619
|
-
def
|
|
564
|
+
def test_lite_llm_config_invalid_id():
|
|
620
565
|
"""Test handling of invalid model ID format"""
|
|
621
566
|
with pytest.raises(ValueError) as exc_info:
|
|
622
|
-
|
|
567
|
+
lite_llm_config("invalid-id-format")
|
|
623
568
|
assert (
|
|
624
569
|
str(exc_info.value) == "Invalid openai compatible model ID: invalid-id-format"
|
|
625
570
|
)
|
|
626
571
|
|
|
627
572
|
|
|
628
|
-
def
|
|
573
|
+
def test_lite_llm_config_no_providers(mock_shared_config):
|
|
629
574
|
"""Test handling when no providers are configured"""
|
|
630
575
|
mock_shared_config.return_value.openai_compatible_providers = None
|
|
631
576
|
|
|
632
577
|
with pytest.raises(ValueError) as exc_info:
|
|
633
|
-
|
|
578
|
+
lite_llm_config("test_provider::gpt-4")
|
|
634
579
|
assert str(exc_info.value) == "OpenAI compatible provider test_provider not found"
|
|
635
580
|
|
|
636
581
|
|
|
637
|
-
def
|
|
582
|
+
def test_lite_llm_config_provider_not_found(mock_shared_config):
|
|
638
583
|
"""Test handling of non-existent provider"""
|
|
639
584
|
with pytest.raises(ValueError) as exc_info:
|
|
640
|
-
|
|
585
|
+
lite_llm_config("unknown_provider::gpt-4")
|
|
641
586
|
assert (
|
|
642
587
|
str(exc_info.value) == "OpenAI compatible provider unknown_provider not found"
|
|
643
588
|
)
|
|
644
589
|
|
|
645
590
|
|
|
646
|
-
def
|
|
591
|
+
def test_lite_llm_config_no_base_url(mock_shared_config):
|
|
647
592
|
"""Test handling of provider without base URL"""
|
|
648
593
|
mock_shared_config.return_value.openai_compatible_providers = [
|
|
649
594
|
{
|
|
@@ -653,7 +598,7 @@ def test_openai_compatible_config_no_base_url(mock_shared_config):
|
|
|
653
598
|
]
|
|
654
599
|
|
|
655
600
|
with pytest.raises(ValueError) as exc_info:
|
|
656
|
-
|
|
601
|
+
lite_llm_config("test_provider::gpt-4")
|
|
657
602
|
assert (
|
|
658
603
|
str(exc_info.value)
|
|
659
604
|
== "OpenAI compatible provider test_provider has no base URL"
|