utils.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. """
  2. 配置相关的工具函数
  3. 用于处理不同模型类型的配置选择逻辑
  4. """
  5. from core.logging import get_app_logger
  6. # 初始化logger
  7. _logger = get_app_logger("ConfigUtils")
  8. def get_current_embedding_config():
  9. """
  10. 根据EMBEDDING_MODEL_TYPE返回当前应该使用的embedding配置
  11. Returns:
  12. dict: 当前的embedding配置字典
  13. Raises:
  14. ImportError: 如果无法导入app_config
  15. ValueError: 如果EMBEDDING_MODEL_TYPE值无效
  16. """
  17. try:
  18. import app_config
  19. except ImportError:
  20. raise ImportError("无法导入 app_config.py,请确保该文件存在")
  21. if app_config.EMBEDDING_MODEL_TYPE == "ollama":
  22. return app_config.OLLAMA_EMBEDDING_CONFIG
  23. elif app_config.EMBEDDING_MODEL_TYPE == "api":
  24. return app_config.API_EMBEDDING_CONFIG
  25. else:
  26. raise ValueError(f"不支持的EMBEDDING_MODEL_TYPE: {app_config.EMBEDDING_MODEL_TYPE}")
  27. def get_current_llm_config():
  28. """
  29. 根据LLM_MODEL_TYPE和API_LLM_MODEL返回当前应该使用的LLM配置
  30. Returns:
  31. dict: 当前的LLM配置字典
  32. Raises:
  33. ImportError: 如果无法导入app_config
  34. ValueError: 如果LLM_MODEL_TYPE或API_LLM_MODEL值无效
  35. """
  36. try:
  37. import app_config
  38. except ImportError:
  39. raise ImportError("无法导入 app_config.py,请确保该文件存在")
  40. if app_config.LLM_MODEL_TYPE == "ollama":
  41. return app_config.OLLAMA_LLM_CONFIG
  42. elif app_config.LLM_MODEL_TYPE == "api":
  43. if app_config.API_LLM_MODEL == "qianwen":
  44. return app_config.API_QIANWEN_CONFIG
  45. elif app_config.API_LLM_MODEL == "deepseek":
  46. return app_config.API_DEEPSEEK_CONFIG
  47. else:
  48. raise ValueError(f"不支持的API_LLM_MODEL: {app_config.API_LLM_MODEL}")
  49. else:
  50. raise ValueError(f"不支持的LLM_MODEL_TYPE: {app_config.LLM_MODEL_TYPE}")
  51. def get_current_vector_db_config():
  52. """
  53. 根据VECTOR_DB_TYPE返回当前应该使用的向量数据库配置
  54. Returns:
  55. dict: 当前的向量数据库配置字典
  56. Raises:
  57. ImportError: 如果无法导入app_config
  58. ValueError: 如果VECTOR_DB_TYPE值无效
  59. """
  60. try:
  61. import app_config
  62. except ImportError:
  63. raise ImportError("无法导入 app_config.py,请确保该文件存在")
  64. if app_config.VECTOR_DB_TYPE == "pgvector":
  65. return app_config.PGVECTOR_CONFIG
  66. elif app_config.VECTOR_DB_TYPE == "chromadb":
  67. # ChromaDB通常不需要复杂配置,返回项目根目录路径
  68. import os
  69. return {"path": os.path.dirname(os.path.dirname(os.path.abspath(__file__)))}
  70. else:
  71. raise ValueError(f"不支持的VECTOR_DB_TYPE: {app_config.VECTOR_DB_TYPE}")
  72. def get_current_model_info():
  73. """
  74. 获取当前配置的模型信息摘要
  75. Returns:
  76. dict: 包含当前所有模型配置信息的字典
  77. Raises:
  78. ImportError: 如果无法导入app_config
  79. """
  80. try:
  81. import app_config
  82. except ImportError:
  83. raise ImportError("无法导入 app_config.py,请确保该文件存在")
  84. # 获取LLM模型名称
  85. if app_config.LLM_MODEL_TYPE == "ollama":
  86. llm_model_name = app_config.OLLAMA_LLM_CONFIG.get("model", "unknown")
  87. else:
  88. llm_model_name = app_config.API_LLM_MODEL
  89. # 获取Embedding模型名称
  90. if app_config.EMBEDDING_MODEL_TYPE == "ollama":
  91. embedding_model_name = app_config.OLLAMA_EMBEDDING_CONFIG.get("model_name", "unknown")
  92. else:
  93. embedding_model_name = app_config.API_EMBEDDING_CONFIG.get("model_name", "unknown")
  94. return {
  95. "llm_type": app_config.LLM_MODEL_TYPE,
  96. "llm_model": llm_model_name,
  97. "embedding_type": app_config.EMBEDDING_MODEL_TYPE,
  98. "embedding_model": embedding_model_name,
  99. "vector_db": app_config.VECTOR_DB_TYPE
  100. }
  101. def is_using_ollama_llm():
  102. """
  103. 检查当前是否使用Ollama作为LLM提供商
  104. Returns:
  105. bool: 如果使用Ollama LLM返回True,否则返回False
  106. """
  107. try:
  108. import app_config
  109. return app_config.LLM_MODEL_TYPE == "ollama"
  110. except ImportError:
  111. return False
  112. def is_using_ollama_embedding():
  113. """
  114. 检查当前是否使用Ollama作为Embedding提供商
  115. Returns:
  116. bool: 如果使用Ollama Embedding返回True,否则返回False
  117. """
  118. try:
  119. import app_config
  120. return app_config.EMBEDDING_MODEL_TYPE == "ollama"
  121. except ImportError:
  122. return False
  123. def is_using_api_llm():
  124. """
  125. 检查当前是否使用API作为LLM提供商
  126. Returns:
  127. bool: 如果使用API LLM返回True,否则返回False
  128. """
  129. try:
  130. import app_config
  131. return app_config.LLM_MODEL_TYPE == "api"
  132. except ImportError:
  133. return False
  134. def is_using_api_embedding():
  135. """
  136. 检查当前是否使用API作为Embedding提供商
  137. Returns:
  138. bool: 如果使用API Embedding返回True,否则返回False
  139. """
  140. try:
  141. import app_config
  142. return app_config.EMBEDDING_MODEL_TYPE == "api"
  143. except ImportError:
  144. return False
  145. def print_current_config():
  146. """
  147. 打印当前的配置信息,用于调试和确认配置
  148. """
  149. try:
  150. model_info = get_current_model_info()
  151. _logger.info("=== 当前模型配置 ===")
  152. _logger.info(f"LLM提供商: {model_info['llm_type']}")
  153. _logger.info(f"LLM模型: {model_info['llm_model']}")
  154. _logger.info(f"Embedding提供商: {model_info['embedding_type']}")
  155. _logger.info(f"Embedding模型: {model_info['embedding_model']}")
  156. _logger.info(f"向量数据库: {model_info['vector_db']}")
  157. _logger.info("==================")
  158. except Exception as e:
  159. _logger.error(f"无法获取配置信息: {e}")