5
5
from os import environ
6
6
from pathlib import Path
7
7
from re import Pattern , compile
8
+ from typing import Optional
8
9
from aiohttp import ClientTimeout
9
10
from dotenv import load_dotenv
10
11
from urllib import parse
@@ -35,7 +36,6 @@ def __call__(cls, *args, **kwargs):
35
36
MAX_API_KEY : int = 3
36
37
MAX_API_WHITELIST : int = 10
37
38
BASE_DIR : Path = Path (__file__ ).parents [2 ]
38
- EMBEDDING_VECTOR_DIMENSION : int = 1536
39
39
40
40
# MySQL Variables
41
41
MYSQL_ROOT_PASSWORD : str = environ ["MYSQL_ROOT_PASSWORD" ]
@@ -57,24 +57,29 @@ def __call__(cls, *args, **kwargs):
57
57
58
58
59
59
# Optional Service Variables
60
+ EMBEDDING_VECTOR_DIMENSION : int = 1536
61
+ EMBEDDING_TOKEN_CHUNK_SIZE : int = int (environ .get ("EMBEDDING_TOKEN_CHUNK_SIZE" , 512 ))
62
+ EMBEDDING_TOKEN_CHUNK_OVERLAP : int = int (environ .get ("EMBEDDING_TOKEN_CHUNK_OVERLAP" , 128 ))
63
+ SUMMARIZE_FOR_CHAT : bool = environ .get ("SUMMARIZE_FOR_CHAT" , "True" ).lower () == "true"
64
+ SUMMARIZATION_THRESHOLD : int = int (environ .get ("SUMMARIZATION_THRESHOLD" , 512 ))
60
65
DEFAULT_LLM_MODEL : str = environ .get ("DEFAULT_LLM_MODEL" , "gpt_3_5_turbo" )
61
- OPENAI_API_KEY : str | None = environ .get ("OPENAI_API_KEY" )
62
- RAPID_API_KEY : str | None = environ .get ("RAPID_API_KEY" )
63
- GOOGLE_TRANSLATE_API_KEY : str | None = environ .get ("GOOGLE_TRANSLATE_API_KEY" )
64
- PAPAGO_CLIENT_ID : str | None = environ .get ("PAPAGO_CLIENT_ID" )
65
- PAPAGO_CLIENT_SECRET : str | None = environ .get ("PAPAGO_CLIENT_SECRET" )
66
- CUSTOM_TRANSLATE_URL : str | None = environ .get ("CUSTOM_TRANSLATE_URL" )
67
- AWS_ACCESS_KEY : str | None = environ .get ("AWS_ACCESS_KEY" )
68
- AWS_SECRET_KEY : str | None = environ .get ("AWS_SECRET_KEY" )
69
- AWS_AUTHORIZED_EMAIL : str | None = environ .get ("AWS_AUTHORIZED_EMAIL" )
70
- SAMPLE_JWT_TOKEN : str | None = environ .get ("SAMPLE_JWT_TOKEN" )
71
- SAMPLE_ACCESS_KEY : str | None = environ .get ("SAMPLE_ACCESS_KEY" )
72
- SAMPLE_SECRET_KEY : str | None = environ .get ("SAMPLE_SECRET_KEY" )
73
- KAKAO_RESTAPI_TOKEN : str | None = environ .get ("KAKAO_RESTAPI_TOKEN" )
74
- WEATHERBIT_API_KEY : str | None = environ .get ("WEATHERBIT_API_KEY" )
75
- KAKAO_IMAGE_URL : str | None = (
76
- "http://k.kakaocdn.net/dn/wwWjr/btrYVhCnZDF/2bgXDJth2LyIajIjILhLK0/kakaolink40_original.png"
77
- )
66
+ OPENAI_API_KEY : Optional [ str ] = environ .get ("OPENAI_API_KEY" )
67
+ RAPID_API_KEY : Optional [ str ] = environ .get ("RAPID_API_KEY" )
68
+ GOOGLE_TRANSLATE_API_KEY : Optional [ str ] = environ .get ("GOOGLE_TRANSLATE_API_KEY" )
69
+ PAPAGO_CLIENT_ID : Optional [ str ] = environ .get ("PAPAGO_CLIENT_ID" )
70
+ PAPAGO_CLIENT_SECRET : Optional [ str ] = environ .get ("PAPAGO_CLIENT_SECRET" )
71
+ CUSTOM_TRANSLATE_URL : Optional [ str ] = environ .get ("CUSTOM_TRANSLATE_URL" )
72
+ AWS_ACCESS_KEY : Optional [ str ] = environ .get ("AWS_ACCESS_KEY" )
73
+ AWS_SECRET_KEY : Optional [ str ] = environ .get ("AWS_SECRET_KEY" )
74
+ AWS_AUTHORIZED_EMAIL : Optional [ str ] = environ .get ("AWS_AUTHORIZED_EMAIL" )
75
+ SAMPLE_JWT_TOKEN : Optional [ str ] = environ .get ("SAMPLE_JWT_TOKEN" )
76
+ SAMPLE_ACCESS_KEY : Optional [ str ] = environ .get ("SAMPLE_ACCESS_KEY" )
77
+ SAMPLE_SECRET_KEY : Optional [ str ] = environ .get ("SAMPLE_SECRET_KEY" )
78
+ KAKAO_RESTAPI_TOKEN : Optional [ str ] = environ .get ("KAKAO_RESTAPI_TOKEN" )
79
+ WEATHERBIT_API_KEY : Optional [ str ] = environ .get ("WEATHERBIT_API_KEY" )
80
+ KAKAO_IMAGE_URL : Optional [
81
+ str
82
+ ] = "http://k.kakaocdn.net/dn/wwWjr/btrYVhCnZDF/2bgXDJth2LyIajIjILhLK0/kakaolink40_original.png"
78
83
79
84
"""
80
85
400 Bad Request
@@ -113,6 +118,10 @@ class Config(metaclass=SingletonMetaClass):
113
118
redis_port : int = REDIS_PORT
114
119
redis_database : int = REDIS_DATABASE
115
120
redis_password : str = REDIS_PASSWORD
121
+ qdrant_host : str = "vectorstore"
122
+ qdrant_port : int = 6333
123
+ qdrant_grpc_port : int = 6334
124
+ shared_vectorestore_name : str = "SharedCollection"
116
125
trusted_hosts : list [str ] = field (default_factory = lambda : ["*" ])
117
126
allowed_sites : list [str ] = field (default_factory = lambda : ["*" ])
118
127
@@ -121,6 +130,7 @@ def __post_init__(self):
121
130
self .port = 8001
122
131
self .mysql_host = "localhost"
123
132
self .redis_host = "localhost"
133
+ self .qdrant_host = "localhost"
124
134
self .mysql_root_url = self .database_url_format .format (
125
135
dialect = "mysql" ,
126
136
driver = "pymysql" ,
@@ -149,7 +159,7 @@ def __post_init__(self):
149
159
150
160
@staticmethod
151
161
def get (
152
- option : str | None = None ,
162
+ option : Optional [ str ] = None ,
153
163
) -> LocalConfig | ProdConfig | TestConfig :
154
164
if environ .get ("PYTEST_RUNNING" ) is not None :
155
165
return TestConfig ()
@@ -202,15 +212,16 @@ class TestConfig(Config):
202
212
mysql_database : str = MYSQL_TEST_DATABASE
203
213
mysql_host : str = "localhost"
204
214
redis_host : str = "localhost"
215
+ qdrant_host : str = "localhost"
205
216
port : int = 8001
206
217
207
218
208
219
@dataclass
209
220
class LoggingConfig :
210
221
logger_level : int = logging .DEBUG
211
222
console_log_level : int = logging .INFO
212
- file_log_level : int | None = logging .DEBUG
213
- file_log_name : str | None = "./logs/debug.log"
223
+ file_log_level : Optional [ int ] = logging .DEBUG
224
+ file_log_name : Optional [ str ] = "./logs/debug.log"
214
225
logging_format : str = "[%(asctime)s] %(name)s:%(levelname)s - %(message)s"
215
226
216
227
@@ -223,8 +234,10 @@ class ChatConfig:
223
234
api_regex_pattern : Pattern = compile (r"data:\s*({.+?})\n\n" )
224
235
extra_token_margin : int = 512 # number of tokens to remove when tokens exceed token limit
225
236
continue_message : str = "...[CONTINUED]" # message to append when tokens exceed token limit
226
- summarize_for_chat : bool = True # whether to summarize chat messages
227
- summarization_threshold : int = 512 # token threshold for summarization. if message tokens exceed this, summarize
237
+ summarize_for_chat : bool = SUMMARIZE_FOR_CHAT # whether to summarize chat messages
238
+ summarization_threshold : int = (
239
+ SUMMARIZATION_THRESHOLD # token threshold for summarization. if message tokens exceed this, summarize
240
+ )
228
241
summarization_openai_model : str = "gpt-3.5-turbo"
229
242
summarization_token_limit : int = 2048 # token limit for summarization
230
243
summarization_token_overlap : int = 100 # number of tokens to overlap between chunks
0 commit comments