kiln-ai 0.18.0__py3-none-any.whl → 0.20.1__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (89) hide show
  1. kiln_ai/adapters/__init__.py +2 -2
  2. kiln_ai/adapters/adapter_registry.py +46 -0
  3. kiln_ai/adapters/chat/chat_formatter.py +8 -12
  4. kiln_ai/adapters/chat/test_chat_formatter.py +6 -2
  5. kiln_ai/adapters/data_gen/data_gen_task.py +2 -2
  6. kiln_ai/adapters/data_gen/test_data_gen_task.py +7 -3
  7. kiln_ai/adapters/docker_model_runner_tools.py +119 -0
  8. kiln_ai/adapters/eval/base_eval.py +2 -2
  9. kiln_ai/adapters/eval/eval_runner.py +3 -1
  10. kiln_ai/adapters/eval/g_eval.py +2 -2
  11. kiln_ai/adapters/eval/test_base_eval.py +1 -1
  12. kiln_ai/adapters/eval/test_eval_runner.py +6 -12
  13. kiln_ai/adapters/eval/test_g_eval.py +3 -4
  14. kiln_ai/adapters/eval/test_g_eval_data.py +1 -1
  15. kiln_ai/adapters/fine_tune/__init__.py +1 -1
  16. kiln_ai/adapters/fine_tune/base_finetune.py +1 -0
  17. kiln_ai/adapters/fine_tune/fireworks_finetune.py +32 -20
  18. kiln_ai/adapters/fine_tune/openai_finetune.py +14 -4
  19. kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py +30 -21
  20. kiln_ai/adapters/fine_tune/test_openai_finetune.py +108 -111
  21. kiln_ai/adapters/ml_model_list.py +1009 -111
  22. kiln_ai/adapters/model_adapters/base_adapter.py +62 -28
  23. kiln_ai/adapters/model_adapters/litellm_adapter.py +397 -80
  24. kiln_ai/adapters/model_adapters/test_base_adapter.py +194 -18
  25. kiln_ai/adapters/model_adapters/test_litellm_adapter.py +428 -4
  26. kiln_ai/adapters/model_adapters/test_litellm_adapter_tools.py +1103 -0
  27. kiln_ai/adapters/model_adapters/test_saving_adapter_results.py +5 -5
  28. kiln_ai/adapters/model_adapters/test_structured_output.py +120 -14
  29. kiln_ai/adapters/parsers/__init__.py +1 -1
  30. kiln_ai/adapters/parsers/test_r1_parser.py +1 -1
  31. kiln_ai/adapters/provider_tools.py +35 -20
  32. kiln_ai/adapters/remote_config.py +57 -10
  33. kiln_ai/adapters/repair/repair_task.py +1 -1
  34. kiln_ai/adapters/repair/test_repair_task.py +12 -9
  35. kiln_ai/adapters/run_output.py +3 -0
  36. kiln_ai/adapters/test_adapter_registry.py +109 -2
  37. kiln_ai/adapters/test_docker_model_runner_tools.py +305 -0
  38. kiln_ai/adapters/test_ml_model_list.py +51 -1
  39. kiln_ai/adapters/test_prompt_adaptors.py +13 -6
  40. kiln_ai/adapters/test_provider_tools.py +73 -12
  41. kiln_ai/adapters/test_remote_config.py +470 -16
  42. kiln_ai/datamodel/__init__.py +23 -21
  43. kiln_ai/datamodel/basemodel.py +54 -28
  44. kiln_ai/datamodel/datamodel_enums.py +3 -0
  45. kiln_ai/datamodel/dataset_split.py +5 -3
  46. kiln_ai/datamodel/eval.py +4 -4
  47. kiln_ai/datamodel/external_tool_server.py +298 -0
  48. kiln_ai/datamodel/finetune.py +2 -2
  49. kiln_ai/datamodel/json_schema.py +25 -10
  50. kiln_ai/datamodel/project.py +11 -4
  51. kiln_ai/datamodel/prompt.py +2 -2
  52. kiln_ai/datamodel/prompt_id.py +4 -4
  53. kiln_ai/datamodel/registry.py +0 -15
  54. kiln_ai/datamodel/run_config.py +62 -0
  55. kiln_ai/datamodel/task.py +8 -83
  56. kiln_ai/datamodel/task_output.py +7 -2
  57. kiln_ai/datamodel/task_run.py +41 -0
  58. kiln_ai/datamodel/test_basemodel.py +213 -21
  59. kiln_ai/datamodel/test_eval_model.py +6 -6
  60. kiln_ai/datamodel/test_example_models.py +175 -0
  61. kiln_ai/datamodel/test_external_tool_server.py +691 -0
  62. kiln_ai/datamodel/test_model_perf.py +1 -1
  63. kiln_ai/datamodel/test_prompt_id.py +5 -1
  64. kiln_ai/datamodel/test_registry.py +8 -3
  65. kiln_ai/datamodel/test_task.py +20 -47
  66. kiln_ai/datamodel/test_tool_id.py +239 -0
  67. kiln_ai/datamodel/tool_id.py +83 -0
  68. kiln_ai/tools/__init__.py +8 -0
  69. kiln_ai/tools/base_tool.py +82 -0
  70. kiln_ai/tools/built_in_tools/__init__.py +13 -0
  71. kiln_ai/tools/built_in_tools/math_tools.py +124 -0
  72. kiln_ai/tools/built_in_tools/test_math_tools.py +204 -0
  73. kiln_ai/tools/mcp_server_tool.py +95 -0
  74. kiln_ai/tools/mcp_session_manager.py +243 -0
  75. kiln_ai/tools/test_base_tools.py +199 -0
  76. kiln_ai/tools/test_mcp_server_tool.py +457 -0
  77. kiln_ai/tools/test_mcp_session_manager.py +1585 -0
  78. kiln_ai/tools/test_tool_registry.py +473 -0
  79. kiln_ai/tools/tool_registry.py +64 -0
  80. kiln_ai/utils/config.py +32 -0
  81. kiln_ai/utils/open_ai_types.py +94 -0
  82. kiln_ai/utils/project_utils.py +17 -0
  83. kiln_ai/utils/test_config.py +138 -1
  84. kiln_ai/utils/test_open_ai_types.py +131 -0
  85. {kiln_ai-0.18.0.dist-info → kiln_ai-0.20.1.dist-info}/METADATA +37 -6
  86. kiln_ai-0.20.1.dist-info/RECORD +138 -0
  87. kiln_ai-0.18.0.dist-info/RECORD +0 -115
  88. {kiln_ai-0.18.0.dist-info → kiln_ai-0.20.1.dist-info}/WHEEL +0 -0
  89. {kiln_ai-0.18.0.dist-info → kiln_ai-0.20.1.dist-info}/licenses/LICENSE.txt +0 -0
@@ -34,6 +34,11 @@ class ModelFamily(str, Enum):
34
34
  dolphin = "dolphin"
35
35
  grok = "grok"
36
36
  kimi = "kimi"
37
+ hunyuan = "hunyuan"
38
+ glm = "glm"
39
+ ernie = "ernie"
40
+ minimax = "minimax"
41
+ pangu = "pangu"
37
42
 
38
43
 
39
44
  # Where models have instruct and raw versions, instruct is default and raw is specified
@@ -53,6 +58,10 @@ class ModelName(str, Enum):
53
58
  llama_3_3_70b = "llama_3_3_70b"
54
59
  llama_4_maverick = "llama_4_maverick"
55
60
  llama_4_scout = "llama_4_scout"
61
+ gpt_5 = "gpt_5"
62
+ gpt_5_chat = "gpt_5_chat"
63
+ gpt_5_mini = "gpt_5_mini"
64
+ gpt_5_nano = "gpt_5_nano"
56
65
  gpt_4o_mini = "gpt_4o_mini"
57
66
  gpt_4o = "gpt_4o"
58
67
  gpt_4_1 = "gpt_4_1"
@@ -61,6 +70,8 @@ class ModelName(str, Enum):
61
70
  gpt_o3_low = "gpt_o3_low"
62
71
  gpt_o3_medium = "gpt_o3_medium"
63
72
  gpt_o3_high = "gpt_o3_high"
73
+ gpt_oss_20b = "gpt_oss_20b"
74
+ gpt_oss_120b = "gpt_oss_120b"
64
75
  gpt_o1_low = "gpt_o1_low"
65
76
  gpt_o1_medium = "gpt_o1_medium"
66
77
  gpt_o1_high = "gpt_o1_high"
@@ -82,6 +93,7 @@ class ModelName(str, Enum):
82
93
  gemma_2_2b = "gemma_2_2b"
83
94
  gemma_2_9b = "gemma_2_9b"
84
95
  gemma_2_27b = "gemma_2_27b"
96
+ gemma_3_0p27b = "gemma_3_0p27b"
85
97
  gemma_3_1b = "gemma_3_1b"
86
98
  gemma_3_4b = "gemma_3_4b"
87
99
  gemma_3_12b = "gemma_3_12b"
@@ -108,9 +120,11 @@ class ModelName(str, Enum):
108
120
  qwen_2p5_14b = "qwen_2p5_14b"
109
121
  qwen_2p5_72b = "qwen_2p5_72b"
110
122
  qwq_32b = "qwq_32b"
123
+ deepseek_3_1 = "deepseek_3_1"
111
124
  deepseek_3 = "deepseek_3"
112
125
  deepseek_r1 = "deepseek_r1"
113
126
  deepseek_r1_0528 = "deepseek_r1_0528"
127
+ deepseek_r1_0528_distill_qwen3_8b = "deepseek_r1_0528_distill_qwen3_8b"
114
128
  deepseek_r1_distill_qwen_32b = "deepseek_r1_distill_qwen_32b"
115
129
  deepseek_r1_distill_llama_70b = "deepseek_r1_distill_llama_70b"
116
130
  deepseek_r1_distill_qwen_14b = "deepseek_r1_distill_qwen_14b"
@@ -132,13 +146,29 @@ class ModelName(str, Enum):
132
146
  qwen_3_8b_no_thinking = "qwen_3_8b_no_thinking"
133
147
  qwen_3_14b = "qwen_3_14b"
134
148
  qwen_3_14b_no_thinking = "qwen_3_14b_no_thinking"
149
+ qwen_3_30b_a3b_2507 = "qwen_3_30b_a3b_2507"
135
150
  qwen_3_30b_a3b = "qwen_3_30b_a3b"
151
+ qwen_3_30b_a3b_2507_no_thinking = "qwen_3_30b_a3b_2507_no_thinking"
136
152
  qwen_3_30b_a3b_no_thinking = "qwen_3_30b_a3b_no_thinking"
137
153
  qwen_3_32b = "qwen_3_32b"
138
154
  qwen_3_32b_no_thinking = "qwen_3_32b_no_thinking"
155
+ qwen_3_235b_a22b_2507 = "qwen_3_235b_a22b_2507"
139
156
  qwen_3_235b_a22b = "qwen_3_235b_a22b"
157
+ qwen_3_235b_a22b_2507_no_thinking = "qwen_3_235b_a22b_2507_no_thinking"
140
158
  qwen_3_235b_a22b_no_thinking = "qwen_3_235b_a22b_no_thinking"
159
+ qwen_long_l1_32b = "qwen_long_l1_32b"
141
160
  kimi_k2 = "kimi_k2"
161
+ kimi_dev_72b = "kimi_dev_72b"
162
+ glm_4_5 = "glm_4_5"
163
+ glm_4_5_air = "glm_4_5_air"
164
+ glm_4_1v_9b_thinking = "glm_4_1v_9b_thinking"
165
+ glm_z1_32b_0414 = "glm_z1_32b_0414"
166
+ glm_z1_9b_0414 = "glm_z1_9b_0414"
167
+ ernie_4_5_300b_a47b = "ernie_4_5_300b_a47b"
168
+ hunyuan_a13b = "hunyuan_a13b"
169
+ hunyuan_a13b_no_thinking = "hunyuan_a13b_no_thinking"
170
+ minimax_m1_80k = "minimax_m1_80k"
171
+ pangu_pro_moe_72b_a16b = "pangu_pro_moe_72b_a16b"
142
172
 
143
173
 
144
174
  class ModelParserID(str, Enum):
@@ -187,11 +217,12 @@ class KilnModelProvider(BaseModel):
187
217
  reasoning_capable: bool = False
188
218
  supports_logprobs: bool = False
189
219
  suggested_for_evals: bool = False
220
+ supports_function_calling: bool = True
190
221
  uncensored: bool = False
191
222
  suggested_for_uncensored_data_gen: bool = False
192
223
  tuned_chat_strategy: ChatStrategy | None = None
193
224
 
194
- # TODO P1: Need a more generalized way to handle custom provider parameters.
225
+ # We need a more generalized way to handle custom provider parameters.
195
226
  # Making them quite declarative here for now, isolating provider specific logic
196
227
  # to this file. Later I should be able to override anything in this file via config.
197
228
  r1_openrouter_options: bool = False
@@ -201,6 +232,16 @@ class KilnModelProvider(BaseModel):
201
232
  thinking_level: Literal["low", "medium", "high"] | None = None
202
233
  ollama_model_aliases: List[str] | None = None
203
234
  anthropic_extended_thinking: bool = False
235
+ gemini_reasoning_enabled: bool = False
236
+
237
+ # some models on siliconflow allow dynamically disabling thinking
238
+ # currently only supported by Qwen3 and tencent/Hunyuan-A13B-Instruct
239
+ # ref: https://docs.siliconflow.cn/cn/api-reference/chat-completions/chat-completions
240
+ siliconflow_enable_thinking: bool | None = None
241
+ # enable this flag to make reasoning optional for structured output
242
+ # some reasoning models on siliconflow do not return any reasoning for structured output
243
+ # this is not uniform nor documented, so we need to test each model
244
+ reasoning_optional_for_structured_output: bool | None = None
204
245
 
205
246
 
206
247
  class KilnModel(BaseModel):
@@ -222,6 +263,83 @@ class KilnModel(BaseModel):
222
263
 
223
264
 
224
265
  built_in_models: List[KilnModel] = [
266
+ # GPT 5
267
+ KilnModel(
268
+ family=ModelFamily.gpt,
269
+ name=ModelName.gpt_5,
270
+ friendly_name="GPT-5",
271
+ providers=[
272
+ KilnModelProvider(
273
+ name=ModelProviderName.openai,
274
+ model_id="gpt-5",
275
+ structured_output_mode=StructuredOutputMode.json_schema,
276
+ suggested_for_data_gen=True,
277
+ suggested_for_evals=True,
278
+ ),
279
+ KilnModelProvider(
280
+ name=ModelProviderName.openrouter,
281
+ model_id="openai/gpt-5",
282
+ structured_output_mode=StructuredOutputMode.json_schema,
283
+ suggested_for_data_gen=True,
284
+ suggested_for_evals=True,
285
+ ),
286
+ ],
287
+ ),
288
+ # GPT 5 Mini
289
+ KilnModel(
290
+ family=ModelFamily.gpt,
291
+ name=ModelName.gpt_5_mini,
292
+ friendly_name="GPT-5 Mini",
293
+ providers=[
294
+ KilnModelProvider(
295
+ name=ModelProviderName.openai,
296
+ model_id="gpt-5-mini",
297
+ structured_output_mode=StructuredOutputMode.json_schema,
298
+ suggested_for_evals=True,
299
+ suggested_for_data_gen=True,
300
+ ),
301
+ KilnModelProvider(
302
+ name=ModelProviderName.openrouter,
303
+ model_id="openai/gpt-5-mini",
304
+ structured_output_mode=StructuredOutputMode.json_schema,
305
+ suggested_for_evals=True,
306
+ suggested_for_data_gen=True,
307
+ ),
308
+ ],
309
+ ),
310
+ # GPT 5 Nano
311
+ KilnModel(
312
+ family=ModelFamily.gpt,
313
+ name=ModelName.gpt_5_nano,
314
+ friendly_name="GPT-5 Nano",
315
+ providers=[
316
+ KilnModelProvider(
317
+ name=ModelProviderName.openai,
318
+ model_id="gpt-5-nano",
319
+ structured_output_mode=StructuredOutputMode.json_schema,
320
+ ),
321
+ KilnModelProvider(
322
+ name=ModelProviderName.openrouter,
323
+ model_id="openai/gpt-5-nano",
324
+ structured_output_mode=StructuredOutputMode.json_schema,
325
+ ),
326
+ ],
327
+ ),
328
+ # GPT 5 Chat
329
+ KilnModel(
330
+ family=ModelFamily.gpt,
331
+ name=ModelName.gpt_5_chat,
332
+ friendly_name="GPT-5 Chat",
333
+ providers=[
334
+ KilnModelProvider(
335
+ name=ModelProviderName.openai,
336
+ model_id="gpt-5-chat-latest",
337
+ # Oddly no json_schema support for this model.
338
+ structured_output_mode=StructuredOutputMode.json_instruction_and_object,
339
+ supports_function_calling=False,
340
+ ),
341
+ ],
342
+ ),
225
343
  # GPT 4.1
226
344
  KilnModel(
227
345
  family=ModelFamily.gpt,
@@ -234,22 +352,22 @@ built_in_models: List[KilnModel] = [
234
352
  provider_finetune_id="gpt-4.1-2025-04-14",
235
353
  structured_output_mode=StructuredOutputMode.json_schema,
236
354
  supports_logprobs=True,
237
- suggested_for_data_gen=True,
238
355
  suggested_for_evals=True,
356
+ suggested_for_data_gen=True,
239
357
  ),
240
358
  KilnModelProvider(
241
359
  name=ModelProviderName.openrouter,
242
360
  model_id="openai/gpt-4.1",
243
361
  structured_output_mode=StructuredOutputMode.json_schema,
244
362
  supports_logprobs=True,
245
- suggested_for_data_gen=True,
246
363
  suggested_for_evals=True,
364
+ suggested_for_data_gen=True,
247
365
  ),
248
366
  KilnModelProvider(
249
367
  name=ModelProviderName.azure_openai,
250
368
  model_id="gpt-4.1",
251
- suggested_for_data_gen=True,
252
369
  suggested_for_evals=True,
370
+ suggested_for_data_gen=True,
253
371
  ),
254
372
  ],
255
373
  ),
@@ -289,6 +407,7 @@ built_in_models: List[KilnModel] = [
289
407
  model_id="gpt-4.1-nano",
290
408
  structured_output_mode=StructuredOutputMode.json_schema,
291
409
  supports_logprobs=True,
410
+ provider_finetune_id="gpt-4.1-nano-2025-04-14",
292
411
  ),
293
412
  KilnModelProvider(
294
413
  name=ModelProviderName.openrouter,
@@ -550,6 +669,70 @@ built_in_models: List[KilnModel] = [
550
669
  ),
551
670
  ],
552
671
  ),
672
+ # GPT OSS 120B
673
+ KilnModel(
674
+ family=ModelFamily.gpt,
675
+ name=ModelName.gpt_oss_120b,
676
+ friendly_name="GPT OSS 120B",
677
+ providers=[
678
+ KilnModelProvider(
679
+ name=ModelProviderName.openrouter,
680
+ model_id="openai/gpt-oss-120b",
681
+ structured_output_mode=StructuredOutputMode.json_instructions,
682
+ reasoning_capable=True,
683
+ require_openrouter_reasoning=True,
684
+ ),
685
+ KilnModelProvider(
686
+ name=ModelProviderName.groq,
687
+ model_id="openai/gpt-oss-120b",
688
+ structured_output_mode=StructuredOutputMode.json_instructions,
689
+ ),
690
+ KilnModelProvider(
691
+ name=ModelProviderName.fireworks_ai,
692
+ model_id="accounts/fireworks/models/gpt-oss-120b",
693
+ structured_output_mode=StructuredOutputMode.json_instructions,
694
+ reasoning_capable=True,
695
+ ),
696
+ KilnModelProvider(
697
+ name=ModelProviderName.ollama,
698
+ model_id="gpt-oss:120b",
699
+ structured_output_mode=StructuredOutputMode.json_instructions,
700
+ reasoning_capable=True,
701
+ ),
702
+ ],
703
+ ),
704
+ # GPT OSS 20B
705
+ KilnModel(
706
+ family=ModelFamily.gpt,
707
+ name=ModelName.gpt_oss_20b,
708
+ friendly_name="GPT OSS 20B",
709
+ providers=[
710
+ KilnModelProvider(
711
+ name=ModelProviderName.openrouter,
712
+ model_id="openai/gpt-oss-20b",
713
+ structured_output_mode=StructuredOutputMode.json_instructions,
714
+ reasoning_capable=True,
715
+ require_openrouter_reasoning=True,
716
+ ),
717
+ KilnModelProvider(
718
+ name=ModelProviderName.groq,
719
+ model_id="openai/gpt-oss-20b",
720
+ structured_output_mode=StructuredOutputMode.json_instructions,
721
+ ),
722
+ KilnModelProvider(
723
+ name=ModelProviderName.fireworks_ai,
724
+ model_id="accounts/fireworks/models/gpt-oss-20b",
725
+ structured_output_mode=StructuredOutputMode.json_instructions,
726
+ reasoning_capable=True,
727
+ ),
728
+ KilnModelProvider(
729
+ name=ModelProviderName.ollama,
730
+ model_id="gpt-oss:20b",
731
+ structured_output_mode=StructuredOutputMode.json_instructions,
732
+ reasoning_capable=True,
733
+ ),
734
+ ],
735
+ ),
553
736
  # GPT o1 Low
554
737
  KilnModel(
555
738
  family=ModelFamily.gpt,
@@ -633,26 +816,25 @@ built_in_models: List[KilnModel] = [
633
816
  ),
634
817
  ],
635
818
  ),
636
- # Claude 3.5 Sonnet
819
+ # Claude Sonnet 4
637
820
  KilnModel(
638
821
  family=ModelFamily.claude,
639
- name=ModelName.claude_3_5_sonnet,
640
- friendly_name="Claude 3.5 Sonnet",
822
+ name=ModelName.claude_sonnet_4,
823
+ friendly_name="Claude 4 Sonnet",
641
824
  providers=[
642
825
  KilnModelProvider(
643
826
  name=ModelProviderName.openrouter,
827
+ model_id="anthropic/claude-sonnet-4",
644
828
  structured_output_mode=StructuredOutputMode.function_calling,
645
- model_id="anthropic/claude-3.5-sonnet",
829
+ suggested_for_data_gen=True,
830
+ suggested_for_evals=True,
646
831
  ),
647
832
  KilnModelProvider(
648
833
  name=ModelProviderName.anthropic,
649
- model_id="claude-3-5-sonnet-20241022",
834
+ model_id="claude-sonnet-4-20250514",
650
835
  structured_output_mode=StructuredOutputMode.function_calling,
651
- ),
652
- KilnModelProvider(
653
- name=ModelProviderName.vertex,
654
- model_id="claude-3-5-sonnet",
655
- structured_output_mode=StructuredOutputMode.function_calling_weak,
836
+ suggested_for_data_gen=True,
837
+ suggested_for_evals=True,
656
838
  ),
657
839
  ],
658
840
  ),
@@ -697,25 +879,26 @@ built_in_models: List[KilnModel] = [
697
879
  ),
698
880
  ],
699
881
  ),
700
- # Claude Sonnet 4
882
+ # Claude 3.5 Sonnet
701
883
  KilnModel(
702
884
  family=ModelFamily.claude,
703
- name=ModelName.claude_sonnet_4,
704
- friendly_name="Claude Sonnet 4",
885
+ name=ModelName.claude_3_5_sonnet,
886
+ friendly_name="Claude 3.5 Sonnet",
705
887
  providers=[
706
888
  KilnModelProvider(
707
889
  name=ModelProviderName.openrouter,
708
- model_id="anthropic/claude-sonnet-4",
709
890
  structured_output_mode=StructuredOutputMode.function_calling,
710
- suggested_for_data_gen=True,
711
- suggested_for_evals=True,
891
+ model_id="anthropic/claude-3.5-sonnet",
712
892
  ),
713
893
  KilnModelProvider(
714
894
  name=ModelProviderName.anthropic,
715
- model_id="claude-sonnet-4-20250514",
895
+ model_id="claude-3-5-sonnet-20241022",
716
896
  structured_output_mode=StructuredOutputMode.function_calling,
717
- suggested_for_data_gen=True,
718
- suggested_for_evals=True,
897
+ ),
898
+ KilnModelProvider(
899
+ name=ModelProviderName.vertex,
900
+ model_id="claude-3-5-sonnet",
901
+ structured_output_mode=StructuredOutputMode.function_calling_weak,
719
902
  ),
720
903
  ],
721
904
  ),
@@ -750,6 +933,8 @@ built_in_models: List[KilnModel] = [
750
933
  suggested_for_data_gen=True,
751
934
  suggested_for_evals=True,
752
935
  reasoning_capable=True,
936
+ gemini_reasoning_enabled=True,
937
+ thinking_level="medium",
753
938
  ),
754
939
  KilnModelProvider(
755
940
  name=ModelProviderName.gemini_api,
@@ -757,9 +942,9 @@ built_in_models: List[KilnModel] = [
757
942
  structured_output_mode=StructuredOutputMode.json_schema,
758
943
  suggested_for_data_gen=True,
759
944
  suggested_for_evals=True,
760
- # TODO: Gemini API doesn't return reasoning here, so we don't ask for it. Strange.
761
- # reasoning_capable=True,
762
- # thinking_level="medium",
945
+ reasoning_capable=True,
946
+ gemini_reasoning_enabled=True,
947
+ thinking_level="medium",
763
948
  ),
764
949
  KilnModelProvider(
765
950
  name=ModelProviderName.vertex,
@@ -767,9 +952,9 @@ built_in_models: List[KilnModel] = [
767
952
  structured_output_mode=StructuredOutputMode.json_schema,
768
953
  suggested_for_data_gen=True,
769
954
  suggested_for_evals=True,
770
- # TODO: Vertex doesn't return reasoning here, so we don't ask for it. Strange.
771
- # reasoning_capable=True,
772
- # thinking_level="medium",
955
+ reasoning_capable=True,
956
+ gemini_reasoning_enabled=True,
957
+ thinking_level="medium",
773
958
  ),
774
959
  ],
775
960
  ),
@@ -784,6 +969,7 @@ built_in_models: List[KilnModel] = [
784
969
  model_id="google/gemini-2.5-flash",
785
970
  structured_output_mode=StructuredOutputMode.json_schema,
786
971
  reasoning_capable=True,
972
+ gemini_reasoning_enabled=True,
787
973
  ),
788
974
  KilnModelProvider(
789
975
  name=ModelProviderName.gemini_api,
@@ -810,17 +996,17 @@ built_in_models: List[KilnModel] = [
810
996
  KilnModelProvider(
811
997
  name=ModelProviderName.openrouter,
812
998
  model_id="google/gemini-2.0-flash-001",
813
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
999
+ structured_output_mode=StructuredOutputMode.json_schema,
814
1000
  ),
815
1001
  KilnModelProvider(
816
1002
  name=ModelProviderName.gemini_api,
817
1003
  model_id="gemini-2.0-flash",
818
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1004
+ structured_output_mode=StructuredOutputMode.json_schema,
819
1005
  ),
820
1006
  KilnModelProvider(
821
1007
  name=ModelProviderName.vertex,
822
1008
  model_id="gemini-2.0-flash",
823
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1009
+ structured_output_mode=StructuredOutputMode.json_schema,
824
1010
  provider_finetune_id="gemini-2.0-flash-001",
825
1011
  ),
826
1012
  ],
@@ -834,17 +1020,17 @@ built_in_models: List[KilnModel] = [
834
1020
  KilnModelProvider(
835
1021
  name=ModelProviderName.openrouter,
836
1022
  model_id="google/gemini-2.0-flash-lite-001",
837
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1023
+ structured_output_mode=StructuredOutputMode.json_schema,
838
1024
  ),
839
1025
  KilnModelProvider(
840
1026
  name=ModelProviderName.gemini_api,
841
1027
  model_id="gemini-2.0-flash-lite",
842
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1028
+ structured_output_mode=StructuredOutputMode.json_schema,
843
1029
  ),
844
1030
  KilnModelProvider(
845
1031
  name=ModelProviderName.vertex,
846
1032
  model_id="gemini-2.0-flash-lite",
847
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1033
+ structured_output_mode=StructuredOutputMode.json_schema,
848
1034
  provider_finetune_id="gemini-2.0-flash-lite-001",
849
1035
  ),
850
1036
  ],
@@ -858,12 +1044,12 @@ built_in_models: List[KilnModel] = [
858
1044
  KilnModelProvider(
859
1045
  name=ModelProviderName.openrouter,
860
1046
  model_id="google/gemini-pro-1.5",
861
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1047
+ structured_output_mode=StructuredOutputMode.json_schema,
862
1048
  ),
863
1049
  KilnModelProvider(
864
1050
  name=ModelProviderName.gemini_api,
865
1051
  model_id="gemini-1.5-pro",
866
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1052
+ structured_output_mode=StructuredOutputMode.json_schema,
867
1053
  ),
868
1054
  KilnModelProvider(
869
1055
  name=ModelProviderName.vertex,
@@ -881,12 +1067,12 @@ built_in_models: List[KilnModel] = [
881
1067
  KilnModelProvider(
882
1068
  name=ModelProviderName.openrouter,
883
1069
  model_id="google/gemini-flash-1.5",
884
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1070
+ structured_output_mode=StructuredOutputMode.json_schema,
885
1071
  ),
886
1072
  KilnModelProvider(
887
1073
  name=ModelProviderName.gemini_api,
888
1074
  model_id="gemini-1.5-flash",
889
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1075
+ structured_output_mode=StructuredOutputMode.json_schema,
890
1076
  ),
891
1077
  KilnModelProvider(
892
1078
  name=ModelProviderName.vertex,
@@ -904,13 +1090,13 @@ built_in_models: List[KilnModel] = [
904
1090
  KilnModelProvider(
905
1091
  name=ModelProviderName.openrouter,
906
1092
  model_id="google/gemini-flash-1.5-8b",
907
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1093
+ structured_output_mode=StructuredOutputMode.json_schema,
908
1094
  supports_data_gen=False,
909
1095
  ),
910
1096
  KilnModelProvider(
911
1097
  name=ModelProviderName.gemini_api,
912
1098
  model_id="gemini-1.5-flash-8b",
913
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1099
+ structured_output_mode=StructuredOutputMode.json_schema,
914
1100
  supports_data_gen=False,
915
1101
  ),
916
1102
  ],
@@ -926,6 +1112,7 @@ built_in_models: List[KilnModel] = [
926
1112
  supports_structured_output=False,
927
1113
  supports_data_gen=False,
928
1114
  model_id="nvidia/llama-3.1-nemotron-70b-instruct",
1115
+ supports_function_calling=False,
929
1116
  ),
930
1117
  ],
931
1118
  ),
@@ -939,16 +1126,24 @@ built_in_models: List[KilnModel] = [
939
1126
  name=ModelProviderName.openrouter,
940
1127
  model_id="meta-llama/llama-4-maverick",
941
1128
  structured_output_mode=StructuredOutputMode.json_schema,
1129
+ supports_function_calling=False,
942
1130
  ),
943
1131
  KilnModelProvider(
944
1132
  name=ModelProviderName.fireworks_ai,
945
1133
  model_id="accounts/fireworks/models/llama4-maverick-instruct-basic",
946
1134
  structured_output_mode=StructuredOutputMode.json_schema,
1135
+ supports_function_calling=False,
947
1136
  ),
948
1137
  KilnModelProvider(
949
1138
  name=ModelProviderName.together_ai,
950
1139
  model_id="meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",
951
1140
  structured_output_mode=StructuredOutputMode.json_schema,
1141
+ supports_function_calling=False,
1142
+ ),
1143
+ KilnModelProvider(
1144
+ name=ModelProviderName.cerebras,
1145
+ model_id="llama-4-maverick-17b-128e-instruct",
1146
+ structured_output_mode=StructuredOutputMode.json_schema,
952
1147
  ),
953
1148
  ],
954
1149
  ),
@@ -962,16 +1157,24 @@ built_in_models: List[KilnModel] = [
962
1157
  name=ModelProviderName.openrouter,
963
1158
  model_id="meta-llama/llama-4-scout",
964
1159
  structured_output_mode=StructuredOutputMode.json_schema,
1160
+ supports_function_calling=False,
965
1161
  ),
966
1162
  KilnModelProvider(
967
1163
  name=ModelProviderName.fireworks_ai,
968
1164
  model_id="accounts/fireworks/models/llama4-scout-instruct-basic",
969
1165
  structured_output_mode=StructuredOutputMode.json_schema,
1166
+ supports_function_calling=False,
970
1167
  ),
971
1168
  KilnModelProvider(
972
1169
  name=ModelProviderName.together_ai,
973
1170
  model_id="meta-llama/Llama-4-Scout-17B-16E-Instruct",
974
1171
  structured_output_mode=StructuredOutputMode.json_schema,
1172
+ supports_function_calling=False,
1173
+ ),
1174
+ KilnModelProvider(
1175
+ name=ModelProviderName.cerebras,
1176
+ model_id="llama-4-scout-17b-16e-instruct",
1177
+ structured_output_mode=StructuredOutputMode.json_schema,
975
1178
  ),
976
1179
  ],
977
1180
  ),
@@ -984,24 +1187,28 @@ built_in_models: List[KilnModel] = [
984
1187
  KilnModelProvider(
985
1188
  name=ModelProviderName.groq,
986
1189
  model_id="llama-3.1-8b-instant",
1190
+ supports_function_calling=False,
987
1191
  ),
988
1192
  KilnModelProvider(
989
1193
  name=ModelProviderName.amazon_bedrock,
990
1194
  structured_output_mode=StructuredOutputMode.json_schema,
991
1195
  supports_structured_output=False,
992
1196
  model_id="meta.llama3-1-8b-instruct-v1:0",
1197
+ supports_function_calling=False,
993
1198
  ),
994
1199
  KilnModelProvider(
995
1200
  name=ModelProviderName.ollama,
996
1201
  structured_output_mode=StructuredOutputMode.json_schema,
997
1202
  model_id="llama3.1:8b",
998
1203
  ollama_model_aliases=["llama3.1"], # 8b is default
1204
+ supports_function_calling=False,
999
1205
  ),
1000
1206
  KilnModelProvider(
1001
1207
  name=ModelProviderName.openrouter,
1002
1208
  supports_data_gen=False,
1003
1209
  structured_output_mode=StructuredOutputMode.function_calling,
1004
1210
  model_id="meta-llama/llama-3.1-8b-instruct",
1211
+ supports_function_calling=False,
1005
1212
  ),
1006
1213
  KilnModelProvider(
1007
1214
  name=ModelProviderName.fireworks_ai,
@@ -1009,6 +1216,7 @@ built_in_models: List[KilnModel] = [
1009
1216
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1010
1217
  supports_data_gen=False,
1011
1218
  model_id="accounts/fireworks/models/llama-v3p1-8b-instruct",
1219
+ supports_function_calling=False,
1012
1220
  ),
1013
1221
  KilnModelProvider(
1014
1222
  name=ModelProviderName.together_ai,
@@ -1016,6 +1224,21 @@ built_in_models: List[KilnModel] = [
1016
1224
  supports_data_gen=False,
1017
1225
  structured_output_mode=StructuredOutputMode.function_calling_weak,
1018
1226
  provider_finetune_id="meta-llama/Meta-Llama-3.1-8B-Instruct-Reference",
1227
+ # Constrained decode? They make function calling work when no one else does!
1228
+ ),
1229
+ KilnModelProvider(
1230
+ name=ModelProviderName.cerebras,
1231
+ model_id="llama3.1-8b",
1232
+ structured_output_mode=StructuredOutputMode.function_calling,
1233
+ supports_data_gen=False,
1234
+ suggested_for_evals=False,
1235
+ supports_function_calling=False,
1236
+ ),
1237
+ KilnModelProvider(
1238
+ name=ModelProviderName.docker_model_runner,
1239
+ structured_output_mode=StructuredOutputMode.json_schema,
1240
+ model_id="ai/llama3.1:8B-Q4_K_M",
1241
+ supports_function_calling=False,
1019
1242
  ),
1020
1243
  ],
1021
1244
  ),
@@ -1030,6 +1253,7 @@ built_in_models: List[KilnModel] = [
1030
1253
  structured_output_mode=StructuredOutputMode.json_schema,
1031
1254
  supports_data_gen=False,
1032
1255
  model_id="meta.llama3-1-70b-instruct-v1:0",
1256
+ supports_function_calling=False,
1033
1257
  ),
1034
1258
  KilnModelProvider(
1035
1259
  name=ModelProviderName.openrouter,
@@ -1038,11 +1262,13 @@ built_in_models: List[KilnModel] = [
1038
1262
  model_id="meta-llama/llama-3.1-70b-instruct",
1039
1263
  supports_logprobs=True,
1040
1264
  logprobs_openrouter_options=True,
1265
+ supports_function_calling=False,
1041
1266
  ),
1042
1267
  KilnModelProvider(
1043
1268
  name=ModelProviderName.ollama,
1044
1269
  structured_output_mode=StructuredOutputMode.json_schema,
1045
1270
  model_id="llama3.1:70b",
1271
+ supports_function_calling=False,
1046
1272
  ),
1047
1273
  KilnModelProvider(
1048
1274
  name=ModelProviderName.fireworks_ai,
@@ -1080,6 +1306,7 @@ built_in_models: List[KilnModel] = [
1080
1306
  name=ModelProviderName.openrouter,
1081
1307
  structured_output_mode=StructuredOutputMode.function_calling,
1082
1308
  model_id="meta-llama/llama-3.1-405b-instruct",
1309
+ supports_function_calling=False, # Not reliable
1083
1310
  ),
1084
1311
  KilnModelProvider(
1085
1312
  name=ModelProviderName.fireworks_ai,
@@ -1132,6 +1359,12 @@ built_in_models: List[KilnModel] = [
1132
1359
  name=ModelProviderName.openrouter,
1133
1360
  model_id="mistralai/mistral-nemo",
1134
1361
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1362
+ supports_function_calling=False, # Not reliable
1363
+ ),
1364
+ KilnModelProvider(
1365
+ name=ModelProviderName.docker_model_runner,
1366
+ model_id="ai/mistral-nemo:12B-Q4_K_M",
1367
+ structured_output_mode=StructuredOutputMode.json_schema,
1135
1368
  ),
1136
1369
  ],
1137
1370
  ),
@@ -1170,24 +1403,27 @@ built_in_models: List[KilnModel] = [
1170
1403
  name=ModelName.llama_3_2_1b,
1171
1404
  friendly_name="Llama 3.2 1B",
1172
1405
  providers=[
1173
- KilnModelProvider(
1174
- name=ModelProviderName.groq,
1175
- model_id="llama-3.2-1b-preview",
1176
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1177
- supports_data_gen=False,
1178
- ),
1179
1406
  KilnModelProvider(
1180
1407
  name=ModelProviderName.openrouter,
1181
1408
  supports_structured_output=False,
1182
1409
  supports_data_gen=False,
1183
1410
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1184
1411
  model_id="meta-llama/llama-3.2-1b-instruct",
1412
+ supports_function_calling=False,
1185
1413
  ),
1186
1414
  KilnModelProvider(
1187
1415
  name=ModelProviderName.ollama,
1188
1416
  supports_structured_output=False,
1189
1417
  supports_data_gen=False,
1190
1418
  model_id="llama3.2:1b",
1419
+ supports_function_calling=False,
1420
+ ),
1421
+ KilnModelProvider(
1422
+ name=ModelProviderName.docker_model_runner,
1423
+ supports_structured_output=False,
1424
+ supports_data_gen=False,
1425
+ model_id="ai/llama3.2:1B-F16",
1426
+ supports_function_calling=False,
1191
1427
  ),
1192
1428
  ],
1193
1429
  ),
@@ -1197,22 +1433,19 @@ built_in_models: List[KilnModel] = [
1197
1433
  name=ModelName.llama_3_2_3b,
1198
1434
  friendly_name="Llama 3.2 3B",
1199
1435
  providers=[
1200
- KilnModelProvider(
1201
- name=ModelProviderName.groq,
1202
- model_id="llama-3.2-3b-preview",
1203
- supports_data_gen=False,
1204
- ),
1205
1436
  KilnModelProvider(
1206
1437
  name=ModelProviderName.openrouter,
1207
1438
  supports_structured_output=False,
1208
1439
  supports_data_gen=False,
1209
1440
  structured_output_mode=StructuredOutputMode.json_schema,
1210
1441
  model_id="meta-llama/llama-3.2-3b-instruct",
1442
+ supports_function_calling=False,
1211
1443
  ),
1212
1444
  KilnModelProvider(
1213
1445
  name=ModelProviderName.ollama,
1214
1446
  supports_data_gen=False,
1215
1447
  model_id="llama3.2",
1448
+ supports_function_calling=False,
1216
1449
  ),
1217
1450
  KilnModelProvider(
1218
1451
  name=ModelProviderName.together_ai,
@@ -1220,6 +1453,13 @@ built_in_models: List[KilnModel] = [
1220
1453
  supports_structured_output=False,
1221
1454
  supports_data_gen=False,
1222
1455
  ),
1456
+ KilnModelProvider(
1457
+ name=ModelProviderName.docker_model_runner,
1458
+ model_id="ai/llama3.2:3B-Q4_K_M",
1459
+ structured_output_mode=StructuredOutputMode.json_schema,
1460
+ supports_data_gen=False,
1461
+ supports_function_calling=False,
1462
+ ),
1223
1463
  ],
1224
1464
  ),
1225
1465
  # Llama 3.2 11B
@@ -1235,30 +1475,20 @@ built_in_models: List[KilnModel] = [
1235
1475
  supports_structured_output=False,
1236
1476
  supports_data_gen=False,
1237
1477
  model_id="meta-llama/llama-3.2-11b-vision-instruct",
1478
+ supports_function_calling=False,
1238
1479
  ),
1239
1480
  KilnModelProvider(
1240
1481
  name=ModelProviderName.ollama,
1241
1482
  structured_output_mode=StructuredOutputMode.json_schema,
1242
1483
  model_id="llama3.2-vision",
1243
- ),
1244
- KilnModelProvider(
1245
- name=ModelProviderName.fireworks_ai,
1246
- # No finetune support. https://docs.fireworks.ai/fine-tuning/fine-tuning-models
1247
- model_id="accounts/fireworks/models/llama-v3p2-11b-vision-instruct",
1248
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1249
- supports_data_gen=False,
1250
- ),
1251
- KilnModelProvider(
1252
- name=ModelProviderName.huggingface,
1253
- model_id="meta-llama/Llama-3.2-11B-Vision-Instruct",
1254
- supports_structured_output=False,
1255
- supports_data_gen=False,
1484
+ supports_function_calling=False,
1256
1485
  ),
1257
1486
  KilnModelProvider(
1258
1487
  name=ModelProviderName.together_ai,
1259
1488
  model_id="meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo",
1260
1489
  supports_structured_output=False,
1261
1490
  supports_data_gen=False,
1491
+ supports_function_calling=False, # weird 3b works and 11b doesn't but... vision?
1262
1492
  ),
1263
1493
  ],
1264
1494
  ),
@@ -1272,24 +1502,20 @@ built_in_models: List[KilnModel] = [
1272
1502
  name=ModelProviderName.openrouter,
1273
1503
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1274
1504
  model_id="meta-llama/llama-3.2-90b-vision-instruct",
1505
+ supports_function_calling=False,
1275
1506
  ),
1276
1507
  KilnModelProvider(
1277
1508
  name=ModelProviderName.ollama,
1278
1509
  structured_output_mode=StructuredOutputMode.json_schema,
1279
1510
  model_id="llama3.2-vision:90b",
1280
- ),
1281
- KilnModelProvider(
1282
- name=ModelProviderName.fireworks_ai,
1283
- # No finetune support. https://docs.fireworks.ai/fine-tuning/fine-tuning-models
1284
- model_id="accounts/fireworks/models/llama-v3p2-90b-vision-instruct",
1285
- structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1286
- supports_data_gen=False,
1511
+ supports_function_calling=False,
1287
1512
  ),
1288
1513
  KilnModelProvider(
1289
1514
  name=ModelProviderName.together_ai,
1290
1515
  model_id="meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo",
1291
1516
  supports_structured_output=False,
1292
1517
  supports_data_gen=False,
1518
+ supports_function_calling=False,
1293
1519
  ),
1294
1520
  ],
1295
1521
  ),
@@ -1306,35 +1532,47 @@ built_in_models: List[KilnModel] = [
1306
1532
  # Openrouter not working with json_schema or tools. JSON_schema sometimes works so force that, but not consistently so still not recommended.
1307
1533
  supports_structured_output=False,
1308
1534
  supports_data_gen=False,
1535
+ supports_function_calling=False,
1309
1536
  ),
1310
1537
  KilnModelProvider(
1311
1538
  name=ModelProviderName.groq,
1312
1539
  supports_structured_output=True,
1313
1540
  supports_data_gen=True,
1314
1541
  model_id="llama-3.3-70b-versatile",
1542
+ supports_function_calling=False,
1315
1543
  ),
1316
1544
  KilnModelProvider(
1317
1545
  name=ModelProviderName.ollama,
1318
1546
  structured_output_mode=StructuredOutputMode.json_schema,
1319
1547
  model_id="llama3.3",
1548
+ supports_function_calling=False,
1320
1549
  ),
1321
1550
  KilnModelProvider(
1322
1551
  name=ModelProviderName.fireworks_ai,
1323
1552
  # Tool calling forces schema -- fireworks doesn't support json_schema, just json_mode
1324
1553
  structured_output_mode=StructuredOutputMode.function_calling_weak,
1325
1554
  model_id="accounts/fireworks/models/llama-v3p3-70b-instruct",
1555
+ supports_function_calling=False,
1326
1556
  ),
1327
1557
  KilnModelProvider(
1328
1558
  name=ModelProviderName.vertex,
1329
1559
  model_id="meta/llama-3.3-70b-instruct-maas",
1330
- # Doesn't work, TODO to debug
1560
+ # Doesn't work yet; needs debugging
1331
1561
  supports_structured_output=False,
1332
1562
  supports_data_gen=False,
1563
+ supports_function_calling=False,
1333
1564
  ),
1334
1565
  KilnModelProvider(
1335
1566
  name=ModelProviderName.together_ai,
1336
1567
  model_id="meta-llama/Llama-3.3-70B-Instruct-Turbo",
1337
1568
  structured_output_mode=StructuredOutputMode.function_calling_weak,
1569
+ # Tools work. Probably constrained decode? Nice
1570
+ ),
1571
+ KilnModelProvider(
1572
+ name=ModelProviderName.docker_model_runner,
1573
+ structured_output_mode=StructuredOutputMode.json_schema,
1574
+ model_id="ai/llama3.3:70B-Q4_K_M",
1575
+ supports_function_calling=False,
1338
1576
  ),
1339
1577
  ],
1340
1578
  ),
@@ -1350,6 +1588,7 @@ built_in_models: List[KilnModel] = [
1350
1588
  supports_structured_output=False,
1351
1589
  supports_data_gen=False,
1352
1590
  model_id="phi3.5",
1591
+ supports_function_calling=False,
1353
1592
  ),
1354
1593
  KilnModelProvider(
1355
1594
  name=ModelProviderName.openrouter,
@@ -1357,13 +1596,7 @@ built_in_models: List[KilnModel] = [
1357
1596
  supports_data_gen=False,
1358
1597
  model_id="microsoft/phi-3.5-mini-128k-instruct",
1359
1598
  structured_output_mode=StructuredOutputMode.json_schema,
1360
- ),
1361
- KilnModelProvider(
1362
- name=ModelProviderName.fireworks_ai,
1363
- # No finetune support. https://docs.fireworks.ai/fine-tuning/fine-tuning-models
1364
- supports_structured_output=False,
1365
- supports_data_gen=False,
1366
- model_id="accounts/fireworks/models/phi-3-vision-128k-instruct",
1599
+ supports_function_calling=False,
1367
1600
  ),
1368
1601
  ],
1369
1602
  ),
@@ -1377,6 +1610,7 @@ built_in_models: List[KilnModel] = [
1377
1610
  name=ModelProviderName.ollama,
1378
1611
  structured_output_mode=StructuredOutputMode.json_schema,
1379
1612
  model_id="phi4",
1613
+ supports_function_calling=False,
1380
1614
  ),
1381
1615
  KilnModelProvider(
1382
1616
  name=ModelProviderName.openrouter,
@@ -1384,6 +1618,13 @@ built_in_models: List[KilnModel] = [
1384
1618
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1385
1619
  supports_data_gen=False,
1386
1620
  model_id="microsoft/phi-4",
1621
+ supports_function_calling=False,
1622
+ ),
1623
+ KilnModelProvider(
1624
+ name=ModelProviderName.docker_model_runner,
1625
+ structured_output_mode=StructuredOutputMode.json_schema,
1626
+ model_id="ai/phi4:14B-Q4_K_M",
1627
+ supports_function_calling=False,
1387
1628
  ),
1388
1629
  ],
1389
1630
  ),
@@ -1398,6 +1639,7 @@ built_in_models: List[KilnModel] = [
1398
1639
  model_id="microsoft/phi-4-multimodal-instruct",
1399
1640
  supports_structured_output=False,
1400
1641
  supports_data_gen=False,
1642
+ supports_function_calling=False,
1401
1643
  ),
1402
1644
  ],
1403
1645
  ),
@@ -1410,6 +1652,7 @@ built_in_models: List[KilnModel] = [
1410
1652
  KilnModelProvider(
1411
1653
  name=ModelProviderName.ollama,
1412
1654
  model_id="phi4-mini",
1655
+ supports_function_calling=False,
1413
1656
  ),
1414
1657
  ],
1415
1658
  ),
@@ -1423,6 +1666,7 @@ built_in_models: List[KilnModel] = [
1423
1666
  name=ModelProviderName.ollama,
1424
1667
  supports_data_gen=False,
1425
1668
  model_id="gemma2:2b",
1669
+ supports_function_calling=False,
1426
1670
  ),
1427
1671
  ],
1428
1672
  ),
@@ -1436,6 +1680,7 @@ built_in_models: List[KilnModel] = [
1436
1680
  name=ModelProviderName.ollama,
1437
1681
  supports_data_gen=False,
1438
1682
  model_id="gemma2:9b",
1683
+ supports_function_calling=False,
1439
1684
  ),
1440
1685
  KilnModelProvider(
1441
1686
  name=ModelProviderName.openrouter,
@@ -1444,6 +1689,7 @@ built_in_models: List[KilnModel] = [
1444
1689
  supports_structured_output=False,
1445
1690
  supports_data_gen=False,
1446
1691
  model_id="google/gemma-2-9b-it",
1692
+ supports_function_calling=False,
1447
1693
  ),
1448
1694
  # fireworks AI errors - not allowing system role. Exclude until resolved.
1449
1695
  ],
@@ -1458,15 +1704,32 @@ built_in_models: List[KilnModel] = [
1458
1704
  name=ModelProviderName.ollama,
1459
1705
  supports_data_gen=False,
1460
1706
  model_id="gemma2:27b",
1707
+ supports_function_calling=False,
1461
1708
  ),
1462
1709
  KilnModelProvider(
1463
1710
  name=ModelProviderName.openrouter,
1464
1711
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1465
1712
  supports_data_gen=False,
1466
1713
  model_id="google/gemma-2-27b-it",
1714
+ supports_function_calling=False,
1467
1715
  ),
1468
1716
  ],
1469
1717
  ),
1718
+ # Gemma 3 270M
1719
+ KilnModel(
1720
+ family=ModelFamily.gemma,
1721
+ name=ModelName.gemma_3_0p27b,
1722
+ friendly_name="Gemma 3 270M",
1723
+ providers=[
1724
+ KilnModelProvider(
1725
+ name=ModelProviderName.docker_model_runner,
1726
+ model_id="ai/gemma3:270M-F16",
1727
+ supports_structured_output=False,
1728
+ supports_data_gen=False,
1729
+ supports_function_calling=False,
1730
+ )
1731
+ ],
1732
+ ),
1470
1733
  # Gemma 3 1B
1471
1734
  KilnModel(
1472
1735
  family=ModelFamily.gemma,
@@ -1478,13 +1741,14 @@ built_in_models: List[KilnModel] = [
1478
1741
  model_id="gemma3:1b",
1479
1742
  supports_structured_output=False,
1480
1743
  supports_data_gen=False,
1744
+ supports_function_calling=False,
1481
1745
  ),
1482
1746
  KilnModelProvider(
1483
- name=ModelProviderName.openrouter,
1484
- # TODO: swap to non-free model when available (more reliable)
1485
- model_id="google/gemma-3-1b-it:free",
1747
+ name=ModelProviderName.docker_model_runner,
1748
+ model_id="ai/gemma3:1B-F16",
1486
1749
  supports_structured_output=False,
1487
1750
  supports_data_gen=False,
1751
+ supports_function_calling=False,
1488
1752
  ),
1489
1753
  ],
1490
1754
  ),
@@ -1498,12 +1762,18 @@ built_in_models: List[KilnModel] = [
1498
1762
  name=ModelProviderName.ollama,
1499
1763
  model_id="gemma3:4b",
1500
1764
  ollama_model_aliases=["gemma3"],
1765
+ supports_function_calling=False,
1501
1766
  ),
1502
1767
  KilnModelProvider(
1503
1768
  name=ModelProviderName.openrouter,
1504
1769
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1505
- # TODO: swap to non-free model when available (more reliable)
1506
- model_id="google/gemma-3-4b-it:free",
1770
+ model_id="google/gemma-3-4b-it",
1771
+ supports_function_calling=False,
1772
+ ),
1773
+ KilnModelProvider(
1774
+ name=ModelProviderName.docker_model_runner,
1775
+ model_id="ai/gemma3:4B-Q4_K_M",
1776
+ supports_function_calling=False,
1507
1777
  ),
1508
1778
  ],
1509
1779
  ),
@@ -1516,12 +1786,13 @@ built_in_models: List[KilnModel] = [
1516
1786
  KilnModelProvider(
1517
1787
  name=ModelProviderName.ollama,
1518
1788
  model_id="gemma3:12b",
1789
+ supports_function_calling=False,
1519
1790
  ),
1520
1791
  KilnModelProvider(
1521
1792
  name=ModelProviderName.openrouter,
1522
1793
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1523
- # TODO: swap to non-free model when available (more reliable)
1524
- model_id="google/gemma-3-12b-it:free",
1794
+ model_id="google/gemma-3-12b-it",
1795
+ supports_function_calling=False,
1525
1796
  ),
1526
1797
  ],
1527
1798
  ),
@@ -1534,11 +1805,13 @@ built_in_models: List[KilnModel] = [
1534
1805
  KilnModelProvider(
1535
1806
  name=ModelProviderName.ollama,
1536
1807
  model_id="gemma3:27b",
1808
+ supports_function_calling=False,
1537
1809
  ),
1538
1810
  KilnModelProvider(
1539
1811
  name=ModelProviderName.openrouter,
1540
1812
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1541
1813
  model_id="google/gemma-3-27b-it",
1814
+ supports_function_calling=False,
1542
1815
  ),
1543
1816
  ],
1544
1817
  ),
@@ -1553,12 +1826,14 @@ built_in_models: List[KilnModel] = [
1553
1826
  model_id="gemma3n:e2b",
1554
1827
  structured_output_mode=StructuredOutputMode.json_schema,
1555
1828
  supports_data_gen=False,
1829
+ supports_function_calling=False,
1556
1830
  ),
1557
1831
  KilnModelProvider(
1558
1832
  name=ModelProviderName.gemini_api,
1559
1833
  model_id="gemma-3n-e2b-it",
1560
1834
  supports_structured_output=False,
1561
1835
  supports_data_gen=False,
1836
+ supports_function_calling=False,
1562
1837
  ),
1563
1838
  ],
1564
1839
  ),
@@ -1573,18 +1848,28 @@ built_in_models: List[KilnModel] = [
1573
1848
  model_id="google/gemma-3n-e4b-it",
1574
1849
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1575
1850
  supports_data_gen=False,
1851
+ supports_function_calling=False,
1576
1852
  ),
1577
1853
  KilnModelProvider(
1578
1854
  name=ModelProviderName.ollama,
1579
1855
  model_id="gemma3n:e4b",
1580
1856
  supports_data_gen=False,
1581
1857
  structured_output_mode=StructuredOutputMode.json_schema,
1858
+ supports_function_calling=False,
1582
1859
  ),
1583
1860
  KilnModelProvider(
1584
1861
  name=ModelProviderName.gemini_api,
1585
1862
  model_id="gemma-3n-e4b-it",
1586
1863
  structured_output_mode=StructuredOutputMode.json_instructions,
1587
1864
  supports_data_gen=False,
1865
+ supports_function_calling=False,
1866
+ ),
1867
+ KilnModelProvider(
1868
+ name=ModelProviderName.docker_model_runner,
1869
+ model_id="ai/gemma3n:4B-Q4_K_M",
1870
+ supports_data_gen=False,
1871
+ structured_output_mode=StructuredOutputMode.json_schema,
1872
+ supports_function_calling=False,
1588
1873
  ),
1589
1874
  ],
1590
1875
  ),
@@ -1599,10 +1884,12 @@ built_in_models: List[KilnModel] = [
1599
1884
  model_id="mistralai/mixtral-8x7b-instruct",
1600
1885
  supports_data_gen=False,
1601
1886
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1887
+ supports_function_calling=False,
1602
1888
  ),
1603
1889
  KilnModelProvider(
1604
1890
  name=ModelProviderName.ollama,
1605
1891
  model_id="mixtral",
1892
+ supports_function_calling=False,
1606
1893
  ),
1607
1894
  ],
1608
1895
  ),
@@ -1620,13 +1907,7 @@ built_in_models: List[KilnModel] = [
1620
1907
  r1_openrouter_options=True,
1621
1908
  structured_output_mode=StructuredOutputMode.json_instructions,
1622
1909
  parser=ModelParserID.r1_thinking,
1623
- ),
1624
- KilnModelProvider(
1625
- name=ModelProviderName.fireworks_ai,
1626
- model_id="accounts/fireworks/models/qwq-32b",
1627
- reasoning_capable=True,
1628
- parser=ModelParserID.r1_thinking,
1629
- structured_output_mode=StructuredOutputMode.json_instructions,
1910
+ supports_function_calling=False,
1630
1911
  ),
1631
1912
  KilnModelProvider(
1632
1913
  name=ModelProviderName.ollama,
@@ -1634,21 +1915,30 @@ built_in_models: List[KilnModel] = [
1634
1915
  reasoning_capable=True,
1635
1916
  parser=ModelParserID.r1_thinking,
1636
1917
  structured_output_mode=StructuredOutputMode.json_instructions,
1918
+ supports_function_calling=False,
1637
1919
  ),
1638
1920
  KilnModelProvider(
1639
- name=ModelProviderName.groq,
1640
- model_id="qwen-qwq-32b",
1641
- reasoning_capable=True,
1642
- parser=ModelParserID.r1_thinking,
1921
+ name=ModelProviderName.together_ai,
1922
+ model_id="Qwen/QwQ-32B",
1643
1923
  structured_output_mode=StructuredOutputMode.json_instructions,
1924
+ parser=ModelParserID.r1_thinking,
1925
+ reasoning_capable=True,
1926
+ supports_function_calling=False,
1644
1927
  ),
1645
1928
  KilnModelProvider(
1646
- name=ModelProviderName.together_ai,
1929
+ name=ModelProviderName.siliconflow_cn,
1647
1930
  model_id="Qwen/QwQ-32B",
1648
1931
  structured_output_mode=StructuredOutputMode.json_instructions,
1649
- parser=ModelParserID.r1_thinking,
1650
1932
  reasoning_capable=True,
1651
1933
  ),
1934
+ KilnModelProvider(
1935
+ name=ModelProviderName.docker_model_runner,
1936
+ model_id="ai/qwq:32B-Q4_K_M",
1937
+ reasoning_capable=True,
1938
+ parser=ModelParserID.r1_thinking,
1939
+ structured_output_mode=StructuredOutputMode.json_instructions,
1940
+ supports_function_calling=False,
1941
+ ),
1652
1942
  ],
1653
1943
  ),
1654
1944
  # Qwen 2.5 7B
@@ -1661,10 +1951,17 @@ built_in_models: List[KilnModel] = [
1661
1951
  name=ModelProviderName.openrouter,
1662
1952
  model_id="qwen/qwen-2.5-7b-instruct",
1663
1953
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1954
+ supports_function_calling=False,
1664
1955
  ),
1665
1956
  KilnModelProvider(
1666
1957
  name=ModelProviderName.ollama,
1667
1958
  model_id="qwen2.5",
1959
+ supports_function_calling=False,
1960
+ ),
1961
+ KilnModelProvider(
1962
+ name=ModelProviderName.docker_model_runner,
1963
+ model_id="ai/qwen2.5:7B-Q4_K_M",
1964
+ supports_function_calling=False,
1668
1965
  ),
1669
1966
  ],
1670
1967
  ),
@@ -1682,6 +1979,7 @@ built_in_models: List[KilnModel] = [
1682
1979
  name=ModelProviderName.ollama,
1683
1980
  model_id="qwen2.5:14b",
1684
1981
  supports_data_gen=False,
1982
+ supports_function_calling=False,
1685
1983
  ),
1686
1984
  ],
1687
1985
  ),
@@ -1703,12 +2001,6 @@ built_in_models: List[KilnModel] = [
1703
2001
  name=ModelProviderName.ollama,
1704
2002
  model_id="qwen2.5:72b",
1705
2003
  ),
1706
- KilnModelProvider(
1707
- name=ModelProviderName.fireworks_ai,
1708
- model_id="accounts/fireworks/models/qwen2p5-72b-instruct",
1709
- # Tool calling forces schema -- fireworks doesn't support json_schema, just json_mode
1710
- structured_output_mode=StructuredOutputMode.function_calling_weak,
1711
- ),
1712
2004
  KilnModelProvider(
1713
2005
  name=ModelProviderName.together_ai,
1714
2006
  provider_finetune_id="Qwen/Qwen2.5-72B-Instruct",
@@ -1726,11 +2018,13 @@ built_in_models: List[KilnModel] = [
1726
2018
  structured_output_mode=StructuredOutputMode.json_instruction_and_object,
1727
2019
  model_id="mistralai/mistral-small-24b-instruct-2501",
1728
2020
  uncensored=True,
2021
+ supports_function_calling=False,
1729
2022
  ),
1730
2023
  KilnModelProvider(
1731
2024
  name=ModelProviderName.ollama,
1732
2025
  model_id="mistral-small:24b",
1733
2026
  uncensored=True,
2027
+ supports_function_calling=False,
1734
2028
  ),
1735
2029
  ],
1736
2030
  ),
@@ -1765,6 +2059,62 @@ built_in_models: List[KilnModel] = [
1765
2059
  parser=ModelParserID.r1_thinking,
1766
2060
  reasoning_capable=True,
1767
2061
  supports_data_gen=True,
2062
+ supports_function_calling=False,
2063
+ ),
2064
+ KilnModelProvider(
2065
+ name=ModelProviderName.siliconflow_cn,
2066
+ model_id="Pro/deepseek-ai/DeepSeek-R1",
2067
+ parser=ModelParserID.optional_r1_thinking,
2068
+ structured_output_mode=StructuredOutputMode.json_instructions,
2069
+ reasoning_capable=True,
2070
+ supports_data_gen=True,
2071
+ supports_function_calling=False,
2072
+ ),
2073
+ ],
2074
+ ),
2075
+ # DeepSeek R1 0528 Distill Qwen 3 8B
2076
+ KilnModel(
2077
+ family=ModelFamily.deepseek,
2078
+ name=ModelName.deepseek_r1_0528_distill_qwen3_8b,
2079
+ friendly_name="DeepSeek R1 0528 Distill Qwen 3 8B",
2080
+ providers=[
2081
+ KilnModelProvider(
2082
+ name=ModelProviderName.openrouter,
2083
+ model_id="deepseek/deepseek-r1-0528-qwen3-8b",
2084
+ structured_output_mode=StructuredOutputMode.json_instructions,
2085
+ reasoning_capable=True,
2086
+ r1_openrouter_options=True,
2087
+ require_openrouter_reasoning=True,
2088
+ supports_function_calling=False,
2089
+ ),
2090
+ KilnModelProvider(
2091
+ name=ModelProviderName.siliconflow_cn,
2092
+ model_id="deepseek-ai/DeepSeek-R1-0528-Qwen3-8B",
2093
+ structured_output_mode=StructuredOutputMode.json_instructions,
2094
+ reasoning_capable=True,
2095
+ reasoning_optional_for_structured_output=True,
2096
+ supports_data_gen=False,
2097
+ supports_function_calling=False,
2098
+ ),
2099
+ ],
2100
+ ),
2101
+ # DeepSeek 3.1
2102
+ KilnModel(
2103
+ family=ModelFamily.deepseek,
2104
+ name=ModelName.deepseek_3_1,
2105
+ friendly_name="DeepSeek 3.1",
2106
+ providers=[
2107
+ KilnModelProvider(
2108
+ name=ModelProviderName.openrouter,
2109
+ model_id="deepseek/deepseek-chat-v3.1",
2110
+ structured_output_mode=StructuredOutputMode.json_instruction_and_object,
2111
+ supports_data_gen=True,
2112
+ ),
2113
+ KilnModelProvider(
2114
+ name=ModelProviderName.fireworks_ai,
2115
+ model_id="accounts/fireworks/models/deepseek-v3p1",
2116
+ structured_output_mode=StructuredOutputMode.json_instruction_and_object,
2117
+ supports_data_gen=True,
1768
2118
  ),
1769
2119
  ],
1770
2120
  ),
@@ -1791,6 +2141,11 @@ built_in_models: List[KilnModel] = [
1791
2141
  model_id="deepseek-ai/DeepSeek-V3",
1792
2142
  structured_output_mode=StructuredOutputMode.json_instructions,
1793
2143
  ),
2144
+ KilnModelProvider(
2145
+ name=ModelProviderName.siliconflow_cn,
2146
+ model_id="Pro/deepseek-ai/DeepSeek-V3",
2147
+ structured_output_mode=StructuredOutputMode.json_schema,
2148
+ ),
1794
2149
  ],
1795
2150
  ),
1796
2151
  # DeepSeek R1
@@ -1814,6 +2169,7 @@ built_in_models: List[KilnModel] = [
1814
2169
  parser=ModelParserID.r1_thinking,
1815
2170
  structured_output_mode=StructuredOutputMode.json_instructions,
1816
2171
  reasoning_capable=True,
2172
+ supports_function_calling=False,
1817
2173
  ),
1818
2174
  KilnModelProvider(
1819
2175
  # I want your RAM
@@ -1839,6 +2195,7 @@ built_in_models: List[KilnModel] = [
1839
2195
  r1_openrouter_options=True,
1840
2196
  parser=ModelParserID.r1_thinking,
1841
2197
  require_openrouter_reasoning=True,
2198
+ supports_function_calling=False,
1842
2199
  ),
1843
2200
  KilnModelProvider(
1844
2201
  name=ModelProviderName.ollama,
@@ -1846,13 +2203,15 @@ built_in_models: List[KilnModel] = [
1846
2203
  reasoning_capable=True,
1847
2204
  structured_output_mode=StructuredOutputMode.json_instructions,
1848
2205
  model_id="deepseek-r1:32b",
2206
+ supports_function_calling=False,
1849
2207
  ),
1850
2208
  KilnModelProvider(
1851
- name=ModelProviderName.together_ai,
1852
- model_id="deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",
1853
- structured_output_mode=StructuredOutputMode.json_instructions,
1854
- parser=ModelParserID.r1_thinking,
2209
+ name=ModelProviderName.siliconflow_cn,
2210
+ model_id="deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
2211
+ structured_output_mode=StructuredOutputMode.json_schema,
1855
2212
  reasoning_capable=True,
2213
+ supports_function_calling=False,
2214
+ reasoning_optional_for_structured_output=True,
1856
2215
  ),
1857
2216
  ],
1858
2217
  ),
@@ -1870,6 +2229,7 @@ built_in_models: List[KilnModel] = [
1870
2229
  r1_openrouter_options=True,
1871
2230
  require_openrouter_reasoning=True,
1872
2231
  parser=ModelParserID.r1_thinking,
2232
+ supports_function_calling=False,
1873
2233
  ),
1874
2234
  KilnModelProvider(
1875
2235
  name=ModelProviderName.ollama,
@@ -1878,12 +2238,23 @@ built_in_models: List[KilnModel] = [
1878
2238
  reasoning_capable=True,
1879
2239
  structured_output_mode=StructuredOutputMode.json_instructions,
1880
2240
  model_id="deepseek-r1:70b",
2241
+ supports_function_calling=False,
1881
2242
  ),
1882
2243
  KilnModelProvider(
1883
2244
  name=ModelProviderName.together_ai,
1884
2245
  model_id="deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
1885
2246
  structured_output_mode=StructuredOutputMode.json_instructions,
1886
2247
  parser=ModelParserID.r1_thinking,
2248
+ supports_function_calling=False,
2249
+ ),
2250
+ KilnModelProvider(
2251
+ name=ModelProviderName.docker_model_runner,
2252
+ supports_data_gen=False,
2253
+ parser=ModelParserID.r1_thinking,
2254
+ reasoning_capable=True,
2255
+ structured_output_mode=StructuredOutputMode.json_instructions,
2256
+ model_id="ai/deepseek-r1-distill-llama:70B-Q4_K_M",
2257
+ supports_function_calling=False,
1887
2258
  ),
1888
2259
  ],
1889
2260
  ),
@@ -1903,6 +2274,7 @@ built_in_models: List[KilnModel] = [
1903
2274
  require_openrouter_reasoning=True,
1904
2275
  openrouter_skip_required_parameters=True,
1905
2276
  parser=ModelParserID.r1_thinking,
2277
+ supports_function_calling=False,
1906
2278
  ),
1907
2279
  KilnModelProvider(
1908
2280
  name=ModelProviderName.ollama,
@@ -1911,12 +2283,23 @@ built_in_models: List[KilnModel] = [
1911
2283
  reasoning_capable=True,
1912
2284
  structured_output_mode=StructuredOutputMode.json_instructions,
1913
2285
  model_id="deepseek-r1:14b",
2286
+ supports_function_calling=False,
1914
2287
  ),
1915
2288
  KilnModelProvider(
1916
2289
  name=ModelProviderName.together_ai,
1917
2290
  model_id="deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",
1918
2291
  structured_output_mode=StructuredOutputMode.json_instructions,
1919
2292
  parser=ModelParserID.r1_thinking,
2293
+ supports_function_calling=False,
2294
+ ),
2295
+ KilnModelProvider(
2296
+ name=ModelProviderName.siliconflow_cn,
2297
+ model_id="deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",
2298
+ structured_output_mode=StructuredOutputMode.json_schema,
2299
+ reasoning_capable=True,
2300
+ reasoning_optional_for_structured_output=True,
2301
+ supports_data_gen=False,
2302
+ supports_function_calling=False,
1920
2303
  ),
1921
2304
  ],
1922
2305
  ),
@@ -1938,6 +2321,7 @@ built_in_models: List[KilnModel] = [
1938
2321
  require_openrouter_reasoning=True,
1939
2322
  openrouter_skip_required_parameters=True,
1940
2323
  parser=ModelParserID.r1_thinking,
2324
+ supports_function_calling=False,
1941
2325
  ),
1942
2326
  KilnModelProvider(
1943
2327
  name=ModelProviderName.ollama,
@@ -1948,6 +2332,18 @@ built_in_models: List[KilnModel] = [
1948
2332
  # Best mode, but fails to often to enable without warning
1949
2333
  structured_output_mode=StructuredOutputMode.json_instructions,
1950
2334
  model_id="deepseek-r1:8b",
2335
+ supports_function_calling=False,
2336
+ ),
2337
+ KilnModelProvider(
2338
+ name=ModelProviderName.docker_model_runner,
2339
+ supports_structured_output=False,
2340
+ supports_data_gen=False,
2341
+ parser=ModelParserID.r1_thinking,
2342
+ reasoning_capable=True,
2343
+ # Best mode, but fails to often to enable without warning
2344
+ structured_output_mode=StructuredOutputMode.json_instructions,
2345
+ model_id="ai/deepseek-r1-distill-llama:8B-Q4_K_M",
2346
+ supports_function_calling=False,
1951
2347
  ),
1952
2348
  ],
1953
2349
  ),
@@ -1957,6 +2353,18 @@ built_in_models: List[KilnModel] = [
1957
2353
  name=ModelName.deepseek_r1_distill_qwen_7b,
1958
2354
  friendly_name="DeepSeek R1 Distill Qwen 7B",
1959
2355
  providers=[
2356
+ KilnModelProvider(
2357
+ name=ModelProviderName.openrouter,
2358
+ # Best mode, but fails to often to enable without warning
2359
+ supports_structured_output=False,
2360
+ supports_data_gen=False,
2361
+ model_id="deepseek/deepseek-r1-distill-qwen-7b",
2362
+ structured_output_mode=StructuredOutputMode.json_instructions,
2363
+ reasoning_capable=True,
2364
+ r1_openrouter_options=True,
2365
+ require_openrouter_reasoning=True,
2366
+ supports_function_calling=False,
2367
+ ),
1960
2368
  KilnModelProvider(
1961
2369
  name=ModelProviderName.ollama,
1962
2370
  # Best mode, but fails to often to enable without warning
@@ -1966,6 +2374,18 @@ built_in_models: List[KilnModel] = [
1966
2374
  reasoning_capable=True,
1967
2375
  structured_output_mode=StructuredOutputMode.json_instructions,
1968
2376
  model_id="deepseek-r1:7b",
2377
+ supports_function_calling=False,
2378
+ ),
2379
+ KilnModelProvider(
2380
+ name=ModelProviderName.siliconflow_cn,
2381
+ # Best mode, but fails to often to enable without warning
2382
+ supports_structured_output=False,
2383
+ supports_data_gen=False,
2384
+ model_id="Pro/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",
2385
+ structured_output_mode=StructuredOutputMode.json_instructions,
2386
+ reasoning_capable=True,
2387
+ reasoning_optional_for_structured_output=True,
2388
+ supports_function_calling=False,
1969
2389
  ),
1970
2390
  ],
1971
2391
  ),
@@ -1986,6 +2406,7 @@ built_in_models: List[KilnModel] = [
1986
2406
  require_openrouter_reasoning=True,
1987
2407
  openrouter_skip_required_parameters=True,
1988
2408
  parser=ModelParserID.r1_thinking,
2409
+ supports_function_calling=False,
1989
2410
  ),
1990
2411
  KilnModelProvider(
1991
2412
  name=ModelProviderName.ollama,
@@ -1995,6 +2416,7 @@ built_in_models: List[KilnModel] = [
1995
2416
  reasoning_capable=True,
1996
2417
  structured_output_mode=StructuredOutputMode.json_instructions,
1997
2418
  model_id="deepseek-r1:1.5b",
2419
+ supports_function_calling=False,
1998
2420
  ),
1999
2421
  KilnModelProvider(
2000
2422
  name=ModelProviderName.together_ai,
@@ -2003,6 +2425,7 @@ built_in_models: List[KilnModel] = [
2003
2425
  parser=ModelParserID.r1_thinking,
2004
2426
  supports_structured_output=False,
2005
2427
  supports_data_gen=False,
2428
+ supports_function_calling=False,
2006
2429
  ),
2007
2430
  ],
2008
2431
  ),
@@ -2019,6 +2442,7 @@ built_in_models: List[KilnModel] = [
2019
2442
  model_id="dolphin-mixtral:8x22b",
2020
2443
  uncensored=True,
2021
2444
  suggested_for_uncensored_data_gen=True,
2445
+ supports_function_calling=False,
2022
2446
  ),
2023
2447
  KilnModelProvider(
2024
2448
  name=ModelProviderName.openrouter,
@@ -2027,6 +2451,7 @@ built_in_models: List[KilnModel] = [
2027
2451
  model_id="cognitivecomputations/dolphin-mixtral-8x22b",
2028
2452
  uncensored=True,
2029
2453
  suggested_for_uncensored_data_gen=True,
2454
+ supports_function_calling=False,
2030
2455
  ),
2031
2456
  ],
2032
2457
  ),
@@ -2111,6 +2536,7 @@ built_in_models: List[KilnModel] = [
2111
2536
  r1_openrouter_options=True,
2112
2537
  parser=ModelParserID.r1_thinking,
2113
2538
  supports_data_gen=False,
2539
+ supports_function_calling=False,
2114
2540
  ),
2115
2541
  KilnModelProvider(
2116
2542
  name=ModelProviderName.ollama,
@@ -2118,6 +2544,15 @@ built_in_models: List[KilnModel] = [
2118
2544
  supports_data_gen=False,
2119
2545
  reasoning_capable=True,
2120
2546
  structured_output_mode=StructuredOutputMode.json_schema,
2547
+ supports_function_calling=False,
2548
+ ),
2549
+ KilnModelProvider(
2550
+ name=ModelProviderName.docker_model_runner,
2551
+ model_id="ai/qwen3:0.6B-F16",
2552
+ supports_data_gen=False,
2553
+ reasoning_capable=True,
2554
+ structured_output_mode=StructuredOutputMode.json_schema,
2555
+ supports_function_calling=False,
2121
2556
  ),
2122
2557
  ],
2123
2558
  ),
@@ -2137,6 +2572,7 @@ built_in_models: List[KilnModel] = [
2137
2572
  r1_openrouter_options=True,
2138
2573
  parser=ModelParserID.r1_thinking,
2139
2574
  supports_data_gen=False,
2575
+ supports_function_calling=False,
2140
2576
  ),
2141
2577
  KilnModelProvider(
2142
2578
  name=ModelProviderName.ollama,
@@ -2144,6 +2580,7 @@ built_in_models: List[KilnModel] = [
2144
2580
  supports_data_gen=False,
2145
2581
  reasoning_capable=True,
2146
2582
  structured_output_mode=StructuredOutputMode.json_schema,
2583
+ supports_function_calling=False,
2147
2584
  ),
2148
2585
  ],
2149
2586
  ),
@@ -2160,6 +2597,7 @@ built_in_models: List[KilnModel] = [
2160
2597
  formatter=ModelFormatterID.qwen3_style_no_think,
2161
2598
  supports_data_gen=False,
2162
2599
  parser=ModelParserID.optional_r1_thinking,
2600
+ supports_function_calling=False,
2163
2601
  ),
2164
2602
  KilnModelProvider(
2165
2603
  name=ModelProviderName.ollama,
@@ -2167,6 +2605,7 @@ built_in_models: List[KilnModel] = [
2167
2605
  formatter=ModelFormatterID.qwen3_style_no_think,
2168
2606
  supports_data_gen=False,
2169
2607
  structured_output_mode=StructuredOutputMode.json_schema,
2608
+ supports_function_calling=False,
2170
2609
  ),
2171
2610
  ],
2172
2611
  ),
@@ -2185,6 +2624,7 @@ built_in_models: List[KilnModel] = [
2185
2624
  r1_openrouter_options=True,
2186
2625
  parser=ModelParserID.r1_thinking,
2187
2626
  supports_data_gen=False,
2627
+ supports_function_calling=False,
2188
2628
  ),
2189
2629
  KilnModelProvider(
2190
2630
  name=ModelProviderName.ollama,
@@ -2192,6 +2632,7 @@ built_in_models: List[KilnModel] = [
2192
2632
  supports_data_gen=False,
2193
2633
  reasoning_capable=True,
2194
2634
  structured_output_mode=StructuredOutputMode.json_schema,
2635
+ supports_function_calling=False,
2195
2636
  ),
2196
2637
  ],
2197
2638
  ),
@@ -2208,6 +2649,7 @@ built_in_models: List[KilnModel] = [
2208
2649
  formatter=ModelFormatterID.qwen3_style_no_think,
2209
2650
  supports_data_gen=False,
2210
2651
  parser=ModelParserID.optional_r1_thinking,
2652
+ supports_function_calling=False,
2211
2653
  ),
2212
2654
  KilnModelProvider(
2213
2655
  name=ModelProviderName.ollama,
@@ -2215,6 +2657,7 @@ built_in_models: List[KilnModel] = [
2215
2657
  structured_output_mode=StructuredOutputMode.json_schema,
2216
2658
  formatter=ModelFormatterID.qwen3_style_no_think,
2217
2659
  supports_data_gen=False,
2660
+ supports_function_calling=False,
2218
2661
  ),
2219
2662
  ],
2220
2663
  ),
@@ -2234,6 +2677,7 @@ built_in_models: List[KilnModel] = [
2234
2677
  r1_openrouter_options=True,
2235
2678
  parser=ModelParserID.r1_thinking,
2236
2679
  supports_data_gen=False,
2680
+ supports_function_calling=False,
2237
2681
  ),
2238
2682
  KilnModelProvider(
2239
2683
  name=ModelProviderName.ollama,
@@ -2241,6 +2685,25 @@ built_in_models: List[KilnModel] = [
2241
2685
  supports_data_gen=False,
2242
2686
  reasoning_capable=True,
2243
2687
  structured_output_mode=StructuredOutputMode.json_schema,
2688
+ supports_function_calling=False,
2689
+ ),
2690
+ KilnModelProvider(
2691
+ name=ModelProviderName.siliconflow_cn,
2692
+ model_id="Qwen/Qwen3-8B",
2693
+ structured_output_mode=StructuredOutputMode.json_schema,
2694
+ reasoning_capable=True,
2695
+ siliconflow_enable_thinking=True,
2696
+ reasoning_optional_for_structured_output=True,
2697
+ supports_data_gen=False,
2698
+ supports_function_calling=False,
2699
+ ),
2700
+ KilnModelProvider(
2701
+ name=ModelProviderName.docker_model_runner,
2702
+ model_id="ai/qwen3:8B-Q4_K_M",
2703
+ supports_data_gen=False,
2704
+ reasoning_capable=True,
2705
+ structured_output_mode=StructuredOutputMode.json_schema,
2706
+ supports_function_calling=False,
2244
2707
  ),
2245
2708
  ],
2246
2709
  ),
@@ -2257,6 +2720,7 @@ built_in_models: List[KilnModel] = [
2257
2720
  formatter=ModelFormatterID.qwen3_style_no_think,
2258
2721
  supports_data_gen=False,
2259
2722
  parser=ModelParserID.optional_r1_thinking,
2723
+ supports_function_calling=False,
2260
2724
  ),
2261
2725
  KilnModelProvider(
2262
2726
  name=ModelProviderName.ollama,
@@ -2264,6 +2728,15 @@ built_in_models: List[KilnModel] = [
2264
2728
  structured_output_mode=StructuredOutputMode.json_schema,
2265
2729
  formatter=ModelFormatterID.qwen3_style_no_think,
2266
2730
  supports_data_gen=False,
2731
+ supports_function_calling=False,
2732
+ ),
2733
+ KilnModelProvider(
2734
+ name=ModelProviderName.siliconflow_cn,
2735
+ model_id="Qwen/Qwen3-8B",
2736
+ structured_output_mode=StructuredOutputMode.json_schema,
2737
+ siliconflow_enable_thinking=False,
2738
+ supports_data_gen=False,
2739
+ supports_function_calling=False,
2267
2740
  ),
2268
2741
  ],
2269
2742
  ),
@@ -2282,6 +2755,7 @@ built_in_models: List[KilnModel] = [
2282
2755
  r1_openrouter_options=True,
2283
2756
  parser=ModelParserID.r1_thinking,
2284
2757
  supports_data_gen=True,
2758
+ supports_function_calling=False,
2285
2759
  ),
2286
2760
  KilnModelProvider(
2287
2761
  name=ModelProviderName.ollama,
@@ -2289,6 +2763,25 @@ built_in_models: List[KilnModel] = [
2289
2763
  supports_data_gen=True,
2290
2764
  reasoning_capable=True,
2291
2765
  structured_output_mode=StructuredOutputMode.json_schema,
2766
+ supports_function_calling=False,
2767
+ ),
2768
+ KilnModelProvider(
2769
+ name=ModelProviderName.siliconflow_cn,
2770
+ model_id="Qwen/Qwen3-14B",
2771
+ structured_output_mode=StructuredOutputMode.json_schema,
2772
+ supports_data_gen=True,
2773
+ reasoning_capable=True,
2774
+ siliconflow_enable_thinking=True,
2775
+ reasoning_optional_for_structured_output=True,
2776
+ supports_function_calling=False,
2777
+ ),
2778
+ KilnModelProvider(
2779
+ name=ModelProviderName.docker_model_runner,
2780
+ model_id="ai/qwen3:14B-Q6_K",
2781
+ supports_data_gen=True,
2782
+ reasoning_capable=True,
2783
+ structured_output_mode=StructuredOutputMode.json_schema,
2784
+ supports_function_calling=False,
2292
2785
  ),
2293
2786
  ],
2294
2787
  ),
@@ -2313,6 +2806,34 @@ built_in_models: List[KilnModel] = [
2313
2806
  supports_data_gen=True,
2314
2807
  structured_output_mode=StructuredOutputMode.json_schema,
2315
2808
  ),
2809
+ KilnModelProvider(
2810
+ name=ModelProviderName.siliconflow_cn,
2811
+ model_id="Qwen/Qwen3-14B",
2812
+ formatter=ModelFormatterID.qwen3_style_no_think,
2813
+ structured_output_mode=StructuredOutputMode.json_schema,
2814
+ siliconflow_enable_thinking=False,
2815
+ supports_data_gen=True,
2816
+ ),
2817
+ ],
2818
+ ),
2819
+ # Qwen 3 30B (3B Active) 2507 Version
2820
+ KilnModel(
2821
+ family=ModelFamily.qwen,
2822
+ name=ModelName.qwen_3_30b_a3b_2507,
2823
+ friendly_name="Qwen 3 30B (3B Active) 2507",
2824
+ providers=[
2825
+ KilnModelProvider(
2826
+ name=ModelProviderName.ollama,
2827
+ model_id="qwen3:30b-a3b-thinking-2507-q4_K_M",
2828
+ reasoning_capable=True,
2829
+ structured_output_mode=StructuredOutputMode.json_schema,
2830
+ ),
2831
+ KilnModelProvider(
2832
+ name=ModelProviderName.docker_model_runner,
2833
+ model_id="ai/qwen3:30B-A3B-Q4_K_M",
2834
+ reasoning_capable=True,
2835
+ structured_output_mode=StructuredOutputMode.json_schema,
2836
+ ),
2316
2837
  ],
2317
2838
  ),
2318
2839
  # Qwen 3 30B (3B Active)
@@ -2346,6 +2867,33 @@ built_in_models: List[KilnModel] = [
2346
2867
  structured_output_mode=StructuredOutputMode.json_instructions,
2347
2868
  parser=ModelParserID.r1_thinking,
2348
2869
  ),
2870
+ KilnModelProvider(
2871
+ name=ModelProviderName.siliconflow_cn,
2872
+ model_id="Qwen/Qwen3-30B-A3B",
2873
+ structured_output_mode=StructuredOutputMode.json_schema,
2874
+ reasoning_capable=True,
2875
+ reasoning_optional_for_structured_output=True,
2876
+ supports_data_gen=True,
2877
+ ),
2878
+ ],
2879
+ ),
2880
+ # Qwen 3 30B (3B Active) 2507 Version Non-Thinking
2881
+ KilnModel(
2882
+ family=ModelFamily.qwen,
2883
+ name=ModelName.qwen_3_30b_a3b_2507_no_thinking,
2884
+ friendly_name="Qwen 3 30B (3B Active) 2507 Non-Thinking",
2885
+ providers=[
2886
+ KilnModelProvider(
2887
+ name=ModelProviderName.openrouter,
2888
+ model_id="qwen/qwen3-30b-a3b-instruct-2507",
2889
+ structured_output_mode=StructuredOutputMode.json_instructions,
2890
+ ),
2891
+ KilnModelProvider(
2892
+ name=ModelProviderName.ollama,
2893
+ model_id="qwen3:30b-a3b-instruct-2507-q8_0",
2894
+ structured_output_mode=StructuredOutputMode.json_schema,
2895
+ supports_data_gen=True,
2896
+ ),
2349
2897
  ],
2350
2898
  ),
2351
2899
  # Qwen 3 30B (3B Active) Non-Thinking
@@ -2385,6 +2933,15 @@ built_in_models: List[KilnModel] = [
2385
2933
  name=ModelName.qwen_3_32b,
2386
2934
  friendly_name="Qwen 3 32B",
2387
2935
  providers=[
2936
+ KilnModelProvider(
2937
+ name=ModelProviderName.groq,
2938
+ model_id="Qwen/Qwen3-32B",
2939
+ supports_data_gen=True,
2940
+ reasoning_capable=True,
2941
+ structured_output_mode=StructuredOutputMode.json_instructions,
2942
+ # This model doesn't return reasoning content after a tool call so we need to allow optional reasoning.
2943
+ parser=ModelParserID.optional_r1_thinking,
2944
+ ),
2388
2945
  KilnModelProvider(
2389
2946
  name=ModelProviderName.openrouter,
2390
2947
  model_id="qwen/qwen3-32b",
@@ -2394,6 +2951,8 @@ built_in_models: List[KilnModel] = [
2394
2951
  structured_output_mode=StructuredOutputMode.json_instructions,
2395
2952
  parser=ModelParserID.r1_thinking,
2396
2953
  supports_data_gen=True,
2954
+ # Not reliable, even for simple functions
2955
+ supports_function_calling=False,
2397
2956
  ),
2398
2957
  KilnModelProvider(
2399
2958
  name=ModelProviderName.ollama,
@@ -2402,6 +2961,23 @@ built_in_models: List[KilnModel] = [
2402
2961
  reasoning_capable=True,
2403
2962
  structured_output_mode=StructuredOutputMode.json_schema,
2404
2963
  ),
2964
+ KilnModelProvider(
2965
+ name=ModelProviderName.siliconflow_cn,
2966
+ model_id="Qwen/Qwen3-32B",
2967
+ structured_output_mode=StructuredOutputMode.json_schema,
2968
+ reasoning_capable=True,
2969
+ reasoning_optional_for_structured_output=True,
2970
+ supports_data_gen=True,
2971
+ ),
2972
+ KilnModelProvider(
2973
+ name=ModelProviderName.cerebras,
2974
+ model_id="qwen-3-32b",
2975
+ structured_output_mode=StructuredOutputMode.json_instructions,
2976
+ supports_data_gen=True,
2977
+ reasoning_capable=True,
2978
+ # This model doesn't return reasoning content after a tool call so we need to allow optional reasoning.
2979
+ parser=ModelParserID.optional_r1_thinking,
2980
+ ),
2405
2981
  ],
2406
2982
  ),
2407
2983
  # Qwen 3 32B No Thinking
@@ -2425,6 +3001,57 @@ built_in_models: List[KilnModel] = [
2425
3001
  formatter=ModelFormatterID.qwen3_style_no_think,
2426
3002
  supports_data_gen=True,
2427
3003
  ),
3004
+ KilnModelProvider(
3005
+ name=ModelProviderName.cerebras,
3006
+ model_id="qwen-3-32b",
3007
+ structured_output_mode=StructuredOutputMode.json_schema,
3008
+ formatter=ModelFormatterID.qwen3_style_no_think,
3009
+ supports_data_gen=True,
3010
+ parser=ModelParserID.optional_r1_thinking,
3011
+ ),
3012
+ ],
3013
+ ),
3014
+ # Qwen 3 235B (22B Active) 2507 Version
3015
+ KilnModel(
3016
+ family=ModelFamily.qwen,
3017
+ name=ModelName.qwen_3_235b_a22b_2507,
3018
+ friendly_name="Qwen 3 235B (22B Active) 2507",
3019
+ providers=[
3020
+ KilnModelProvider(
3021
+ name=ModelProviderName.openrouter,
3022
+ model_id="qwen/qwen3-235b-a22b-thinking-2507",
3023
+ reasoning_capable=True,
3024
+ require_openrouter_reasoning=True,
3025
+ supports_data_gen=True,
3026
+ suggested_for_data_gen=True,
3027
+ r1_openrouter_options=True,
3028
+ structured_output_mode=StructuredOutputMode.json_instructions,
3029
+ parser=ModelParserID.r1_thinking,
3030
+ ),
3031
+ KilnModelProvider(
3032
+ name=ModelProviderName.ollama,
3033
+ model_id="qwen3:235b-a22b-thinking-2507-q4_K_M",
3034
+ supports_data_gen=True,
3035
+ reasoning_capable=True,
3036
+ structured_output_mode=StructuredOutputMode.json_schema,
3037
+ ),
3038
+ KilnModelProvider(
3039
+ name=ModelProviderName.fireworks_ai,
3040
+ model_id="accounts/fireworks/models/qwen3-235b-a22b-thinking-2507",
3041
+ supports_data_gen=True,
3042
+ reasoning_capable=True,
3043
+ structured_output_mode=StructuredOutputMode.json_instructions,
3044
+ parser=ModelParserID.r1_thinking,
3045
+ ),
3046
+ KilnModelProvider(
3047
+ name=ModelProviderName.together_ai,
3048
+ model_id="Qwen/Qwen3-235B-A22B-Thinking-2507",
3049
+ supports_data_gen=True,
3050
+ reasoning_capable=True,
3051
+ structured_output_mode=StructuredOutputMode.json_instructions,
3052
+ parser=ModelParserID.r1_thinking,
3053
+ supports_function_calling=False,
3054
+ ),
2428
3055
  ],
2429
3056
  ),
2430
3057
  # Qwen 3 235B (22B Active)
@@ -2439,7 +3066,6 @@ built_in_models: List[KilnModel] = [
2439
3066
  reasoning_capable=True,
2440
3067
  require_openrouter_reasoning=True,
2441
3068
  supports_data_gen=True,
2442
- suggested_for_data_gen=True,
2443
3069
  r1_openrouter_options=True,
2444
3070
  structured_output_mode=StructuredOutputMode.json_instructions,
2445
3071
  parser=ModelParserID.r1_thinking,
@@ -2466,6 +3092,51 @@ built_in_models: List[KilnModel] = [
2466
3092
  reasoning_capable=True,
2467
3093
  structured_output_mode=StructuredOutputMode.json_instructions,
2468
3094
  parser=ModelParserID.r1_thinking,
3095
+ supports_function_calling=False,
3096
+ ),
3097
+ KilnModelProvider(
3098
+ name=ModelProviderName.siliconflow_cn,
3099
+ model_id="Qwen/Qwen3-235B-A22B",
3100
+ structured_output_mode=StructuredOutputMode.json_instructions,
3101
+ reasoning_capable=True,
3102
+ siliconflow_enable_thinking=True,
3103
+ supports_data_gen=True,
3104
+ suggested_for_data_gen=True,
3105
+ ),
3106
+ ],
3107
+ ),
3108
+ # Qwen 3 235B (22B Active) 2507 Version Non-Thinking
3109
+ KilnModel(
3110
+ family=ModelFamily.qwen,
3111
+ name=ModelName.qwen_3_235b_a22b_2507_no_thinking,
3112
+ friendly_name="Qwen 3 235B (22B Active) 2507 Non-Thinking",
3113
+ providers=[
3114
+ KilnModelProvider(
3115
+ name=ModelProviderName.openrouter,
3116
+ model_id="qwen/qwen3-235b-a22b-2507",
3117
+ structured_output_mode=StructuredOutputMode.json_instructions,
3118
+ supports_data_gen=True,
3119
+ reasoning_capable=False,
3120
+ ),
3121
+ KilnModelProvider(
3122
+ name=ModelProviderName.ollama,
3123
+ model_id="qwen3:235b-a22b-instruct-2507-q4_K_M",
3124
+ structured_output_mode=StructuredOutputMode.json_schema,
3125
+ supports_data_gen=True,
3126
+ reasoning_capable=False,
3127
+ ),
3128
+ KilnModelProvider(
3129
+ name=ModelProviderName.fireworks_ai,
3130
+ model_id="accounts/fireworks/models/qwen3-235b-a22b-instruct-2507",
3131
+ supports_data_gen=True,
3132
+ structured_output_mode=StructuredOutputMode.json_instructions,
3133
+ ),
3134
+ KilnModelProvider(
3135
+ name=ModelProviderName.together_ai,
3136
+ model_id="Qwen/Qwen3-235B-A22B-Instruct-2507-tput",
3137
+ supports_data_gen=True,
3138
+ structured_output_mode=StructuredOutputMode.json_instructions,
3139
+ supports_function_calling=False,
2469
3140
  ),
2470
3141
  ],
2471
3142
  ),
@@ -2506,6 +3177,77 @@ built_in_models: List[KilnModel] = [
2506
3177
  formatter=ModelFormatterID.qwen3_style_no_think,
2507
3178
  structured_output_mode=StructuredOutputMode.json_instructions,
2508
3179
  parser=ModelParserID.optional_r1_thinking,
3180
+ supports_function_calling=False,
3181
+ ),
3182
+ KilnModelProvider(
3183
+ name=ModelProviderName.siliconflow_cn,
3184
+ model_id="Qwen/Qwen3-235B-A22B",
3185
+ structured_output_mode=StructuredOutputMode.json_instructions,
3186
+ siliconflow_enable_thinking=False,
3187
+ supports_data_gen=True,
3188
+ ),
3189
+ ],
3190
+ ),
3191
+ # Qwen Long L1 32B
3192
+ KilnModel(
3193
+ family=ModelFamily.qwen,
3194
+ name=ModelName.qwen_long_l1_32b,
3195
+ friendly_name="QwenLong L1 32B",
3196
+ providers=[
3197
+ KilnModelProvider(
3198
+ name=ModelProviderName.siliconflow_cn,
3199
+ model_id="Tongyi-Zhiwen/QwenLong-L1-32B",
3200
+ structured_output_mode=StructuredOutputMode.json_schema,
3201
+ reasoning_capable=True,
3202
+ reasoning_optional_for_structured_output=True,
3203
+ supports_function_calling=False,
3204
+ ),
3205
+ ],
3206
+ ),
3207
+ # GLM 4.5
3208
+ KilnModel(
3209
+ family=ModelFamily.glm,
3210
+ name=ModelName.glm_4_5,
3211
+ friendly_name="GLM 4.5",
3212
+ providers=[
3213
+ KilnModelProvider(
3214
+ name=ModelProviderName.openrouter,
3215
+ model_id="z-ai/glm-4.5",
3216
+ structured_output_mode=StructuredOutputMode.json_instructions,
3217
+ reasoning_capable=True,
3218
+ ),
3219
+ KilnModelProvider(
3220
+ name=ModelProviderName.fireworks_ai,
3221
+ model_id="accounts/fireworks/models/glm-4p5",
3222
+ structured_output_mode=StructuredOutputMode.json_instructions,
3223
+ reasoning_capable=True,
3224
+ ),
3225
+ ],
3226
+ ),
3227
+ # GLM 4.5 AIR
3228
+ KilnModel(
3229
+ family=ModelFamily.glm,
3230
+ name=ModelName.glm_4_5_air,
3231
+ friendly_name="GLM 4.5 AIR",
3232
+ providers=[
3233
+ KilnModelProvider(
3234
+ name=ModelProviderName.openrouter,
3235
+ model_id="z-ai/glm-4.5-air",
3236
+ structured_output_mode=StructuredOutputMode.json_instructions,
3237
+ reasoning_capable=True,
3238
+ ),
3239
+ KilnModelProvider(
3240
+ name=ModelProviderName.fireworks_ai,
3241
+ model_id="accounts/fireworks/models/glm-4p5-air",
3242
+ structured_output_mode=StructuredOutputMode.json_instructions,
3243
+ reasoning_capable=True,
3244
+ ),
3245
+ KilnModelProvider(
3246
+ name=ModelProviderName.together_ai,
3247
+ model_id="zai-org/GLM-4.5-Air-FP8",
3248
+ structured_output_mode=StructuredOutputMode.json_instructions,
3249
+ reasoning_capable=True,
3250
+ parser=ModelParserID.r1_thinking,
2509
3251
  ),
2510
3252
  ],
2511
3253
  ),
@@ -2542,6 +3284,162 @@ built_in_models: List[KilnModel] = [
2542
3284
  structured_output_mode=StructuredOutputMode.function_calling,
2543
3285
  suggested_for_evals=True,
2544
3286
  ),
3287
+ KilnModelProvider(
3288
+ name=ModelProviderName.siliconflow_cn,
3289
+ model_id="Pro/moonshotai/Kimi-K2-Instruct",
3290
+ structured_output_mode=StructuredOutputMode.json_schema,
3291
+ supports_data_gen=True,
3292
+ suggested_for_evals=True,
3293
+ ),
3294
+ ],
3295
+ ),
3296
+ KilnModel(
3297
+ family=ModelFamily.kimi,
3298
+ name=ModelName.kimi_dev_72b,
3299
+ friendly_name="Kimi Dev 72B",
3300
+ providers=[
3301
+ KilnModelProvider(
3302
+ name=ModelProviderName.siliconflow_cn,
3303
+ model_id="moonshotai/Kimi-Dev-72B",
3304
+ structured_output_mode=StructuredOutputMode.json_schema,
3305
+ reasoning_capable=True,
3306
+ reasoning_optional_for_structured_output=True,
3307
+ supports_function_calling=False,
3308
+ ),
3309
+ ],
3310
+ ),
3311
+ # GLM 4.1V 9B
3312
+ KilnModel(
3313
+ family=ModelFamily.glm,
3314
+ name=ModelName.glm_4_1v_9b_thinking,
3315
+ friendly_name="GLM-4.1V 9B Thinking",
3316
+ providers=[
3317
+ KilnModelProvider(
3318
+ name=ModelProviderName.siliconflow_cn,
3319
+ model_id="Pro/THUDM/GLM-4.1V-9B-Thinking",
3320
+ structured_output_mode=StructuredOutputMode.json_instructions,
3321
+ reasoning_capable=True,
3322
+ supports_data_gen=False,
3323
+ supports_function_calling=False,
3324
+ ),
3325
+ ],
3326
+ ),
3327
+ # GLM Z1 32B 0414
3328
+ KilnModel(
3329
+ family=ModelFamily.glm,
3330
+ name=ModelName.glm_z1_32b_0414,
3331
+ friendly_name="GLM-Z1 32B 0414",
3332
+ providers=[
3333
+ KilnModelProvider(
3334
+ name=ModelProviderName.siliconflow_cn,
3335
+ model_id="THUDM/GLM-Z1-32B-0414",
3336
+ structured_output_mode=StructuredOutputMode.json_schema,
3337
+ reasoning_capable=True,
3338
+ reasoning_optional_for_structured_output=True,
3339
+ supports_data_gen=False,
3340
+ supports_function_calling=False,
3341
+ ),
3342
+ ],
3343
+ ),
3344
+ # GLM Z1 9B 0414
3345
+ KilnModel(
3346
+ family=ModelFamily.glm,
3347
+ name=ModelName.glm_z1_9b_0414,
3348
+ friendly_name="GLM-Z1 9B 0414",
3349
+ providers=[
3350
+ KilnModelProvider(
3351
+ name=ModelProviderName.siliconflow_cn,
3352
+ model_id="THUDM/GLM-Z1-9B-0414",
3353
+ structured_output_mode=StructuredOutputMode.json_schema,
3354
+ reasoning_capable=True,
3355
+ reasoning_optional_for_structured_output=True,
3356
+ supports_data_gen=False,
3357
+ supports_function_calling=False,
3358
+ ),
3359
+ ],
3360
+ ),
3361
+ # Ernie 4.5 300B A47B
3362
+ KilnModel(
3363
+ family=ModelFamily.ernie,
3364
+ name=ModelName.ernie_4_5_300b_a47b,
3365
+ friendly_name="Ernie 4.5 300B A47B",
3366
+ providers=[
3367
+ KilnModelProvider(
3368
+ name=ModelProviderName.openrouter,
3369
+ model_id="baidu/ernie-4.5-300b-a47b",
3370
+ structured_output_mode=StructuredOutputMode.json_instructions,
3371
+ supports_data_gen=True,
3372
+ r1_openrouter_options=True,
3373
+ supports_function_calling=False,
3374
+ ),
3375
+ KilnModelProvider(
3376
+ name=ModelProviderName.siliconflow_cn,
3377
+ model_id="baidu/ERNIE-4.5-300B-A47B",
3378
+ structured_output_mode=StructuredOutputMode.json_schema,
3379
+ supports_data_gen=True,
3380
+ supports_function_calling=False,
3381
+ ),
3382
+ ],
3383
+ ),
3384
+ # Hunyuan A13B Instruct
3385
+ KilnModel(
3386
+ family=ModelFamily.hunyuan,
3387
+ name=ModelName.hunyuan_a13b,
3388
+ friendly_name="Hunyuan A13B",
3389
+ providers=[
3390
+ # Openrouter provider for this model exists but currently wrongly parses the answer
3391
+ # it returns the reasoning at the right place, but wraps the answer (even JSON response)
3392
+ # between <answer> and </answer> tags
3393
+ KilnModelProvider(
3394
+ name=ModelProviderName.siliconflow_cn,
3395
+ model_id="tencent/Hunyuan-A13B-Instruct",
3396
+ structured_output_mode=StructuredOutputMode.json_schema,
3397
+ reasoning_capable=True,
3398
+ siliconflow_enable_thinking=True,
3399
+ reasoning_optional_for_structured_output=True,
3400
+ supports_data_gen=False,
3401
+ supports_function_calling=False,
3402
+ ),
3403
+ ],
3404
+ ),
3405
+ # Minimax M1 80K
3406
+ KilnModel(
3407
+ family=ModelFamily.minimax,
3408
+ name=ModelName.minimax_m1_80k,
3409
+ friendly_name="Minimax M1",
3410
+ providers=[
3411
+ KilnModelProvider(
3412
+ name=ModelProviderName.openrouter,
3413
+ model_id="minimax/minimax-m1",
3414
+ structured_output_mode=StructuredOutputMode.json_instructions,
3415
+ supports_data_gen=True,
3416
+ r1_openrouter_options=True,
3417
+ require_openrouter_reasoning=True,
3418
+ ),
3419
+ KilnModelProvider(
3420
+ name=ModelProviderName.siliconflow_cn,
3421
+ model_id="MiniMaxAI/MiniMax-M1-80k",
3422
+ structured_output_mode=StructuredOutputMode.json_instructions,
3423
+ reasoning_capable=True,
3424
+ supports_data_gen=True,
3425
+ supports_function_calling=False,
3426
+ ),
3427
+ ],
3428
+ ),
3429
+ # Pangu Pro MOE
3430
+ KilnModel(
3431
+ family=ModelFamily.pangu,
3432
+ name=ModelName.pangu_pro_moe_72b_a16b,
3433
+ friendly_name="Pangu Pro MOE 72B A16B",
3434
+ providers=[
3435
+ KilnModelProvider(
3436
+ name=ModelProviderName.siliconflow_cn,
3437
+ model_id="ascend-tribe/pangu-pro-moe",
3438
+ structured_output_mode=StructuredOutputMode.json_instructions,
3439
+ reasoning_capable=True,
3440
+ supports_data_gen=True,
3441
+ supports_function_calling=False,
3442
+ ),
2545
3443
  ],
2546
3444
  ),
2547
3445
  ]