2024-01-15 08:46:22 +08:00
#
2024-01-19 19:51:57 +08:00
# Copyright 2024 The InfiniFlow Authors. All Rights Reserved.
2024-01-15 08:46:22 +08:00
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import os
from enum import IntEnum , Enum
2024-01-17 20:20:42 +08:00
from api . utils import get_base_config , decrypt_database_config
from api . utils . file_utils import get_project_base_directory
from api . utils . log_utils import LoggerFactory , getLogger
2024-01-15 08:46:22 +08:00
2024-03-04 14:42:26 +08:00
# Logger
LoggerFactory . set_directory ( os . path . join ( get_project_base_directory ( ) , " logs " , " api " ) )
# {CRITICAL: 50, FATAL:50, ERROR:40, WARNING:30, WARN:30, INFO:20, DEBUG:10, NOTSET:0}
LoggerFactory . LEVEL = 10
2024-02-27 14:57:34 +08:00
2024-03-04 14:42:26 +08:00
stat_logger = getLogger ( " stat " )
access_logger = getLogger ( " access " )
database_logger = getLogger ( " database " )
2024-01-15 08:46:22 +08:00
API_VERSION = " v1 "
2024-01-17 09:43:27 +08:00
RAG_FLOW_SERVICE_NAME = " ragflow "
2024-01-15 08:46:22 +08:00
SERVER_MODULE = " rag_flow_server.py "
TEMP_DIRECTORY = os . path . join ( get_project_base_directory ( ) , " temp " )
2024-01-17 09:43:27 +08:00
RAG_FLOW_CONF_PATH = os . path . join ( get_project_base_directory ( ) , " conf " )
2024-01-15 08:46:22 +08:00
SUBPROCESS_STD_LOG_NAME = " std.log "
ERROR_REPORT = True
ERROR_REPORT_WITH_PATH = False
MAX_TIMESTAMP_INTERVAL = 60
2024-03-12 11:57:08 +08:00
SESSION_VALID_PERIOD = 7 * 24 * 60 * 60
2024-01-15 08:46:22 +08:00
REQUEST_TRY_TIMES = 3
REQUEST_WAIT_SEC = 2
REQUEST_MAX_WAIT_SEC = 300
USE_REGISTRY = get_base_config ( " use_registry " )
2024-02-28 15:01:12 +08:00
default_llm = {
" 通义千问 " : {
" chat_model " : " qwen-plus " ,
" embedding_model " : " text-embedding-v2 " ,
" image2text_model " : " qwen-vl-max " ,
" asr_model " : " paraformer-realtime-8k-v1 " ,
} ,
" OpenAI " : {
" chat_model " : " gpt-3.5-turbo " ,
" embedding_model " : " text-embedding-ada-002 " ,
" image2text_model " : " gpt-4-vision-preview " ,
" asr_model " : " whisper-1 " ,
} ,
2024-02-29 18:53:02 +08:00
" 智谱AI " : {
2024-02-28 15:01:12 +08:00
" chat_model " : " glm-3-turbo " ,
" embedding_model " : " embedding-2 " ,
" image2text_model " : " glm-4v " ,
" asr_model " : " " ,
} ,
2024-03-12 11:57:08 +08:00
" local " : {
" chat_model " : " " ,
" embedding_model " : " " ,
" image2text_model " : " " ,
" asr_model " : " " ,
}
2024-02-28 15:01:12 +08:00
}
2024-02-19 19:22:17 +08:00
LLM = get_base_config ( " user_default_llm " , { } )
2024-02-28 15:01:12 +08:00
LLM_FACTORY = LLM . get ( " factory " , " 通义千问 " )
if LLM_FACTORY not in default_llm :
print ( " \33 [91m【ERROR】 \33 [0m: " , f " LLM factory { LLM_FACTORY } has not supported yet, switch to ' 通义千问/QWen ' automatically, and please check the API_KEY in service_conf.yaml. " )
LLM_FACTORY = " 通义千问 "
CHAT_MDL = default_llm [ LLM_FACTORY ] [ " chat_model " ]
EMBEDDING_MDL = default_llm [ LLM_FACTORY ] [ " embedding_model " ]
ASR_MDL = default_llm [ LLM_FACTORY ] [ " asr_model " ]
IMAGE2TEXT_MDL = default_llm [ LLM_FACTORY ] [ " image2text_model " ]
2024-02-19 19:22:17 +08:00
API_KEY = LLM . get ( " api_key " , " infiniflow API Key " )
2024-02-29 14:03:07 +08:00
PARSERS = LLM . get ( " parsers " , " naive:General,qa:Q&A,resume:Resume,table:Table,laws:Laws,manual:Manual,book:Book,paper:Paper,presentation:Presentation,picture:Picture " )
2024-01-15 08:46:22 +08:00
# distribution
DEPENDENT_DISTRIBUTION = get_base_config ( " dependent_distribution " , False )
2024-01-17 09:43:27 +08:00
RAG_FLOW_UPDATE_CHECK = False
2024-01-15 08:46:22 +08:00
2024-01-17 09:43:27 +08:00
HOST = get_base_config ( RAG_FLOW_SERVICE_NAME , { } ) . get ( " host " , " 127.0.0.1 " )
HTTP_PORT = get_base_config ( RAG_FLOW_SERVICE_NAME , { } ) . get ( " http_port " )
2024-01-15 08:46:22 +08:00
2024-01-17 09:43:27 +08:00
SECRET_KEY = get_base_config ( RAG_FLOW_SERVICE_NAME , { } ) . get ( " secret_key " , " infiniflow " )
TOKEN_EXPIRE_IN = get_base_config ( RAG_FLOW_SERVICE_NAME , { } ) . get ( " token_expires_in " , 3600 )
2024-01-15 08:46:22 +08:00
2024-01-17 09:43:27 +08:00
NGINX_HOST = get_base_config ( RAG_FLOW_SERVICE_NAME , { } ) . get ( " nginx " , { } ) . get ( " host " ) or HOST
NGINX_HTTP_PORT = get_base_config ( RAG_FLOW_SERVICE_NAME , { } ) . get ( " nginx " , { } ) . get ( " http_port " ) or HTTP_PORT
2024-01-15 08:46:22 +08:00
2024-01-17 09:43:27 +08:00
RANDOM_INSTANCE_ID = get_base_config ( RAG_FLOW_SERVICE_NAME , { } ) . get ( " random_instance_id " , False )
2024-01-15 08:46:22 +08:00
2024-01-17 09:43:27 +08:00
PROXY = get_base_config ( RAG_FLOW_SERVICE_NAME , { } ) . get ( " proxy " )
PROXY_PROTOCOL = get_base_config ( RAG_FLOW_SERVICE_NAME , { } ) . get ( " protocol " )
2024-01-15 08:46:22 +08:00
2024-02-28 15:01:12 +08:00
DATABASE = decrypt_database_config ( name = " mysql " )
2024-01-15 08:46:22 +08:00
# Switch
# upload
UPLOAD_DATA_FROM_CLIENT = True
# authentication
AUTHENTICATION_CONF = get_base_config ( " authentication " , { } )
# client
CLIENT_AUTHENTICATION = AUTHENTICATION_CONF . get ( " client " , { } ) . get ( " switch " , False )
HTTP_APP_KEY = AUTHENTICATION_CONF . get ( " client " , { } ) . get ( " http_app_key " )
GITHUB_OAUTH = get_base_config ( " oauth " , { } ) . get ( " github " )
WECHAT_OAUTH = get_base_config ( " oauth " , { } ) . get ( " wechat " )
# site
SITE_AUTHENTICATION = AUTHENTICATION_CONF . get ( " site " , { } ) . get ( " switch " , False )
# permission
PERMISSION_CONF = get_base_config ( " permission " , { } )
PERMISSION_SWITCH = PERMISSION_CONF . get ( " switch " )
COMPONENT_PERMISSION = PERMISSION_CONF . get ( " component " )
DATASET_PERMISSION = PERMISSION_CONF . get ( " dataset " )
HOOK_MODULE = get_base_config ( " hook_module " )
HOOK_SERVER_NAME = get_base_config ( " hook_server_name " )
ENABLE_MODEL_STORE = get_base_config ( ' enable_model_store ' , False )
# authentication
USE_AUTHENTICATION = False
USE_DATA_AUTHENTICATION = False
AUTOMATIC_AUTHORIZATION_OUTPUT_DATA = True
USE_DEFAULT_TIMEOUT = False
2024-03-12 11:57:08 +08:00
AUTHENTICATION_DEFAULT_TIMEOUT = 7 * 24 * 60 * 60 # s
2024-01-15 08:46:22 +08:00
PRIVILEGE_COMMAND_WHITELIST = [ ]
CHECK_NODES_IDENTITY = False
2024-03-04 14:42:26 +08:00
from rag . nlp import search
from rag . utils import ELASTICSEARCH
2024-02-27 14:57:34 +08:00
retrievaler = search . Dealer ( ELASTICSEARCH )
2024-03-01 19:48:01 +08:00
2024-01-15 08:46:22 +08:00
class CustomEnum ( Enum ) :
@classmethod
def valid ( cls , value ) :
try :
cls ( value )
return True
except :
return False
@classmethod
def values ( cls ) :
return [ member . value for member in cls . __members__ . values ( ) ]
@classmethod
def names ( cls ) :
return [ member . name for member in cls . __members__ . values ( ) ]
class PythonDependenceName ( CustomEnum ) :
2024-01-17 09:43:27 +08:00
Rag_Source_Code = " python "
2024-01-15 08:46:22 +08:00
Python_Env = " miniconda "
class ModelStorage ( CustomEnum ) :
REDIS = " redis "
MYSQL = " mysql "
class RetCode ( IntEnum , CustomEnum ) :
SUCCESS = 0
NOT_EFFECTIVE = 10
EXCEPTION_ERROR = 100
ARGUMENT_ERROR = 101
DATA_ERROR = 102
OPERATING_ERROR = 103
CONNECTION_ERROR = 105
RUNNING = 106
PERMISSION_ERROR = 108
AUTHENTICATION_ERROR = 109
SERVER_ERROR = 500