|
# retoor <retoor@molodetz.nl>
|
|
|
|
import os
|
|
import logging
|
|
|
|
from devplacepy.database import get_setting, internal_gateway_key
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def _get_ai_key() -> str:
|
|
key = os.environ.get("NEWS_AI_KEY")
|
|
if key:
|
|
return key
|
|
key = get_setting("news_ai_key", "")
|
|
if key:
|
|
return key
|
|
return internal_gateway_key()
|
|
|
|
|
|
from .constants import (
|
|
AI_MODEL_DEFAULT,
|
|
AI_URL_DEFAULT,
|
|
FEATURE_MIN_SCORE,
|
|
FORMAT_INPUT_MAX_CHARS,
|
|
FORMAT_MAX_TOKENS,
|
|
FORMAT_OUTPUT_MAX_CHARS,
|
|
FORMAT_PROMPT_SPEC,
|
|
GRADE_MAX_TOKENS,
|
|
GRADE_PROMPT_SPEC,
|
|
GRADE_THRESHOLD_DEFAULT,
|
|
GRADING_RULES_DESCRIPTION,
|
|
IMG_FETCH_MAX_BYTES,
|
|
IMG_FETCH_TIMEOUT,
|
|
IMG_PER_ARTICLE,
|
|
INTERNAL_GATEWAY_URL,
|
|
INTERNAL_MODEL,
|
|
JUNK_PATTERNS,
|
|
LANDING_MAX,
|
|
LANDING_MIN_SCORE,
|
|
LANDING_RECENCY_DAYS,
|
|
MAX_TITLE_CAPS_RATIO,
|
|
MIN_BODY_CHARS,
|
|
MIN_IMAGE_DIMENSION,
|
|
MIN_TITLE_CHARS,
|
|
NEWS_API_URL_DEFAULT,
|
|
NEWS_SUMMARY,
|
|
PHASH_DISTANCE,
|
|
THIN_CONTENT_PENALTY,
|
|
UNIQUE_IMAGE_BONUS,
|
|
WHITESPACE_PATTERN,
|
|
re,
|
|
)
|
|
from .models import ArticleGrade, ImageCandidate, dataclass, field
|
|
from .clean import (
|
|
_caps_ratio,
|
|
_extract_grade,
|
|
_is_valid_url,
|
|
_strip_md_fence,
|
|
clean_news_text,
|
|
effective_score,
|
|
reliability_reason,
|
|
strip_html,
|
|
)
|
|
from .images import (
|
|
Image,
|
|
_decode_phash,
|
|
_fetch_image_candidate,
|
|
_flag_shared_placeholders,
|
|
_get_article_images,
|
|
_primary_image,
|
|
asyncio,
|
|
httpx,
|
|
imagehash,
|
|
io,
|
|
net_guard,
|
|
)
|
|
from .service import (
|
|
BaseService,
|
|
ConfigField,
|
|
NewsService,
|
|
accumulate_usage,
|
|
add_news_usage,
|
|
audit,
|
|
datetime,
|
|
generate_uid,
|
|
get_news_usage,
|
|
get_table,
|
|
make_combined_slug,
|
|
new_usage_totals,
|
|
schedule_seo_meta,
|
|
stealth,
|
|
timedelta,
|
|
timezone,
|
|
usage_metric_cards,
|
|
)
|