55from pathlib import Path
66
77from data_designer .cli .forms .provider_builder import ProviderFormBuilder
8+ from data_designer .cli .repositories .model_repository import ModelRepository
89from data_designer .cli .repositories .provider_repository import ProviderRepository
10+ from data_designer .cli .services .model_service import ModelService
911from data_designer .cli .services .provider_service import ProviderService
1012from data_designer .cli .ui import (
1113 confirm_action ,
1517 print_header ,
1618 print_info ,
1719 print_success ,
20+ print_warning ,
1821 select_with_arrows ,
1922)
2023from data_designer .engine .model_provider import ModelProvider
@@ -27,6 +30,8 @@ def __init__(self, config_dir: Path):
2730 self .config_dir = config_dir
2831 self .repository = ProviderRepository (config_dir )
2932 self .service = ProviderService (self .repository )
33+ self .model_repository = ModelRepository (config_dir )
34+ self .model_service = ModelService (self .model_repository )
3035
3136 def run (self ) -> None :
3237 """Main entry point for provider configuration."""
@@ -182,14 +187,45 @@ def _handle_delete(self) -> None:
182187 if selected_name is None :
183188 return
184189
190+ # Check for associated models
191+ associated_models = self .model_service .find_by_provider (selected_name )
192+
185193 # Confirm deletion
186194 console .print ()
187- if confirm_action (f"Delete provider '{ selected_name } '?" , default = False ):
188- try :
189- self .service .delete (selected_name )
190- print_success (f"Provider '{ selected_name } ' deleted successfully" )
191- except ValueError as e :
192- print_error (f"Failed to delete provider: { e } " )
195+
196+ if associated_models :
197+ # Notify user about associated models
198+ model_count = len (associated_models )
199+ model_aliases = ", " .join ([f"'{ m .alias } '" for m in associated_models ])
200+
201+ print_warning (f"Provider '{ selected_name } ' has { model_count } associated model config(s): { model_aliases } " )
202+ console .print ()
203+
204+ # Ask if user wants to delete provider and associated models
205+ if confirm_action (
206+ f"Delete provider '{ selected_name } ' and its { model_count } associated model config(s)?" , default = False
207+ ):
208+ try :
209+ # Delete associated models first
210+ model_aliases_to_delete = [m .alias for m in associated_models ]
211+ self .model_service .delete_by_aliases (model_aliases_to_delete )
212+
213+ # Then delete the provider
214+ self .service .delete (selected_name )
215+
216+ print_success (
217+ f"Provider '{ selected_name } ' and { model_count } associated model(s) deleted successfully"
218+ )
219+ except ValueError as e :
220+ print_error (f"Failed to delete provider and associated models: { e } " )
221+ else :
222+ # No associated models, proceed with simple deletion
223+ if confirm_action (f"Delete provider '{ selected_name } '?" , default = False ):
224+ try :
225+ self .service .delete (selected_name )
226+ print_success (f"Provider '{ selected_name } ' deleted successfully" )
227+ except ValueError as e :
228+ print_error (f"Failed to delete provider: { e } " )
193229
194230 def _handle_delete_all (self ) -> None :
195231 """Handle deleting all providers."""
@@ -198,20 +234,48 @@ def _handle_delete_all(self) -> None:
198234 print_error ("No providers to delete" )
199235 return
200236
237+ # Check for associated models across all providers
238+ all_models = self .model_service .list_all ()
239+ provider_names_set = {p .name for p in providers }
240+ associated_models = [m for m in all_models if m .provider in provider_names_set ]
241+
201242 # List providers to be deleted
202243 console .print ()
203244 provider_count = len (providers )
204245 provider_names = ", " .join ([f"'{ p .name } '" for p in providers ])
205246
206- if confirm_action (
207- f"⚠️ Delete ALL ({ provider_count } ) provider(s): { provider_names } ?\n This action cannot be undone." ,
208- default = False ,
209- ):
210- try :
211- self .repository .delete ()
212- print_success (f"All ({ provider_count } ) provider(s) deleted successfully" )
213- except Exception as e :
214- print_error (f"Failed to delete all providers: { e } " )
247+ if associated_models :
248+ model_count = len (associated_models )
249+ print_warning (f"Deleting all providers will also affect { model_count } associated model config(s)" )
250+ console .print ()
251+
252+ if confirm_action (
253+ f"⚠️ Delete ALL ({ provider_count } ) provider(s): { provider_names } and { model_count } associated model(s)?\n This action cannot be undone." ,
254+ default = False ,
255+ ):
256+ try :
257+ # Delete all associated models first
258+ model_aliases_to_delete = [m .alias for m in associated_models ]
259+ self .model_service .delete_by_aliases (model_aliases_to_delete )
260+
261+ # Then delete all providers
262+ self .repository .delete ()
263+
264+ print_success (
265+ f"All ({ provider_count } ) provider(s) and { model_count } associated model(s) deleted successfully"
266+ )
267+ except Exception as e :
268+ print_error (f"Failed to delete all providers and associated models: { e } " )
269+ else :
270+ if confirm_action (
271+ f"⚠️ Delete ALL ({ provider_count } ) provider(s): { provider_names } ?\n This action cannot be undone." ,
272+ default = False ,
273+ ):
274+ try :
275+ self .repository .delete ()
276+ print_success (f"All ({ provider_count } ) provider(s) deleted successfully" )
277+ except Exception as e :
278+ print_error (f"Failed to delete all providers: { e } " )
215279
216280 def _handle_change_default (self ) -> None :
217281 """Handle changing the default provider."""
0 commit comments