1- import logging
21from typing import List
32
43import pytest
54
6- from libs .core .kiln_ai .adapters .ml_model_list import KilnModelProvider , built_in_models
5+ from app .desktop .studio_server .finetune_api import (
6+ FinetuneProviderModel ,
7+ fetch_fireworks_finetune_models ,
8+ )
9+ from libs .core .kiln_ai .adapters .ml_model_list import (
10+ KilnModelProvider ,
11+ ModelProviderName ,
12+ built_in_models ,
13+ )
714from libs .core .kiln_ai .adapters .provider_tools import provider_name_from_id
815
9- logger = logging .getLogger (__name__ )
10-
1116
1217def _all_providers_support (providers : List [KilnModelProvider ], attribute : str ) -> bool :
1318 """Check if all providers support a given feature"""
@@ -28,15 +33,30 @@ def _get_support_status(providers: List[KilnModelProvider], attribute: str) -> s
2833 return ""
2934
3035
31- def _has_finetune_support (providers : List [KilnModelProvider ]) -> str :
36+ def _has_finetune_support (
37+ providers : List [KilnModelProvider ], fireworks_models : List [FinetuneProviderModel ]
38+ ) -> str :
3239 """Check if any provider supports fine-tuning"""
40+
41+ # Check fireworks list
42+ for provider in providers :
43+ if provider .name .value == ModelProviderName .fireworks_ai :
44+ fireworks_id = provider .provider_finetune_id or provider .model_id
45+ for index , model in enumerate (fireworks_models ):
46+ if model .id == fireworks_id :
47+ # We could remove the model from the list so we don't list it again
48+ # fireworks_models.pop(index)
49+ return "✅︎"
50+
3351 return "✅︎" if any (p .provider_finetune_id for p in providers ) else ""
3452
3553
3654@pytest .mark .paid (reason = "Marking as paid so it isn't run by default" )
37- def test_generate_model_table ():
55+ async def test_generate_model_table ():
3856 """Generate a markdown table of all models and their capabilities"""
3957
58+ fireworks_models = await fetch_fireworks_finetune_models ()
59+
4060 # Table header
4161 table = [
4262 "| Model Name | Providers | Structured Output | Reasoning | Synthetic Data | API Fine-Tuneable |" ,
@@ -52,14 +72,16 @@ def test_generate_model_table():
5272 )
5373 reasoning = _get_support_status (model .providers , "reasoning_capable" )
5474 data_gen = _get_support_status (model .providers , "supports_data_gen" )
55- finetune = _has_finetune_support (model .providers )
75+ finetune = _has_finetune_support (model .providers , fireworks_models )
5676
5777 row = f"| { model .friendly_name } | { provider_names } | { structured_output } | { reasoning } | { data_gen } | { finetune } |"
5878 table .append (row )
5979
6080 # Print the table (useful for documentation)
6181 print ("\n Model Capability Matrix:\n " )
6282 print ("\n " .join (table ))
83+ print ("\n \n Fireworks models remaining:\n " )
84+ print ("- " + "\n - " .join (f"{ m .name } " for m in fireworks_models ), "\n \n " )
6385
6486 # Basic assertions to ensure the table is well-formed
6587 assert len (table ) > 2 , "Table should have header and at least one row"
0 commit comments