Files
polymarket-whale-watcher/src/config/settings.py
T
SII-leiyuandClaude Opus 4.6 1bdf56594c Add normalized size filter and remove obsolete polling config
- Add normalized size filter (usdc_size / √volume) to whale detection,
  making signal significance comparable across different market sizes
- Remove dead polling config (fetch_interval_seconds, tier*_poll_interval)
  since RTDS WebSocket replaced HTTP polling

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 12:25:51 +08:00

93 lines
3.6 KiB
Python

"""Application settings and configuration."""
import os
from functools import lru_cache
from typing import Optional
from dotenv import load_dotenv
from pydantic import Field
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
"""Application settings loaded from environment variables."""
# LLM API (OpenAI-compatible proxy)
gemini_api_key: str = Field(default="", alias="GEMINI_API_KEY")
llm_base_url: str = Field(default="https://generativelanguage.googleapis.com/v1beta/openai/", alias="LLM_BASE_URL")
# Twitter API (for social sentiment search)
twitter_api_key: str = Field(default="", alias="TWITTER_API_KEY")
# Tavily API (for web search, replaces Google Search)
tavily_api_key: str = Field(default="", alias="TAVILY_API_KEY")
# Serper API (web search fallback)
serper_api_key: str = Field(default="", alias="SERPER_API_KEY")
# FRED API (macroeconomic data)
fred_api_key: str = Field(default="", alias="FRED_API_KEY")
# Polygon.io API (stocks, forex, commodities)
polygon_api_key: str = Field(default="", alias="POLYGON_API_KEY")
# Congress.gov API (U.S. legislation)
congress_api_key: str = Field(default="", alias="CONGRESS_API_KEY")
# Etherscan API (on-chain data)
etherscan_api_key: str = Field(default="", alias="ETHERSCAN_API_KEY")
# Telegram API (crypto channel monitoring)
telegram_api_id: str = Field(default="", alias="TELEGRAM_API_ID")
telegram_api_hash: str = Field(default="", alias="TELEGRAM_API_HASH")
telegram_session_string: str = Field(default="", alias="TELEGRAM_SESSION_STRING")
telegram_channels: str = Field(default="", alias="TELEGRAM_CHANNELS")
# MongoDB
mongodb_uri: str = Field(default="mongodb://localhost:27017/whale_watcher", alias="MONGODB_URI")
# SQLite database
db_path: str = Field(default="data/signals.db", alias="DB_PATH")
# Whale Detection Settings
min_trade_size_usd: float = Field(default=1000.0, alias="MIN_TRADE_SIZE_USD")
min_price: float = Field(default=0.10, alias="MIN_PRICE")
max_price: float = Field(default=0.90, alias="MAX_PRICE")
# Monitoring Settings
trending_markets_limit: int = Field(default=50, alias="TRENDING_MARKETS_LIMIT")
# Market coverage (volume thresholds for monitoring list)
full_market_scan: bool = Field(default=True, alias="FULL_MARKET_SCAN")
tier1_volume_min: float = Field(default=500_000, alias="TIER1_VOLUME_MIN")
tier2_volume_min: float = Field(default=10_000, alias="TIER2_VOLUME_MIN")
tier3_volume_min: float = Field(default=1_000, alias="TIER3_VOLUME_MIN")
# LLM Settings
llm_model: str = Field(default="gemini-3.1-pro-preview", alias="LLM_MODEL")
llm_temperature: float = Field(default=0.0, alias="LLM_TEMPERATURE")
# Email notification
email_smtp_server: str = Field(default="smtp.qq.com", alias="EMAIL_SMTP_SERVER")
email_smtp_port: int = Field(default=465, alias="EMAIL_SMTP_PORT")
email_sender: str = Field(default="", alias="EMAIL_SENDER")
email_password: str = Field(default="", alias="EMAIL_PASSWORD")
email_recipient: str = Field(default="1253608463@qq.com,lyk@sii.edu.cn,1286874010@qq.com,tianhao.alex.huang@gmail.com", alias="EMAIL_RECIPIENT")
email_enabled: bool = Field(default=False, alias="EMAIL_ENABLED")
# Logging
log_level: str = Field(default="INFO", alias="LOG_LEVEL")
class Config:
env_file = ".env"
env_file_encoding = "utf-8"
extra = "ignore"
@lru_cache
def get_settings() -> Settings:
"""Get cached settings instance."""
load_dotenv()
return Settings()