config.py 3.69 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
45

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

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

46
47
48
49
####################################
# OLLAMA_API_BASE_URL
####################################

50
51
52
OLLAMA_API_BASE_URL = os.environ.get(
    "OLLAMA_API_BASE_URL", "http://localhost:11434/api"
)
Timothy J. Baek's avatar
Timothy J. Baek committed
53
54
55
56

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

Timothy J. Baek's avatar
Timothy J. Baek committed
58
59
60
61
62
####################################
# OPENAI_API
####################################

OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "")
63
64
65
66
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
67

68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

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

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.",
        },
    ],
)

96
####################################
97
# WEBUI_VERSION
98
99
####################################

Timothy J. Baek's avatar
Timothy J. Baek committed
100
WEBUI_VERSION = os.environ.get("WEBUI_VERSION", "v1.0.0-alpha.92")
101
102

####################################
103
# WEBUI_AUTH (Required for security)
104
105
####################################

106
WEBUI_AUTH = True
107

Timothy J. Baek's avatar
Timothy J. Baek committed
108
####################################
109
# WEBUI_SECRET_KEY
Timothy J. Baek's avatar
Timothy J. Baek committed
110
111
####################################

112
113
WEBUI_SECRET_KEY = os.environ.get(
    "WEBUI_SECRET_KEY",
Timothy J. Baek's avatar
Timothy J. Baek committed
114
115
116
    os.environ.get(
        "WEBUI_JWT_SECRET_KEY", "t0p-s3cr3t"
    ),  # DEPRECATED: remove at next major version
117
)
118

119
if WEBUI_AUTH and WEBUI_SECRET_KEY == "":
Timothy J. Baek's avatar
Timothy J. Baek committed
120
    raise ValueError(ERROR_MESSAGES.ENV_VAR_NOT_FOUND)
121
122
123
124
125

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

126
CHROMA_DATA_PATH = f"{DATA_DIR}/vector_db"
127
EMBED_MODEL = "all-MiniLM-L6-v2"
Timothy J. Baek's avatar
Timothy J. Baek committed
128
CHROMA_CLIENT = chromadb.PersistentClient(
Timothy J. Baek's avatar
Timothy J. Baek committed
129
130
    path=CHROMA_DATA_PATH,
    settings=Settings(allow_reset=True, anonymized_telemetry=False),
Timothy J. Baek's avatar
Timothy J. Baek committed
131
)
132
133
CHUNK_SIZE = 1500
CHUNK_OVERLAP = 100