mirror of
https://github.com/open-webui/open-webui
synced 2025-06-26 18:26:48 +00:00
feat: allow model config via config.json
This commit is contained in:
@@ -18,7 +18,7 @@ from pydantic import BaseModel, ConfigDict
|
||||
from typing import Optional, List
|
||||
|
||||
from utils.utils import get_verified_user, get_current_user, get_admin_user
|
||||
from config import SRC_LOG_LEVELS, ENV
|
||||
from config import SRC_LOG_LEVELS, ENV, MODEL_CONFIG
|
||||
from constants import MESSAGES
|
||||
|
||||
import os
|
||||
@@ -67,6 +67,7 @@ with open(LITELLM_CONFIG_DIR, "r") as file:
|
||||
|
||||
app.state.ENABLE = ENABLE_LITELLM
|
||||
app.state.CONFIG = litellm_config
|
||||
app.state.MODEL_CONFIG = MODEL_CONFIG.get("litellm", [])
|
||||
|
||||
# Global variable to store the subprocess reference
|
||||
background_process = None
|
||||
@@ -238,6 +239,8 @@ async def get_models(user=Depends(get_current_user)):
|
||||
)
|
||||
)
|
||||
|
||||
for model in data["data"]:
|
||||
add_custom_info_to_model(model)
|
||||
return data
|
||||
except Exception as e:
|
||||
|
||||
@@ -258,6 +261,14 @@ async def get_models(user=Depends(get_current_user)):
|
||||
"object": "model",
|
||||
"created": int(time.time()),
|
||||
"owned_by": "openai",
|
||||
"custom_info": next(
|
||||
(
|
||||
item
|
||||
for item in app.state.MODEL_CONFIG
|
||||
if item["name"] == model["model_name"]
|
||||
),
|
||||
{},
|
||||
),
|
||||
}
|
||||
for model in app.state.CONFIG["model_list"]
|
||||
],
|
||||
@@ -270,6 +281,12 @@ async def get_models(user=Depends(get_current_user)):
|
||||
}
|
||||
|
||||
|
||||
def add_custom_info_to_model(model: dict):
|
||||
model["custom_info"] = next(
|
||||
(item for item in app.state.MODEL_CONFIG if item["name"] == model["id"]), {}
|
||||
)
|
||||
|
||||
|
||||
@app.get("/model/info")
|
||||
async def get_model_list(user=Depends(get_admin_user)):
|
||||
return {"data": app.state.CONFIG["model_list"]}
|
||||
|
||||
@@ -46,6 +46,7 @@ from config import (
|
||||
ENABLE_MODEL_FILTER,
|
||||
MODEL_FILTER_LIST,
|
||||
UPLOAD_DIR,
|
||||
MODEL_CONFIG,
|
||||
)
|
||||
from utils.misc import calculate_sha256
|
||||
|
||||
@@ -64,6 +65,7 @@ app.add_middleware(
|
||||
|
||||
app.state.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
|
||||
app.state.MODEL_FILTER_LIST = MODEL_FILTER_LIST
|
||||
app.state.MODEL_CONFIG = MODEL_CONFIG.get("ollama", [])
|
||||
|
||||
app.state.OLLAMA_BASE_URLS = OLLAMA_BASE_URLS
|
||||
app.state.MODELS = {}
|
||||
@@ -158,15 +160,26 @@ async def get_all_models():
|
||||
|
||||
models = {
|
||||
"models": merge_models_lists(
|
||||
map(lambda response: response["models"] if response else None, responses)
|
||||
map(
|
||||
lambda response: (response["models"] if response else None),
|
||||
responses,
|
||||
)
|
||||
)
|
||||
}
|
||||
for model in models["models"]:
|
||||
add_custom_info_to_model(model)
|
||||
|
||||
app.state.MODELS = {model["model"]: model for model in models["models"]}
|
||||
|
||||
return models
|
||||
|
||||
|
||||
def add_custom_info_to_model(model: dict):
|
||||
model["custom_info"] = next(
|
||||
(item for item in app.state.MODEL_CONFIG if item["name"] == model["model"]), {}
|
||||
)
|
||||
|
||||
|
||||
@app.get("/api/tags")
|
||||
@app.get("/api/tags/{url_idx}")
|
||||
async def get_ollama_tags(
|
||||
|
||||
@@ -26,6 +26,7 @@ from config import (
|
||||
CACHE_DIR,
|
||||
ENABLE_MODEL_FILTER,
|
||||
MODEL_FILTER_LIST,
|
||||
MODEL_CONFIG,
|
||||
)
|
||||
from typing import List, Optional
|
||||
|
||||
@@ -47,6 +48,7 @@ app.add_middleware(
|
||||
|
||||
app.state.ENABLE_MODEL_FILTER = ENABLE_MODEL_FILTER
|
||||
app.state.MODEL_FILTER_LIST = MODEL_FILTER_LIST
|
||||
app.state.MODEL_CONFIG = MODEL_CONFIG.get("openai", [])
|
||||
|
||||
app.state.OPENAI_API_BASE_URLS = OPENAI_API_BASE_URLS
|
||||
app.state.OPENAI_API_KEYS = OPENAI_API_KEYS
|
||||
@@ -217,10 +219,19 @@ async def get_all_models():
|
||||
)
|
||||
}
|
||||
|
||||
for model in models["data"]:
|
||||
add_custom_info_to_model(model)
|
||||
|
||||
log.info(f"models: {models}")
|
||||
app.state.MODELS = {model["id"]: model for model in models["data"]}
|
||||
|
||||
return models
|
||||
return models
|
||||
|
||||
|
||||
def add_custom_info_to_model(model: dict):
|
||||
model["custom_info"] = next(
|
||||
(item for item in app.state.MODEL_CONFIG if item["name"] == model["id"]), {}
|
||||
)
|
||||
|
||||
|
||||
@app.get("/models")
|
||||
|
||||
@@ -35,6 +35,19 @@ class SetDefaultSuggestionsForm(BaseModel):
|
||||
suggestions: List[PromptSuggestion]
|
||||
|
||||
|
||||
class ModelConfig(BaseModel):
|
||||
id: str
|
||||
name: str
|
||||
description: str
|
||||
vision_capable: bool
|
||||
|
||||
|
||||
class SetModelConfigForm(BaseModel):
|
||||
ollama: List[ModelConfig]
|
||||
litellm: List[ModelConfig]
|
||||
openai: List[ModelConfig]
|
||||
|
||||
|
||||
############################
|
||||
# SetDefaultModels
|
||||
############################
|
||||
@@ -57,3 +70,14 @@ async def set_global_default_suggestions(
|
||||
data = form_data.model_dump()
|
||||
request.app.state.DEFAULT_PROMPT_SUGGESTIONS = data["suggestions"]
|
||||
return request.app.state.DEFAULT_PROMPT_SUGGESTIONS
|
||||
|
||||
|
||||
@router.post("/models", response_model=SetModelConfigForm)
|
||||
async def set_global_default_suggestions(
|
||||
request: Request,
|
||||
form_data: SetModelConfigForm,
|
||||
user=Depends(get_admin_user),
|
||||
):
|
||||
data = form_data.model_dump()
|
||||
request.app.state.MODEL_CONFIG = data
|
||||
return request.app.state.MODEL_CONFIG
|
||||
|
||||
@@ -424,6 +424,8 @@ WEBHOOK_URL = os.environ.get("WEBHOOK_URL", "")
|
||||
|
||||
ENABLE_ADMIN_EXPORT = os.environ.get("ENABLE_ADMIN_EXPORT", "True").lower() == "true"
|
||||
|
||||
MODEL_CONFIG = CONFIG_DATA.get("models", {"ollama": [], "litellm": [], "openai": []})
|
||||
|
||||
####################################
|
||||
# WEBUI_SECRET_KEY
|
||||
####################################
|
||||
|
||||
@@ -58,6 +58,7 @@ from config import (
|
||||
SRC_LOG_LEVELS,
|
||||
WEBHOOK_URL,
|
||||
ENABLE_ADMIN_EXPORT,
|
||||
MODEL_CONFIG,
|
||||
)
|
||||
from constants import ERROR_MESSAGES
|
||||
|
||||
|
||||
Reference in New Issue
Block a user