42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
from functools import lru_cache
|
|
|
|
from pydantic import field_validator
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
|
|
|
|
app_env: str = "development"
|
|
database_url: str = "sqlite:///data/app.db"
|
|
tikhub_api_key: str = ""
|
|
tikhub_base_url: str = "https://api.tikhub.io"
|
|
ai_provider: str = "openai-compatible"
|
|
ai_base_url: str = ""
|
|
ai_api_key: str = ""
|
|
ai_model: str = ""
|
|
ai_batch_size: int = 20
|
|
ai_concurrency: int = 2
|
|
ai_max_retries: int = 3
|
|
ai_timeout_seconds: int = 30
|
|
http_timeout_seconds: int = 20
|
|
http_max_retries: int = 3
|
|
crawl_page_interval_seconds: float = 1.5
|
|
|
|
hot_limit_min: int = 1
|
|
hot_limit_max: int = 10
|
|
item_limit_per_hot_min: int = 1
|
|
item_limit_per_hot_max: int = 10
|
|
comment_limit_per_item_min: int = 10
|
|
comment_limit_per_item_max: int = 100
|
|
|
|
@field_validator("ai_concurrency", mode="after")
|
|
@classmethod
|
|
def cap_ai_concurrency(cls, value: int) -> int:
|
|
return min(value, 3)
|
|
|
|
|
|
@lru_cache
|
|
def get_settings() -> Settings:
|
|
return Settings()
|