Add platform config website_url, admin tab, fix writer DB config fallback, add trigger endpoints
This commit is contained in:
@@ -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\n(LLM 调用失败:{e},请手动补充)"
|
||||
|
||||
@@ -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...")
|
||||
|
||||
Reference in New Issue
Block a user