|
@@ -274,54 +274,57 @@ async def get_ollama_tags(
|
|
|
@app.get("/api/version")
|
|
|
@app.get("/api/version/{url_idx}")
|
|
|
async def get_ollama_versions(url_idx: Optional[int] = None):
|
|
|
+ if app.state.config.ENABLE_OLLAMA_API:
|
|
|
+ if url_idx == None:
|
|
|
+
|
|
|
+ # returns lowest version
|
|
|
+ tasks = [
|
|
|
+ fetch_url(f"{url}/api/version")
|
|
|
+ for url in app.state.config.OLLAMA_BASE_URLS
|
|
|
+ ]
|
|
|
+ responses = await asyncio.gather(*tasks)
|
|
|
+ responses = list(filter(lambda x: x is not None, responses))
|
|
|
+
|
|
|
+ if len(responses) > 0:
|
|
|
+ lowest_version = min(
|
|
|
+ responses,
|
|
|
+ key=lambda x: tuple(
|
|
|
+ map(int, re.sub(r"^v|-.*", "", x["version"]).split("."))
|
|
|
+ ),
|
|
|
+ )
|
|
|
|
|
|
- if url_idx == None:
|
|
|
-
|
|
|
- # returns lowest version
|
|
|
- tasks = [
|
|
|
- fetch_url(f"{url}/api/version") for url in app.state.config.OLLAMA_BASE_URLS
|
|
|
- ]
|
|
|
- responses = await asyncio.gather(*tasks)
|
|
|
- responses = list(filter(lambda x: x is not None, responses))
|
|
|
-
|
|
|
- if len(responses) > 0:
|
|
|
- lowest_version = min(
|
|
|
- responses,
|
|
|
- key=lambda x: tuple(
|
|
|
- map(int, re.sub(r"^v|-.*", "", x["version"]).split("."))
|
|
|
- ),
|
|
|
- )
|
|
|
-
|
|
|
- return {"version": lowest_version["version"]}
|
|
|
+ return {"version": lowest_version["version"]}
|
|
|
+ else:
|
|
|
+ raise HTTPException(
|
|
|
+ status_code=500,
|
|
|
+ detail=ERROR_MESSAGES.OLLAMA_NOT_FOUND,
|
|
|
+ )
|
|
|
else:
|
|
|
- raise HTTPException(
|
|
|
- status_code=500,
|
|
|
- detail=ERROR_MESSAGES.OLLAMA_NOT_FOUND,
|
|
|
- )
|
|
|
- else:
|
|
|
- url = app.state.config.OLLAMA_BASE_URLS[url_idx]
|
|
|
-
|
|
|
- r = None
|
|
|
- try:
|
|
|
- r = requests.request(method="GET", url=f"{url}/api/version")
|
|
|
- r.raise_for_status()
|
|
|
+ url = app.state.config.OLLAMA_BASE_URLS[url_idx]
|
|
|
|
|
|
- return r.json()
|
|
|
- except Exception as e:
|
|
|
- log.exception(e)
|
|
|
- error_detail = "Open WebUI: Server Connection Error"
|
|
|
- if r is not None:
|
|
|
- try:
|
|
|
- res = r.json()
|
|
|
- if "error" in res:
|
|
|
- error_detail = f"Ollama: {res['error']}"
|
|
|
- except:
|
|
|
- error_detail = f"Ollama: {e}"
|
|
|
+ r = None
|
|
|
+ try:
|
|
|
+ r = requests.request(method="GET", url=f"{url}/api/version")
|
|
|
+ r.raise_for_status()
|
|
|
+
|
|
|
+ return r.json()
|
|
|
+ except Exception as e:
|
|
|
+ log.exception(e)
|
|
|
+ error_detail = "Open WebUI: Server Connection Error"
|
|
|
+ if r is not None:
|
|
|
+ try:
|
|
|
+ res = r.json()
|
|
|
+ if "error" in res:
|
|
|
+ error_detail = f"Ollama: {res['error']}"
|
|
|
+ except:
|
|
|
+ error_detail = f"Ollama: {e}"
|
|
|
|
|
|
- raise HTTPException(
|
|
|
- status_code=r.status_code if r else 500,
|
|
|
- detail=error_detail,
|
|
|
- )
|
|
|
+ raise HTTPException(
|
|
|
+ status_code=r.status_code if r else 500,
|
|
|
+ detail=error_detail,
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ return {"version": False}
|
|
|
|
|
|
|
|
|
class ModelNameForm(BaseModel):
|