import os import sys from server.logger.logger_config import my_logger as logger os.environ["TOKENIZERS_PARALLELISM"] = "false" def check_env_variables(): # LLM_NAME: Name of the language model being used, should be in ['OpenAI', 'ZhipuAI', 'Ollama', 'DeepSeek', 'Moonshot']. LLM_NAME = os.getenv('LLM_NAME') llm_name_list = ['OpenAI', 'ZhipuAI', 'Ollama', 'DeepSeek', 'Moonshot'] if LLM_NAME not in llm_name_list: logger.error( f"LLM_NAME: '{LLM_NAME}' is illegal! Must be in {llm_name_list}.") sys.exit(-1) if LLM_NAME == 'OpenAI': # OPENAI_API_KEY: API key for accessing OpenAI's services. OPENAI_API_KEY = os.getenv('OPENAI_API_KEY') if OPENAI_API_KEY == 'xxxx': logger.error(f"OPENAI_API_KEY: '{OPENAI_API_KEY}' is illegal!") sys.exit(-1) # GPT_MODEL_NAME: Specific GPT model being used, e.g., 'gpt-3.5-turbo' or 'gpt-4-turbo' or 'gpt-4o' or 'gpt-4o-mini'. GPT_MODEL_NAME = os.getenv('GPT_MODEL_NAME') gpt_model_name_list = [ 'gpt-3.5-turbo', 'gpt-4-turbo', 'gpt-4o', 'gpt-4o-mini' ] if GPT_MODEL_NAME not in gpt_model_name_list: logger.error( f"GPT_MODEL_NAME: '{GPT_MODEL_NAME}' is illegal! Must be in {gpt_model_name_list}" ) sys.exit(-1) elif LLM_NAME == 'ZhipuAI': # ZHIPUAI_API_KEY: API key for accessing ZhipuAI's services. ZHIPUAI_API_KEY = os.getenv('ZHIPUAI_API_KEY') if ZHIPUAI_API_KEY == 'xxxx': logger.error(f"ZHIPUAI_API_KEY: '{ZHIPUAI_API_KEY}' is illegal!") sys.exit(-1) # GLM_MODEL_NAME: Specific GLM model being used, e.g., 'glm-3-turbo' or 'glm-4'. GLM_MODEL_NAME = os.getenv('GLM_MODEL_NAME') if GLM_MODEL_NAME not in [ 'glm-3-turbo', 'glm-4', 'glm-4-0520', 'glm-4-air', 'glm-4-airx', 'glm-4-flash' ]: logger.error( f"GLM_MODEL_NAME: '{GLM_MODEL_NAME}' is illegal! Must be in ['glm-3-turbo', 'glm-4', 'glm-4-0520', 'glm-4-air', 'glm-4-airx', 'glm-4-flash']" ) sys.exit(-1) elif LLM_NAME == 'Ollama': # OLLAMA_MODEL_NAME: Specific Ollma model being used, e.g., 'llama3', 'llama3:70b', 'phi3', 'mistral', etc. OLLAMA_MODEL_NAME = os.getenv('OLLAMA_MODEL_NAME') if OLLAMA_MODEL_NAME == 'xxxx': logger.error( f"OLLAMA_MODEL_NAME: '{OLLAMA_MODEL_NAME}' is illegal! Mast be 'llama3', 'llama3:70b', 'phi3', 'mistral', etc." ) sys.exit(-1) OLLAMA_BASE_URL = os.getenv('OLLAMA_BASE_URL') if not OLLAMA_BASE_URL.startswith( 'http://') and not OLLAMA_BASE_URL.startswith('https://'): logger.error( f"OLLAMA_BASE_URL: '{OLLAMA_BASE_URL}' is illegal! It must be like 'http://IP:PORT' or 'https://IP:PORT'" ) sys.exit(-1) # Count the number of '/' slash_count = OLLAMA_BASE_URL.count('/') if slash_count > 2: logger.error( f"OLLAMA_BASE_URL: '{OLLAMA_BASE_URL}' is illegal! It must be like 'http://IP:PORT' or 'https://IP:PORT'" ) sys.exit(-1) elif LLM_NAME == 'DeepSeek': # ZHIPUAI_API_KEY: API key for accessing ZhipuAI's services. ZHIPUAI_API_KEY = os.getenv('ZHIPUAI_API_KEY') if ZHIPUAI_API_KEY == 'xxxx': logger.error(f"ZHIPUAI_API_KEY: '{ZHIPUAI_API_KEY}' is illegal!") sys.exit(-1) # DEEPSEEK_API_KEY: API key for accessing DeepSeek's services. DEEPSEEK_API_KEY = os.getenv('DEEPSEEK_API_KEY') if DEEPSEEK_API_KEY == 'xxxx': logger.error(f"DEEPSEEK_API_KEY: '{DEEPSEEK_API_KEY}' is illegal!") sys.exit(-1) # DEEPSEEK_MODEL_NAME: Specific DeepSeek model being used, e.g., 'deepseek-chat' or 'deepseek-coder'. DEEPSEEK_MODEL_NAME = os.getenv('DEEPSEEK_MODEL_NAME') if DEEPSEEK_MODEL_NAME not in ['deepseek-chat', 'deepseek-coder']: logger.error( f"DEEPSEEK_MODEL_NAME: '{DEEPSEEK_MODEL_NAME}' is illegal! Must be 'deepseek-chat' or 'deepseek-coder'" ) sys.exit(-1) elif LLM_NAME == 'Moonshot': # ZHIPUAI_API_KEY: API key for accessing ZhipuAI's services. ZHIPUAI_API_KEY = os.getenv('ZHIPUAI_API_KEY') if ZHIPUAI_API_KEY == 'xxxx': logger.error(f"ZHIPUAI_API_KEY: '{ZHIPUAI_API_KEY}' is illegal!") sys.exit(-1) # MOONSHOT_API_KEY: API key for accessing Moonshot's services. MOONSHOT_API_KEY = os.getenv('MOONSHOT_API_KEY') if MOONSHOT_API_KEY == 'xxxx': logger.error(f"MOONSHOT_API_KEY: '{MOONSHOT_API_KEY}' is illegal!") sys.exit(-1) # MOONSHOT_MODEL_NAME: Specific Moonshot model being used, e.g., 'moonshot-v1-8k'. MOONSHOT_MODEL_NAME = os.getenv('MOONSHOT_MODEL_NAME') if MOONSHOT_MODEL_NAME not in ['moonshot-v1-8k']: logger.error( f"MOONSHOT_MODEL_NAME: '{MOONSHOT_MODEL_NAME}' is illegal! Must be 'moonshot-v1-8k'" ) sys.exit(-1) # MIN_RELEVANCE_SCORE: Minimum score for a document to be considered relevant, and will be used in prompt, between 0.3 and 0.7. MIN_RELEVANCE_SCORE = os.getenv('MIN_RELEVANCE_SCORE') try: min_relevance_score = float(MIN_RELEVANCE_SCORE) if min_relevance_score < 0.3 or min_relevance_score > 0.7: logger.error( f"MIN_RELEVANCE_SCORE: {MIN_RELEVANCE_SCORE} is illegal! It should be a float number between [0.3~0.7]" ) sys.exit(-1) except Exception as e: logger.error( f"MIN_RELEVANCE_SCORE: {MIN_RELEVANCE_SCORE} is illegal! It should be a float number between [0.3~0.7]" ) sys.exit(-1) # BOT_TOPIC: Main topic or domain the bot is designed to handle, like 'OpenIM' or 'LangChain'. BOT_TOPIC = os.getenv('BOT_TOPIC') if BOT_TOPIC == 'xxxx': logger.error( f"BOT_TOPIC: '{BOT_TOPIC}' is illegal! You must set your own bot topic, such as 'OpenIM' or 'LangChain', etc." ) sys.exit(-1) # URL_PREFIX: The prefix URL for accessing media and other resources, must start with 'http://' or 'https://'. URL_PREFIX = os.getenv('URL_PREFIX') if not URL_PREFIX.startswith('http://') and not URL_PREFIX.startswith( 'https://'): logger.error( f"URL_PREFIX: '{URL_PREFIX}' is illegal! It must start with 'http://' or 'https://'" ) sys.exit(-1) # USE_PREPROCESS_QUERY: Flag (0 or 1) indicating whether preprocessing should be applied to queries. USE_PREPROCESS_QUERY = os.getenv('USE_PREPROCESS_QUERY') try: use_preprocess_query = int(USE_PREPROCESS_QUERY) if use_preprocess_query not in [0, 1]: logger.error( f"USE_PREPROCESS_QUERY: {USE_PREPROCESS_QUERY} is illegal! It should be 0 or 1!" ) sys.exit(-1) except Exception as e: logger.error( f"USE_PREPROCESS_QUERY: {USE_PREPROCESS_QUERY} is illegal! It should be 0 or 1!" ) sys.exit(-1) # USE_RERANKING: Flag (0 or 1) indicating whether reranking should be applied to search results. USE_RERANKING = os.getenv('USE_RERANKING') try: use_reranking = int(USE_RERANKING) if use_reranking not in [0, 1]: logger.error( f"USE_RERANKING: {USE_RERANKING} is illegal! It should be 0 or 1!" ) sys.exit(-1) except Exception as e: logger.error( f"USE_RERANKING: {USE_RERANKING} is illegal! It should be 0 or 1!") sys.exit(-1) # USE_DEBUG: Flag (0 or 1) indicating whether to output additional debug information, such as `search`, `reranking`, `prompt`. USE_DEBUG = os.getenv('USE_DEBUG') try: use_debug = int(USE_DEBUG) if use_debug not in [0, 1]: logger.error( f"USE_DEBUG: {USE_DEBUG} is illegal! It should be 0 or 1!") sys.exit(-1) except Exception as e: logger.error( f"USE_DEBUG: {USE_DEBUG} is illegal! It should be 0 or 1!") sys.exit(-1)