config.py 5.38 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
from pathlib import Path
Timothy J. Baek's avatar
Timothy J. Baek committed
8
9
import json

Timothy J. Baek's avatar
Timothy J. Baek committed
10

lucasew's avatar
lucasew committed
11
12
try:
    from dotenv import load_dotenv, find_dotenv
13

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

Timothy J. Baek's avatar
Timothy J. Baek committed
18
19

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

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


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

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

Timothy J. Baek's avatar
Timothy J. Baek committed
33
34
35
36
37
38
39
try:
    with open(f"{DATA_DIR}/config.json", "r") as f:
        CONFIG_DATA = json.load(f)
except:
    CONFIG_DATA = {}

print(CONFIG_DATA)
40
####################################
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
41
# File Upload DIR
42
43
####################################

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

Timothy J. Baek's avatar
Timothy J. Baek committed
47
48
49
50
51
52
53
54

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

CACHE_DIR = f"{DATA_DIR}/cache"
Path(CACHE_DIR).mkdir(parents=True, exist_ok=True)

55
56
57
58
59
60
61

####################################
# 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
62

63
64
65
66
####################################
# OLLAMA_API_BASE_URL
####################################

67
68
69
OLLAMA_API_BASE_URL = os.environ.get(
    "OLLAMA_API_BASE_URL", "http://localhost:11434/api"
)
Timothy J. Baek's avatar
Timothy J. Baek committed
70
71
72
73

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

Timothy J. Baek's avatar
Timothy J. Baek committed
75
76
77
78
79
####################################
# OPENAI_API
####################################

OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "")
80
81
82
83
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
84

85
86
87
88
89

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

Kyle McLaren's avatar
Kyle McLaren committed
90
ENABLE_SIGNUP = os.environ.get("ENABLE_SIGNUP", True)
91
DEFAULT_MODELS = os.environ.get("DEFAULT_MODELS", None)
Timothy J. Baek's avatar
Timothy J. Baek committed
92
93
94
95
96
97


DEFAULT_PROMPT_SUGGESTIONS = (
    CONFIG_DATA["ui"]["prompt_suggestions"]
    if "ui" in CONFIG_DATA and "prompt_suggestions" in CONFIG_DATA["ui"]
    else [
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
        {
            "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
114
    ]
115
)
Timothy J. Baek's avatar
Timothy J. Baek committed
116
117


Timothy J. Baek's avatar
Timothy J. Baek committed
118
119
120
DEFAULT_USER_ROLE = "pending"
USER_PERMISSIONS = {"chat": {"deletion": True}}

121

122
####################################
123
# WEBUI_VERSION
124
125
####################################

Timothy J. Baek's avatar
Timothy J. Baek committed
126
WEBUI_VERSION = os.environ.get("WEBUI_VERSION", "v1.0.0-alpha.100")
127
128

####################################
129
# WEBUI_AUTH (Required for security)
130
131
####################################

132
WEBUI_AUTH = True
133

Timothy J. Baek's avatar
Timothy J. Baek committed
134
####################################
135
# WEBUI_SECRET_KEY
Timothy J. Baek's avatar
Timothy J. Baek committed
136
137
####################################

138
139
WEBUI_SECRET_KEY = os.environ.get(
    "WEBUI_SECRET_KEY",
Timothy J. Baek's avatar
Timothy J. Baek committed
140
141
142
    os.environ.get(
        "WEBUI_JWT_SECRET_KEY", "t0p-s3cr3t"
    ),  # DEPRECATED: remove at next major version
143
)
144

145
if WEBUI_AUTH and WEBUI_SECRET_KEY == "":
Timothy J. Baek's avatar
Timothy J. Baek committed
146
    raise ValueError(ERROR_MESSAGES.ENV_VAR_NOT_FOUND)
147
148
149
150
151

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

152
CHROMA_DATA_PATH = f"{DATA_DIR}/vector_db"
153
# this uses the model defined in the Dockerfile ENV variable. If you dont use docker or docker based deployments such as k8s, the default embedding model will be used (all-MiniLM-L6-v2)
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
154
RAG_EMBEDDING_MODEL = os.environ.get("RAG_EMBEDDING_MODEL", "all-MiniLM-L6-v2")
155
# device type ebbeding models - "cpu" (default), "cuda" (nvidia gpu required) or "mps" (apple silicon) - choosing this right can lead to better performance
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
156
157
158
RAG_EMBEDDING_MODEL_DEVICE_TYPE = os.environ.get(
    "RAG_EMBEDDING_MODEL_DEVICE_TYPE", "cpu"
)
Timothy J. Baek's avatar
Timothy J. Baek committed
159
CHROMA_CLIENT = chromadb.PersistentClient(
Timothy J. Baek's avatar
Timothy J. Baek committed
160
161
    path=CHROMA_DATA_PATH,
    settings=Settings(allow_reset=True, anonymized_telemetry=False),
Timothy J. Baek's avatar
Timothy J. Baek committed
162
)
163
164
CHUNK_SIZE = 1500
CHUNK_OVERLAP = 100
Timothy J. Baek's avatar
Timothy J. Baek committed
165

Timothy J. Baek's avatar
Timothy J. Baek committed
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180

RAG_TEMPLATE = """Use the following context as your learned knowledge, inside <context></context> XML tags.
<context>
    [context]
</context>

When answer to user:
- If you don't know, just say that you don't know.
- If you don't know when you are not sure, ask for clarification.
Avoid mentioning that you obtained the information from the context.
And answer according to the language of the user's question.
        
Given the context information, answer the query.
Query: [query]"""

Timothy J. Baek's avatar
Timothy J. Baek committed
181
182
183
####################################
# Transcribe
####################################
Timothy J. Baek's avatar
refac  
Timothy J. Baek committed
184
185
186

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