Skip to content

tests: add e2e model-catalog wiring tests for openai, anthropic, and gemini - #4250

Merged
Pratham-Mishra04 merged 1 commit into
devfrom
06-10-tests_add_e2e_model-catalog_wiring_tests_for_openai_anthropic_and_gemini
Jun 11, 2026
Merged

Pratham-Mishra04 merged 1 commit into
devfrom
06-10-tests_add_e2e_model-catalog_wiring_tests_for_openai_anthropic_and_gemini

Conversation

@Pratham-Mishra04

@Pratham-Mishra04 Pratham-Mishra04 commented Jun 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

Briefly explain the purpose of this PR and the problem it solves.

Changes

  • What was changed and why
  • Any notable design decisions or trade-offs

Type of change

  • Bug fix
  • Feature
  • Refactor
  • Documentation
  • Chore/CI

Affected areas

  • Core (Go)
  • Transports (HTTP)
  • Providers/Integrations
  • Plugins
  • UI (React)
  • Docs

How to test

Describe the steps to validate this change. Include commands and expected outcomes.

# Core/Transports
go version
go test ./...

# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build

If adding new configs or environment variables, document them here.

Screenshots/Recordings

If UI changes, add before/after screenshots or short clips.

Breaking changes

  • Yes
  • No

If yes, describe impact and migration instructions.

Related issues

Link related issues and discussions. Example: Closes #123

Security considerations

Note any security implications (auth, secrets, PII, sandboxing, etc.).

Checklist

  • I read docs/contributing/README.md and followed the guidelines
  • I added/updated tests where appropriate
  • I updated documentation where needed
  • I verified builds succeed (Go and UI)
  • I verified the CI pipeline passes locally if applicable

Summary by CodeRabbit

  • Tests
    • Added a comprehensive end-to-end test suite for model catalog wiring across OpenAI, Anthropic, and Gemini: generates Postman collections for isolated provider scenarios, validates provider/key lifecycle, model allowlists/blacklists and alias resolution, and verifies catalog and inference endpoints.
    • Added a Bash test runner that executes the collection with robust env handling, CI-friendly behavior, and HTML reporting.

@Pratham-Mishra04
Pratham-Mishra04 requested a review from a team as a code owner June 10, 2026 13:43
@coderabbitai

coderabbitai Bot commented Jun 10, 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: 06559ca3-0270-46a6-a337-bbc396774309

📥 Commits

Reviewing files that changed from the base of the PR and between bdee3c5 and a6736d3.

📒 Files selected for processing (3)
  • tests/e2e/api/collections/bifrost-model-catalog-wiring.postman_collection.json
  • tests/e2e/api/runners/build-model-catalog-wiring.mjs
  • tests/e2e/api/runners/individual/run-newman-model-catalog-wiring-tests.sh

📝 Walkthrough

Walkthrough

Adds a Node.js CLI that generates a Postman collection of provider-scoped model-catalog wiring scenarios and a Bash Newman runner that parses a seed env, forwards select vars, runs the collection against a live Bifrost instance, and emits an HTML report.

Changes

Model Catalog Wiring E2E Tests

Layer / File(s) Summary
Collection generation setup and provider configuration
tests/e2e/api/runners/build-model-catalog-wiring.mjs
Defines OpenAI, Anthropic, and Gemini provider configs, script entrypoint, default output, and utilities to build namespaced provider/key identifiers and key payloads.
Postman assertion and scenario expansion
tests/e2e/api/runners/build-model-catalog-wiring.mjs
Adds assertion builders for /api/models and inference responses, and expandScenario to assemble Postman item trees with management API mutations, polling assertions, and cleanup.
Scenario definitions and collection finalization
tests/e2e/api/runners/build-model-catalog-wiring.mjs
Generates six canonical scenarios per upstream provider, aggregates them into SCENARIOS, builds collection metadata, and writes stable JSON output via resolveOutPath(DEFAULT_OUT).
Test runner initialization and environment validation
tests/e2e/api/runners/individual/run-newman-model-catalog-wiring-tests.sh
Enforces Bash 4.0+, resolves script/API dirs, validates Newman and collection presence, and optionally includes a Postman environment file.
Seed environment parsing and variable forwarding
tests/e2e/api/runners/individual/run-newman-model-catalog-wiring-tests.sh
Discovers BIFROST_E2E_SEED_ENV or generated/seed.env, parses it into a Bash associative array without sourcing, and defines add_env_var_if_set to forward selected vars into Newman.
Newman execution and test reporting
tests/e2e/api/runners/individual/run-newman-model-catalog-wiring-tests.sh
Builds the Newman command with generous timeouts and CI-aware failure handling, runs Newman with the HTML reporter, captures exit status, writes newman-reports/model-catalog-wiring/report.html, and exits with Newman’s status.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested reviewers

  • akshaydeo
  • danpiths

Poem

🐰 I stitched test suites with keys and names so neat,

Postman dreams and Newman drums keep beat,
Providers wobble, models line in rows,
Bash hands seeds while Node constructs the shows,
A rabbit cheers: the wiring hums with heat!

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is entirely a template with no concrete details filled in—all sections are empty placeholders with no summary, changes explanation, testing steps, or other substantive content. Replace template placeholders with actual content describing the purpose, changes made, testing procedure, and affected areas relevant to the e2e tests.
Linked Issues check ⚠️ Warning The PR tests model-catalog wiring but linked issue #123 focuses on Files API support; these are unrelated objectives and the PR does not address Files API requirements. Verify the correct linked issue or clarify how model-catalog wiring tests relate to Files API support requirements in issue #123.
Out of Scope Changes check ⚠️ Warning The changes add model-catalog wiring e2e tests and runners, which appear unrelated to the linked Files API Support issue #123. Ensure the linked issue accurately reflects the PR objectives or document why Files API testing is out of scope for these e2e test changes.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly describes the main change: adding e2e model-catalog wiring tests for three providers, which matches the code additions.
Docstring Coverage ✅ Passed Docstring coverage is 85.71% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 06-10-tests_add_e2e_model-catalog_wiring_tests_for_openai_anthropic_and_gemini

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

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@greptile-apps

greptile-apps Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Confidence Score: 5/5

Safe to merge — only new test infrastructure is added, no production code is touched.

All three files are new test-only additions. The generator, collection, and runner are self-contained and do not affect any production path. The superset/subset overlap means one assertion type is redundant rather than missing, so no real scenario is left completely unchecked.

tests/e2e/api/runners/build-model-catalog-wiring.mjs — the superset parameter silently resolves to the same check as subset.

Important Files Changed

Filename Overview
tests/e2e/api/runners/build-model-catalog-wiring.mjs Generator script for the Postman collection; updateKey omits name from PUT bodies (undefined → JSON.stringify drops it), and superset/subset assertion parameters behave identically.
tests/e2e/api/collections/bifrost-model-catalog-wiring.postman_collection.json Machine-generated Postman collection; correctly reflects builder output including run-namespacing, polling with exponential backoff, and alias-resolution scenarios, but all PUT key bodies lack the name field due to the generator bug.
tests/e2e/api/runners/individual/run-newman-model-catalog-wiring-tests.sh Newman runner with Bash 4+ guard, safe seed-env parsing (never sources the file), and correct credential forwarding; --reporter-cli-no-failures false is a display-option flag passed with false as a separate token rather than a flow-control flag.

Reviews (3): Last reviewed commit: "tests: add e2e model-catalog wiring test..." | Re-trigger Greptile

Comment thread tests/e2e/api/runners/build-model-catalog-wiring.mjs

@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/e2e/api/runners/individual/run-newman-model-catalog-wiring-tests.sh`:
- Around line 118-122: The conditional that appends "--reporter-cli-no-failures
false" is misleading and a no-op for controlling execution flow; remove the
entire if block that checks ci_normalized and the
cmd+=(--reporter-cli-no-failures false) line, or if you actually intended to
change Newman’s stop-on-failure behavior replace that append with the correct
flag "--bail" (or "--bail <count>") instead; locate the check using the
ci_normalized variable and the cmd+=(--reporter-cli-no-failures false)
expression to make the change.
🪄 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: 01eb7e0b-6d31-4265-a8d2-899213878d67

📥 Commits

Reviewing files that changed from the base of the PR and between 0e59caa and a58e9c7.

📒 Files selected for processing (3)
  • tests/e2e/api/collections/bifrost-model-catalog-wiring.postman_collection.json
  • tests/e2e/api/runners/build-model-catalog-wiring.mjs
  • tests/e2e/api/runners/individual/run-newman-model-catalog-wiring-tests.sh

Comment on lines +118 to +122
# In CI keep going past failures so every scenario's cleanup folder runs.
ci_normalized="$(printf '%s' "${CI:-}" | tr '[:upper:]' '[:lower:]')"
if [ "$ci_normalized" = "1" ] || [ "$ci_normalized" = "true" ]; then
cmd+=(--reporter-cli-no-failures false)
fi

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

The --reporter-cli-no-failures false flag doesn't achieve the stated intent.

The comment says "keep going past failures so cleanup runs," but:

  • --reporter-cli-no-failures controls whether failure details are printed in CLI output, not execution flow
  • Setting it to false is already the default (failures are shown)
  • To control whether Newman stops on first failure, use --bail (default is false, i.e., continue)

Newman already continues past failures by default, so the code works—but the explicit flag is a no-op and the comment is misleading. Either remove this block (since the default behavior is what you want) or correct the flag if different behavior was intended.

🛠️ Suggested fix: remove the no-op flag or clarify intent

Option A: Remove the block entirely (Newman continues past failures by default):

-# In CI keep going past failures so every scenario's cleanup folder runs.
-ci_normalized="$(printf '%s' "${CI:-}" | tr '[:upper:]' '[:lower:]')"
-if [ "$ci_normalized" = "1" ] || [ "$ci_normalized" = "true" ]; then
-    cmd+=(--reporter-cli-no-failures false)
-fi

Option B: If you want to suppress failure noise in CI (opposite intent):

 # In CI keep going past failures so every scenario's cleanup folder runs.
+# Suppress verbose failure details in CI logs; failures are still reported in summary.
 ci_normalized="$(printf '%s' "${CI:-}" | tr '[:upper:]' '[:lower:]')"
 if [ "$ci_normalized" = "1" ] || [ "$ci_normalized" = "true" ]; then
-    cmd+=(--reporter-cli-no-failures false)
+    cmd+=(--reporter-cli-no-failures)
 fi
🤖 Prompt for 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.

In `@tests/e2e/api/runners/individual/run-newman-model-catalog-wiring-tests.sh`
around lines 118 - 122, The conditional that appends "--reporter-cli-no-failures
false" is misleading and a no-op for controlling execution flow; remove the
entire if block that checks ci_normalized and the
cmd+=(--reporter-cli-no-failures false) line, or if you actually intended to
change Newman’s stop-on-failure behavior replace that append with the correct
flag "--bail" (or "--bail <count>") instead; locate the check using the
ci_normalized variable and the cmd+=(--reporter-cli-no-failures false)
expression to make the change.

@Pratham-Mishra04
Pratham-Mishra04 force-pushed the 06-10-tests_add_e2e_routing_wiring_test_harness branch from 0e59caa to d742bbb Compare June 11, 2026 06:32
@Pratham-Mishra04
Pratham-Mishra04 force-pushed the 06-10-tests_add_e2e_model-catalog_wiring_tests_for_openai_anthropic_and_gemini branch from a58e9c7 to bdee3c5 Compare June 11, 2026 06:32

@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 `@tests/e2e/api/runners/build-model-catalog-wiring.mjs`:
- Around line 79-98: The listModelsAssertLines helper currently treats
expectSubset and expectSuperset identically (only presence checks); update
listModelsAssertLines so that after the presence checks it performs an
exhaustiveness check when expectSuperset.length > 0: compute the filtered
provider names array (names) and verify names.length === expectSuperset.length
and that every element of names exists in expectSuperset (or compare sorted JSON
representations) to ensure no extra models are present; keep the existing
expectSubset presence checks but ensure you reference expectSubset,
expectSuperset, names, and expectEmpty in the new logic.
- Around line 152-157: The updateKey case is passing undefined as the name to
keyBody which results in a name: undefined property; either preserve the
original key name by passing step.key.name into keyBody in the update branch
(case "updateKey") or change keyBody to omit the name property when its
parameter is undefined (use conditional property addition inside keyBody) so PUT
payloads do not include name: undefined; update the case that calls keyBody
and/or the keyBody implementation accordingly (symbols: the "updateKey" case,
step.key, keyBody, keyId).
🪄 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: 5f61ee0d-9bff-43af-846d-1acf879427a1

📥 Commits

Reviewing files that changed from the base of the PR and between a58e9c7 and bdee3c5.

📒 Files selected for processing (3)
  • tests/e2e/api/collections/bifrost-model-catalog-wiring.postman_collection.json
  • tests/e2e/api/runners/build-model-catalog-wiring.mjs
  • tests/e2e/api/runners/individual/run-newman-model-catalog-wiring-tests.sh

Comment on lines +79 to +98
function listModelsAssertLines(sid, { subset = [], superset = [], absent = [], empty = false }) {
return [
`var providerName = ${jsProviderName(sid)};`,
`var expectSubset = ${JSON.stringify(subset)};`,
`var expectSuperset = ${JSON.stringify(superset)};`,
`var expectAbsent = ${JSON.stringify(absent)};`,
`var expectEmpty = ${empty ? "true" : "false"};`,
"if (pm.response.code !== 200) { throw new Error('list models status ' + pm.response.code); }",
"var body = pm.response.json();",
"var names = (body.models || []).filter(function (m) { return m.provider === providerName; })",
" .map(function (m) { return m.name; });",
"if (expectEmpty && names.length !== 0) { throw new Error('expected no models for ' + providerName + ' but got ' + JSON.stringify(names)); }",
"expectSubset.concat(expectSuperset).forEach(function (m) {",
" if (names.indexOf(m) < 0) { throw new Error('expected model ' + m + ' in ' + JSON.stringify(names)); }",
"});",
"expectAbsent.forEach(function (m) {",
" if (names.indexOf(m) >= 0) { throw new Error('expected model ' + m + ' absent but found in ' + JSON.stringify(names)); }",
"});",
];
}

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.

🧹 Nitpick | 🔵 Trivial | ⚡ Quick win

Clarify subset vs superset semantics or implement exhaustiveness check.

Both subset and superset parameters are treated identically (line 91) — they only verify the listed models are present, without checking whether additional models exist. A true superset assertion should validate that the listed models are the only models present (exhaustiveness check).

Current usage (line 268) labels it "both keys' models present", which suggests a presence check rather than exclusivity. Either:

  1. Rename superset to something like expectedModels to match actual behavior
  2. Implement true exhaustiveness: after validating presence, check names.length === expectSuperset.length when expectSuperset.length > 0
♻️ Option 2: Implement exhaustive superset check
 "expectSubset.concat(expectSuperset).forEach(function (m) {",
 "  if (names.indexOf(m) < 0) { throw new Error('expected model ' + m + ' in ' + JSON.stringify(names)); }",
 "});",
+"if (expectSuperset.length > 0 && names.length !== expectSuperset.length) {",
+"  throw new Error('expected exactly ' + expectSuperset.length + ' models but found ' + names.length + ': ' + JSON.stringify(names));",
+"}",
 "expectAbsent.forEach(function (m) {",
🤖 Prompt for 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.

In `@tests/e2e/api/runners/build-model-catalog-wiring.mjs` around lines 79 - 98,
The listModelsAssertLines helper currently treats expectSubset and
expectSuperset identically (only presence checks); update listModelsAssertLines
so that after the presence checks it performs an exhaustiveness check when
expectSuperset.length > 0: compute the filtered provider names array (names) and
verify names.length === expectSuperset.length and that every element of names
exists in expectSuperset (or compare sorted JSON representations) to ensure no
extra models are present; keep the existing expectSubset presence checks but
ensure you reference expectSubset, expectSuperset, names, and expectEmpty in the
new logic.

Comment on lines +152 to +157
case "updateKey": {
const name = uniq("update key " + step.key.id);
items.push(item(nextId("update-key"), name,
request("PUT", url(["api", "providers", seg, "keys", keyId(sid, step.key.id)]), keyBody(step.key, sid, undefined, provider.keyEnv)),
events(null, mutationTest(name, [200], cleanupName))));
break;

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.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clarify key name handling on updates.

The updateKey step (line 155) passes undefined as the name parameter to keyBody(), which will include name: undefined in the resulting object. This is unclear:

  1. The comment on lines 48-50 says updates "resend the full intended state (value, models, enabled, aliases)" but doesn't mention name
  2. If name is immutable and should be omitted on updates, use conditional property addition in keyBody() instead of passing undefined
  3. If name should be included, it needs to be preserved from the original key

Verify the API contract for key updates:

#!/bin/bash
# Check how key updates are handled elsewhere in the codebase

echo "=== Checking key update patterns ==="
rg -n "PUT.*providers.*keys" --type ts --type js --type go -C3 -g '!node_modules'

echo -e "\n=== Checking key update payloads ==="
ast-grep --pattern $'request("PUT", url([$$$, "keys", $$$]), $BODY)'
♻️ Suggested clarification if name should be omitted
 function keyBody(k, sid, name, keyEnv) {
   const out = {
     id: keyId(sid, k.id),
-    name,
     value: `env.${keyEnv}`,
     models: [...k.models],
     enabled: k.enabled,
   };
+  if (name !== undefined) out.name = name;
   if (k.blacklisted.length) out.blacklisted_models = [...k.blacklisted];
🤖 Prompt for 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.

In `@tests/e2e/api/runners/build-model-catalog-wiring.mjs` around lines 152 - 157,
The updateKey case is passing undefined as the name to keyBody which results in
a name: undefined property; either preserve the original key name by passing
step.key.name into keyBody in the update branch (case "updateKey") or change
keyBody to omit the name property when its parameter is undefined (use
conditional property addition inside keyBody) so PUT payloads do not include
name: undefined; update the case that calls keyBody and/or the keyBody
implementation accordingly (symbols: the "updateKey" case, step.key, keyBody,
keyId).

Pratham-Mishra04 commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator Author

Merge activity

  • Jun 11, 7:18 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Jun 11, 7:21 AM UTC: Graphite rebased this pull request as part of a merge.
  • Jun 11, 7:22 AM UTC: @Pratham-Mishra04 merged this pull request with Graphite.

@Pratham-Mishra04
Pratham-Mishra04 changed the base branch from 06-10-tests_add_e2e_routing_wiring_test_harness to graphite-base/4250 June 11, 2026 07:18
@Pratham-Mishra04
Pratham-Mishra04 changed the base branch from graphite-base/4250 to dev June 11, 2026 07:19
@Pratham-Mishra04
Pratham-Mishra04 force-pushed the 06-10-tests_add_e2e_model-catalog_wiring_tests_for_openai_anthropic_and_gemini branch from bdee3c5 to a6736d3 Compare June 11, 2026 07:20
@Pratham-Mishra04
Pratham-Mishra04 merged commit 1338d2e into dev Jun 11, 2026
13 of 15 checks passed
@Pratham-Mishra04
Pratham-Mishra04 deleted the 06-10-tests_add_e2e_model-catalog_wiring_tests_for_openai_anthropic_and_gemini branch June 11, 2026 07:22
akshaydeo pushed a commit that referenced this pull request Jun 12, 2026
…gemini (#4250)

## Summary

Briefly explain the purpose of this PR and the problem it solves.

## Changes

- What was changed and why
- Any notable design decisions or trade-offs

## Type of change

- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (React)
- [ ] Docs

## How to test

Describe the steps to validate this change. Include commands and expected outcomes.

```sh
# Core/Transports
go version
go test ./...

# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

If adding new configs or environment variables, document them here.

## Screenshots/Recordings

If UI changes, add before/after screenshots or short clips.

## Breaking changes

- [ ] Yes
- [ ] No

If yes, describe impact and migration instructions.

## Related issues

Link related issues and discussions. Example: Closes #123

## Security considerations

Note any security implications (auth, secrets, PII, sandboxing, etc.).

## Checklist

- [ ] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [ ] I updated documentation where needed
- [ ] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable




<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

* **Tests**
  * Added a comprehensive end-to-end test suite for model catalog wiring across OpenAI, Anthropic, and Gemini: generates Postman collections for isolated provider scenarios, validates provider/key lifecycle, model allowlists/blacklists and alias resolution, and verifies catalog and inference endpoints.
  * Added a Bash test runner that executes the collection with robust env handling, CI-friendly behavior, and HTML reporting.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
akhsaul pushed a commit to akhsaul/bifrost that referenced this pull request Aug 27, 2026
…gemini (maximhq#4250)

## Summary

Briefly explain the purpose of this PR and the problem it solves.

## Changes

- What was changed and why
- Any notable design decisions or trade-offs

## Type of change

- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (React)
- [ ] Docs

## How to test

Describe the steps to validate this change. Include commands and expected outcomes.

```sh
# Core/Transports
go version
go test ./...

# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

If adding new configs or environment variables, document them here.

## Screenshots/Recordings

If UI changes, add before/after screenshots or short clips.

## Breaking changes

- [ ] Yes
- [ ] No

If yes, describe impact and migration instructions.

## Related issues

Link related issues and discussions. Example: Closes maximhq#123

## Security considerations

Note any security implications (auth, secrets, PII, sandboxing, etc.).

## Checklist

- [ ] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [ ] I updated documentation where needed
- [ ] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable




<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

* **Tests**
  * Added a comprehensive end-to-end test suite for model catalog wiring across OpenAI, Anthropic, and Gemini: generates Postman collections for isolated provider scenarios, validates provider/key lifecycle, model allowlists/blacklists and alias resolution, and verifies catalog and inference endpoints.
  * Added a Bash test runner that executes the collection with robust env handling, CI-friendly behavior, and HTML reporting.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
occcat pushed a commit to occcat/bifrost that referenced this pull request Sep 2, 2026
…gemini (maximhq#4250)

## Summary

Briefly explain the purpose of this PR and the problem it solves.

## Changes

- What was changed and why
- Any notable design decisions or trade-offs

## Type of change

- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (React)
- [ ] Docs

## How to test

Describe the steps to validate this change. Include commands and expected outcomes.

```sh
# Core/Transports
go version
go test ./...

# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

If adding new configs or environment variables, document them here.

## Screenshots/Recordings

If UI changes, add before/after screenshots or short clips.

## Breaking changes

- [ ] Yes
- [ ] No

If yes, describe impact and migration instructions.

## Related issues

Link related issues and discussions. Example: Closes maximhq#123

## Security considerations

Note any security implications (auth, secrets, PII, sandboxing, etc.).

## Checklist

- [ ] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [ ] I updated documentation where needed
- [ ] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable




<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

* **Tests**
  * Added a comprehensive end-to-end test suite for model catalog wiring across OpenAI, Anthropic, and Gemini: generates Postman collections for isolated provider scenarios, validates provider/key lifecycle, model allowlists/blacklists and alias resolution, and verifies catalog and inference endpoints.
  * Added a Bash test runner that executes the collection with robust env handling, CI-friendly behavior, and HTML reporting.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Files API Support

2 participants