diff --git a/api/routers/models.py b/api/routers/models.py index ff2eb28..853dd98 100644 --- a/api/routers/models.py +++ b/api/routers/models.py @@ -67,17 +67,29 @@ async def create_model(model_data: ModelCreate): valid_types = ["language", "embedding", "text_to_speech", "speech_to_text"] if model_data.type not in valid_types: raise HTTPException( - status_code=400, + status_code=400, detail=f"Invalid model type. Must be one of: {valid_types}" ) - + + # Check for duplicate model name under the same provider (case-insensitive) + from open_notebook.database.repository import repo_query + existing = await repo_query( + "SELECT * FROM model WHERE string::lowercase(provider) = $provider AND string::lowercase(name) = $name LIMIT 1", + {"provider": model_data.provider.lower(), "name": model_data.name.lower()} + ) + if existing: + raise HTTPException( + status_code=400, + detail=f"Model '{model_data.name}' already exists for provider '{model_data.provider}'" + ) + new_model = Model( name=model_data.name, provider=model_data.provider, type=model_data.type, ) await new_model.save() - + return ModelResponse( id=new_model.id or "", name=new_model.name, @@ -86,6 +98,8 @@ async def create_model(model_data: ModelCreate): created=str(new_model.created), updated=str(new_model.updated), ) + except HTTPException: + raise except InvalidInputError as e: raise HTTPException(status_code=400, detail=str(e)) except Exception as e: diff --git a/frontend/src/app/(dashboard)/models/components/AddModelForm.tsx b/frontend/src/app/(dashboard)/models/components/AddModelForm.tsx index 0d2b21b..a287a21 100644 --- a/frontend/src/app/(dashboard)/models/components/AddModelForm.tsx +++ b/frontend/src/app/(dashboard)/models/components/AddModelForm.tsx @@ -26,7 +26,7 @@ export function AddModelForm({ modelType, providers }: AddModelFormProps) { }) // Get available providers that support this model type - const availableProviders = providers.available.filter(provider => + const availableProviders = providers.available.filter(provider => providers.supported_types[provider]?.includes(modelType) ) @@ -63,8 +63,15 @@ export function AddModelForm({ modelType, providers }: AddModelFormProps) { ) } + const handleOpenChange = (isOpen: boolean) => { + setOpen(isOpen) + if (!isOpen) { + reset() + } + } + return ( - +