Explorar el Código

refac: pipelines

Timothy J. Baek hace 11 meses
padre
commit
340b399fc2
Se han modificado 3 ficheros con 182 adiciones y 155 borrados
  1. 110 119
      backend/main.py
  2. 51 26
      src/lib/apis/index.ts
  3. 21 10
      src/lib/components/admin/Settings/Pipelines.svelte

+ 110 - 119
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}")
 
-@app.get("/api/pipelines/{pipeline_id}/valves")
-async def get_pipeline_valves(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]
+        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,
+        )
 
-        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]
+@app.get("/api/pipelines/{pipeline_id}/valves")
+async def get_pipeline_valves(
+    urlIdx: Optional[int], pipeline_id: str, user=Depends(get_admin_user)
+):
+    models = await get_all_models()
+    r = None
+    try:
 
-            headers = {"Authorization": f"Bearer {key}"}
-            r = requests.get(f"{url}/{pipeline['id']}/valves", headers=headers)
+        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.get(f"{url}/{pipeline_id}/valves", headers=headers)
 
-            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"
 
-            raise HTTPException(
-                status_code=(
-                    r.status_code if r is not None else status.HTTP_404_NOT_FOUND
-                ),
-                detail=detail,
-            )
+        if r is not None:
+            try:
+                res = r.json()
+                if "detail" in res:
+                    detail = res["detail"]
+            except:
+                pass
 
-    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"]
-
-            url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx]
-            key = openai_app.state.config.OPENAI_API_KEYS[urlIdx]
+    r = None
+    try:
+        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:
-            urlIdx = pipeline["urlIdx"]
-
-            url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx]
-            key = openai_app.state.config.OPENAI_API_KEYS[urlIdx]
+    r = None
+    try:
+        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.post(
-                f"{url}/{pipeline['id']}/valves/update",
-                headers=headers,
-                json={**form_data},
-            )
+        headers = {"Authorization": f"Bearer {key}"}
+        r = requests.post(
+            f"{url}/{pipeline_id}/valves/update",
+            headers=headers,
+            json={**form_data},
+        )
 
-            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,
         )
 
 

+ 51 - 26
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();

+ 21 - 10
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}
 											<option value={idx} class="bg-gray-100 dark:bg-gray-700"
-												>{pipeline.name} ({pipeline.pipeline.type ?? 'pipe'})</option
+												>{pipeline.name} ({pipeline.type ?? 'pipe'})</option
 											>
 										{/each}
 									</select>
@@ -299,7 +310,7 @@
 						{/if}
 
 						<div class="space-y-1">
-							{#if pipelines[selectedPipelineIdx].pipeline.valves}
+							{#if pipelines[selectedPipelineIdx].valves}
 								{#if valves}
 									{#each Object.keys(valves_spec.properties) as property, idx}
 										<div class=" py-0.5 w-full justify-between">