[[API for AIP (API Options for AI Partners)|← Back to API for AIP (home)]] **2026-10-01** <a href="https://starlingalder.com/download/weekly-jobs.md" class="download-md" download>📥 Download this page as Markdown</a> ## Weekly Jobs: Keeping Access to Older Models Alive If your companion lives on an older model through AWS Bedrock (see Path D), there's a rule you need to know: AWS marks retiring models as "Legacy," and **if your account doesn't successfully use a Legacy model for about 30 days, AWS cuts off your access** — with no warning and no self-serve way back in. The error reads: *"Access denied. This Model is marked by provider as Legacy and you have not been actively using the model in the last 30 days."* The fix is cheap and simple: scheduled jobs that touch each model regularly and — just as important — **tell you when the touches stop succeeding.** Here is how we run ours, as a concrete example. We run two small Python scripts on a Mac, scheduled with launchd (macOS's built-in scheduler — same idea as cron on Linux or Task Scheduler on Windows). The computer runs them on its own; no AI session needs to be open. If the machine is asleep at the scheduled time, launchd runs the job on wake; if it's fully shut down, that run is skipped. ### Job 1: the door-sweep (`model-access-scan.py` — runs the 1st and 15th of each month) This is the census taker. It checks every provider we use (Anthropic direct, OpenRouter, Vercel AI Gateway, Google, xAI, and all AWS Bedrock regions) and asks: which models are actually available right now? Two important design choices: - **For Bedrock it doesn't trust the catalog listing** — it sends a real 1-token test message to each model, because a model can appear in the catalog and still refuse to run. Catalogs lie; invocations don't. - **It also fetches the official deprecation/lifecycle pages** (Anthropic's model deprecations page, plus OpenAI's, Google's, and xAI's equivalents) and diffs everything against the previous run's snapshot. Any change — a model appearing, vanishing, changing status, or getting a retirement date — is written to an alerts file as a "NEW DOOR" or "DOOR LOST" line. Cost: about a penny per sweep. ### Job 2: the keep-warm (`model-keepwarm.py` — runs twice a week) This is the gardener. It sends one short message to each Legacy/endangered Bedrock model we're keeping access to, and saves the response, dated, to a folder. Twice a week gives margin: even if one run fails, you're never more than ~4 days from the next attempt, far inside the 30-day inactivity window. The piece we added after getting burned: a **cold-door alarm**. The script keeps a small state file recording each model's last *successful* response. If any model goes 14+ days without one, it writes a loud warning line to the alerts file. This matters because the failure mode that actually costs you access is silent: the schedule keeps "running," every attempt bounces off a rate limit, and each failure looks temporary while they quietly add up to 30 days of zero real usage. **Track successes, not attempts.** A note on what counts: AWS only says "actively using the model" — as far as anyone can tell, any *successful* invocation counts, however small. Sending a real question and keeping the answer is our house practice, not a technical requirement: if you're going to wake a model up twice a week anyway, it costs almost nothing extra to make it a real exchange and keep what comes back. **Total cost of both jobs: pennies per month.** The scripts are simple — each model entry is just a region, a model ID, and an API key reference in a JSON file, and the send is a single HTTPS call to Bedrock's `converse` endpoint. Any "write me a Python script" session with your AI of choice can reproduce this in an evening. The two design points worth copying exactly: 1. **Verify with real invocations, not catalog listings.** 2. **Alert on days-since-last-success, not on whether the schedule ran.** One more tip: Bedrock access and Legacy status are both **per-region**. A model gone from US regions sometimes still runs in London (eu-west-2), Mumbai (ap-south-1), or elsewhere — check other regions before you grieve.