<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ayush Agarwal</title>
    <description>The latest articles on DEV Community by Ayush Agarwal (@theayush).</description>
    <link>https://dev.to/theayush</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4032134%2F7e946ce9-8add-41f0-ba38-d9c4e9340354.png</url>
      <title>DEV Community: Ayush Agarwal</title>
      <link>https://dev.to/theayush</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/theayush"/>
    <language>en</language>
    <item>
      <title>How I Stopped One Viral Reel From Lying to My Analytics Pipeline</title>
      <dc:creator>Ayush Agarwal</dc:creator>
      <pubDate>Wed, 26 Aug 2026 08:48:21 +0000</pubDate>
      <link>https://dev.to/theayush/how-i-stopped-one-viral-reel-from-lying-to-my-analytics-pipeline-gah</link>
      <guid>https://dev.to/theayush/how-i-stopped-one-viral-reel-from-lying-to-my-analytics-pipeline-gah</guid>
      <description>&lt;p&gt;If you scrape competitor accounts to find content ideas, you'll hit a problem almost immediately: outliers lie.&lt;/p&gt;

&lt;p&gt;One Reel that randomly goes viral doesn't mean the account is suddenly amazing at everything. But if you're not careful, that single spike becomes the new "baseline" your whole system judges every future post against — and you start missing genuinely good posts because they don't look impressive next to a fluke.&lt;/p&gt;

&lt;p&gt;I ran into this while building Vcentre — a nightly competitor-intelligence pipeline that scrapes Instagram accounts, finds outlier posts, and turns them into creative briefs for my own content bots. Here's the architecture, the real production numbers, and the reasoning behind the gates that keep one lucky Reel from corrupting the entire dataset.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Real Math Proof: Reels vs. Photos (The 26x Gap)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This isn't a theoretical problem. Here's the actual distribution gap sitting in my production database, across 254 competitor posts (149 photos/carousels, 105 reels) indexed from 18 target accounts:&lt;/p&gt;

&lt;p&gt;Metric  Photos / Carousels  Video Reels Difference&lt;br&gt;
Average Engagement  1,966 likes 51,271 views    26x higher&lt;br&gt;
Max Peak Outlier    68,831 likes    1,309,461 views 19x higher&lt;/p&gt;

&lt;p&gt;If Reels and Photos were pooled into one dataset, a single 1.3M-view Reel would poison the median for the entire account — and every genuinely high-performing photo would look completely dead by comparison.&lt;/p&gt;

&lt;p&gt;This is exactly why Vcentre scores Reels and Photos as separate cohorts, each with its own median and its own outlier threshold. A viral Reel can only skew the baseline for other Reels — it has zero effect on how photos get judged.&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
def compute_cohort_baselines(posts: list[dict]) -&amp;gt; dict:&lt;br&gt;
    cohorts = {"reel": [], "photo": []}&lt;br&gt;
    for post in posts:&lt;br&gt;
        cohorts[post["media_type"]].append(post["engagement_rate"])&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return {
    media_type: {
        "median": statistics.median(rates) if rates else 0,
        "sample_size": len(rates)
    }
    for media_type, rates in cohorts.items()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Two real outliers the engine actually caught with this approach: one account broke out to over a million views on a career/salary-hook Reel — more than 20x above its own baseline. Another cleared a huge comment count on a Claude Code vs. ChatGPT comparison Reel. Neither would've registered as anomalous if judged against a mixed-format baseline instead of its own cohort.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Engagement Formula: Comments Aren't Weighted Like Likes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Raw likes / views isn't enough — it treats a low-friction like the same as a high-intent comment. Vcentre's engagement formula weights comments noticeably heavier than likes:&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
def engagement_rate(post: dict) -&amp;gt; float:&lt;br&gt;
    return (post["likes"] + (post["comments"] * COMMENT_WEIGHT)) / post["views"]&lt;/p&gt;

&lt;p&gt;Comments require someone to stop, think, and type — they're a much stronger virality signal than a passive like. The exact weight took some tuning to get right, but the principle matters more than the number: weighting comments heavier filters out posts that just got a view-spike from the algorithm without any real audience reaction.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Three-Gate Threshold&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once a post has a cohort-relative baseline to compare against, it still has to clear three independent gates before it's worth spending LLM budget on. Any one signal alone is too noisy:&lt;/p&gt;

&lt;p&gt;A relative-outlier threshold — how far above its cohort's median a post needs to be&lt;br&gt;
An absolute floor — protects against tiny accounts where a "big relative jump" off a near-zero baseline is meaningless&lt;br&gt;
A minimum engagement rate — filters out posts that only look good because of a tiny follower count&lt;br&gt;
python&lt;br&gt;
def is_worth_analyzing(post: dict, cohort_baseline: dict) -&amp;gt; bool:&lt;br&gt;
    median = cohort_baseline["median"]&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clears_relative = post["engagement_rate"] &amp;gt;= median * RELATIVE_MULTIPLIER
clears_floor = post["engagement_rate"] &amp;gt;= ABSOLUTE_FLOOR
clears_min_rate = post["engagement_rate"] &amp;gt;= MIN_ENGAGEMENT_RATE

return clears_relative and clears_floor and clears_min_rate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The exact constants are tuned to my specific accounts and niche — what matters architecturally is that no single signal is trusted alone.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Maturation Guard and Recency Decay&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two more details that matter more than they look:&lt;/p&gt;

&lt;p&gt;A maturation floor. Instagram takes roughly a day to distribute a Reel beyond an account's existing followers. Scoring a post before that window closes produces false positives and false negatives, so Vcentre refuses to touch anything too fresh, and also ignores anything too old so stale topics don't compete with today's queue.&lt;/p&gt;

&lt;p&gt;A recency decay curve. A big Reel from three weeks ago shouldn't outrank an equally big Reel from two days ago just because it happened to be scraped in the same batch. Vcentre applies a decay multiplier that fades a post's score the older it gets, so today's outliers always get priority over yesterday's news.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Guardrails: Cooldowns and Circuit Breakers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Scraping Instagram at scale is a great way to get rate-limited or banned if you're not careful. Every scrape target is guarded by a cooldown window per account, plus a circuit breaker that trips after repeated failures and stops hitting that account entirely until it resets.&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
class ScrapeCircuitBreaker:&lt;br&gt;
    def &lt;strong&gt;init&lt;/strong&gt;(self, failure_threshold: int, cooldown_hours: int):&lt;br&gt;
        self.failure_threshold = failure_threshold&lt;br&gt;
        self.cooldown_hours = cooldown_hours&lt;br&gt;
        self.failures: dict[str, int] = {}&lt;br&gt;
        self.tripped_until: dict[str, datetime] = {}&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def can_scrape(self, account: str) -&amp;gt; bool:
    trip_time = self.tripped_until.get(account)
    if trip_time and datetime.utcnow() &amp;lt; trip_time:
        return False
    return True

def record_failure(self, account: str):
    self.failures[account] = self.failures.get(account, 0) + 1
    if self.failures[account] &amp;gt;= self.failure_threshold:
        self.tripped_until[account] = datetime.utcnow() + timedelta(hours=self.cooldown_hours)
        print(f"Circuit breaker tripped for {account}. Cooling down.")

def record_success(self, account: str):
    self.failures[account] = 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;The 10-Provider Fallback Chain (and Why It's Free)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every post that clears the gates above gets analyzed — but not by one expensive model. Groq and Cerebras handle the bulk of the analysis for free, splitting load across ten total providers. Gemini is only invoked once, at the very end, to synthesize the final brief from everything the free models already extracted. Before that synthesis happens, the pipeline also fuses in live signals from Google Trends, Hacker News' top headlines, and a tech-news feed — so the brief isn't just analyzing a competitor in a vacuum, it's grounding the hook in whatever's breaking today.&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
ANALYSIS_PROVIDERS = [&lt;br&gt;
    ("groq", "llama-3.3-70b-versatile"),&lt;br&gt;
    ("cerebras", "gpt-oss-120b"),&lt;br&gt;
    ("openrouter", "gemma-3-1b"),&lt;br&gt;
    # ...7 more fallback providers&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;def analyze_outlier(post: dict) -&amp;gt; dict:&lt;br&gt;
    for provider, model in ANALYSIS_PROVIDERS:&lt;br&gt;
        try:&lt;br&gt;
            return run_analysis(provider, model, post)&lt;br&gt;
        except ProviderError:&lt;br&gt;
            continue&lt;br&gt;
    raise AllProvidersFailedError(post["id"])&lt;/p&gt;

&lt;p&gt;def synthesize_brief(analyses: list[dict], trend_signals: dict) -&amp;gt; dict:&lt;br&gt;
    # Only Gemini touches this step — everything above it was free&lt;br&gt;
    return gemini_client.synthesize(analyses, context=trend_signals)&lt;/p&gt;

&lt;p&gt;This gating — cheap models do the volume work, the paid model only does final synthesis — is the same trick that got Veltrix's cost per post down to fractions of a cent. It works just as well here: 32 structured creative briefs generated so far, at $0 in monthly infra cost.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Closing the Loop&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The briefs Vcentre generates don't just sit in a report — they write straight into the same database my posting bots read from. And a feedback job scores each published post's real performance back against the pattern that flagged it:&lt;/p&gt;

&lt;p&gt;If a published post clearly outperforms baseline, that pattern's score gets boosted&lt;br&gt;
If it clearly underperforms, the pattern's score is penalized&lt;br&gt;
If a post barely got any distribution at all, the system refuses to penalize the pattern — protecting against flukes that aren't the pattern's fault&lt;br&gt;
Patterns that get used repeatedly and keep scoring poorly are automatically retired&lt;br&gt;
python&lt;br&gt;
def score_feedback_loop(published_post: dict, source_brief: dict):&lt;br&gt;
    actual_engagement = fetch_current_engagement(published_post["id"])&lt;br&gt;
    predicted_engagement = source_brief["expected_engagement"]&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;accuracy = 1 - abs(actual_engagement - predicted_engagement) / predicted_engagement
log_pattern_accuracy(source_brief["pattern_id"], accuracy)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Key Metrics From Real Production Runs&lt;br&gt;
254 competitor posts indexed across 18 target accounts (149 photos, 105 reels)&lt;br&gt;
26x average volume gap between Reels and Photos — successfully isolated by cohort scoring&lt;br&gt;
Top outlier caught: north of a million views on a single breakout Reel&lt;br&gt;
32 structured creative briefs synthesized directly into the publishing queue&lt;br&gt;
Monthly infra/API cost: $0.00&lt;/p&gt;

&lt;p&gt;Cohort-aware baselines sound like a small detail, but they're the difference between a system that chases noise and one that actually finds signal. If your pipeline treats every post as coming from the same distribution, you're probably reacting to outliers you shouldn't be.&lt;/p&gt;

&lt;p&gt;Let me know how you handle cohort skew or outlier detection in your own scraping pipelines!&lt;/p&gt;

&lt;p&gt;Check out the full interactive workspace at theayush.pages.dev.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>automation</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How I Built Veltrix: An Autonomous Social Engine Orchestrating 18+ APIs on a $0.0002 Budget</title>
      <dc:creator>Ayush Agarwal</dc:creator>
      <pubDate>Thu, 16 Jul 2026 12:22:04 +0000</pubDate>
      <link>https://dev.to/theayush/how-i-built-veltrix-an-autonomous-social-engine-orchestrating-18-apis-on-a-00002-budget-41b5</link>
      <guid>https://dev.to/theayush/how-i-built-veltrix-an-autonomous-social-engine-orchestrating-18-apis-on-a-00002-budget-41b5</guid>
      <description>&lt;p&gt;Running a social media account solo is exhausting. You have to research niches, write captions, design slides, and publish twice a day, every day. &lt;br&gt;
If you try to automate this using a single LLM (like GPT-4o) running on a simple cron job, you run into three massive walls:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Halucination &amp;amp; Bad Output&lt;/strong&gt;: A single model will eventually write cringey hashtags or break the layout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ephemeral Environments&lt;/strong&gt;: Running on a free hosting platform or GitHub Actions means your server is destroyed every run—saving state is incredibly difficult.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Cost Runaways&lt;/strong&gt;: Querying high-end creative models for every draft will drain your bank account.
To solve this, I built &lt;strong&gt;Veltrix&lt;/strong&gt; — an autonomous publishing engine that orchestrates &lt;strong&gt;18+ active APIs&lt;/strong&gt; and publishes twice daily to Instagram and Threads for roughly &lt;strong&gt;$0.0002 per post&lt;/strong&gt;.
Here is the exact architecture, the fallback gates, and the code.
---
## 1. The 18-API Key Topology
Veltrix doesn't just call one model; it manages an entire footprint of APIs to handle data gathering, generation, verification, and publishing:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core Generation &amp;amp; Audits&lt;/strong&gt;: Gemini Pro (Primary Brain), Groq (Llama 70B), Cerebras (gpt-oss-120b), OpenRouter (Gemma 31B).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Media &amp;amp; Brand Graphics&lt;/strong&gt;: SiliconFlow (Flux/SD3), Hugging Face Inference, Unsplash Image Search, Logo.dev, Brandfetch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database &amp;amp; Ops&lt;/strong&gt;: Supabase, local SQLite (&lt;code&gt;veltrix.db&lt;/code&gt;), Cloudinary (media hosting), Discord webhooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct Publishing &amp;amp; Git&lt;/strong&gt;: Instagram Graph API, Threads API, GitHub Actions API.
To protect my wallet, I set up a &lt;strong&gt;gated paid API model&lt;/strong&gt;: Gemini Pro is only invoked for final generation &lt;em&gt;after&lt;/em&gt; the draft successfully passes a series of free/low-cost verification audits.
---
## 2. The Architectural Workflow
Here is how a post moves from a raw trigger to a published carousel slide:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions Cron Tick&lt;/strong&gt; triggers the script.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load Checkpoint JSON&lt;/strong&gt; fetches any pending reviews.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini&lt;/strong&gt; drafts the topic and caption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive Embedding Deduplication&lt;/strong&gt; runs a similarity check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text Auditor (Groq &amp;amp; Cerebras)&lt;/strong&gt; runs a dual-model consensus check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini&lt;/strong&gt; generates the final creative slide data (only if audits pass).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playwright Chromium&lt;/strong&gt; renders and screenshots the HTML slide template.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudinary&lt;/strong&gt; hosts the images publicly.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  9. &lt;strong&gt;Meta Graph API&lt;/strong&gt; publishes the post to Instagram &amp;amp; Threads.
&lt;/h2&gt;
&lt;h2&gt;
  
  
  3. Core Code Implementations
&lt;/h2&gt;

&lt;p&gt;Here are the key Python modules that handle the heavy lifting:&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;code&gt;text_auditor.py&lt;/code&gt; — Adversarial Model Auditing
&lt;/h3&gt;

&lt;p&gt;To prevent mistakes, I never let a model grade its own homework. This module queries Groq and Cerebras independently and requires a &lt;strong&gt;2-out-of-2 consensus approval&lt;/strong&gt; before opening the paid API gate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;groq&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Groq&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cerebras.client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Cerebras&lt;/span&gt;
&lt;span class="c1"&gt;# Init clients using our credentials config
&lt;/span&gt;&lt;span class="n"&gt;groq_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Groq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GROQ_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;cerebras_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Cerebras&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CEREBRAS_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;audit_draft_with_llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Analyze this social media draft. You are an editor. Check for:
    1. Grammatical errors or cringey hashtag stuffing.
    2. Factuality and structural formatting.
    Return ONLY a raw JSON object: {&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;approved&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: true/false, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;}
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;response_format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json_object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_text_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Heuristics pre-screen (costs $0)
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Pre-screen failed: Emoji or hashtag density too high.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="c1"&gt;# Consensus chain run in parallel
&lt;/span&gt;    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;groq_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;audit_draft_with_llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;groq_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llama-3.3-70b-versatile&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;cerebras_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;audit_draft_with_llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cerebras_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-oss-120b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Absolute consensus required (2 of 2)
&lt;/span&gt;        &lt;span class="n"&gt;consensus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;groq_result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;approved&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;cerebras_result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;approved&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;consensus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Audit rejected. Groq: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;groq_result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | Cerebras: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cerebras_result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;consensus&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Fall back to OpenRouter free models if Groq/Cerebras fail
&lt;/span&gt;        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Primary auditors failed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Routing to OpenRouter fallback...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fallback_audit_openrouter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="n"&gt;Making&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt; &lt;span class="n"&gt;Survive&lt;/span&gt; &lt;span class="n"&gt;Container&lt;/span&gt; &lt;span class="n"&gt;Destruction&lt;/span&gt;
&lt;span class="n"&gt;Because&lt;/span&gt; &lt;span class="n"&gt;GitHub&lt;/span&gt; &lt;span class="n"&gt;Actions&lt;/span&gt; &lt;span class="n"&gt;containers&lt;/span&gt; &lt;span class="n"&gt;are&lt;/span&gt; &lt;span class="n"&gt;completely&lt;/span&gt; &lt;span class="n"&gt;destroyed&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;job&lt;/span&gt; &lt;span class="n"&gt;ends&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="n"&gt;built&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;checkpoint&lt;/span&gt; &lt;span class="n"&gt;serializer&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;stores&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;encoded&lt;/span&gt; &lt;span class="n"&gt;media&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt; &lt;span class="n"&gt;locally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="nb"&gt;next&lt;/span&gt; &lt;span class="n"&gt;cron&lt;/span&gt; &lt;span class="n"&gt;runner&lt;/span&gt; &lt;span class="n"&gt;picks&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="n"&gt;up&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="n"&gt;python&lt;/span&gt;


&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timedelta&lt;/span&gt;
&lt;span class="n"&gt;CHECKPOINT_FILE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pipeline_checkpoint.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save_checkpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;caption&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;media_paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;utcnow&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pending_review&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;topic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;caption&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;caption&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;media&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;# Base64 encode local slide images to serialize into JSON
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;media_paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;image_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;encoded_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;media&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bytes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;encoded_bytes&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CHECKPOINT_FILE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Checkpoint saved. Ready for human review window.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load_checkpoint&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CHECKPOINT_FILE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Self-expire checkpoints older than 24 hours to avoid stale runs
&lt;/span&gt;        &lt;span class="n"&gt;created&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromisoformat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;utcnow&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;created&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;timedelta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hours&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Checkpoint expired. Aborting.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;FileNotFoundError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Operational Fallback Logic
When running 18 separate APIs, something will break. Veltrix handles this using multi-tiered fallbacks:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Database Fallback: Remote logs write to Supabase via webhooks. If Supabase is down, the system writes to local SQLite (veltrix.db) and commits a JSON update back to the Git repo.&lt;br&gt;
Visual Slide Generation: Premium slide illustrations are generated via SiliconFlow (Flux). If SiliconFlow rate-limits, it drops back to Hugging Face, and finally falls back to Gemini's internal image creator.&lt;br&gt;
Brand Assets: In carousels comparing tools, logos are resolved by Logo.dev ➡️ Brandfetch API ➡️ Brandfetch CDN ➡️ Google Favicon API ➡️ local text fallback.&lt;br&gt;
Key Metrics Since Launch&lt;br&gt;
Inference cost / post: ~$0.0002 (Thanks to gating Gemini behind Llama)&lt;br&gt;
API limits hit: 0 (Thanks to 12h handle cooldowns and circuit breakers)&lt;br&gt;
Silent crashes: 0 (Thanks to health checks monitoring budget-aware failures vs quiet days)&lt;br&gt;
By treating models as independent validating agents rather than single sources of truth, you can deploy fully autonomous cron-bots with zero risk of public failure on virtually zero budget.&lt;/p&gt;

&lt;p&gt;Let me know how you guys handle quotas and secrets in your pipelines!&lt;/p&gt;

&lt;p&gt;Check out the full interactive workspace and live charts at theayush.pages.dev.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1tyxx8n5gory5h6ty9f.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1tyxx8n5gory5h6ty9f.webp" alt=" " width="799" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
