-
Notifications
You must be signed in to change notification settings - Fork 164
Expand file tree
/
Copy pathconfig.py
More file actions
91 lines (78 loc) ยท 4.31 KB
/
config.py
File metadata and controls
91 lines (78 loc) ยท 4.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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
88
89
90
91
"""
้
็ฝฎไธญๅฟ โโ ็ฏๅขๅ้ๅ ่ฝฝใๆจกๅๅๆฐใ่ชๅจๆฃๆตๆบๅถ
ๅญฆไน ่ฆ็น๏ผ
- ไบ่งฃๅฆไฝ้่ฟ .env ๆไปถ็ฎก็ๆๆ้
็ฝฎ๏ผAPI Key๏ผ
- ไบ่งฃ RAG ็ณป็ปไธญ็ๅ
ณ้ฎ่ถ
ๅๆฐๅๅ
ถไฝ็จ
- ็่งฃ LLM ๅ็ซฏ็่ชๅจๆฃๆตไธๅ้ๆบๅถ
"""
import os
import logging
import requests
from pathlib import Path
from dotenv import load_dotenv
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ็ฌฌไธๆญฅ๏ผๅ ่ฝฝ็ฏๅขๅ้
# ไผๅ
ๅ ่ฝฝ .env๏ผ็จๆท้
็ฝฎ๏ผ๏ผไธๅญๅจๅๅ้ๅฐ example.env๏ผ็คบไพ้
็ฝฎ๏ผ
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
dotenv_path = Path(__file__).parent / ".env"
if not dotenv_path.exists():
dotenv_path = Path(__file__).parent / "example.env"
logging.warning("โ ๏ธ ๆชๆพๅฐ .env ๆไปถ๏ผๅทฒๅ้ๅ ่ฝฝ example.envใๅปบ่ฎฎ๏ผcp example.env .env ๅนถๅกซๅ
ฅ็ๅฎ API Key")
load_dotenv(dotenv_path)
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ็ฌฌไบๆญฅ๏ผAPI ๅฏ้ฅ้
็ฝฎ
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
SERPAPI_KEY = os.getenv("SERPAPI_KEY")
SEARCH_ENGINE = "google"
SILICONFLOW_API_KEY = os.getenv("SILICONFLOW_API_KEY")
SILICONFLOW_API_URL = os.getenv(
"SILICONFLOW_API_URL",
"https://api.siliconflow.cn/v1/chat/completions"
)
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ็ฌฌไธๆญฅ๏ผๆจกๅๅ็งฐ้
็ฝฎ
# Ollama ๆ ผๅผ: deepseek-r1:8b | SiliconFlow ๆ ผๅผ: deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
OLLAMA_MODEL_NAME = os.getenv("OLLAMA_MODEL_NAME", "deepseek-r1:8b")
SILICONFLOW_MODEL_NAME = os.getenv("SILICONFLOW_MODEL_NAME", "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B")
RERANK_METHOD = os.getenv("RERANK_METHOD", "cross_encoder")
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ็ฌฌๅๆญฅ๏ผRAG ่ถ
ๅๆฐ
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
CHUNK_SIZE = 400 # ๆๆฌๅๅๅคงๅฐ๏ผๅญ็ฌฆๆฐ๏ผ
CHUNK_OVERLAP = 40 # ็ธ้ปๅๅ็้ๅ ๅญ็ฌฆๆฐ
HYBRID_ALPHA = 0.7 # ๆททๅๆฃ็ดขไธญ่ฏญไนๆฃ็ดข็ๆ้๏ผ0-1๏ผ
RETRIEVAL_TOP_K = 10 # ๆฃ็ดข่ฟๅ็ๅ้ๆๆกฃๆฐ้
RERANK_TOP_K = 5 # ้ๆๅบๅไฟ็็ๆๆกฃๆฐ้
MAX_RETRIEVAL_ITERATIONS = 3 # ้ๅฝๆฃ็ดข็ๆๅคง่ฟญไปฃ่ฝฎๆฐ
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ็ฌฌไบๆญฅ๏ผ่ฟ่กๆถ็ฏๅข้
็ฝฎ
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'
os.environ['NO_PROXY'] = 'localhost,127.0.0.1'
requests.adapters.DEFAULT_RETRIES = 3
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# ็ฌฌๅ
ญๆญฅ๏ผLLM ๅ็ซฏ่ชๅจๆฃๆต
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def detect_default_model():
"""
่ชๅจๆฃๆตๅฏ็จ็ LLM ๅ็ซฏ๏ผ่ฟๅ้ป่ฎคๆจกๅ้ๆฉ
ๆฃๆตไผๅ
็บง๏ผ
1. SiliconFlow API Key ๅทฒ้
็ฝฎ โ ้ป่ฎคไฝฟ็จไบ็ซฏ API
2. ๆฌๅฐ Ollama ๆๅกๅฏ็จ โ ้ป่ฎคไฝฟ็จๆฌๅฐๆจกๅ
3. ้ฝไธๅฏ็จ โ ่ฟๅ siliconflow ๅนถๆ็คบ็จๆท้
็ฝฎ
"""
if SILICONFLOW_API_KEY and SILICONFLOW_API_KEY.strip() and not SILICONFLOW_API_KEY.startswith("Your"):
logging.info("โ
ๆฃๆตๅฐ SiliconFlow API Key๏ผ้ป่ฎคไฝฟ็จไบ็ซฏๆจกๅ")
return "siliconflow"
try:
response = requests.get("http://localhost:11434/api/tags", timeout=3)
if response.status_code == 200:
logging.info("โ
ๆฃๆตๅฐๆฌๅฐ Ollama ๆๅก๏ผ้ป่ฎคไฝฟ็จๆฌๅฐๆจกๅ")
return "ollama"
except Exception:
pass
logging.warning("โ ๏ธ ๆชๆฃๆตๅฐๅฏ็จ LLM ๅ็ซฏ๏ผ่ฏท้
็ฝฎ SiliconFlow API Key ๆๅฏๅจ Ollama")
return "siliconflow"
DEFAULT_MODEL_CHOICE = detect_default_model()