Add platform config website_url, admin tab, fix writer DB config fallback, add trigger endpoints

This commit is contained in:
Yuzhiran Dev
2026-05-20 09:38:56 +08:00
parent 55e5f3d166
commit 498165440f
84 changed files with 1988 additions and 242 deletions
+20 -3
View File
@@ -70,12 +70,26 @@ def _get_provider_config(provider: Optional[str] = None) -> dict:
"base_url": base_url or fb.get("base_url", ""),
}
def _get_db_defaults(provider: Optional[str] = None) -> dict:
try:
from ..database import SessionLocal
from ..models import LLMConfig
db = SessionLocal()
p = provider or _get_active_provider()
cfg = db.query(LLMConfig).filter(LLMConfig.provider == p).order_by(LLMConfig.is_active.desc()).first()
db.close()
if cfg:
return {"temperature": cfg.temperature, "max_tokens": cfg.max_tokens}
except Exception:
pass
return {"temperature": 0.20, "max_tokens": 2048}
def call_llm(
prompt: str,
model: Optional[str] = None,
system_prompt: str = "你是一个专业的内容创作助手。",
temperature: float = 0.20,
max_tokens: int = 2048,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
top_p: float = 0.70,
frequency_penalty: float = 0.00,
presence_penalty: float = 0.00,
@@ -83,6 +97,9 @@ def call_llm(
provider: Optional[str] = None,
additional_params: Optional[Dict[str, Any]] = None,
) -> str:
defaults = _get_db_defaults(provider)
temperature = temperature if temperature is not None else defaults["temperature"]
max_tokens = max_tokens if max_tokens is not None else defaults["max_tokens"]
cfg = _get_provider_config(provider)
endpoint = f"{cfg['base_url'].rstrip('/')}/chat/completions"
headers = {
@@ -186,7 +203,7 @@ def expand_content_with_llm(
prompt = f"# 参考资料\n{context}\n\n{prompt}"
try:
result = call_llm(prompt, temperature=0.3, max_tokens=1500)
result = call_llm(prompt, temperature=0.3)
return result.strip()
except Exception as e:
return f"## {section_title}\n\nLLM 调用失败:{e},请手动补充)"
-20
View File
@@ -9,7 +9,6 @@ from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
from .generator import run_creator
from .optimizer import run_optimizer
from .sync import sync_all_topics
from .collector import run_collector
logger = logging.getLogger(__name__)
@@ -28,17 +27,6 @@ class TaskScheduler:
self._run_collect,
CronTrigger(hour=1, minute=30),
id='scheduled_collect',
replace_existing=True,
max_instances=1,
coalesce=True
)
self.scheduler.add_job(
self._run_sync,
CronTrigger(hour=2, minute=30),
id='scheduled_sync',
replace_existing=True,
max_instances=1,
coalesce=True
)
self.scheduler.add_job(
self._run_generate,
@@ -176,14 +164,6 @@ class TaskScheduler:
except Exception as e:
logger.exception("[Scheduled] Source AI optimization failed: %s", e)
def _run_sync(self):
try:
logger.info("[Scheduled] Starting data sync...")
sync_all_topics()
logger.info("[Scheduled] Sync completed")
except Exception as e:
logger.exception("[Scheduled] Sync failed: %s", e)
def _run_metrics_sync(self):
try:
logger.info("[Scheduled] Starting metrics sync...")