Explorer
/tmp/integrate_experiences.py
← Zurück ↓ Download
from pathlib import Path
p=Path('/opt/struktur/social-media-agent/publish_ready.py'); s=p.read_text()
needle='''def record_publication_event(package_id: str, platform: str, event_status: str, *, published_at: str = "", external_url: str = "", external_post_id: str = "", note: str = "") -> dict:'''
helper='''def load_experience_rows(limit: int = 3) -> list[dict]:
    con = sqlite3.connect(f"file:{CASES_DB.as_posix()}?mode=ro", uri=True); con.row_factory = sqlite3.Row
    try:
        rows = [dict(r) for r in con.execute("SELECT * FROM mas_experiences WHERE usage_status='available' AND anonymization_status='anonymized' AND evidence_status='documented' ORDER BY updated_at DESC LIMIT ?", (limit,))]
    except sqlite3.OperationalError:
        rows = []
    con.close(); return rows


def experience_to_signal(experience: dict) -> dict:
    pillar = _text(experience.get("content_pillar")) or "feuchte_schimmel"
    category = "schimmel_risiko" if "schimmel" in pillar or "feuchte" in pillar else "feuchte"
    return {
        "signal_id": experience["experience_id"], "experience_id": experience["experience_id"], "source_type": "mas_experience",
        "source_name": "MAS Experience Pool", "source_url": "", "provenance_path": _text(experience.get("source_ref")),
        "topic": _text(experience.get("title")), "topic_de": _text(experience.get("title")), "signal_category": category,
        "content_pillar": pillar, "short_summary": _text(experience.get("core_claim")),
        "evidence_summary": _text(experience.get("technical_observation")), "relevance": _text(experience.get("core_claim")),
        "briefing_winkel": _text(experience.get("title")), "briefing_nutzen": _text(experience.get("core_claim")),
        "briefing_freigabe": "geeignet", "briefing_risiko": "Keine personenbezogenen Angaben; Ursachen als Möglichkeit kennzeichnen.",
        "cta_type": "messung" if "feuchte" in pillar or "schimmel" in pillar else "objektpruefung",
        "mallorca_relevance": 1, "radar_score": 55, "evidence_complete": True, "transformed": True,
        "evergreen": False, "image_url": "", "image_found": 0, "image_prompt": "",
        "experience_fact": json.loads(experience.get("fact_json") or "{}"),
        "experience_inference": json.loads(experience.get("inference_json") or "{}"),
        "experience_unknown": json.loads(experience.get("unknown_json") or "{}"),
    }


def select_experiences(limit: int = 3) -> list[dict]:
    rows = load_experience_rows(limit=limit)
    selected=[]; seen=set()
    try:
        con=sqlite3.connect(f"file:{CASES_DB.as_posix()}?mode=ro",uri=True)
        existing=[_text(r[0]).casefold() for r in con.execute("select topic from publication_packages")]
        con.close()
    except sqlite3.Error: existing=[]
    for row in rows:
        key=re.sub(r"\\W+"," ",_text(row.get("title")).casefold()).strip()
        if not key or key in seen or key in existing: continue
        seen.add(key); selected.append(experience_to_signal(row))
    return selected


def record_publication_event(package_id: str, platform: str, event_status: str, *, published_at: str = "", external_url: str = "", external_post_id: str = "", note: str = "") -> dict:'''
assert s.count(needle)==1; s=s.replace(needle,helper)
# add experiences in run
old='''        current = select_current_transformations(rows, limit=1)
        evergreen_entries = select_evergreen_entries(limit=2)
        selected = current + [build_evergreen_candidate(entry) for entry in evergreen_entries]'''
new='''        current = select_current_transformations(rows, limit=1)
        evergreen_entries = select_evergreen_entries(limit=2)
        experience_candidates = select_experiences(limit=3)
        selected = current + [build_evergreen_candidate(entry) for entry in evergreen_entries] + experience_candidates'''
assert s.count(old)==1; s=s.replace(old,new)
# refresh branch needs variable
old='''        selected = select_existing_quality_refresh(limit=5)
    else:'''
new='''        selected = select_existing_quality_refresh(limit=5)
        experience_candidates = []
    else:'''
assert s.count(old)==1; s=s.replace(old,new)
# Return counts
old='''"evergreen_candidates": len(evergreen_entries) if not refresh_quality else len([s for s in selected if s.get("evergreen")]), "publish_ready": len(packages),'''
new='''"evergreen_candidates": len(evergreen_entries) if not refresh_quality else len([s for s in selected if s.get("evergreen")]), "experience_candidates": len(experience_candidates) if not refresh_quality else 0, "publish_ready": len(packages),'''
assert s.count(old)==1; s=s.replace(old,new)
p.write_text(s); print('experience source integrated')