Skip to content

feat(providers): add Featherless preset - #1317

Merged
Wibias merged 5 commits into
lidge-jun:devfrom
olddonkey:codex/572-featherless-model-api
Aug 10, 2026
Merged

feat(providers): add Featherless preset#1317
Wibias merged 5 commits into
lidge-jun:devfrom
olddonkey:codex/572-featherless-model-api

Conversation

@olddonkey

@olddonkey olddonkey commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add a canonical featherless API-key preset for the fixed OpenAI-compatible endpoint
  • discover only the authenticated first page of popular chat models available on the current plan
  • fail closed unless each row independently reports plan availability, no Hugging Face gate, and features.tool_use: true
  • teach bounded catalog metadata parsing to read Featherless's boolean features object
  • add fixture-only provider, routing, collision-preservation, sparse-metadata, and key-validation coverage
  • document the preset and its plan/scope constraints in all five maintained locales

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

Canonical evidence

Primary sources checked 2026-08-08:

  • API overview and common options: fixed https://api.featherless.ai/v1 base URL, Bearer authentication, and OpenAI-compatible Chat Completions
  • Models API reference: pagination, available_on_current_plan, chat capability filtering, popularity sorting, and per-row feature metadata
  • Terms of Service: Featherless is identified as a Delaware LLC; the terms cover developers building on the API and distinguish interactive/prototyping individual plans from Scale-plan application use

Read-only live probes found that the unqualified catalog is currently roughly 21,675 rows / 6.9 MiB. per_page=100 is honored, while the live gated=false behavior and combined capability filtering were not reliable enough to trust for admission. The preset therefore uses server query parameters only to bound the response and repeats every safety-relevant condition as a registry-owned local predicate. An invalid Bearer token with available_on_current_plan=true returns 401, so the same bounded endpoint is a real key-validation boundary.

Maintainer: @olddonkey. No affiliation with Featherless.

Security and behavior

  • fixed HTTPS transport; same-named custom destinations and adapters retain their own routing and receive no registry discovery policy
  • 128 KiB response ceiling and 100 raw-row ceiling, before parsing/caching
  • first page only; no silent truncation or pagination loop
  • registry trust policy is not copied into config.json or the key-login map
  • no unsupported reasoning_effort or parallel-tool-call claim
  • all tests are fixture-only and make no live provider requests

This touches authenticated provider discovery and key validation, so explicit security review is requested per MAINTAINERS.md.

Verification

  • bun test tests/featherless-provider.test.ts tests/provider-registry-parity.test.ts tests/provider-model-discovery-contract.test.ts — 68 pass, 0 fail
  • bun run typecheck
  • bun run privacy:scan
  • bun run test — 10,062 pass, 7 skip, 0 fail
  • docs build — 221 pages
  • registry audit — 79 total / 67 key / 8 OAuth / 3 local / 1 forward
  • git diff --check

Checklist

  • targets dev
  • canonical technical and operating-entity evidence linked
  • fixture-only regression coverage
  • translated docs kept in sync
  • umbrella issue linked without auto-close syntax
  • maintainer security review

Review readiness

  • Local CI is green: focused tests, typecheck, privacy scan, docs build, and the full test suite passed on 21898212.
  • The branch is based on the latest dev commit available when this checklist was completed (f310cc20).
  • All currently available correct Codex and CodeRabbit findings are addressed; there are no unresolved review threads.
  • Ready for maintainer and explicit security review on this exact head commit.

Summary by CodeRabbit

  • New Features

    • Added Featherless AI with API-key authentication, an OpenAI-compatible endpoint, and live model discovery.
    • Featherless discovery filters eligible chat models by plan availability, access requirements, and tool support, with result and response-size limits.
    • Improved model capability detection for image-input support and feature metadata.
  • Bug Fixes

    • Unsupported parallel tool-call options are now omitted from provider requests.
  • Documentation

    • Updated multilingual provider catalogs and quickstarts to reflect 78 built-in presets and 66 key-based presets.
    • Documented Featherless AI setup and discovery behavior.

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.

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 22be3ef1-d27a-4a9c-a172-7794b5b976f8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This change adds Featherless AI as an OpenAI-compatible provider. It adds authenticated model discovery, capability parsing, routing, request shaping, tests, registry parity, and localized documentation.

Changes

Featherless provider integration

Layer / File(s) Summary
Catalog capability parsing
src/codex/catalog/provider-fetch.ts
Capability parsing falls back to top-level features. Vision detection also accepts image_input.
Provider registry and discovery
src/providers/registry.ts
Adds the featherless preset with Bearer authentication, bounded /models discovery, plan and capability filtering, Chat Completions, and disabled unsupported controls.
Provider validation and parity
tests/fixtures/featherless-models.json, tests/featherless-provider.test.ts, tests/provider-registry-parity.test.ts
Adds fixtures and coverage for discovery, authentication, metadata, routing, request shaping, customization isolation, cache cleanup, and registry parity.
Parallel tool-call request semantics
src/adapters/openai-chat.ts, tests/*provider.test.ts, tests/parallel-tool-calls-optin.test.ts
Opted-out providers omit parallel_tool_calls. NVIDIA NIM continues to receive false.
Localized documentation
docs-site/src/content/docs/**/getting-started/quickstart.md, docs-site/src/content/docs/**/guides/providers.md
Updates provider counts and documents Featherless endpoints, discovery filters, response limits, and plan requirements in five locales.

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

Sequence Diagram(s)

sequenceDiagram
  participant ProviderRegistry
  participant FeatherlessAPI
  participant ModelCatalog
  participant OpenAIChatAdapter
  ProviderRegistry->>FeatherlessAPI: Request authenticated bounded /models catalog
  FeatherlessAPI-->>ProviderRegistry: Return model records
  ProviderRegistry->>ModelCatalog: Filter plan-available, ungated, tool-capable models
  ModelCatalog-->>ProviderRegistry: Return model metadata and routes
  OpenAIChatAdapter->>FeatherlessAPI: Send Bearer-authenticated chat request
Loading

Possibly related issues

Possibly related PRs

Suggested reviewers: ingwannu, lidge-jun

🚥 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 identifies the main change: adding the Featherless provider preset.
✨ 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.

@github-actions github-actions Bot added the enhancement New feature or request label Aug 8, 2026
@olddonkey
olddonkey marked this pull request as ready for review August 8, 2026 20:30

@Wibias Wibias left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Maintainer + security review verdict: REQUEST CHANGES.

I reviewed the registry/discovery policy, the shared provider-fetch.ts metadata change, request/auth path, filtering/bounds, same-name custom-provider preservation, fixtures/tests, current maintainer/CodeRabbit state, current dev, and Featherless's current first-party API/terms documentation.

What is good: the provider is useful for #572; the 128 KiB/100-row ceiling avoids the huge catalog; local predicates correctly re-check plan availability, gating, and tool support rather than trusting query filtering; slash IDs and custom destinations are preserved; the features metadata parsing extension is bounded and conservative. I found no secret logging, credential retarget, SSRF, or unbounded parsing issue.

Blocking correctness/security issue: Featherless explicitly documents /v1/models as callable in either an authenticated or unauthenticated context, with available_on_current_plan present only when authenticated. The generic validateApiKey() path currently treats any 2xx model-list response as proof that the supplied key is valid. The live invalid-key probe returning 401 today is useful evidence, but it is not a robust authentication contract for an endpoint that officially supports unauthenticated 2xx. This can become a false-positive key validation if invalid Authorization is ignored/falls back to anonymous behavior. Please either set this preset to apiKeyValidation: "unknown", or validate an authentication-only signal/endpoint (for example an auth-required contract such as /v1/plan, or equivalent proof that the response was authenticated) rather than status alone.

Other blocking changes:

  1. Rebase onto current dev and rerun full CI. This head is ~53 dev commits behind, and src/codex/catalog/provider-fetch.ts has changed materially since the branch point. The old green CI does not validate the current integration result.
  2. Fix the standalone provider counts. Current dev is 76 total / 64 key presets; this one-provider PR changes docs to 79 / 67. That is false if this PR lands alone. Update to the actual post-rebase/post-merge count or defer batch-count churn until sequential integration.

There are no unresolved prior review threads, but the key-validation boundary above needs correction before approval. Re-request security review on the new exact head after the rebase and fresh CI.

@Wibias
Wibias marked this pull request as draft August 9, 2026 02:37
@Wibias
Wibias force-pushed the codex/572-featherless-model-api branch from 2189821 to 8949d4d Compare August 10, 2026 04:56
@Wibias

Wibias commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Addressed on 8949d4da:

  1. Rebased onto current dev and force-pushed; focused provider tests + typecheck pass locally.
  2. Corrected standalone preset counts to 77/65 across all five locales.
  3. Key-validation boundary: set apiKeyValidation: "unknown" on the Featherless preset because /v1/models is documented as callable authenticated or unauthenticated, so a 2xx catalog response cannot prove the supplied Bearer key. Test now matches the Chutes pattern (validateApiKey returns "unknown" without fetching). English docs note the limitation.

Ready for re-review on the new exact head.

@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions

github-actions Bot commented Aug 10, 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.
The review-ready label marks this PR as ready; review automation runs independently. If no CodeRabbit review appears, comment @coderabbitai review to request one.
Maintainers: @lidge-jun @Ingwannu @Wibias

@Wibias
Wibias marked this pull request as ready for review August 10, 2026 04:59
@coderabbitai

coderabbitai Bot commented Aug 10, 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.

@github-actions
github-actions Bot marked this pull request as draft August 10, 2026 05:00
@github-actions
github-actions Bot marked this pull request as ready for review August 10, 2026 05:01
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot] The pull request is marked ready. I will review the current head, 8949d4da948fa997f602e955152efd6e2dab3fa5.

⚠️ Action not completed

Already reviewed.

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 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions The PR is marked ready at 8949d4da948fa997f602e955152efd6e2dab3fa5. I will review the current head.

⚠️ Action not completed

Already reviewed.

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 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: 1

🤖 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/ja/guides/providers.md`:
- Around line 275-280: Update the Featherless discovery documentation in
docs-site/src/content/docs/ja/guides/providers.md lines 275-280,
docs-site/src/content/docs/ko/guides/providers.md lines 273-278,
docs-site/src/content/docs/ru/guides/providers.md lines 298-304, and
docs-site/src/content/docs/zh-cn/guides/providers.md lines 254-258. In each
locale, state that /v1/models may succeed with or without authentication and
therefore cannot validate the configured key, while chat requests still
authenticate using the configured Bearer key; write each statement in the
appropriate localized language.
🪄 Autofix

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: ca13ed61-8859-4c8a-b69f-01b21b025938

📥 Commits

Reviewing files that changed from the base of the PR and between 2beeea6 and 8949d4d.

📒 Files selected for processing (15)
  • 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/codex/catalog/provider-fetch.ts
  • src/providers/registry.ts
  • tests/featherless-provider.test.ts
  • tests/fixtures/featherless-models.json
  • tests/provider-registry-parity.test.ts

Comment thread docs-site/src/content/docs/ja/guides/providers.md
@coderabbitai coderabbitai Bot mentioned this pull request Aug 10, 2026
7 tasks
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot] The PR readiness checks are complete at 8949d4da948fa997f602e955152efd6e2dab3fa5. I will review the current head.

⚠️ Action not completed

Already reviewed.

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.

@github-actions
github-actions Bot marked this pull request as draft August 10, 2026 05:11
@Wibias
Wibias marked this pull request as ready for review August 10, 2026 05:12
@github-actions
github-actions Bot marked this pull request as draft August 10, 2026 05:12
@github-actions
github-actions Bot marked this pull request as ready for review August 10, 2026 05:12
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot] The PR is ready for review at bd2d250bb584181ca18feafbc4362a15f7ed73c8.

⚠️ Action not completed

Already reviewed.

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 10, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '=== Current revision and changed files ==='
git rev-parse HEAD
git diff --name-status "$(git merge-base HEAD origin/dev)" HEAD

echo '=== Source structure ==='
ast-grep outline src/providers/registry.ts --items all --match 'featherless|Provider|modelDiscovery' || true
ast-grep outline src/codex/catalog/provider-fetch.ts --items all --match 'feature|capabilit|vision|modality' || true
ast-grep outline tests/featherless-provider.test.ts --items all || true

echo '=== Relevant registry and parser context ==='
rg -n -C 12 -i 'featherless|features|image_input|capabilit|vision' \
  src/providers/registry.ts src/codex/catalog/provider-fetch.ts tests/featherless-provider.test.ts tests/provider-registry-parity.test.ts

echo '=== Changed diff ==='
git diff --find-renames --unified=80 "$(git merge-base HEAD origin/dev)" HEAD -- \
  src/providers/registry.ts \
  src/codex/catalog/provider-fetch.ts \
  tests/featherless-provider.test.ts \
  tests/fixtures/featherless-models.json \
  tests/provider-registry-parity.test.ts \
  docs-site/src/content/docs

Length of output: 1707


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '=== Local refs ==='
git show-ref --heads --tags | sed -n '1,160p'

echo '=== Pull request metadata ==='
gh pr view 1317 --repo lidge-jun/opencodex \
  --json number,baseRefName,baseRefOid,headRefOid,url \
  --jq '{number, url, baseRefName, baseRefOid, headRefOid}'

base_sha="$(gh pr view 1317 --repo lidge-jun/opencodex --json baseRefOid --jq .baseRefOid)"
echo "=== Base commit availability: ${base_sha} ==="
git cat-file -e "${base_sha}^{commit}" 2>/dev/null && echo present || echo absent

if git cat-file -e "${base_sha}^{commit}" 2>/dev/null; then
  echo '=== Changed files ==='
  git diff --name-status "${base_sha}" HEAD

  echo '=== Source structure ==='
  ast-grep outline src/providers/registry.ts --items all --match 'featherless|Provider|modelDiscovery' || true
  ast-grep outline src/codex/catalog/provider-fetch.ts --items all --match 'feature|capabilit|vision|modality' || true
  ast-grep outline tests/featherless-provider.test.ts --items all || true

  echo '=== Relevant implementation context ==='
  rg -n -C 12 -i 'featherless|features|image_input|capabilit|vision' \
    src/providers/registry.ts src/codex/catalog/provider-fetch.ts \
    tests/featherless-provider.test.ts tests/provider-registry-parity.test.ts

  echo '=== Diff ==='
  git diff --find-renames --unified=80 "${base_sha}" HEAD -- \
    src/providers/registry.ts \
    src/codex/catalog/provider-fetch.ts \
    tests/featherless-provider.test.ts \
    tests/fixtures/featherless-models.json \
    tests/provider-registry-parity.test.ts \
    docs-site/src/content/docs
fi

Length of output: 134031


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '=== Discovery and filtering symbols ==='
ast-grep outline src/providers/model-discovery.ts --items all || true
ast-grep outline src/codex/catalog/provider-fetch.ts --items all --match 'filter|discover|fetch|ModelsApi|parse' || true

echo '=== Discovery implementation ==='
rg -n -C 10 -P '\b(resolveProviderModelDiscovery|modelDiscovery|filter|matches.*Filter|fetch.*Models|ProviderModelsApiItem)\b' \
  src/providers/model-discovery.ts src/codex/catalog/provider-fetch.ts src/providers/derive.ts src/types.ts

echo '=== API-item types and bounded response handling ==='
rg -n -C 10 -P '\b(ProviderModelsApiItem|maxResponseBytes|maxModels|redirect|response\.body|content-length)\b' \
  src tests -g '*.ts'

echo '=== Parser test coverage outside Featherless ==='
rg -n -C 5 -P '\bcatalogHintsFromModelsApiItem\s*\(' tests src -g '*.ts'

echo '=== Exact changed source line numbers ==='
nl -ba src/providers/registry.ts | sed -n '1680,1765p'
nl -ba src/codex/catalog/provider-fetch.ts | sed -n '845,955p'

Length of output: 187093


@github-actions[bot] Review completed for head bd2d250bb584181ca18feafbc4362a15f7ed73c8.

I found no blocking issues.

The Featherless discovery policy is enforced at runtime. src/providers/model-discovery.ts applies the 128 KiB response limit, the 100-row limit, and all three fail-closed predicates before it creates catalog entries. src/providers/registry.ts preserves the fixed endpoint and custom-provider routing boundary.

The implementation also preserves apiKeyValidation: "unknown". This is correct because a successful /v1/models response cannot prove that the supplied Bearer key is valid.

The review inspected the implementation and tests. It did not execute repository tests in this sandbox.

⚠️ Action not completed

Already reviewed.

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 10, 2026

Copy link
Copy Markdown
Contributor

Tip

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

@github-actions[bot] Acknowledged. The PR readiness gate passed at bd2d250bb584181ca18feafbc4362a15f7ed73c8.

The completed review found no blocking issues.

You are interacting with an AI system.

@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: 1

🤖 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 `@tests/featherless-provider.test.ts`:
- Around line 199-222: Update the Featherless request test around
createOpenAIChatAdapter().buildRequest to assert that parallel_tool_calls is
omitted when parallelToolCalls is disabled, rather than expecting false. Modify
the OpenAI chat adapter serialization if it currently includes
parallel_tool_calls for false, while preserving serialization for providers that
enable parallel tool calls.
🪄 Autofix

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: eda02120-adbe-45de-86eb-5ec720766d4c

📥 Commits

Reviewing files that changed from the base of the PR and between bd991e1 and bd2d250.

📒 Files selected for processing (15)
  • 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/codex/catalog/provider-fetch.ts
  • src/providers/registry.ts
  • tests/featherless-provider.test.ts
  • tests/fixtures/featherless-models.json
  • tests/provider-registry-parity.test.ts

Comment thread tests/featherless-provider.test.ts
Featherless and other parallel-disabled OpenAI-compatible hosts should not receive an unsupported parallel_tool_calls field. NVIDIA NIM still sends explicit false because kimi rejects true and the registry documents that pin.
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Tip

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

@github-actions[bot] Acknowledged. The PR readiness gate passed at bd2d250bb584181ca18feafbc4362a15f7ed73c8.

The completed review found no blocking issues.

You are interacting with an AI system.

@github-actions
github-actions Bot marked this pull request as draft August 10, 2026 05:28
@Wibias
Wibias marked this pull request as ready for review August 10, 2026 05:28
@github-actions
github-actions Bot marked this pull request as draft August 10, 2026 05:28
@Wibias
Wibias marked this pull request as ready for review August 10, 2026 05:32
@github-actions
github-actions Bot marked this pull request as draft August 10, 2026 05:32
@github-actions
github-actions Bot marked this pull request as ready for review August 10, 2026 05:32
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot] The PR is marked ready at 61c09984643dedb29c0131e19614b126b2c9b972. I will review the current head.

✅ Action performed

Review finished.

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 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot] The readiness gate is complete. I will review the current pull request head, 61c09984643dedb29c0131e19614b126b2c9b972.

✅ Action performed

Review finished.

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 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot] The readiness gate passed at 61c09984643dedb29c0131e19614b126b2c9b972. I will review the current pull request head.

⚠️ Action not completed

Already reviewed.

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 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: 1

🤖 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 `@src/adapters/openai-chat.ts`:
- Around line 839-840: Update the else branch in the parsed options handling to
assign body.parallel_tool_calls only when parsed.options.parallelToolCalls is
explicitly true. Leave the field unset for false or undefined so providers
without the optional capability do not send it.
🪄 Autofix

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: bbda0856-1481-4cfa-8783-2e9aadd8bffa

📥 Commits

Reviewing files that changed from the base of the PR and between bd2d250 and 61c0998.

📒 Files selected for processing (7)
  • src/adapters/openai-chat.ts
  • tests/chutes-provider.test.ts
  • tests/digitalocean-scaleway-provider.test.ts
  • tests/featherless-provider.test.ts
  • tests/nscale-vultr-provider.test.ts
  • tests/parallel-tool-calls-optin.test.ts
  • tests/sambanova-nebius-provider.test.ts

Comment thread src/adapters/openai-chat.ts Outdated
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Tip

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

@github-actions[bot] Acknowledged. The readiness gate passed for head 61c09984643dedb29c0131e19614b126b2c9b972. The pull request is ready for review.

You are interacting with an AI system.

The openai-chat adapter now sends parallel_tool_calls only for providers with parallelToolCalls: true. Opted-out and unset providers omit the field; NIM still pins false.
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Tip

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

@github-actions[bot] Acknowledged. The PR readiness gate and hygiene checks passed at 61c09984643dedb29c0131e19614b126b2c9b972.

The pull request is ready for maintainer review.

You are interacting with an AI system.

@github-actions
github-actions Bot marked this pull request as draft August 10, 2026 05:41
@github-actions
github-actions Bot marked this pull request as ready for review August 10, 2026 05:42
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot] The readiness gate completed at 92618d2fbfb83e4c078b200c6d73e679367eae83. I will review the current pull request head.

⚠️ Action not completed

Already reviewed.

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 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions The readiness gate is complete. I will review the current pull request head, 92618d2fbfb83e4c078b200c6d73e679367eae83.

⚠️ Action not completed

Already reviewed.

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 10, 2026

Copy link
Copy Markdown
Contributor

@github-actions[bot] Acknowledged. PR #1317 is ready for review at 92618d2fbfb83e4c078b200c6d73e679367eae83.

⚠️ Action not completed

Already reviewed.

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.

@Wibias
Wibias merged commit decee5f into lidge-jun:dev Aug 10, 2026
32 of 35 checks passed
@Wibias

Wibias commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Merged — thank you @olddonkey for the Featherless provider work and for iterating through the review feedback (auth boundary, localized docs, and parallel_tool_calls wire semantics). Appreciated!

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