Skip to content

feat(providers): add DigitalOcean and Scaleway presets - #872

Merged
lidge-jun merged 2 commits into
lidge-jun:devfrom
olddonkey:codex/572-digitalocean-scaleway-model-apis
Aug 6, 2026
Merged

feat(providers): add DigitalOcean and Scaleway presets#872
lidge-jun merged 2 commits into
lidge-jun:devfrom
olddonkey:codex/572-digitalocean-scaleway-model-apis

Conversation

@olddonkey

@olddonkey olddonkey commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add canonical API-key presets for DigitalOcean Serverless Inference and Scaleway Generative APIs.
  • Discover only docs-backed shared Chat Completions models by intersecting each authenticated live catalog with a registry-owned allowlist.
  • Bound discovery before parsing/caching and preserve older same-named custom destinations and adapters.
  • Promote Scaleway's documented free tier in the free-provider directory and sync the provider catalog across English, Japanese, Korean, Russian, and Simplified Chinese docs.

Relates to #572. This PR intentionally does not close the umbrella issue.

Canonical preset evidence

Provider Shared API and model evidence Contracting entity / routing authorization
DigitalOcean Official Serverless Inference API reference, model catalog, model access key guide, and Chat Completions guide establish https://inference.do-ai.run/v1, Bearer-authenticated /models, and the shared chat endpoint. DigitalOcean Terms of Service identify DigitalOcean, LLC and contemplate customer applications and end users; the service-specific terms and Serverless Inference prepayment terms cover this service.
Scaleway Official Generative APIs guide, supported-model table, API reference, and function-calling guide establish https://api.scaleway.ai/v1, Bearer authentication, and the shared serverless API. Scaleway's AI-specific terms identify Scaleway S.A.S. (RCS Paris 433 115 904) and describe Generative APIs as shared AI models exposed to customers through an API with OpenAI SDK compatibility; the general terms govern the service relationship.

Maintenance owner: @olddonkey. I am not affiliated with either provider.

Verification date: 2026-08-02.

Scope and safety

  • DigitalOcean is limited to the fixed shared Serverless Inference host. Agent-specific, dedicated, Responses-only, embedding, and media-generation surfaces remain out of scope. The service requires a prepaid balance, so the preset does not claim a free tier.
  • Scaleway is limited to the default Project shared serverless host. Project-qualified and dedicated deployment hosts remain custom-provider territory. The preset records the documented free tier.
  • Both /models schemas expose only generic OpenAI-shaped rows, so discovery fails closed: a live row must also match the current first-party chat-model allowlist. Unknown rows are not promoted automatically.
  • Discovery caps are 256 KiB / 256 raw rows for DigitalOcean and 128 KiB / 128 raw rows for Scaleway.
  • preserveCustomDestination prevents registry promotion from retargeting keys already stored under a same-named custom provider. Discovery policy remains registry-only and is never serialized into user config or key-login metadata.
  • Key validation refuses redirects, and the shared model-discovery contract keeps credentials on the canonical destination.
  • Parallel tool calls are not advertised provider-wide because neither provider documents universal support across the eligible catalog.

Because this changes canonical credential destinations, explicit maintainer security review is requested.

Sequencing

This PR remains Draft until #870 lands. It is currently restacked onto dev and its standalone registry/docs totals are 71 presets / 60 key presets; after #870 merges, a final restack will regenerate those totals as 73 / 62.

Verification

  • bun run typecheck
  • bun test tests/digitalocean-scaleway-provider.test.ts tests/provider-model-discovery-contract.test.ts tests/provider-registry-parity.test.ts — 57 pass, 0 fail
  • bun run test — 7596 pass, 8 skip, 0 fail
  • bun run privacy:scan
  • cd docs-site && bun run build — 216 pages
  • git diff --check

Summary by CodeRabbit

  • New Features

    • Added DigitalOcean Serverless Inference and Scaleway Generative APIs as supported providers.
    • Added authenticated model discovery with allowlists, endpoint support, and bounded results.
    • Marked Scaleway as offering a free tier.
  • Documentation

    • Updated provider catalogs and quickstarts across supported languages.
    • Increased the documented built-in provider preset count from 72 to 74.
    • Added model discovery, endpoint, and key-management guidance for both providers.

Review readiness checklist

This PR stays in draft until every box below is ticked. Tick all four boxes once the requirements are met:

  • All CI tests are green on my local testing.

  • I pushed my PR to the latest dev commit.

  • I resolved all correct Codex and CodeRabbit findings.

  • My PR is ready for review.

@github-actions github-actions Bot added the enhancement New feature or request label Aug 2, 2026
@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8797134d-f720-49e9-9ab2-655f45644f65

📥 Commits

Reviewing files that changed from the base of the PR and between bbd82e7 and cecb6f4.

📒 Files selected for processing (16)
  • docs-site/src/content/docs/getting-started/quickstart.md
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/ja/getting-started/quickstart.md
  • docs-site/src/content/docs/ja/guides/providers.md
  • docs-site/src/content/docs/ko/getting-started/quickstart.md
  • docs-site/src/content/docs/ko/guides/providers.md
  • docs-site/src/content/docs/ru/getting-started/quickstart.md
  • docs-site/src/content/docs/ru/guides/providers.md
  • docs-site/src/content/docs/zh-cn/getting-started/quickstart.md
  • docs-site/src/content/docs/zh-cn/guides/providers.md
  • src/providers/free-directory.ts
  • src/providers/registry.ts
  • tests/digitalocean-scaleway-provider.test.ts
  • tests/fixtures/digitalocean-models.json
  • tests/fixtures/scaleway-models.json
  • tests/provider-registry-parity.test.ts

📝 Walkthrough

Walkthrough

The PR adds DigitalOcean Serverless Inference and Scaleway Generative APIs as provider presets. It adds bounded, allowlisted model discovery, routing and parity tests, Scaleway directory metadata, and localized documentation.

Changes

Provider integrations

Layer / File(s) Summary
Registry entries and discovery rules
src/providers/registry.ts, src/providers/free-directory.ts
Adds provider allowlists and registry entries with authenticated discovery, response limits, fixed endpoints, model routing, and disabled parallel tool calls. Marks Scaleway as a supported free-tier provider.
Provider behavior and routing validation
tests/digitalocean-scaleway-provider.test.ts, tests/fixtures/*, tests/provider-registry-parity.test.ts
Tests metadata, presets, authentication, model validation, allowlist filtering, routing, tool requests, custom-provider preservation, fixtures, and registry parity.
Localized provider documentation
docs-site/src/content/docs/**
Updates preset counts and documents the providers, endpoints, discovery filters, response limits, and custom-provider requirements in five languages.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant ProviderRegistry
  participant ModelsEndpoint
  participant ChatEndpoint
  Client->>ProviderRegistry: select provider preset
  ProviderRegistry->>ModelsEndpoint: request authenticated model list
  ModelsEndpoint-->>ProviderRegistry: return bounded model response
  ProviderRegistry->>ProviderRegistry: apply provider allowlist
  ProviderRegistry-->>Client: expose compatible models
  Client->>ChatEndpoint: send fixed-endpoint chat request
Loading

Possibly related issues

  • lidge-jun/opencodex#572 — Covers the DigitalOcean and Scaleway provider promotions implemented by this PR.

Possibly related PRs

Suggested reviewers: ingwannu, lidge-jun, wibias

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding DigitalOcean and Scaleway provider presets.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs-site/src/content/docs/guides/providers.md`:
- Around line 269-273: Synchronize the Scaleway discovery sections in
docs-site/src/content/docs/guides/providers.md:269-273,
docs-site/src/content/docs/ja/guides/providers.md:192-195,
docs-site/src/content/docs/ko/guides/providers.md:191-194,
docs-site/src/content/docs/ru/guides/providers.md:202-206, and
docs-site/src/content/docs/zh-cn/guides/providers.md:180-183. In each locale,
identify the documented Chat Completions allowlist, authenticated-model
intersection, bounded discovery, and fail-closed exclusion of unknown,
Responses-only, embeddings, transcription, and other media models; additionally
update the Korean section to state that Project-qualified URLs and dedicated
deployments require a custom provider.

In `@src/providers/registry.ts`:
- Around line 586-598: Remove "gpt-oss-120b" from the
SCALEWAY_SERVERLESS_CHAT_MODELS catalog in src/providers/registry.ts. Update the
mixed-catalog discovery assertion in
tests/digitalocean-scaleway-provider.test.ts to verify that this model is
excluded while preserving the existing supported-model assertions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 84fd0f19-db85-41cb-bed6-8e27ea1a55c0

📥 Commits

Reviewing files that changed from the base of the PR and between 6ac6bea and e5f1512.

📒 Files selected for processing (16)
  • docs-site/src/content/docs/getting-started/quickstart.md
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/ja/getting-started/quickstart.md
  • docs-site/src/content/docs/ja/guides/providers.md
  • docs-site/src/content/docs/ko/getting-started/quickstart.md
  • docs-site/src/content/docs/ko/guides/providers.md
  • docs-site/src/content/docs/ru/getting-started/quickstart.md
  • docs-site/src/content/docs/ru/guides/providers.md
  • docs-site/src/content/docs/zh-cn/getting-started/quickstart.md
  • docs-site/src/content/docs/zh-cn/guides/providers.md
  • src/providers/free-directory.ts
  • src/providers/registry.ts
  • tests/digitalocean-scaleway-provider.test.ts
  • tests/fixtures/digitalocean-models.json
  • tests/fixtures/scaleway-models.json
  • tests/provider-registry-parity.test.ts

Comment thread docs-site/src/content/docs/guides/providers.md Outdated
Comment thread src/providers/registry.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e5f151216d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/providers/registry.ts
Comment thread src/providers/registry.ts
@olddonkey
olddonkey force-pushed the codex/572-digitalocean-scaleway-model-apis branch from e5f1512 to 5afec20 Compare August 2, 2026 17:37
@Wibias
Wibias marked this pull request as draft August 2, 2026 21:08
@olddonkey
olddonkey force-pushed the codex/572-digitalocean-scaleway-model-apis branch from 5afec20 to fc7222f Compare August 3, 2026 08:09

Copy link
Copy Markdown
Contributor Author

Author update — current head fc7222f7

All review feedback received through this revision has been addressed:

  • Restacked onto current dev while preserving the upstream Command Code preset.
  • Scaleway's gpt-oss-120b row is excluded from the tool-capable Chat Completions catalog.
  • Pixtral advertises text + image input.
  • DigitalOcean and Scaleway use conservative reasoningEfforts: [] defaults, with a request regression proving reasoning_effort is not sent.
  • Localized discovery scope and fail-closed exclusions are synchronized.
  • Every review thread is resolved.

Validation: bun run typecheck; 57 focused tests; full suite 7596 pass / 8 skip / 0 fail; privacy scan; 216-page docs build; git diff --check.

This PR intentionally remains Draft until #870 lands. I will perform the final sequential restack and regenerate the 73 / 62 provider totals before marking it Ready. It relates to #572 and does not close the umbrella issue.

@lidge-jun
lidge-jun force-pushed the codex/572-digitalocean-scaleway-model-apis branch from fc7222f to cecb6f4 Compare August 6, 2026 10:24
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

✅ READY

  • all PR quality gates passed; the review readiness checklist is complete.

Review readiness checklist

  • ✅ All CI tests are green on my local testing.
  • ✅ I pushed my PR to the latest dev commit.
  • ✅ I resolved all correct Codex and CodeRabbit findings.
  • ✅ My PR is ready for review.

4/4 boxes ticked.

This pull request is already Ready for Review.
CodeRabbit/Codex review was requested via the review-ready label. If no review appears, comment @coderabbitai review to request one.
Maintainers: @lidge-jun @Ingwannu @Wibias

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@lidge-jun

Copy link
Copy Markdown
Owner

Maintainer rebase and merge preparation (2026-08-06)

Rebased onto current dev (bbd82e731, which is the #870 merge) and verified.

Conflicts, and how each was resolved

This rebase hit code conflicts, not just documentation, because #870 landed two entries at the same insertion point:

  • src/providers/registry.ts — both sides added rows after commandcode. Resolved by keeping all four (sambanova, nebius, digitalocean, scaleway), then verifying by executing the module rather than by reading the diff.
  • tests/provider-registry-parity.test.tsEXPECTED_KEY_PROVIDER_IDS is compared with an order-sensitive deep-equal, so the union had to be written in registry order: ... commandcode, sambanova, nebius, digitalocean, scaleway, together ....
  • Six locale docs — five were additive (new provider table rows and discovery prose; both sides kept) and one was a preset count.

Totals regenerated from the executed registry

total 74 { forward: 1, oauth: 8, key: 62, local: 3 }
freeTier: scaleway, nvidia, cloudflare-workers-ai

All 15 count sites were rewritten from that measurement: 74 = 62 key + 8 OAuth + 3 local + 1 forward. Worth recording why this is done by measurement rather than by arithmetic — git rerere replayed the resolutions from the #870 rebase, which carried the now-stale 72. Re-running the count caught it. The PR body's predicted "73 / 62" was computed against a 71-preset base that no longer exists.

The freeTier parity expectation correctly grows to three ids with scaleway; this PR already had that and it survived the rebase.

Verification on bbd82e731

  • bun run typecheck — exit 0
  • bun test --isolate tests/digitalocean-scaleway-provider.test.ts tests/provider-registry-parity.test.ts tests/provider-model-discovery-contract.test.ts tests/sambanova-nebius-provider.test.ts75 pass, 0 fail
  • bun run privacy:scan — passed
  • git diff --check origin/dev...HEAD — clean

Security review (MAINTAINERS.md)

Reviewed as a credential-destination change. Both presets use Bearer transport on their documented shared hosts (https://inference.do-ai.run/v1, https://api.scaleway.ai/v1), set preserveCustomDestination, keep parallelToolCalls: false, and advertise no reasoning ladder.

The design decision worth calling out is the fail-closed allowlist. Both providers' /v1/models rows carry only id/object/created/owned_by with no modality discriminator, so a live row must also appear in a registry-owned, docs-backed list. A newly published model stays invisible until someone refreshes the registry with evidence. That is the right direction for a coding agent: an unusable model is worse than a missing one. The gpt-oss-120b omission on Scaleway is deliberate and documented in the code — Scaleway requires the Responses API for its tool calling while this preset routes agent tools through Chat Completions.

Planning record: devlog/_plan/260806_provider_preset_stack/020_wp2_pr872.md.

Thanks @olddonkey.

@lidge-jun
lidge-jun marked this pull request as ready for review August 6, 2026 10:24
@github-actions
github-actions Bot marked this pull request as draft August 6, 2026 10:24

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cecb6f4af3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/providers/registry.ts
adapter: "openai-chat",
authKind: "key",
dashboardUrl: "https://cloud.digitalocean.com/model-studio/manage-keys",
liveModels: true,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Seed models for discovery outages

On a fresh DigitalOcean or Scaleway configuration, any transient /models failure (timeout, non-2xx response, malformed payload, or destination-policy rejection) leaves Codex with no routed models: both new entries enable liveModels but seed neither models nor a usable fallback, so failedDiscoveryFallback returns an empty configured catalog when no stale cache exists. Add a docs-backed defaultModel plus matching models seed for each provider and cover the fresh-cache failure path, as the Command Code preset does.

AGENTS.md reference: src/AGENTS.md:L17-L18

Useful? React with 👍 / 👎.

Comment thread src/providers/registry.ts
"glm-5.2",
// gpt-oss-120b is intentionally omitted: Scaleway requires Responses API for tool calling,
// while this preset routes Codex agent tools through Chat Completions.
"qwen3.6-35b-a3b",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Populate context windows for generic catalog rows

When either authenticated discovery succeeds, these providers' generic /models rows supply no context metadata and the new registry entries provide no modelContextWindows, so ensureStrictCatalogFields advertises every admitted model as 128,000 tokens. This understates models such as qwen3.6-35b-a3b, which the repository's model metadata records at 262,144 tokens, causing Codex to compact conversations roughly halfway through the usable context. Add provider-verified context-window maps for the allowlisted IDs and assert the resulting catalog fields.

AGENTS.md reference: src/AGENTS.md:L18-L18

Useful? React with 👍 / 👎.

Comment thread src/providers/registry.ts
"nemotron-3-ultra-550b",
"nvidia-nemotron-3-super-120b",
"nemotron-3-nano-omni",
"nemotron-nano-12b-v2-vl",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Advertise DigitalOcean vision-model inputs

When DigitalOcean discovery returns an admitted vision model such as nemotron-nano-12b-v2-vl, the generic row has no modality field and the DigitalOcean entry supplies no modelInputModalities, so catalog normalization publishes it as text-only and Codex blocks image attachments before the request reaches the proxy. The fresh evidence beyond the corrected Pixtral case is that the current tree's per-model NVIDIA audit already classifies the same underlying Nemotron model, along with Gemma 4, as image-capable, while this new DigitalOcean allowlist admits both without corresponding metadata. Add DigitalOcean-verified image modalities and cover the gathered catalog rows.

AGENTS.md reference: src/AGENTS.md:L18-L18

Useful? React with 👍 / 👎.

@github-actions
github-actions Bot marked this pull request as ready for review August 6, 2026 10:33
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot]: The readiness gate is complete. I will review pull request #872.

⚠️ Action not completed

Pull request is closed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@lidge-jun
lidge-jun merged commit e50f580 into lidge-jun:dev Aug 6, 2026
23 of 25 checks passed
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot] The readiness gate is complete. I will review pull request #872.

⚠️ Action not completed

Pull request is closed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

@github-actions[bot] Pull request #872 is closed and merged. A new CodeRabbit review cannot run on this pull request.

You are interacting with an AI system.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

const SCALEWAY_MODEL_INPUT_MODALITIES: Record<string, string[]> = {
"pixtral-12b-2409": ["text", "image"],
};

P2 Badge Mark all Scaleway vision chat models as image-capable

When authenticated Scaleway discovery returns another admitted multimodal chat model such as qwen3.6-35b-a3b, qwen3.5-397b-a17b, mistral-medium-3.5-128b, or mistral-small-3.2-24b-instruct-2506, the generic /models row still has no modality metadata and this map only corrects Pixtral. The fresh evidence beyond the Pixtral fix is that Scaleway's current supported-models table lists image formats for these same allowlisted IDs, so Codex will publish them as text-only and reject image attachments before they reach the proxy; add the per-model ['text', 'image'] entries here and cover one gathered catalog row.


filter: {
allOf: [{ path: ["id"], equalsAny: DIGITALOCEAN_CHAT_COMPLETION_MODELS }],
},

P2 Badge Keep destination-matched preset metadata together

When this preset is saved under a different provider name (for example do-prod pointing at the fixed DigitalOcean base URL), the destination-based discovery resolver still applies this allowlist, but the rest of the registry metadata is not applied because enrichment and routing look up metadata by provider name. The resulting live rows are advertised with the default Codex reasoning ladder and parallel-tool support, and requests can send reasoning_effort/parallel-tool fields that this same preset suppresses when named digitalocean; apply the same destination match to registry metadata or keep discovery tied to the named preset.


const DIGITALOCEAN_CHAT_COMPLETION_MODELS = [

P2 Badge Admit the documented DigitalOcean chat models

When authenticated DigitalOcean discovery returns a documented Serverless text model that is not in this 26-id list, such as openai-gpt-5.2, openai-gpt-4.1, or alibaba-qwen3-32b, the filter drops it before it reaches Codex even though DigitalOcean's current model table lists those rows for Serverless Inference and the /v1/chat/completions schema tells callers to choose model IDs from /v1/models or the available-models page. That means fresh DigitalOcean setups hide valid chat models returned by their own key-scoped /models response; expand the docs-backed allowlist or derive it from the documented endpoint eligibility.

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

lidge-jun added a commit that referenced this pull request Aug 7, 2026
Roadmap unit for the four open provider-preset PRs under umbrella issue #572,
produced by a docs-only PABCD cycle and hardened through five rounds of
independent adversarial audit.

- 000_plan.md: dependency-ordered work-phase map (#870 -> #872 -> #937, then
  #812), measured ground truth (dev registry = 70 presets: 58 key, 8 oauth,
  3 local, 1 forward), the count-regeneration contract, and amendments A1-A8.
- 010/020/030: diff-level rebase, verification, and merge docs per PR.
- 040: the Apertis evidence gate and its resolved disposition.

Findings that changed the plan: the OAuth narrative in all five locales states
six-plus-Copilot while the registry has eight oauth rows including command-code
(pre-existing defect, folded into WP1); the measured #870 rebase conflicts only
in the ten locale docs while all code applies cleanly; deepinfra is
destination-fallback-eligible with an absolute discovery URL, so the invariant
is same-origin rather than same-URL; and #870's destination-fallback tests lack
negative cases, which WP1 now builds rather than confirms.

Refs #572, #870, #872, #937, #812.
lidge-jun added a commit that referenced this pull request Aug 7, 2026
Three PRs landed on dev: #870 (bbd82e7), #872 (e50f580), #937 (8ed03e7).
The registry went 70 -> 76 presets, measured by executing the module.

#812 (Apertis) is not merged and not closed. It meets four of the five canonical
preset requirements and fails exactly the aggregator resale/routing
authorization clause in MAINTAINERS.md. The prescribed free-directory fallback
does not apply either, because that directory only admits free-access groups.

Records what the process actually caught: the count contract stopped three real
regressions (a stale OAuth number in the incoming diff, a pre-existing wrong
OAuth narrative in five locales, and git rerere replaying a stale total), while
a dropped documentation paragraph in WP3 was invisible to every automated gate
and surfaced only from a grep.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request review-ready

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants