Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 75 additions & 1 deletion backend/open_webui/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,61 @@ def oidc_oauth_register(client):
{},
)

####################################
# UPSTAGE_API
####################################

ENABLE_UPSTAGE_API = PersistentConfig(
"ENABLE_UPSTAGE_API",
"upstage.enable",
os.environ.get("ENABLE_UPSTAGE_API", "True").lower() == "true",
)

UPSTAGE_API_KEY = os.environ.get("UPSTAGE_API_KEY", "")
UPSTAGE_API_BASE_URL = os.environ.get("UPSTAGE_API_BASE_URL", "")


if UPSTAGE_API_BASE_URL == "":
UPSTAGE_API_BASE_URL = "https://api.upstage.ai/v1"

UPSTAGE_API_KEYS = os.environ.get("UPSTAGE_API_KEYS", "")
UPSTAGE_API_KEYS = UPSTAGE_API_KEYS if UPSTAGE_API_KEYS != "" else UPSTAGE_API_KEY

UPSTAGE_API_KEYS = [url.strip() for url in UPSTAGE_API_KEYS.split(";")]
UPSTAGE_API_KEYS = PersistentConfig(
"UPSTAGE_API_KEYS", "upstage.api_keys", UPSTAGE_API_KEYS
)

UPSTAGE_API_BASE_URLS = os.environ.get("UPSTAGE_API_BASE_URLS", "")
UPSTAGE_API_BASE_URLS = (
UPSTAGE_API_BASE_URLS if UPSTAGE_API_BASE_URLS != "" else UPSTAGE_API_BASE_URL
)

UPSTAGE_API_BASE_URLS = [
url.strip() if url != "" else "https://api.upstage.ai/v1"
for url in UPSTAGE_API_BASE_URLS.split(";")
]
UPSTAGE_API_BASE_URLS = PersistentConfig(
"UPSTAGE_API_BASE_URLS", "upstage.api_base_urls", UPSTAGE_API_BASE_URLS
)

UPSTAGE_API_CONFIGS = PersistentConfig(
"UPSTAGE_API_CONFIGS",
"upstage.api_configs",
{},
)

# Get the actual OpenAI API key based on the base URL
UPSTAGE_API_KEY = ""
try:
UPSTAGE_API_KEY = UPSTAGE_API_KEYS.value[
UPSTAGE_API_BASE_URLS.value.index("https://api.upstage.ai/v1")
]
except Exception:
pass
UPSTAGE_API_BASE_URL = "https://api.upstage.ai/v1"


####################################
# OPENAI_API
####################################
Expand Down Expand Up @@ -1827,7 +1882,8 @@ class BannerModel(BaseModel):
RAG_EMBEDDING_MODEL = PersistentConfig(
"RAG_EMBEDDING_MODEL",
"rag.embedding_model",
os.environ.get("RAG_EMBEDDING_MODEL", "sentence-transformers/all-MiniLM-L6-v2"),
# os.environ.get("RAG_EMBEDDING_MODEL", "sentence-transformers/all-MiniLM-L6-v2"),
os.environ.get("RAG_EMBEDDING_MODEL", "embedding-passage"),
)
log.info(f"Embedding model set: {RAG_EMBEDDING_MODEL.value}")

Expand Down Expand Up @@ -1946,6 +2002,18 @@ class BannerModel(BaseModel):
os.getenv("RAG_OPENAI_API_KEY", OPENAI_API_KEY),
)


RAG_UPSTAGE_API_BASE_URL = PersistentConfig(
"RAG_UPSTAGE_API_BASE_URL",
"rag.upstage_api_base_url",
os.getenv("RAG_UPSTAGE_API_BASE_URL", UPSTAGE_API_BASE_URL),
)
RAG_UPSTAGE_API_KEY = PersistentConfig(
"RAG_UPSTAGE_API_KEY",
"rag.upstage_api_key",
os.getenv("RAG_UPSTAGE_API_KEY", UPSTAGE_API_KEY),
)

RAG_OLLAMA_BASE_URL = PersistentConfig(
"RAG_OLLAMA_BASE_URL",
"rag.ollama.url",
Expand Down Expand Up @@ -2141,6 +2209,12 @@ class BannerModel(BaseModel):
os.getenv("PERPLEXITY_API_KEY", ""),
)

DAUM_API_KEY = PersistentConfig(
"DAUM_API_KEY",
"rag.web.search.daum_api_key",
os.getenv("DAUM_API_KEY", ""),
)

RAG_WEB_SEARCH_RESULT_COUNT = PersistentConfig(
"RAG_WEB_SEARCH_RESULT_COUNT",
"rag.web.search.result_count",
Expand Down
1 change: 1 addition & 0 deletions backend/open_webui/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
"MODELS",
"OLLAMA",
"OPENAI",
"UPSTAGE",
"RAG",
"WEBHOOK",
"SOCKET",
Expand Down
32 changes: 32 additions & 0 deletions backend/open_webui/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
tools,
users,
utils,
upstage,
)

from open_webui.routers.retrieval import (
Expand Down Expand Up @@ -103,6 +104,11 @@
OPENAI_API_BASE_URLS,
OPENAI_API_KEYS,
OPENAI_API_CONFIGS,
# Upstage
ENABLE_UPSTAGE_API,
UPSTAGE_API_KEYS,
UPSTAGE_API_BASE_URLS,
UPSTAGE_API_CONFIGS,
# Direct Connections
ENABLE_DIRECT_CONNECTIONS,
# Tool Server Configs
Expand Down Expand Up @@ -184,6 +190,8 @@
RAG_FILE_MAX_SIZE,
RAG_OPENAI_API_BASE_URL,
RAG_OPENAI_API_KEY,
RAG_UPSTAGE_API_BASE_URL,
RAG_UPSTAGE_API_KEY,
RAG_OLLAMA_BASE_URL,
RAG_OLLAMA_API_KEY,
CHUNK_OVERLAP,
Expand Down Expand Up @@ -225,6 +233,7 @@
BRAVE_SEARCH_API_KEY,
EXA_API_KEY,
PERPLEXITY_API_KEY,
DAUM_API_KEY,
KAGI_SEARCH_API_KEY,
MOJEEK_SEARCH_API_KEY,
BOCHA_SEARCH_API_KEY,
Expand Down Expand Up @@ -481,6 +490,20 @@ async def lifespan(app: FastAPI):

app.state.OPENAI_MODELS = {}


########################################
#
# UPSTAGE
#
########################################

app.state.config.ENABLE_UPSTAGE_API = ENABLE_UPSTAGE_API
app.state.config.UPSTAGE_API_BASE_URLS = UPSTAGE_API_BASE_URLS
app.state.config.UPSTAGE_API_KEYS = UPSTAGE_API_KEYS
app.state.config.UPSTAGE_API_CONFIGS = UPSTAGE_API_CONFIGS

app.state.UPSTAGE_MODELS = {}

########################################
#
# TOOL SERVERS
Expand Down Expand Up @@ -612,6 +635,9 @@ async def lifespan(app: FastAPI):
app.state.config.RAG_OPENAI_API_BASE_URL = RAG_OPENAI_API_BASE_URL
app.state.config.RAG_OPENAI_API_KEY = RAG_OPENAI_API_KEY

app.state.config.RAG_UPSTAGE_API_BASE_URL = RAG_UPSTAGE_API_BASE_URL
app.state.config.RAG_UPSTAGE_API_KEY = RAG_UPSTAGE_API_KEY

app.state.config.RAG_OLLAMA_BASE_URL = RAG_OLLAMA_BASE_URL
app.state.config.RAG_OLLAMA_API_KEY = RAG_OLLAMA_API_KEY

Expand Down Expand Up @@ -651,6 +677,7 @@ async def lifespan(app: FastAPI):
app.state.config.BING_SEARCH_V7_SUBSCRIPTION_KEY = BING_SEARCH_V7_SUBSCRIPTION_KEY
app.state.config.EXA_API_KEY = EXA_API_KEY
app.state.config.PERPLEXITY_API_KEY = PERPLEXITY_API_KEY
app.state.config.DAUM_API_KEY = DAUM_API_KEY

app.state.config.RAG_WEB_SEARCH_RESULT_COUNT = RAG_WEB_SEARCH_RESULT_COUNT
app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS = RAG_WEB_SEARCH_CONCURRENT_REQUESTS
Expand Down Expand Up @@ -693,11 +720,15 @@ async def lifespan(app: FastAPI):
app.state.config.RAG_OPENAI_API_BASE_URL
if app.state.config.RAG_EMBEDDING_ENGINE == "openai"
else app.state.config.RAG_OLLAMA_BASE_URL
if app.state.config.RAG_EMBEDDING_ENGINE == "ollama"
else app.state.config.RAG_UPSTAGE_API_BASE_URL
),
(
app.state.config.RAG_OPENAI_API_KEY
if app.state.config.RAG_EMBEDDING_ENGINE == "openai"
else app.state.config.RAG_OLLAMA_API_KEY
if app.state.config.RAG_EMBEDDING_ENGINE == "ollama"
else app.state.config.RAG_UPSTAGE_API_KEY
),
app.state.config.RAG_EMBEDDING_BATCH_SIZE,
)
Expand Down Expand Up @@ -917,6 +948,7 @@ async def inspect_websocket(request: Request, call_next):
app.mount("/ws", socket_app)


app.include_router(upstage.router, prefix="/upstage", tags=["upstage"])
app.include_router(ollama.router, prefix="/ollama", tags=["ollama"])
app.include_router(openai.router, prefix="/openai", tags=["openai"])

Expand Down
1 change: 1 addition & 0 deletions backend/open_webui/models/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class FileMeta(BaseModel):
name: Optional[str] = None
content_type: Optional[str] = None
size: Optional[int] = None
request_id: Optional[str] = None

model_config = ConfigDict(extra="allow")

Expand Down
Loading