Conversation
- Add Free Models page syncing provider data from awesome-free-llm-apis GitHub repo (daily cron at midnight + on startup) - Add provider logos for all 15 free providers (SVG icons with dark mode variants) - Add CUSTOM_PROVIDER_LOGOS map in ProviderIcon.tsx for icon resolution across Routing, Overview, and Messages pages - Add public endpoint GET /api/v1/public/free-providers (no auth required) - Connect button links to built-in provider modal for known providers (Gemini, Mistral, OpenRouter, Z AI, Ollama Cloud) - Ollama Cloud connect button disabled in cloud mode with tooltip - Rename "Z AI (Zhipu AI)" display name to "Z AI"
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #1608 +/- ##
==========================================
- Coverage 98.01% 97.99% -0.03%
==========================================
Files 119 120 +1
Lines 8967 8967
Branches 3372 3405 +33
==========================================
- Hits 8789 8787 -2
- Misses 176 178 +2
Partials 2 2
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
3 issues found across 36 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/frontend/tests/pages/Overview.test.tsx">
<violation number="1" location="packages/frontend/tests/pages/Overview.test.tsx:414">
P3: Scope this assertion to the Recent Messages section; otherwise it can pass because the same Groq logo also appears in Cost by Model.</violation>
</file>
<file name="packages/backend/src/free-models/free-models-provider-metadata.ts">
<violation number="1" location="packages/backend/src/free-models/free-models-provider-metadata.ts:56">
P2: Kilo Code references a logo file that is not present, so the Free Models page will render a broken image for this provider.</violation>
<violation number="2" location="packages/backend/src/free-models/free-models-provider-metadata.ts:61">
P3: LLM7.io is configured with an empty logo path, so it can never display a provider logo.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| warning: '', | ||
| }, | ||
| 'Kilo Code': { | ||
| logo: '/icons/kilocode.jpg', |
There was a problem hiding this comment.
P2: Kilo Code references a logo file that is not present, so the Free Models page will render a broken image for this provider.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/backend/src/free-models/free-models-provider-metadata.ts, line 56:
<comment>Kilo Code references a logo file that is not present, so the Free Models page will render a broken image for this provider.</comment>
<file context>
@@ -0,0 +1,96 @@
+ warning: '',
+ },
+ 'Kilo Code': {
+ logo: '/icons/kilocode.jpg',
+ tags: ['No credit card required'],
+ warning: 'Prompts and outputs are logged on free models to improve provider products.',
</file context>
| const img = container.querySelector('img[alt="Groq"]'); | ||
| expect(img).not.toBeNull(); |
There was a problem hiding this comment.
P3: Scope this assertion to the Recent Messages section; otherwise it can pass because the same Groq logo also appears in Cost by Model.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/frontend/tests/pages/Overview.test.tsx, line 414:
<comment>Scope this assertion to the Recent Messages section; otherwise it can pass because the same Groq logo also appears in Cost by Model.</comment>
<file context>
@@ -406,14 +406,13 @@ describe("Overview", () => {
- const letter = container.querySelector(".provider-card__logo-letter");
- expect(letter).not.toBeNull();
- expect(letter!.textContent).toBe("G");
+ const img = container.querySelector('img[alt="Groq"]');
+ expect(img).not.toBeNull();
});
</file context>
| const img = container.querySelector('img[alt="Groq"]'); | |
| expect(img).not.toBeNull(); | |
| const recentPanel = Array.from(container.querySelectorAll('.panel')).find((panel) => | |
| panel.textContent?.includes('Recent Messages'), | |
| ); | |
| const img = recentPanel?.querySelector('img[alt="Groq"]'); | |
| expect(img).not.toBeNull(); |
| warning: 'Prompts and outputs are logged on free models to improve provider products.', | ||
| }, | ||
| 'LLM7.io': { | ||
| logo: '', |
There was a problem hiding this comment.
P3: LLM7.io is configured with an empty logo path, so it can never display a provider logo.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/backend/src/free-models/free-models-provider-metadata.ts, line 61:
<comment>LLM7.io is configured with an empty logo path, so it can never display a provider logo.</comment>
<file context>
@@ -0,0 +1,96 @@
+ warning: 'Prompts and outputs are logged on free models to improve provider products.',
+ },
+ 'LLM7.io': {
+ logo: '',
+ tags: ['No credit card required'],
+ warning: '',
</file context>
- Add test for dark mode logo variants - Add test for disabled Ollama Cloud button in cloud mode - Add test for built-in provider connect links - Add test for show models toggle on providers without base_url
Bundle ReportChanges will increase total bundle size by 8.39kB (1.29%) ⬆️. This is within the configured threshold ✅ Detailed changes
Affected Assets, Files, and Routes:view changes for bundle: manifest-frontend-esmAssets Changed:
Files in
Files in
|
Resolves conflicts introduced by the free-models public endpoint added on main (#1608) against the MANIFEST_PUBLIC_STATS gating from this PR. - public-stats.controller.ts: keep the FreeModelsService dependency from main and extend the assertEnabled() gate to cover the new /api/v1/public/free-providers endpoint, so the 404-by-default behavior applies consistently to all four public endpoints. - public-stats.controller.spec.ts: merge the disabled-state suite with the getFreeProviders suite and add a 404 test for getFreeProviders under MANIFEST_PUBLIC_STATS=false. - docker/DOCKER_README.md: drop stale "NODE_ENV=development for auto-migrations" line — migrations now run unconditionally.
Summary
GET /api/v1/public/free-providers(no auth required)Test plan
curl /api/v1/public/free-providersreturns 15 providers without authcd packages/backend && npx jest --no-coveragecd packages/frontend && npx vitest run --no-coverageSummary by cubic
Adds a new Free Models page with provider logos and daily-synced data, plus a public API to fetch free provider info. Also unifies provider icon rendering across the app.
New Features
base_url.mnfst/awesome-free-llm-apison startup and at midnight; results cached for 1h.GET /api/v1/free-models(app) andGET /api/v1/public/free-providers(public, no auth).Refactors
ProviderIcon.tsxacross Routing, Overview, and Messages; custom providers now render proper logos; tests updated.Written for commit 80ba28f. Summary will update on new commits.