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( def upsert_llm_provider(
llm_provider: LLMProviderUpsertRequest, db_session: Session llm_provider: LLMProviderUpsertRequest,
db_session: Session,
is_creation: bool = True,
) -> FullLLMProvider: ) -> FullLLMProvider:
existing_llm_provider = db_session.scalar( existing_llm_provider = db_session.scalar(
select(LLMProviderModel).where(LLMProviderModel.name == llm_provider.name) 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 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) existing_llm_provider = LLMProviderModel(name=llm_provider.name)
db_session.add(existing_llm_provider) db_session.add(existing_llm_provider)

View File

@@ -3,6 +3,7 @@ from collections.abc import Callable
from fastapi import APIRouter from fastapi import APIRouter
from fastapi import Depends from fastapi import Depends
from fastapi import HTTPException from fastapi import HTTPException
from fastapi import Query
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from danswer.auth.users import current_admin_user from danswer.auth.users import current_admin_user
@@ -118,10 +119,22 @@ def list_llm_providers(
@admin_router.put("/provider") @admin_router.put("/provider")
def put_llm_provider( def put_llm_provider(
llm_provider: LLMProviderUpsertRequest, 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), _: User | None = Depends(current_admin_user),
db_session: Session = Depends(get_session), db_session: Session = Depends(get_session),
) -> FullLLMProvider: ) -> 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}") @admin_router.delete("/provider/{provider_id}")

View File

@@ -150,18 +150,21 @@ export function LLMProviderUpdateForm({
} }
} }
const response = await fetch(LLM_PROVIDERS_ADMIN_URL, { const response = await fetch(
method: "PUT", `${LLM_PROVIDERS_ADMIN_URL}${existingLlmProvider ? "" : "?is_creation=true"}`,
headers: { {
"Content-Type": "application/json", method: "PUT",
}, headers: {
body: JSON.stringify({ "Content-Type": "application/json",
provider: llmProviderDescriptor.name, },
...values, body: JSON.stringify({
fast_default_model_name: provider: llmProviderDescriptor.name,
values.fast_default_model_name || values.default_model_name, ...values,
}), fast_default_model_name:
}); values.fast_default_model_name || values.default_model_name,
}),
}
);
if (!response.ok) { if (!response.ok) {
const errorMsg = (await response.json()).detail; const errorMsg = (await response.json()).detail;