docs(readme): polish project presentation#269
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughREADME.md restructured: header/badges replaced with centered HTML logo and grouped badges, tagline reworded, dashboard image alt text expanded, Quick Start retitled for Docker, Supported LLM Providers table reworked, API endpoints split into multiple tables, and Gateway Configuration table formatting adjusted. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Greptile SummaryThis PR polishes the project presentation by redesigning the README header with a centered logo and badge layout, reorganizing the API endpoint table into four logical sections (OpenAI-Compatible, Passthrough, Admin, Operations), and tightening the wordmark SVG dimensions. All changes are documentation-only with no impact on runtime behavior. Confidence Score: 5/5Documentation-only PR; safe to merge. All changes are cosmetic — README reorganization and SVG dimension tweaks. The single finding is a P2 style concern about SVG stroke-boundary margin in the wordmark assets, which does not affect runtime or API behavior. docs/wordmark-dark.svg and docs/wordmark-light.svg — verify hexagon strokes are not hairline-clipped after the viewBox change. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
Client([Client]) --> OAI
Client --> PT
Client --> ADM
Client --> OPS
subgraph OAI["OpenAI-Compatible API"]
C1["POST /v1/chat/completions"]
C2["POST /v1/responses"]
C3["POST /v1/embeddings"]
C4["GET /v1/models"]
C5["/v1/files CRUD"]
C6["/v1/batches CRUD"]
end
subgraph PT["Provider Passthrough"]
P1["GET/POST/... /p/{provider}/..."]
end
subgraph ADM["Admin Endpoints"]
A1["GET /admin/dashboard"]
A2["/admin/api/v1/usage/*"]
A3["/admin/api/v1/audit/*"]
A4["/admin/api/v1/models"]
end
subgraph OPS["Operations"]
O1["GET /health"]
O2["GET /metrics"]
O3["GET /swagger/index.html"]
end
Reviews (1): Last reviewed commit: "docs(readme): polish project presentatio..." | Re-trigger Greptile |
| @@ -1,4 +1,4 @@ | |||
| <svg viewBox="0 0 148 30" fill="none" xmlns="http://www.w3.org/2000/svg" aria-labelledby="gomodel-wordmark-dark-title"> | |||
| <svg width="126" height="26" viewBox="2 2 126 26" fill="none" xmlns="http://www.w3.org/2000/svg" aria-labelledby="gomodel-wordmark-dark-title"> | |||
There was a problem hiding this comment.
Hexagon stroke sits exactly on the viewBox boundary
The hexagon's top vertex is at y=3 with stroke-width="2", placing the outer stroke edge at y=2 — exactly where the new viewBox starts. Likewise the bottom vertex at y=27 puts the outer edge at y=28, exactly the viewBox's bottom limit. Some SVG renderers clip strokes that land precisely on the viewport boundary, producing a hairline cut on the top and bottom of the hexagon.
Adding a 1 px safety margin to the viewBox prevents this:
| <svg width="126" height="26" viewBox="2 2 126 26" fill="none" xmlns="http://www.w3.org/2000/svg" aria-labelledby="gomodel-wordmark-dark-title"> | |
| <svg width="126" height="26" viewBox="1 1 128 28" fill="none" xmlns="http://www.w3.org/2000/svg" aria-labelledby="gomodel-wordmark-dark-title"> |
The same applies to docs/wordmark-light.svg.
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@README.md`:
- Around line 1-7: The README intentionally starts with centered branding, which
triggers markdownlint MD041; to suppress that specific warning, add a
.markdownlint.json file (or update it) to set the MD041 rule to false so the
linter ignores "first line not top-level heading" for this repo; reference the
MD041 rule name in the config and commit the .markdownlint.json alongside the
README to document the suppression.
- Around line 167-214: README was reorganized but CLAUDE.md still mentions API
endpoints that are unchanged; update CLAUDE.md for consistency by aligning its
endpoint list and descriptions with the new README entries (ensure references to
/p/{provider}/..., GET /v1/models, /metrics and any other endpoint strings match
the README wording and table structure), or optionally leave it as-is if you
intentionally want to keep CLAUDE.md untouched—make sure any retained
differences are documented with a short note in CLAUDE.md explaining why it
diverges.
- Around line 194-206: Update the Admin Endpoints table to include the missing
documented routes: add rows for `/admin/api/v1/dashboard/config` (GET —
Dashboard configuration), `/admin/api/v1/cache/overview` (GET — Cache statistics
overview), `/admin/api/v1/usage/user-paths` (GET — Usage breakdown by user
path), `/admin/api/v1/providers/status` (GET — Provider availability status),
`/admin/api/v1/runtime/refresh` (POST — Refresh runtime configuration),
`/admin/api/v1/model-overrides` (GET — List model overrides),
`/admin/api/v1/model-overrides/:selector` (PUT — Create/update model override)
and `/admin/api/v1/model-overrides/:selector` (DELETE — Remove model override),
and `/admin/api/v1/auth-keys` (GET — List authentication keys); follow the same
table formatting and style as the existing entries (method column and concise
description) and place them in a logical position within the Admin Endpoints
section.
🪄 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: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 3f1d7498-0ed9-440f-8727-db8bede66f2f
⛔ Files ignored due to path filters (2)
docs/wordmark-dark.svgis excluded by!**/*.svgdocs/wordmark-light.svgis excluded by!**/*.svg
📒 Files selected for processing (1)
README.md
| <p align="center"> | ||
| <img alt="GoModel logo" src="docs/logo.svg" width="96"> | ||
| </p> | ||
|
|
||
| [](https://github.com/ENTERPILOT/GoModel/actions/workflows/test.yml) | ||
| [](https://gomodel.enterpilot.io/docs) | ||
| [](https://discord.gg/gaEB9BQSPH) | ||
| [](https://hub.docker.com/r/enterpilot/gomodel) | ||
| [](https://github.com/ENTERPILOT/GoModel/blob/main/go.mod) | ||
| [](https://news.ycombinator.com/item?id=47849097) | ||
| <h1 align="center"> | ||
| GoModel - AI Gateway in Go | ||
| </h1> |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Optional: Suppress markdownlint MD041 warning.
The markdownlint warning about the first line not being a top-level heading is expected, as the README intentionally starts with centered branding (logo, title, badges). This is a common pattern for project READMEs.
If desired, you can suppress this specific rule by adding to .markdownlint.json:
{
"MD041": false
}🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` around lines 1 - 7, The README intentionally starts with centered
branding, which triggers markdownlint MD041; to suppress that specific warning,
add a .markdownlint.json file (or update it) to set the MD041 rule to false so
the linter ignores "first line not top-level heading" for this repo; reference
the MD041 rule name in the config and commit the .markdownlint.json alongside
the README to document the suppression.
| ## API Endpoints | ||
|
|
||
| ### OpenAI-Compatible API | ||
|
|
||
| | Endpoint | Method | Description | | ||
| | --------------------------- | ------ | ------------------------------------------------------------------------------------------------------------ | | ||
| | `/v1/chat/completions` | POST | Chat completions (streaming supported) | | ||
| | `/v1/responses` | POST | OpenAI Responses API | | ||
| | `/v1/embeddings` | POST | Text embeddings | | ||
| | `/v1/models` | GET | List available models | | ||
| | `/v1/files` | POST | Upload a file (OpenAI-compatible multipart) | | ||
| | `/v1/files` | GET | List files | | ||
| | `/v1/files/{id}` | GET | Retrieve file metadata | | ||
| | `/v1/files/{id}` | DELETE | Delete a file | | ||
| | `/v1/files/{id}/content` | GET | Retrieve raw file content | | ||
| | `/v1/batches` | POST | Create a native provider batch (OpenAI-compatible schema; inline `requests` supported where provider-native) | | ||
| | `/v1/batches` | GET | List stored batches | | ||
| | `/v1/batches/{id}` | GET | Retrieve one stored batch | | ||
| | `/v1/batches/{id}/cancel` | POST | Cancel a pending batch | | ||
| | `/v1/batches/{id}/results` | GET | Retrieve native batch results when available | | ||
|
|
||
| ### Provider Passthrough | ||
|
|
||
| | Endpoint | Method | Description | | ||
| | ------------------- | -------------------------------------------- | -------------------------------------------------- | | ||
| | `/p/{provider}/...` | GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS | Provider-native passthrough with opaque upstream responses | | ||
|
|
||
| ### Admin Endpoints | ||
|
|
||
| | Endpoint | Method | Description | | ||
| | ---------------------------------- | ------ | ------------------------------------------ | | ||
| | `/admin/dashboard` | GET | Admin dashboard UI | | ||
| | `/admin/api/v1/usage/summary` | GET | Aggregate token usage statistics | | ||
| | `/admin/api/v1/usage/daily` | GET | Per-period token usage breakdown | | ||
| | `/admin/api/v1/usage/models` | GET | Usage breakdown by model | | ||
| | `/admin/api/v1/usage/log` | GET | Paginated usage log entries | | ||
| | `/admin/api/v1/audit/log` | GET | Paginated audit log entries | | ||
| | `/admin/api/v1/audit/conversation` | GET | Conversation thread around one audit entry | | ||
| | `/admin/api/v1/models` | GET | List models with provider type | | ||
| | `/admin/api/v1/models/categories` | GET | List model categories | | ||
|
|
||
| ### Operations Endpoints | ||
|
|
||
| | Endpoint | Method | Description | | ||
| | --------------------- | ------ | --------------------------------- | | ||
| | `/health` | GET | Health check | | ||
| | `/metrics` | GET | Prometheus metrics (when enabled) | | ||
| | `/swagger/index.html` | GET | Swagger UI (when enabled) | |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check if CLAUDE.md references API endpoints that might need updating
echo "=== Checking for API endpoint references in CLAUDE.md ==="
if [ -f "CLAUDE.md" ]; then
rg -n -C3 '/v1/|/admin/|/health|/metrics|API.*(endpoint|route)' CLAUDE.md
else
echo "CLAUDE.md not found in repository"
fiRepository: ENTERPILOT/GoModel
Length of output: 4120
CLAUDE.md update is optional for consistency.
CLAUDE.md contains references to several API endpoints (/p/{provider}/..., GET /v1/models, /metrics) that remain unchanged by this documentation reorganization. While updating CLAUDE.md to align with the new README structure would be nice for consistency, it is not required since the actual API contract and endpoint functionality have not changed.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` around lines 167 - 214, README was reorganized but CLAUDE.md still
mentions API endpoints that are unchanged; update CLAUDE.md for consistency by
aligning its endpoint list and descriptions with the new README entries (ensure
references to /p/{provider}/..., GET /v1/models, /metrics and any other endpoint
strings match the README wording and table structure), or optionally leave it
as-is if you intentionally want to keep CLAUDE.md untouched—make sure any
retained differences are documented with a short note in CLAUDE.md explaining
why it diverges.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@README.md`:
- Line 18: The README contains a hard-coded badge label in the <a
href="https://news.ycombinator.com/item?id=47849097">...</a> anchor using an
<img alt="Hacker News"
src="https://img.shields.io/badge/Hacker%20News-Apr%2021%20%2726%20%7C%20%234-brightgreen?logo=ycombinator&logoColor=white">
which embeds a fixed date and rank; replace that static label with a
neutral/static label (e.g., use an shields.io badge that only says "Hacker News"
or remove the date/rank text) or switch to a dynamic badge URL that does not
hard-code Apr 21 '26 | `#4` so the badge won't become stale (update the <img
src=...> value accordingly).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| A high-performance AI gateway written in Go, providing a unified OpenAI-compatible API for OpenAI, Anthropic, Gemini, xAI, Groq, OpenRouter, Z.ai, Azure OpenAI, Oracle, Ollama, and more. | ||
| <p align="center"> | ||
| <a href="https://gomodel.enterpilot.io/docs"><img alt="docs GoModel" src="https://img.shields.io/badge/Docs-GoModel-blue"></a> | ||
| <a href="https://news.ycombinator.com/item?id=47849097"><img alt="Hacker News" src="https://img.shields.io/badge/Hacker%20News-Apr%2021%20%2726%20%7C%20%234-brightgreen?logo=ycombinator&logoColor=white"></a> |
There was a problem hiding this comment.
Avoid hard-coded Hacker News rank/date in badge text.
Apr 21 '26 | #4`` will go stale and can mislead readers. Use a neutral static label (e.g., Hacker News) or a fully dynamic badge only.
Suggested README tweak
- <a href="https://news.ycombinator.com/item?id=47849097"><img alt="Hacker News" src="https://img.shields.io/badge/Hacker%20News-Apr%2021%20%2726%20%7C%20%234-brightgreen?logo=ycombinator&logoColor=white"></a>
+ <a href="https://news.ycombinator.com/item?id=47849097"><img alt="Hacker News" src="https://img.shields.io/badge/Hacker%20News-Discussion-brightgreen?logo=ycombinator&logoColor=white"></a>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <a href="https://news.ycombinator.com/item?id=47849097"><img alt="Hacker News" src="https://img.shields.io/badge/Hacker%20News-Apr%2021%20%2726%20%7C%20%234-brightgreen?logo=ycombinator&logoColor=white"></a> | |
| <a href="https://news.ycombinator.com/item?id=47849097"><img alt="Hacker News" src="https://img.shields.io/badge/Hacker%20News-Discussion-brightgreen?logo=ycombinator&logoColor=white"></a> |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` at line 18, The README contains a hard-coded badge label in the <a
href="https://news.ycombinator.com/item?id=47849097">...</a> anchor using an
<img alt="Hacker News"
src="https://img.shields.io/badge/Hacker%20News-Apr%2021%20%2726%20%7C%20%234-brightgreen?logo=ycombinator&logoColor=white">
which embeds a fixed date and rank; replace that static label with a
neutral/static label (e.g., use an shields.io badge that only says "Hacker News"
or remove the date/rank text) or switch to a dynamic badge URL that does not
hard-code Apr 21 '26 | `#4` so the badge won't become stale (update the <img
src=...> value accordingly).
There was a problem hiding this comment.
♻️ Duplicate comments (1)
README.md (1)
18-18:⚠️ Potential issue | 🟡 MinorReplace the hard-coded Hacker News date/rank badge label.
At Line 18, the badge text (
Apr 21 '26 |#4``) will go stale and can mislead readers; use a neutral label (e.g.,Hacker News) or rely solely on the dynamic badge already shown at Line 22.Suggested README tweak
- <a href="https://news.ycombinator.com/item?id=47849097"><img alt="Hacker News" src="https://img.shields.io/badge/Hacker%20News-Apr%2021%20%2726%20%7C%20%234-brightgreen?logo=ycombinator&logoColor=white"></a> + <a href="https://news.ycombinator.com/item?id=47849097"><img alt="Hacker News" src="https://img.shields.io/badge/Hacker%20News-Discussion-brightgreen?logo=ycombinator&logoColor=white"></a>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@README.md` at line 18, Replace the hard-coded date/rank badge label in the README's Hacker News badge by removing the static text ("Apr 21 '26 | `#4`") from the <img> tag and replacing it with a neutral label like "Hacker News": update the alt attribute value and adjust the shields.io src query so the label text is "Hacker News" (or swap to the dynamic badge used elsewhere) on the <a href="https://news.ycombinator.com/item?id=47849097"><img ...></a> element to prevent stale information.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@README.md`:
- Line 18: Replace the hard-coded date/rank badge label in the README's Hacker
News badge by removing the static text ("Apr 21 '26 | `#4`") from the <img> tag
and replacing it with a neutral label like "Hacker News": update the alt
attribute value and adjust the shields.io src query so the label text is "Hacker
News" (or swap to the dynamic badge used elsewhere) on the <a
href="https://news.ycombinator.com/item?id=47849097"><img ...></a> element to
prevent stale information.
Summary
Checks
Summary by CodeRabbit