62 lines
3.2 KiB
Python
62 lines
3.2 KiB
Python
"""تنظیمات سرویس چتبات — از متغیرهای محیطی یا فایل .env خوانده میشود."""
|
|
|
|
from pydantic import AliasChoices, Field
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
|
|
|
|
# دیتابیس سایت (فقط خواندن) — همان DATABASE_URL بکاند
|
|
database_url: str = "postgresql+psycopg://aramesh:aramesh@localhost:5432/arameshplaza"
|
|
# دیتابیس اختصاصی چتبات روی همان نمونه Postgres — بردارها اینجا نوشته میشوند
|
|
# تا دیتابیس سایت فقطخواندنی بماند؛ در شروع سرویس خودکار ساخته میشود
|
|
chatbot_db_name: str = "aramesh_chatbot"
|
|
|
|
# LLM سازگار با OpenAI — اجباری؛ بدون آن پاسخگویی غیرفعال است
|
|
llm_base_url: str = ""
|
|
llm_api_key: str = ""
|
|
llm_model: str = "openai/gpt-oss-120b"
|
|
|
|
# مدلهای بازیابی
|
|
embedding_model: str = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
|
|
# بعد بردار خروجی مدل امبدینگ (MiniLM-L12 = 384) — با تغییر مدل باید عوض شود
|
|
embedding_dim: int = 384
|
|
reranker_model: str = "BAAI/bge-reranker-v2-m3"
|
|
reranker_enabled: bool = True
|
|
reranker_device: str = "cpu"
|
|
|
|
# وزن جستوجوی معنایی در ترکیب نمرهها (۰ = فقط کلیدواژه، ۱ = فقط معنایی)
|
|
alpha_dense: float = 0.5
|
|
# تعداد سند نهایی که به LLM داده میشود
|
|
best_of_k: int = 3
|
|
# تعداد نتیجه هر پایگاه (معنایی و کلیدواژه) برای هر پرسوجو
|
|
retrieve_k: int = 12
|
|
# بازنویسی پرسوجو با تاریخچه گفتگو (فقط وقتی تاریخچه هست صدا زده میشود)
|
|
contextualize_enabled: bool = True
|
|
# گسترش پرسوجو به چند نوع — برای پیکره کوچک پیشفرض خاموش (تأخیر کمتر)
|
|
query_expansion: bool = False
|
|
|
|
# مسیر کش مدلها (در داکر روی والیوم /data سوار میشود)
|
|
hf_cache_dir: str = "/data/hf"
|
|
|
|
# محدودسازی نرخ درخواست هر IP (تعداد پیام در پنجره زمانی به ثانیه)
|
|
rate_limit_messages: int = 20
|
|
rate_limit_window: int = 300
|
|
|
|
# توکن بازسازی ایندکس — اگر خالی باشد مسیر reindex فقط از داخل شبکه کار میکند
|
|
# (.env از نام CHAT_REINDEX_TOKEN استفاده میکند — هر دو نام پذیرفته میشود)
|
|
reindex_token: str = Field(
|
|
default="", validation_alias=AliasChoices("REINDEX_TOKEN", "CHAT_REINDEX_TOKEN")
|
|
)
|
|
|
|
# ماندگاری کش پیشنهادها و زمینه سایت (ثانیه)
|
|
suggestions_ttl: int = 600
|
|
site_context_ttl: int = 120
|
|
|
|
# بازسازی خودکار ایندکس وقتی محتوای دیتابیس عوض شود (۰ = خاموش)
|
|
index_refresh_seconds: int = 600
|
|
|
|
|
|
settings = Settings()
|