Files
cto 350b902584 nocodb_upsert: surface response body on POST/PATCH failure
Live run #692 got all the way to nocodb_upsert on a fresh
Substack CRM record and hit HTTPError 400 Bad Request on the
POST. The traceback only showed the URL and status, not the
NocoDB response body — the actual field-level reason for the
400 is in that body, and the synthetic test in
test_upsert_synthetic.py already calls out the
SingleSelect-options-not-set gap on the live table as the
likely culprit.

Wrap the POST and PATCH in 'if not resp.ok' to raise a
RuntimeError that includes the response body, table_id, and
record_keys (or record_id) so the next run's log can pinpoint
the exact NocoDB column that's rejecting the record.

Offline tests: 10/10 still pass.

Refs: INB-17
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-07 19:02:28 +00:00

46 lines
1.9 KiB
JSON

{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama (InboxOS FRP)",
"options": {
"baseURL": "{env:OLLAMA_BASE_URL}"
},
"models": {
"lfm2.5:8b": { "name": "LFM 2.5 (8B Local) - Legacy small/fast model. No longer used by either pipeline." },
"gemma4:12b": { "name": "Gemma 4 (12B Local) - Historical pipeline smart-retry model (chain step 2)." },
"gemma4:e4b": { "name": "Gemma 4 (E4B Local) - Historical pipeline primary model (chain step 1)." },
"gemma4:31b-cloud": { "name": "Gemma 4 (31B Cloud) - Live pipeline model for classify + extract; historical pipeline last-resort escalation (chain step 3)." }
}
}
},
"command": {
"inboxos:classify": {
"description": "Classify an InboxOS email into zero or more extraction modules.",
"model": "ollama/gemma4:e4b",
"template": "{file:./.opencode/commands/inboxos:classify.md}"
},
"inboxos:extract-crm": {
"description": "Extract structured Personal CRM fields from an email.",
"model": "ollama/gemma4:e4b",
"template": "{file:./.opencode/commands/inboxos:extract-crm.md}"
},
"inboxos:extract-finance": {
"description": "Extract structured Finance/P&L fields from an email.",
"model": "ollama/gemma4:e4b",
"template": "{file:./.opencode/commands/inboxos:extract-finance.md}"
},
"inboxos:extract-intel": {
"description": "Extract structured Daily News / Intel fields from an email.",
"model": "ollama/gemma4:e4b",
"template": "{file:./.opencode/commands/inboxos:extract-intel.md}"
},
"inboxos:extract-promotions": {
"description": "Extract structured Promotions/Marketing fields from an email.",
"model": "ollama/gemma4:e4b",
"template": "{file:./.opencode/commands/inboxos:extract-promotions.md}"
}
}
}