diff --git a/backend/main.py b/backend/main.py index 542a06071..f85ea789d 100644 --- a/backend/main.py +++ b/backend/main.py @@ -568,167 +568,158 @@ async def delete_pipeline(form_data: DeletePipelineForm, user=Depends(get_admin_ @app.get("/api/pipelines") async def get_pipelines(urlIdx: Optional[int] = None, user=Depends(get_admin_user)): - models = await get_all_models() + r = None + try: + urlIdx - print(urlIdx) + url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] + key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] - if urlIdx is None: - pipelines = [model for model in models if "pipeline" in model] - else: - pipelines = [ - model - for model in models - if "pipeline" in model and model["urlIdx"] == urlIdx - ] + headers = {"Authorization": f"Bearer {key}"} + r = requests.get(f"{url}/pipelines", headers=headers) - return {"data": pipelines} + r.raise_for_status() + data = r.json() + + return {**data} + except Exception as e: + # Handle connection error here + print(f"Connection error: {e}") + + detail = "Pipeline not found" + if r is not None: + try: + res = r.json() + if "detail" in res: + detail = res["detail"] + except: + pass + + raise HTTPException( + status_code=(r.status_code if r is not None else status.HTTP_404_NOT_FOUND), + detail=detail, + ) @app.get("/api/pipelines/{pipeline_id}/valves") -async def get_pipeline_valves(pipeline_id: str, user=Depends(get_admin_user)): +async def get_pipeline_valves( + urlIdx: Optional[int], pipeline_id: str, user=Depends(get_admin_user) +): models = await get_all_models() - if pipeline_id in app.state.MODELS and "pipeline" in app.state.MODELS[pipeline_id]: - pipeline = app.state.MODELS[pipeline_id] + r = None + try: - r = None - try: - urlIdx = pipeline["urlIdx"] + url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] + key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] - url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] - key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] + headers = {"Authorization": f"Bearer {key}"} + r = requests.get(f"{url}/{pipeline_id}/valves", headers=headers) - headers = {"Authorization": f"Bearer {key}"} - r = requests.get(f"{url}/{pipeline['id']}/valves", headers=headers) + r.raise_for_status() + data = r.json() - r.raise_for_status() - data = r.json() + return {**data} + except Exception as e: + # Handle connection error here + print(f"Connection error: {e}") - return {**data} - except Exception as e: - # Handle connection error here - print(f"Connection error: {e}") + detail = "Pipeline not found" - detail = "Pipeline not found" + if r is not None: + try: + res = r.json() + if "detail" in res: + detail = res["detail"] + except: + pass - if r is not None: - try: - res = r.json() - if "detail" in res: - detail = res["detail"] - except: - pass - - raise HTTPException( - status_code=( - r.status_code if r is not None else status.HTTP_404_NOT_FOUND - ), - detail=detail, - ) - - else: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail="Pipeline not found", + status_code=(r.status_code if r is not None else status.HTTP_404_NOT_FOUND), + detail=detail, ) @app.get("/api/pipelines/{pipeline_id}/valves/spec") -async def get_pipeline_valves_spec(pipeline_id: str, user=Depends(get_admin_user)): +async def get_pipeline_valves_spec( + urlIdx: Optional[int], pipeline_id: str, user=Depends(get_admin_user) +): models = await get_all_models() - if pipeline_id in app.state.MODELS and "pipeline" in app.state.MODELS[pipeline_id]: - pipeline = app.state.MODELS[pipeline_id] - r = None - try: - urlIdx = pipeline["urlIdx"] + r = None + try: + url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] + key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] - url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] - key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] + headers = {"Authorization": f"Bearer {key}"} + r = requests.get(f"{url}/{pipeline_id}/valves/spec", headers=headers) - headers = {"Authorization": f"Bearer {key}"} - r = requests.get(f"{url}/{pipeline['id']}/valves/spec", headers=headers) + r.raise_for_status() + data = r.json() - r.raise_for_status() - data = r.json() + return {**data} + except Exception as e: + # Handle connection error here + print(f"Connection error: {e}") - return {**data} - except Exception as e: - # Handle connection error here - print(f"Connection error: {e}") + detail = "Pipeline not found" + if r is not None: + try: + res = r.json() + if "detail" in res: + detail = res["detail"] + except: + pass - detail = "Pipeline not found" - if r is not None: - try: - res = r.json() - if "detail" in res: - detail = res["detail"] - except: - pass - - raise HTTPException( - status_code=( - r.status_code if r is not None else status.HTTP_404_NOT_FOUND - ), - detail=detail, - ) - else: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail="Pipeline not found", + status_code=(r.status_code if r is not None else status.HTTP_404_NOT_FOUND), + detail=detail, ) @app.post("/api/pipelines/{pipeline_id}/valves/update") async def update_pipeline_valves( - pipeline_id: str, form_data: dict, user=Depends(get_admin_user) + urlIdx: Optional[int], + pipeline_id: str, + form_data: dict, + user=Depends(get_admin_user), ): models = await get_all_models() - if pipeline_id in app.state.MODELS and "pipeline" in app.state.MODELS[pipeline_id]: - pipeline = app.state.MODELS[pipeline_id] + r = None + try: + url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] + key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] - r = None - try: - urlIdx = pipeline["urlIdx"] + headers = {"Authorization": f"Bearer {key}"} + r = requests.post( + f"{url}/{pipeline_id}/valves/update", + headers=headers, + json={**form_data}, + ) - url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] - key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] + r.raise_for_status() + data = r.json() - headers = {"Authorization": f"Bearer {key}"} - r = requests.post( - f"{url}/{pipeline['id']}/valves/update", - headers=headers, - json={**form_data}, - ) + return {**data} + except Exception as e: + # Handle connection error here + print(f"Connection error: {e}") - r.raise_for_status() - data = r.json() + detail = "Pipeline not found" - return {**data} - except Exception as e: - # Handle connection error here - print(f"Connection error: {e}") + if r is not None: + try: + res = r.json() + if "detail" in res: + detail = res["detail"] + except: + pass - detail = "Pipeline not found" - - if r is not None: - try: - res = r.json() - if "detail" in res: - detail = res["detail"] - except: - pass - - raise HTTPException( - status_code=( - r.status_code if r is not None else status.HTTP_404_NOT_FOUND - ), - detail=detail, - ) - else: raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail="Pipeline not found", + status_code=( + r.status_code if r is not None else status.HTTP_404_NOT_FOUND + ), + detail=detail, ) diff --git a/src/lib/apis/index.ts b/src/lib/apis/index.ts index f2150fdd6..016a708f5 100644 --- a/src/lib/apis/index.ts +++ b/src/lib/apis/index.ts @@ -184,17 +184,25 @@ export const getPipelines = async (token: string, urlIdx?: string) => { return pipelines; }; -export const getPipelineValves = async (token: string = '', pipeline_id: string) => { +export const getPipelineValves = async (token: string, pipeline_id: string, urlIdx: string) => { let error = null; - const res = await fetch(`${WEBUI_BASE_URL}/api/pipelines/${pipeline_id}/valves`, { - method: 'GET', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - ...(token && { authorization: `Bearer ${token}` }) + const searchParams = new URLSearchParams(); + if (urlIdx) { + searchParams.append('urlIdx', urlIdx); + } + + const res = await fetch( + `${WEBUI_BASE_URL}/api/pipelines/${pipeline_id}/valves?${searchParams.toString()}`, + { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + ...(token && { authorization: `Bearer ${token}` }) + } } - }) + ) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); @@ -212,17 +220,25 @@ export const getPipelineValves = async (token: string = '', pipeline_id: string) return res; }; -export const getPipelineValvesSpec = async (token: string = '', pipeline_id: string) => { +export const getPipelineValvesSpec = async (token: string, pipeline_id: string, urlIdx: string) => { let error = null; - const res = await fetch(`${WEBUI_BASE_URL}/api/pipelines/${pipeline_id}/valves/spec`, { - method: 'GET', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - ...(token && { authorization: `Bearer ${token}` }) + const searchParams = new URLSearchParams(); + if (urlIdx) { + searchParams.append('urlIdx', urlIdx); + } + + const res = await fetch( + `${WEBUI_BASE_URL}/api/pipelines/${pipeline_id}/valves/spec?${searchParams.toString()}`, + { + method: 'GET', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + ...(token && { authorization: `Bearer ${token}` }) + } } - }) + ) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); @@ -243,19 +259,28 @@ export const getPipelineValvesSpec = async (token: string = '', pipeline_id: str export const updatePipelineValves = async ( token: string = '', pipeline_id: string, - valves: object + valves: object, + urlIdx: string ) => { let error = null; - const res = await fetch(`${WEBUI_BASE_URL}/api/pipelines/${pipeline_id}/valves/update`, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - ...(token && { authorization: `Bearer ${token}` }) - }, - body: JSON.stringify(valves) - }) + const searchParams = new URLSearchParams(); + if (urlIdx) { + searchParams.append('urlIdx', urlIdx); + } + + const res = await fetch( + `${WEBUI_BASE_URL}/api/pipelines/${pipeline_id}/valves/update?${searchParams.toString()}`, + { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + ...(token && { authorization: `Bearer ${token}` }) + }, + body: JSON.stringify(valves) + } + ) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); diff --git a/src/lib/components/admin/Settings/Pipelines.svelte b/src/lib/components/admin/Settings/Pipelines.svelte index 0e0d6f976..834957551 100644 --- a/src/lib/components/admin/Settings/Pipelines.svelte +++ b/src/lib/components/admin/Settings/Pipelines.svelte @@ -39,16 +39,19 @@ const updateHandler = async () => { const pipeline = pipelines[selectedPipelineIdx]; - if (pipeline && (pipeline?.pipeline?.valves ?? false)) { + if (pipeline && (pipeline?.valves ?? false)) { if (valves?.pipelines ?? false) { valves.pipelines = valves.pipelines.split(',').map((v) => v.trim()); } - const res = await updatePipelineValves(localStorage.token, pipeline.id, valves).catch( - (error) => { - toast.error(error); - } - ); + const res = await updatePipelineValves( + localStorage.token, + pipeline.id, + valves, + selectedPipelinesUrlIdx + ).catch((error) => { + toast.error(error); + }); if (res) { toast.success('Valves updated successfully'); @@ -65,8 +68,16 @@ valves = null; valves_spec = null; - valves_spec = await getPipelineValvesSpec(localStorage.token, pipelines[idx].id); - valves = await getPipelineValves(localStorage.token, pipelines[idx].id); + valves_spec = await getPipelineValvesSpec( + localStorage.token, + pipelines[idx].id, + selectedPipelinesUrlIdx + ); + valves = await getPipelineValves( + localStorage.token, + pipelines[idx].id, + selectedPipelinesUrlIdx + ); if (valves?.pipelines ?? false) { valves.pipelines = valves.pipelines.join(','); @@ -269,7 +280,7 @@ > {#each pipelines as pipeline, idx} {pipeline.name} ({pipeline.type ?? 'pipe'}) {/each} @@ -299,7 +310,7 @@ {/if}
- {#if pipelines[selectedPipelineIdx].pipeline.valves} + {#if pipelines[selectedPipelineIdx].valves} {#if valves} {#each Object.keys(valves_spec.properties) as property, idx}