Begin distinguishing upsert operations for clarity (#2535)

* additional clarity for llm provider creation / updates

* update provider APIs

* update typing (minor)
This commit is contained in:
pablodanswer
2024-09-21 15:36:22 -07:00
committed by GitHub
parent ba64543dd7
commit 014ba9e220
3 changed files with 38 additions and 14 deletions

View File

@@ -62,13 +62,21 @@ def upsert_cloud_embedding_provider(
def upsert_llm_provider(
llm_provider: LLMProviderUpsertRequest, db_session: Session
llm_provider: LLMProviderUpsertRequest,
db_session: Session,
is_creation: bool = True,
) -> FullLLMProvider:
existing_llm_provider = db_session.scalar(
select(LLMProviderModel).where(LLMProviderModel.name == llm_provider.name)
)
if existing_llm_provider and is_creation:
raise ValueError(f"LLM Provider with name {llm_provider.name} already exists")
if not existing_llm_provider:
if not is_creation:
raise ValueError(
f"LLM Provider with name {llm_provider.name} does not exist"
)
existing_llm_provider = LLMProviderModel(name=llm_provider.name)
db_session.add(existing_llm_provider)

View File

@@ -3,6 +3,7 @@ from collections.abc import Callable
from fastapi import APIRouter
from fastapi import Depends
from fastapi import HTTPException
from fastapi import Query
from sqlalchemy.orm import Session
from danswer.auth.users import current_admin_user
@@ -118,10 +119,22 @@ def list_llm_providers(
@admin_router.put("/provider")
def put_llm_provider(
llm_provider: LLMProviderUpsertRequest,
is_creation: bool = Query(
True,
description="True if updating an existing provider, False if creating a new one",
),
_: User | None = Depends(current_admin_user),
db_session: Session = Depends(get_session),
) -> FullLLMProvider:
return upsert_llm_provider(llm_provider=llm_provider, db_session=db_session)
try:
return upsert_llm_provider(
llm_provider=llm_provider,
db_session=db_session,
is_creation=is_creation,
)
except ValueError as e:
logger.exception("Failed to upsert LLM Provider")
raise HTTPException(status_code=400, detail=str(e))
@admin_router.delete("/provider/{provider_id}")

View File

@@ -150,7 +150,9 @@ export function LLMProviderUpdateForm({
}
}
const response = await fetch(LLM_PROVIDERS_ADMIN_URL, {
const response = await fetch(
`${LLM_PROVIDERS_ADMIN_URL}${existingLlmProvider ? "" : "?is_creation=true"}`,
{
method: "PUT",
headers: {
"Content-Type": "application/json",
@@ -161,7 +163,8 @@ export function LLMProviderUpdateForm({
fast_default_model_name:
values.fast_default_model_name || values.default_model_name,
}),
});
}
);
if (!response.ok) {
const errorMsg = (await response.json()).detail;