config.py 4.2 KB
Newer Older
1
2
import os
import chromadb
Timothy J. Baek's avatar
Timothy J. Baek committed
3
from chromadb import Settings
4
5
from secrets import token_bytes
from base64 import b64encode
6
from constants import ERROR_MESSAGES
Timothy J. Baek's avatar
Timothy J. Baek committed
7
8
from pathlib import Path

lucasew's avatar
lucasew committed
9
10
try:
    from dotenv import load_dotenv, find_dotenv
11

lucasew's avatar
lucasew committed
12
13
14
    load_dotenv(find_dotenv("../.env"))
except ImportError:
    print("dotenv not installed, skipping...")
Timothy J. Baek's avatar
Timothy J. Baek committed
15

Timothy J. Baek's avatar
Timothy J. Baek committed
16
17

####################################
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
18
# ENV (dev,test,prod)
Timothy J. Baek's avatar
Timothy J. Baek committed
19
20
####################################

Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
21
ENV = os.environ.get("ENV", "dev")
Timothy J. Baek's avatar
Timothy J. Baek committed
22
23


Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
24
25
26
####################################
# DATA/FRONTEND BUILD DIR
####################################
lucasew's avatar
lucasew committed
27

Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
28
DATA_DIR = str(Path(os.getenv("DATA_DIR", "./data")).resolve())
lucasew's avatar
lucasew committed
29
FRONTEND_BUILD_DIR = str(Path(os.getenv("FRONTEND_BUILD_DIR", "../build")))
Timothy J. Baek's avatar
Timothy J. Baek committed
30

31
####################################
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
32
# File Upload DIR
33
34
####################################

Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
35
36
UPLOAD_DIR = f"{DATA_DIR}/uploads"
Path(UPLOAD_DIR).mkdir(parents=True, exist_ok=True)
Timothy J. Baek's avatar
Timothy J. Baek committed
37

Timothy J. Baek's avatar
Timothy J. Baek committed
38
39
40
41
42
43
44

####################################
# Cache DIR
####################################

CACHE_DIR = f"{DATA_DIR}/cache"
Path(CACHE_DIR).mkdir(parents=True, exist_ok=True)
45
46
47
48
49
50
51
52


####################################
# Docs DIR
####################################

DOCS_DIR = f"{DATA_DIR}/docs"
Path(DOCS_DIR).mkdir(parents=True, exist_ok=True)
Timothy J. Baek's avatar
Timothy J. Baek committed
53

54
55
56
57
####################################
# OLLAMA_API_BASE_URL
####################################

58
59
60
OLLAMA_API_BASE_URL = os.environ.get(
    "OLLAMA_API_BASE_URL", "http://localhost:11434/api"
)
Timothy J. Baek's avatar
Timothy J. Baek committed
61
62
63
64

if ENV == "prod":
    if OLLAMA_API_BASE_URL == "/ollama/api":
        OLLAMA_API_BASE_URL = "http://host.docker.internal:11434/api"
65

Timothy J. Baek's avatar
Timothy J. Baek committed
66
67
68
69
70
####################################
# OPENAI_API
####################################

OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "")
71
72
73
74
OPENAI_API_BASE_URL = os.environ.get("OPENAI_API_BASE_URL", "")

if OPENAI_API_BASE_URL == "":
    OPENAI_API_BASE_URL = "https://api.openai.com/v1"
Timothy J. Baek's avatar
Timothy J. Baek committed
75

76
77
78
79
80

####################################
# WEBUI
####################################

Kyle McLaren's avatar
Kyle McLaren committed
81
ENABLE_SIGNUP = os.environ.get("ENABLE_SIGNUP", True)
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
DEFAULT_MODELS = os.environ.get("DEFAULT_MODELS", None)
DEFAULT_PROMPT_SUGGESTIONS = os.environ.get(
    "DEFAULT_PROMPT_SUGGESTIONS",
    [
        {
            "title": ["Help me study", "vocabulary for a college entrance exam"],
            "content": "Help me study vocabulary: write a sentence for me to fill in the blank, and I'll try to pick the correct option.",
        },
        {
            "title": ["Give me ideas", "for what to do with my kids' art"],
            "content": "What are 5 creative things I could do with my kids' art? I don't want to throw them away, but it's also so much clutter.",
        },
        {
            "title": ["Tell me a fun fact", "about the Roman Empire"],
            "content": "Tell me a random fun fact about the Roman Empire",
        },
        {
            "title": ["Show me a code snippet", "of a website's sticky header"],
            "content": "Show me a code snippet of a website's sticky header in CSS and JavaScript.",
        },
    ],
)
Timothy J. Baek's avatar
Timothy J. Baek committed
104
105
106
DEFAULT_USER_ROLE = "pending"
USER_PERMISSIONS = {"chat": {"deletion": True}}

107

108
####################################
109
# WEBUI_VERSION
110
111
####################################

Timothy J. Baek's avatar
Timothy J. Baek committed
112
WEBUI_VERSION = os.environ.get("WEBUI_VERSION", "v1.0.0-alpha.100")
113
114

####################################
115
# WEBUI_AUTH (Required for security)
116
117
####################################

118
WEBUI_AUTH = True
119

Timothy J. Baek's avatar
Timothy J. Baek committed
120
####################################
121
# WEBUI_SECRET_KEY
Timothy J. Baek's avatar
Timothy J. Baek committed
122
123
####################################

124
125
WEBUI_SECRET_KEY = os.environ.get(
    "WEBUI_SECRET_KEY",
Timothy J. Baek's avatar
Timothy J. Baek committed
126
127
128
    os.environ.get(
        "WEBUI_JWT_SECRET_KEY", "t0p-s3cr3t"
    ),  # DEPRECATED: remove at next major version
129
)
130

131
if WEBUI_AUTH and WEBUI_SECRET_KEY == "":
Timothy J. Baek's avatar
Timothy J. Baek committed
132
    raise ValueError(ERROR_MESSAGES.ENV_VAR_NOT_FOUND)
133
134
135
136
137

####################################
# RAG
####################################

138
CHROMA_DATA_PATH = f"{DATA_DIR}/vector_db"
139
EMBED_MODEL = "all-MiniLM-L6-v2"
Timothy J. Baek's avatar
Timothy J. Baek committed
140
CHROMA_CLIENT = chromadb.PersistentClient(
Timothy J. Baek's avatar
Timothy J. Baek committed
141
142
    path=CHROMA_DATA_PATH,
    settings=Settings(allow_reset=True, anonymized_telemetry=False),
Timothy J. Baek's avatar
Timothy J. Baek committed
143
)
144
145
CHUNK_SIZE = 1500
CHUNK_OVERLAP = 100
Timothy J. Baek's avatar
Timothy J. Baek committed
146
147
148
149

####################################
# Transcribe
####################################
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
150
151
152

WHISPER_MODEL = os.getenv("WHISPER_MODEL", "base")
WHISPER_MODEL_DIR = os.getenv("WHISPER_MODEL_DIR", f"{CACHE_DIR}/whisper/models")