config.py 3.48 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

38
39
40
41
####################################
# OLLAMA_API_BASE_URL
####################################

42
43
44
OLLAMA_API_BASE_URL = os.environ.get(
    "OLLAMA_API_BASE_URL", "http://localhost:11434/api"
)
Timothy J. Baek's avatar
Timothy J. Baek committed
45
46
47
48

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

Timothy J. Baek's avatar
Timothy J. Baek committed
50
51
52
53
54
####################################
# OPENAI_API
####################################

OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "")
55
56
57
58
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
59

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

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

88
####################################
89
# WEBUI_VERSION
90
91
####################################

Timothy J. Baek's avatar
Timothy J. Baek committed
92
WEBUI_VERSION = os.environ.get("WEBUI_VERSION", "v1.0.0-alpha.61")
93
94

####################################
95
# WEBUI_AUTH (Required for security)
96
97
####################################

98
WEBUI_AUTH = True
99

Timothy J. Baek's avatar
Timothy J. Baek committed
100
####################################
101
# WEBUI_SECRET_KEY
Timothy J. Baek's avatar
Timothy J. Baek committed
102
103
####################################

104
105
106
107
WEBUI_SECRET_KEY = os.environ.get(
    "WEBUI_SECRET_KEY",
    os.environ.get("WEBUI_JWT_SECRET_KEY", "t0p-s3cr3t")  # DEPRECATED: remove at next major version
)
108

109
if WEBUI_AUTH and WEBUI_SECRET_KEY == "":
Timothy J. Baek's avatar
Timothy J. Baek committed
110
    raise ValueError(ERROR_MESSAGES.ENV_VAR_NOT_FOUND)
111
112
113
114
115

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

116
CHROMA_DATA_PATH = f"{DATA_DIR}/vector_db"
117
EMBED_MODEL = "all-MiniLM-L6-v2"
Timothy J. Baek's avatar
Timothy J. Baek committed
118
119
120
CHROMA_CLIENT = chromadb.PersistentClient(
    path=CHROMA_DATA_PATH, settings=Settings(allow_reset=True)
)
121
122
CHUNK_SIZE = 1500
CHUNK_OVERLAP = 100