Skip to content

feat: docs#48

Merged
thushan merged 8 commits intomainfrom
feature/mkdocs
Aug 11, 2025
Merged

feat: docs#48
thushan merged 8 commits intomainfrom
feature/mkdocs

Conversation

@thushan
Copy link
Copy Markdown
Owner

@thushan thushan commented Aug 11, 2025

Documentation with mkdocs in preparation for v0.0.15+.

Summary by CodeRabbit

  • Documentation
    • Introduced a comprehensive docs site with landing page, Quick Start, installation, configuration guides, best practices, and FAQs.
    • Added full API references for Unified Models, Ollama, LM Studio, vLLM, OpenAI-compatible, and system endpoints.
    • Added concepts (health checking, load balancing, model unification, proxy engines/profiles) and integrations (backends, OpenWebUI).
    • Added developer guides (architecture, setup, testing, benchmarking, contributing).
    • Removed outdated/duplicated docs.
  • Chores
    • Set up automated documentation build and deployment to GitHub Pages.
  • Style
    • Applied custom branding and Night Owl code highlighting to the docs site.

thushan added 4 commits August 4, 2025 18:39
# Conflicts:
#	docs/adding-providers.md
#	docs/api/README.md
#	docs/api/provider-routing.md
#	docs/api/query-formats.md
#	docs/architecture/hexagonal-architecture.md
#	docs/overview.md
#	docs/technical.md
#	docs/technical/health-checking-circuit-breakers.md
#	docs/technical/load-balancing.md
#	docs/technical/proxy-engines.md
#	docs/technical/service-discovery.md
#	docs/technical/statistics-monitoring.md
#	docs/user-guide.md
#	docs/user/best-practices.md
#	docs/user/configuration.md
#	docs/user/endpoints.md
#	docs/user/getting-started.md
#	docs/user/load-balancers.md
#	docs/user/models.md
#	docs/user/proxies.md
#	docs/user/troubleshooting.md
API updates
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Aug 11, 2025

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

📥 Commits

Reviewing files that changed from the base of the PR and between cac160a and 1087472.

📒 Files selected for processing (4)
  • .github/workflows/docs.yml (1 hunks)
  • docs/content/stylesheets/extra.css (1 hunks)
  • docs/content/stylesheets/nightowl.css (1 hunks)
  • docs/mkdocs.yml (1 hunks)
 ________________________________________________________
< Why so serious? Let's put a smile on that code's face. >
 --------------------------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).

Walkthrough

Adds a complete MkDocs-based documentation site with theme, content, and CI/CD to build and deploy to GitHub Pages. Introduces extensive new docs under docs/content/*, brand stylesheets, MkDocs config and requirements, and replaces several legacy docs by deleting them.

Changes

Cohort / File(s) Summary
Docs CI/CD
.github/workflows/docs.yml
New GitHub Actions workflow “Deploy Documentation” to build MkDocs on push/PR and deploy to GitHub Pages on main.
MkDocs setup
docs/mkdocs.yml, docs/requirements.txt, docs/.gitignore
Adds MkDocs Material config, build dependencies, and ignores for venvs/site/caches/IDEs.
Docs styling
docs/content/stylesheets/extra.css, docs/content/stylesheets/nightowl.css
Introduces brand theme variables and Night Owl code highlighting for light/dark modes.
Getting Started
docs/content/getting-started/installation.md, docs/content/getting-started/quickstart.md
New installation and quickstart guides with commands and verification steps.
API Reference
docs/content/api-reference/overview.md, docs/content/api-reference/system.md, docs/content/api-reference/models.md, docs/content/api-reference/ollama.md, docs/content/api-reference/lmstudio.md, docs/content/api-reference/openai.md, docs/content/api-reference/vllm.md
Adds structured API reference for system, unified models, and provider-specific endpoints with examples and streaming notes.
Concepts
docs/content/concepts/overview.md, docs/content/concepts/health-checking.md, docs/content/concepts/load-balancing.md, docs/content/concepts/model-unification.md, docs/content/concepts/proxy-engines.md, docs/content/concepts/proxy-profiles.md, docs/content/concepts/profile-system.md
Adds architectural and behaviour explanations: health checks, load balancing, unification, engines, profiles.
Configuration
docs/content/configuration/overview.md, docs/content/configuration/reference.md, docs/content/configuration/examples.md, docs/content/configuration/practices/overview.md, docs/content/configuration/practices/monitoring.md, docs/content/configuration/practices/performance.md, docs/content/configuration/practices/security.md
Introduces full configuration reference, examples, and best practices (monitoring, performance, security).
Integrations
docs/content/integrations/overview.md, docs/content/integrations/backend/ollama.md, docs/content/integrations/backend/lmstudio.md, docs/content/integrations/backend/vllm.md, docs/content/integrations/frontend/openwebui.md
Backend/frontend integration guides with config and usage examples.
Development
docs/content/development/overview.md, docs/content/development/architecture.md, docs/content/development/setup.md, docs/content/development/testing.md, docs/content/development/benchmarking.md, docs/content/development/circuit-breaker.md, docs/content/development/patterns.md, docs/content/faq.md, docs/content/index.md
Developer guides on setup, architecture, testing, benchmarking, circuit breaker, patterns; adds FAQ and landing page.
Legacy docs removed
docs/adding-providers.md, docs/api/README.md, docs/api/provider-routing.md, docs/api/query-formats.md, docs/architecture/hexagonal-architecture.md, docs/headers.md, docs/overview.md, docs/technical.md, docs/technical/*
Removes older overview, API, technical, and routing docs superseded by new content structure.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev as Developer
  participant GH as GitHub
  participant GA as Actions Runner
  participant Mk as MkDocs Build
  participant Pg as GitHub Pages

  Dev->>GH: Push/PR (docs/** or mkdocs.yml)
  GH-->>GA: Trigger "Deploy Documentation"
  GA->>GA: Checkout repo (fetch-depth: 0)
  GA->>GA: Setup Python + cache deps
  GA->>Mk: Install reqs + build (mkdocs build)
  Mk-->>GA: site/ artifact
  GA->>Pg: Upload pages artifact
  alt main branch push
    GA->>Pg: Deploy (actions/deploy-pages)
    Pg-->>Dev: Pages URL
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • fix: documentation update #38 — Updates discovery configuration (static endpoints, type renaming, health/model URLs, intervals), aligning with the new docs that reference these fields and structures.
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/mkdocs

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@thushan thushan added the documentation Improvements or additions to documentation label Aug 11, 2025
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 22

🧹 Nitpick comments (69)
docs/.gitignore (1)

17-19: Optional ignores for local developer artefacts

Consider ignoring common local files to reduce accidental commits.

 # OS files
 .DS_Store
 Thumbs.db
+.python-version
+.env
+.env.*
docs/content/development/setup.md (1)

343-348: Prefer graceful termination before SIGKILL

Suggest using kill -TERM <PID> and only falling back to kill -9 if needed, to allow clean-up hooks (useful during dev when files or ports need graceful release).

-# Kill process
-kill -9 <PID>
+# Terminate gracefully
+kill -TERM <PID>
+# If the process doesn’t exit within a few seconds, force kill:
+kill -9 <PID>
docs/content/api-reference/ollama.md (2)

76-83: Add a language to fenced code block and clarify content type

This streaming example is line-delimited JSON (NDJSON). Specify a fence language and note the response Content-Type to help readers consume it correctly.

-```
+```json
 {"model":"llama3.2:latest","created_at":"2024-01-15T10:30:00Z","response":"The","done":false}
 {"model":"llama3.2:latest","created_at":"2024-01-15T10:30:00Z","response":" sky","done":false}
 {"model":"llama3.2:latest","created_at":"2024-01-15T10:30:00Z","response":" appears","done":false}
 ...
 {"model":"llama3.2:latest","created_at":"2024-01-15T10:30:01Z","response":"","done":true,"total_duration":5250000000}

+Note: Streaming responses are delivered as newline-delimited JSON (Content-Type: application/x-ndjson).


---

`191-200`: **Add a language to fenced code block (markdownlint MD040)**

The SSE-style stream should declare a language for readability and linting.

```diff
-```
+```text
 data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1705334400,"model":"llama3.2:latest","choices":[{"index":0,"delta":{"role":"assistant","content":"2"},"finish_reason":null}]}
 
 data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1705334400,"model":"llama3.2:latest","choices":[{"index":0,"delta":{"content":" +"},"finish_reason":null}]}
 
 data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1705334400,"model":"llama3.2:latest","choices":[{"index":0,"delta":{"content":" 2"},"finish_reason":null}]}
 
 data: [DONE]

+Note: Streaming responses use Server-Sent Events (Content-Type: text/event-stream).


</blockquote></details>
<details>
<summary>docs/content/api-reference/openai.md (2)</summary><blockquote>

`121-131`: **Add a language to fenced code block (markdownlint MD040)**

Declare a language for the SSE stream example.

```diff
-```
+```text
 data: {"id":"chatcmpl-8q9ABC123","object":"chat.completion.chunk","created":1705334400,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_abc123","choices":[{"index":0,"delta":{"role":"assistant","content":"Quantum"},"logprobs":null,"finish_reason":null}]}
 
 data: {"id":"chatcmpl-8q9ABC123","object":"chat.completion.chunk","created":1705334400,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_abc123","choices":[{"index":0,"delta":{"content":" computing"},"logprobs":null,"finish_reason":null}]}
 
 ...
 
 data: {"id":"chatcmpl-8q9ABC123","object":"chat.completion.chunk","created":1705334400,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_abc123","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}]}
 
 data: [DONE]

329-334: Consistent Australian English: behaviour

Per repository guidelines, prefer Australian English in docs.

-| `function_call` | string/object | Function calling behavior |
+| `function_call` | string/object | Function calling behaviour |
@@
-| `tool_choice` | string/object | Tool selection behavior |
+| `tool_choice` | string/object | Tool selection behaviour |
docs/content/configuration/practices/performance.md (1)

2-5: Align wording with Australian English across front matter

Per guidelines, use Australian English consistently.

-title: "Olla Performance Best Practices - Optimization & Tuning Guide"
-description: "Complete performance optimization guide for Olla. Engine selection, connection pooling, memory tuning, streaming configuration and production optimizations."
-keywords: ["olla performance", "performance optimization", "performance tuning", "connection pooling", "memory optimization", "streaming performance"]
+title: "Olla Performance Best Practices - Optimisation & Tuning Guide"
+description: "Complete performance optimisation guide for Olla. Engine selection, connection pooling, memory tuning, streaming configuration and production optimisations."
+keywords: ["olla performance", "performance optimisation", "performance tuning", "connection pooling", "memory optimisation", "streaming performance"]
docs/content/development/contributing.md (1)

66-72: Add language to fenced code block (markdownlint MD040).

Specify a language for this fence to satisfy linting and improve rendering.

-```
+```text
 type(scope): description

 [optional body]

 [optional footer]

</blockquote></details>
<details>
<summary>docs/content/development/patterns.md (1)</summary><blockquote>

`165-173`: **Clarify backpressure behaviour in Submit.**

Default case silently drops/blocks undefined. Either block, drop with metrics, or expose a non-blocking SubmitTry API.


Example:

- Block: remove default to naturally block on full channel.
- Drop with metric/log: increment a counter and return.
- Provide `TrySubmit` returning bool.

</blockquote></details>
<details>
<summary>docs/content/development/benchmarking.md (1)</summary><blockquote>

`316-342`: **Consider using a stable Go version or matrix in CI sample.**

Hard-coding an unreleased version can confuse readers. Suggest ‘stable’ or a tested matrix.


```diff
-      - uses: actions/setup-go@v4
-        with:
-          go-version: '1.24'
+      - uses: actions/setup-go@v4
+        with:
+          go-version: 'stable'
docs/content/faq.md (3)

58-66: Heading punctuation: add a comma for readability.

Improves clarity and matches guidance.

-### What is stream_buffer_size and how should I tune it?
+### What is stream_buffer_size, and how should I tune it?

314-318: Hyphenate compound modifier (“auto-proxy profile”).

Australian English style; improves precision.

-### Should I use auto proxy profile?
+### Should I use the auto-proxy profile?

322-325: Use en dashes for numeric ranges.

Typographic polish for ranges.

-- **Production**: 30-60 seconds
-- **Development**: 10-30 seconds
-- **Critical systems**: 5-10 seconds
+- **Production**: 30–60 seconds
+- **Development**: 10–30 seconds
+- **Critical systems**: 5–10 seconds
docs/content/development/testing.md (1)

20-30: Add language to fenced code block (markdownlint MD040).

Label the tree listing for consistency and lint compliance.

-```
+```text
 .
 ├── internal/
 │   └── */                  # Unit tests alongside code
 │       └── *_test.go
 ├── test/
 │   ├── integration/        # Integration tests
 │   ├── scripts/           # Test scripts
 │   └── fixtures/          # Test data
 └── benchmarks/            # Performance benchmarks

</blockquote></details>
<details>
<summary>docs/content/configuration/reference.md (1)</summary><blockquote>

`353-359`: **Minor style: introduce log levels with a sentence.**

Prevents a “loose punctuation” feel and reads better.


```diff
-Log levels:
+The following log levels are supported:
 
 - `debug`: Detailed debugging information
 - `info`: Normal operational messages
 - `warn`: Warning conditions
 - `error`: Error conditions only
docs/content/getting-started/installation.md (6)

95-96: Fix broken/incorrect “Architecture Overview” link

The target likely lives under Concepts, not Development. Please verify the path and update to keep the IA consistent.

Proposed change:

- [Architecture Overview](../development/architecture.md) - Learn how Olla works
+ [Architecture Overview](../concepts/overview.md) - Learn how Olla works

113-113: Validate Troubleshooting link

The link to contributing/troubleshooting may be incorrect or outdated. Please confirm that the document exists at this path; otherwise update to the correct target.

- For more help, check the [troubleshooting guide](../development/contributing.md#troubleshooting) or [open an issue](https://github.com/thushan/olla/issues).
+ For more help, check the [troubleshooting guide](../contributing/troubleshooting.md) or [open an issue](https://github.com/thushan/olla/issues).

39-41: Capitalise proper nouns in Docker section

Use consistent capitalisation for product names.

- # for locally installed lmstudio, ollama or vllm
+ # for locally installed LM Studio, Ollama, or vLLM

104-106: Minor wording: executable permission

“Execute permissions” reads a bit off. “Executable permission(s)” is clearer.

- : On Linux/macOS, ensure the binary has execute permissions: `chmod +x olla`
+ : On Linux/macOS, ensure the binary has executable permission: `chmod +x olla`

80-89: markdownlint MD046: code block style

The linter expects indented code blocks here, but the doc consistently uses fenced blocks elsewhere. Prefer consistency: either switch this block to indented style or relax MD046 in your markdownlint config to allow fenced blocks.

If keeping fenced blocks (recommended), update markdownlint config:

  • Disable MD046 or set style to “fenced”.

20-31: Windows install path is missing

Requirements list mentions Windows, but the primary install script and examples target Linux/macOS. Consider adding a Windows subsection (PowerShell) so users don’t guess.

Example:

# Windows PowerShell
iwr -useb https://raw.githubusercontent.com/thushan/olla/main/install.ps1 | iex
docs/content/api-reference/lmstudio.md (1)

125-137: Add language to fenced block (markdownlint MD040)

Specify a language for the streaming SSE snippet to satisfy the linter and improve rendering.

-```
+```text
 data: {"id":"chatcmpl-lmstudio-abc123","object":"chat.completion.chunk","created":1705334400,"model":"phi-3-mini","choices":[{"index":0,"delta":{"role":"assistant","content":"Here's"},"finish_reason":null}]}
 ...
 data: [DONE]

</blockquote></details>
<details>
<summary>docs/content/integrations/frontend/openwebui.md (3)</summary><blockquote>

`11-11`: **Typo: GitHub capitalization**

```diff
-You can find an example integration ... see [latest in Github](
+You can find an example integration ... see [latest in GitHub](

355-357: Ping may be unavailable in containers

open-webui images often don’t include ping. A curl to Olla’s health endpoint is more reliable.

-   docker exec openwebui ping olla
+   docker exec openwebui curl -sf http://olla:40114/internal/health

60-76: Add language to diagram code fence

For consistency and to satisfy linters, mark the ASCII diagram as text.

-```
+```text
 # diagram …

</blockquote></details>
<details>
<summary>docs/content/development/circuit-breaker.md (2)</summary><blockquote>

`42-59`: **Replace bolded labels with proper headings (markdownlint MD036)**

Use headings for the three states to improve structure and navigation.

```diff
-**Closed (Normal Operation)**
+#### Closed (Normal operation)

-**Open (Circuit Tripped)**
+#### Open (Circuit tripped)

-**Half-Open (Testing Recovery)**
+#### Half-open (testing recovery)

131-133: Minor grammar

Add a comma for readability.

-The `/internal/status` endpoint shows endpoint health which reflects circuit breaker state:
+The `/internal/status` endpoint shows endpoint health, which reflects circuit breaker state:
docs/content/api-reference/vllm.md (3)

153-163: Add language to streaming SSE block (markdownlint MD040)

-```
+```text
 data: {"id":"chatcmpl-vllm-abc123","object":"chat.completion.chunk", ...}
 ...
 data: [DONE]

---

`266-286`: **Add language to Prometheus metrics block (markdownlint MD040)**

```diff
-```
+```text
 # HELP vllm_request_duration_seconds Request duration in seconds
 # TYPE vllm_request_duration_seconds histogram
 ...

---

`329-337`: **Australian English spelling**

Prefer “optimisations” over “optimizations”.

```diff
-vLLM provides several performance optimizations:
+vLLM provides several performance optimisations:
docs/content/concepts/health-checking.md (4)

39-46: Add language to diagram code fence (markdownlint MD040)

-```
+```text
 ┌─────────────┐     ┌──────────────┐     ┌─────────────┐
 ...

---

`178-186`: **Add language to circuit diagram code fence (markdownlint MD040)**

```diff
-```
+```text
      Closed (Normal)
 ...

---

`107-111`: **Use en dashes for numeric ranges (en‑AU style)**

```diff
-**Local endpoints**: 2-5 seconds
-**LAN endpoints**: 5-10 seconds  
-**Remote/Cloud**: 15-30 seconds
-**Critical endpoints**: 2-3 seconds
+**Local endpoints**: 2–5 seconds
+**LAN endpoints**: 5–10 seconds
+**Remote/Cloud**: 15–30 seconds
+**Critical endpoints**: 2–3 seconds

172-200: Align circuit-breaker values across docs

This page states “3 test requests” and “2 successes to close.” The dedicated circuit-breaker page currently mixes 1 vs 3 requests. Please standardise the thresholds across both pages (and ideally derive from a single source of truth or include snippet) to avoid operator confusion.

docs/content/stylesheets/extra.css (1)

29-31: Accessibility: ensure sufficient contrast

White text on the accent-coloured header and controls may fail WCAG contrast in some displays. Consider verifying contrast ratios and, if needed, darken the accent for header areas or reduce white usage in buttons/links.

Also applies to: 95-105

docs/content/integrations/overview.md (1)

9-9: Minor grammar

“front‑ends integrations” reads awkwardly. Suggest:

-Olla supports various backends (endpoints) and front-ends integrations powered by Olla [Profiles](../concepts/profile-system.md).
+Olla supports various backends (endpoints) and front‑end integrations powered by Olla [Profiles](../concepts/profile-system.md).
docs/mkdocs.yml (2)

161-161: Add newline at end of file.

Some tools (and yamllint) expect a trailing newline.

No content change needed; just ensure the file ends with a newline.


11-60: Consider enabling strict mode to catch broken links during CI.

MkDocs strict mode fails the build on bad links/refs; useful for larger docs sets being published.

Apply this at top-level (e.g., after docs_dir):

 docs_dir: content
+strict: true
docs/content/development/overview.md (4)

13-13: Comma before “but” in compound sentence.

Prefer: “…on Linux and macOS, you can develop on Windows, but you may hit…”.

-Primary development has been done on Linux and macOS, you can develop on Windows but you may hit UAC prompts for port usage and occasional pauses at startup.
+Primary development has been done on Linux and macOS; you can develop on Windows, but you may hit UAC prompts for port usage and occasional pauses at startup.

35-41: Add a language to fenced code block (markdownlint MD040).

Use “text” for ASCII trees to satisfy linters.

-```
+```text
 internal/
 ├── core/           # Domain layer - business logic, zero external dependencies
 ├── adapter/        # Infrastructure - implementations of core interfaces
 └── app/            # Application layer - HTTP handlers, orchestration

---

`91-103`: **Add language to fenced code block (markdownlint MD040).**

Use “text” for directory layouts.

```diff
-```
+```text
 .
 ├── cmd/            # Application entry points
 ├── internal/       # Private application code
 │   ├── core/      # Business logic
 │   ├── adapter/   # External integrations
 │   └── app/       # Application layer
 ├── pkg/           # Public packages
 ├── config/        # Configuration files
 ├── test/          # Integration tests
 └── docs/          # Documentation

---

`121-124`: **Use determiners with superlatives.**

Prefer “the highest priority endpoint” and “the least busy endpoint”.

```diff
-- **Priority**: Routes to highest priority endpoint
+- **Priority**: Routes to the highest priority endpoint
-- **Least-Connections**: Routes to least busy endpoint
+- **Least-Connections**: Routes to the least busy endpoint

Also applies to: 123-124

docs/content/configuration/overview.md (3)

25-26: Minor punctuation for readability.

Add a comma after “behaviour” clause.

-Olla uses a YAML configuration file to control all aspects of its behaviour. This page provides an overview of the configuration structure with links to detailed documentation for each section.
+Olla uses a YAML configuration file to control all aspects of its behaviour. This page provides an overview of the configuration structure, with links to detailed documentation for each section.

166-173: Use determiners with superlatives.

Use “the highest priority endpoint” and “the least busy endpoint”.

-| **priority** | Routes to highest priority endpoint | Preferring local/cheaper endpoints |
+| **priority** | Routes to the highest priority endpoint | Preferring local/cheaper endpoints |
-| **least-connections** | Routes to least busy endpoint | Optimising response times |
+| **least-connections** | Routes to the least busy endpoint | Optimising response times |

Also applies to: 170-172


103-109: Compound adjectives hyphenation (optional).

“Health-aware routing” and “client-IP detection” can be hyphenated when used adjectivally. Current wording is still clear; consider only if you prefer stricter style.

No code changes required.

docs/content/concepts/overview.md (1)

24-27: Use determiners with superlatives.

Prefer “the least busy endpoints”.

-- **Least-connections**: Routes to least busy endpoints
+- **Least-connections**: Routes to the least busy endpoints
docs/content/getting-started/quickstart.md (1)

69-76: Minor grammar tweak.

Add “the” for smoother phrasing.

-List available models through the proxy:
+List available models through the proxy:

Note: The wording is already acceptable; keep if you prefer the current phrasing.

docs/content/integrations/backend/vllm.md (4)

3-5: Use Australian English consistently in prose.

Adopt “optimisation” (not “optimization”) in descriptions. Keep CLI flags as-is.

-description: Configure vLLM with Olla proxy for production-grade LLM serving. PagedAttention, continuous batching, tensor parallelism, and GPU optimization.
+description: Configure vLLM with Olla proxy for production-grade LLM serving. PagedAttention, continuous batching, tensor parallelism, and GPU optimisation.

280-286: Standardise “-isation” spellings in prose.

Use en‑AU variants in explanatory text: “tokenisation/quantisation/optimisation”. Keep endpoint paths and CLI flags (tokenize/detokenize/--quantization) unchanged.

Examples:

  • “Quantisation Support” (already correct)
  • “Tokenisation API” (already correct)
  • Ensure surrounding sentences use “quantisation” even when a flag shows “--quantization”.

Also applies to: 287-301


433-441: Use neutral phrasing for TTFT note and keep en‑AU.

Prefer “long time to first token (TTFT)” over “High time…”, and keep “utilisation”.

-**Issue**: High time to first token (TTFT)
+**Issue**: Long time to first token (TTFT)
@@
-2. Increase GPU memory utilisation
+2. Increase GPU memory utilisation
-3. Use smaller model or quantisation
+3. Use a smaller model or quantisation

427-432: Consistent en‑AU spelling while preserving CLI flag names.

Keep prose as “quantisation”, keep the flag as “--quantization”.

-3. Use quantisation (`--quantization awq` or `--quantization gptq`)
+3. Use quantisation (`--quantization awq` or `--quantization gptq`)

(Current line already correct for en‑AU; ensure there’s no mixed “quantization” in prose elsewhere.)

docs/content/development/architecture.md (2)

599-599: Add hyphen to compound adjective.

The compound adjective "worst case" should be hyphenated when modifying a noun:

-1. **Endpoint Selection**: O(1) for priority, O(n) worst case
+1. **Endpoint Selection**: O(1) for priority, O(n) worst-case

62-90: Add language specification to code block.

The ASCII diagram code block should specify a language for proper rendering:

-```
+```text
 ┌─────────────────────────────────────────────────────────┐
docs/content/api-reference/overview.md (1)

13-15: Add language specification to code block.

The base URL code block should specify a language for proper rendering:

-```
+```text
 http://localhost:40114

</blockquote></details>
<details>
<summary>docs/content/concepts/profile-system.md (2)</summary><blockquote>

`610-610`: **Add comma before interrupter.**

The word "however" as an interrupter should be preceded by a comma:

```diff
-Don't update versions in natively supported profiles however.
+Don't update versions in natively supported profiles, however.

108-123: Convert indented code block to fenced format.

The code block should use fenced format instead of indentation:

-    ```
-    ROUTE                             | METHOD | DESCRIPTION
-    /olla/lmstudio/v1/models          | GET    | lmstudio models (OpenAI format)
-    ...
-    ```
+```text
+ROUTE                             | METHOD | DESCRIPTION
+/olla/lmstudio/v1/models          | GET    | lmstudio models (OpenAI format)
+...
+```
docs/content/index.md (2)

124-129: Convert indented code blocks to fenced format.

The code blocks should use fenced format instead of indentation:

-=== "Using Go"
-
-    ```bash
-    go install github.com/thushan/olla@latest
-    olla
-    ```
+=== "Using Go"
+
+```bash
+go install github.com/thushan/olla@latest
+olla
+```

131-138: Convert indented code blocks to fenced format.

The code blocks should use fenced format instead of indentation:

-=== "From Source"
-
-    ```bash
-    git clone https://github.com/thushan/olla.git
-    cd olla
-    make build-release
-    ./olla
-    ```
+=== "From Source"
+
+```bash
+git clone https://github.com/thushan/olla.git
+cd olla
+make build-release
+./olla
+```
docs/content/concepts/model-unification.md (1)

398-398: Add comma in compound sentence.

The compound sentence needs a comma before "but":

-Models with same name but different actual files may be incorrectly unified
+Models with same name, but different actual files may be incorrectly unified
docs/content/concepts/load-balancing.md (3)

10-12: Grammar: add missing determiners and hyphenation for clarity

Use “the” with superlatives and hyphenate compound adjectives.

- - `priority` _(default)_ - Routes to highest priority endpoint
+ - `priority` _(default)_ - Routes to the highest-priority endpoint
  - `round-robin` - Cycles through endpoints evenly
- - `least-connections` - Routes to least busy endpoint
+ - `least-connections` - Routes to the least-busy endpoint

35-39: Grammar: add missing determiner and hyphenation

Superlative needs “the”; hyphenate for readability.

-2. Selects from highest priority tier only
+2. Selects from the highest-priority tier only

110-114: Grammar: add missing determiner

Add “the” before “fewest”.

-Routes to the endpoint with fewest active connections.
+Routes to the endpoint with the fewest active connections.
docs/content/configuration/practices/monitoring.md (2)

245-249: Clarify latency guidance vs availability of percentiles

You set thresholds for P50/P95/P99 but note that percentiles aren’t exposed by the status endpoint. Explicitly state that these should be computed in the monitoring system (e.g. Prometheus histogram) rather than fetched from Olla.

Also applies to: 103-110


437-443: Prefer “why” comments for Go snippet

Shift to a “why” comment to match style guidance and help readers understand the intent.

-// Wrap handlers with OpenTelemetry
+// Add tracing to attribute proxy time vs backend latency, enabling root-cause analysis
 import "go.opentelemetry.io/otel"
 
 tracer := otel.Tracer("olla")
 ctx, span := tracer.Start(ctx, "proxy_request")
 defer span.End()
docs/content/integrations/backend/ollama.md (4)

294-299: Fix markdown lint: specify language for fenced block

Add a language identifier to satisfy MD040 and improve rendering.

-```
+```text
 model:tag
 model:version
 namespace/model:tag

---

`323-339`: **Mark commented JSON as jsonc to avoid invalid JSON copy-paste errors**

The example includes comments; jsonc is more accurate and prevents confusion.


```diff
-```json
+```jsonc
 {
   "options": {
     "temperature": 0.8,      // Randomness (0-1)

649-658: Align endpoint path with the rest of the docs

Elsewhere the docs use /internal/stats/models. Update here for consistency (unless the service exposes both).

-# Monitor model availability
-curl http://localhost:40114/internal/status/models
+# Monitor model availability
+curl http://localhost:40114/internal/stats/models

378-405: Compose vs Swarm: GPU settings under deploy won’t apply in plain docker-compose

docker-compose ignores the deploy section (it’s Swarm-only). Consider adding a note or an alternative example using device_requests for Compose.

Example alternative (Compose):

services:
  ollama:
    image: ollama/ollama
    deploy: {}  # ignored by docker-compose
    device_cgroup_rules:
      - 'c 195:* rmw'   # or use device_requests with compose v2.10+
    deploy:
      resources: {}     # only active in Swarm

Or:

services:
  ollama:
    image: ollama/ollama
    deploy: {}
    gpu: all  # Docker Desktop convenience flag

Add a brief note explaining why this matters to prevent confusion.

docs/content/integrations/backend/lmstudio.md (1)

372-382: Optional: update LangChain example to current packages

LangChain’s OpenAI bindings have moved; many users now rely on langchain_openai. Consider updating or adding a second snippet to reduce friction for new setups.

Proposed alternative:

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="http://localhost:40114/olla/lm-studio/v1",
    api_key="not-needed",
    model="mistral-7b-instruct"
)

If your audience targets older versions, keep both with a note.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3110b40 and cac160a.

⛔ Files ignored due to path filters (1)
  • docs/content/assets/images/banner.png is excluded by !**/*.png
📒 Files selected for processing (58)
  • .github/workflows/docs.yml (1 hunks)
  • docs/.gitignore (1 hunks)
  • docs/adding-providers.md (0 hunks)
  • docs/api/README.md (0 hunks)
  • docs/api/provider-routing.md (0 hunks)
  • docs/api/query-formats.md (0 hunks)
  • docs/architecture/hexagonal-architecture.md (0 hunks)
  • docs/content/api-reference/lmstudio.md (1 hunks)
  • docs/content/api-reference/models.md (1 hunks)
  • docs/content/api-reference/ollama.md (1 hunks)
  • docs/content/api-reference/openai.md (1 hunks)
  • docs/content/api-reference/overview.md (1 hunks)
  • docs/content/api-reference/system.md (1 hunks)
  • docs/content/api-reference/vllm.md (1 hunks)
  • docs/content/concepts/health-checking.md (1 hunks)
  • docs/content/concepts/load-balancing.md (1 hunks)
  • docs/content/concepts/model-unification.md (1 hunks)
  • docs/content/concepts/overview.md (1 hunks)
  • docs/content/concepts/profile-system.md (1 hunks)
  • docs/content/concepts/proxy-engines.md (1 hunks)
  • docs/content/concepts/proxy-profiles.md (1 hunks)
  • docs/content/configuration/examples.md (1 hunks)
  • docs/content/configuration/overview.md (1 hunks)
  • docs/content/configuration/practices/monitoring.md (1 hunks)
  • docs/content/configuration/practices/overview.md (1 hunks)
  • docs/content/configuration/practices/performance.md (1 hunks)
  • docs/content/configuration/practices/security.md (1 hunks)
  • docs/content/configuration/reference.md (1 hunks)
  • docs/content/development/architecture.md (1 hunks)
  • docs/content/development/benchmarking.md (1 hunks)
  • docs/content/development/circuit-breaker.md (1 hunks)
  • docs/content/development/contributing.md (1 hunks)
  • docs/content/development/overview.md (1 hunks)
  • docs/content/development/patterns.md (1 hunks)
  • docs/content/development/setup.md (1 hunks)
  • docs/content/development/testing.md (1 hunks)
  • docs/content/faq.md (1 hunks)
  • docs/content/getting-started/installation.md (1 hunks)
  • docs/content/getting-started/quickstart.md (1 hunks)
  • docs/content/index.md (1 hunks)
  • docs/content/integrations/backend/lmstudio.md (1 hunks)
  • docs/content/integrations/backend/ollama.md (1 hunks)
  • docs/content/integrations/backend/vllm.md (1 hunks)
  • docs/content/integrations/frontend/openwebui.md (1 hunks)
  • docs/content/integrations/overview.md (1 hunks)
  • docs/content/stylesheets/extra.css (1 hunks)
  • docs/content/stylesheets/nightowl.css (1 hunks)
  • docs/headers.md (0 hunks)
  • docs/mkdocs.yml (1 hunks)
  • docs/overview.md (0 hunks)
  • docs/requirements.txt (1 hunks)
  • docs/technical.md (0 hunks)
  • docs/technical/health-checking-circuit-breakers.md (0 hunks)
  • docs/technical/load-balancing.md (0 hunks)
  • docs/technical/proxy-engines.md (0 hunks)
  • docs/technical/service-discovery.md (0 hunks)
  • docs/technical/statistics-monitoring.md (0 hunks)
  • docs/user-guide.md (0 hunks)
💤 Files with no reviewable changes (14)
  • docs/api/provider-routing.md
  • docs/technical/proxy-engines.md
  • docs/api/query-formats.md
  • docs/headers.md
  • docs/overview.md
  • docs/api/README.md
  • docs/user-guide.md
  • docs/architecture/hexagonal-architecture.md
  • docs/technical/statistics-monitoring.md
  • docs/technical.md
  • docs/adding-providers.md
  • docs/technical/service-discovery.md
  • docs/technical/health-checking-circuit-breakers.md
  • docs/technical/load-balancing.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{go,md}

📄 CodeRabbit Inference Engine (CLAUDE.md)

Use Australian English for comments and documentation, and write comments explaining why rather than what

Files:

  • docs/content/development/setup.md
  • docs/content/api-reference/ollama.md
  • docs/content/development/contributing.md
  • docs/content/concepts/proxy-engines.md
  • docs/content/concepts/proxy-profiles.md
  • docs/content/integrations/overview.md
  • docs/content/development/architecture.md
  • docs/content/concepts/overview.md
  • docs/content/development/patterns.md
  • docs/content/integrations/backend/ollama.md
  • docs/content/configuration/examples.md
  • docs/content/integrations/backend/vllm.md
  • docs/content/configuration/practices/security.md
  • docs/content/integrations/backend/lmstudio.md
  • docs/content/development/benchmarking.md
  • docs/content/configuration/practices/performance.md
  • docs/content/development/testing.md
  • docs/content/concepts/model-unification.md
  • docs/content/faq.md
  • docs/content/concepts/load-balancing.md
  • docs/content/api-reference/models.md
  • docs/content/development/overview.md
  • docs/content/configuration/overview.md
  • docs/content/getting-started/quickstart.md
  • docs/content/development/circuit-breaker.md
  • docs/content/api-reference/system.md
  • docs/content/api-reference/overview.md
  • docs/content/getting-started/installation.md
  • docs/content/concepts/health-checking.md
  • docs/content/configuration/practices/monitoring.md
  • docs/content/api-reference/openai.md
  • docs/content/configuration/practices/overview.md
  • docs/content/integrations/frontend/openwebui.md
  • docs/content/api-reference/vllm.md
  • docs/content/concepts/profile-system.md
  • docs/content/api-reference/lmstudio.md
  • docs/content/configuration/reference.md
  • docs/content/index.md
🧠 Learnings (1)
📚 Learning: 2025-08-11T11:48:06.612Z
Learnt from: CR
PR: thushan/olla#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-11T11:48:06.612Z
Learning: Applies to internal/adapter/proxy/**/*_test.go : Maintain shared proxy tests to ensure both Sherpa and Olla engines remain compatible

Applied to files:

  • docs/content/development/testing.md
🪛 LanguageTool
docs/content/development/setup.md

[uncategorized] ~200-~200: Loose punctuation mark.
Context: ...on ### VS Code .vscode/settings.json: ```json { "go.lintTool": "golangci-l...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~220-~220: Loose punctuation mark.
Context: ...e } } } `.vscode/launch.json`: json { "version": "0.2.0", "con...

(UNLIKELY_OPENING_PUNCTUATION)

docs/content/api-reference/ollama.md

[uncategorized] ~323-~323: Possible missing comma found.
Context: ...ent The following endpoints are proxied but typically used for model management: -...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/content/concepts/proxy-engines.md

[uncategorized] ~248-~248: Possible missing comma found.
Context: ...ces/performance.md) for detailed tuning guidance including buffer size optimisation. ##...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/content/concepts/proxy-profiles.md

[uncategorized] ~73-~73: It appears that a hyphen is missing (if ‘auto’ is not used in the context of ‘cars’).
Context: ...ing] ``` #### Streaming Content Types Auto profile streams these content types immediately...

(AUTO_HYPHEN)


[uncategorized] ~83-~83: It appears that a hyphen is missing (if ‘auto’ is not used in the context of ‘cars’).
Context: ...treaming) #### Buffered Content Types Auto profile buffers these content types: - Images:...

(AUTO_HYPHEN)


[uncategorized] ~99-~99: Did you mean “arrive at Low” or “arrive in Low”?
Context: ...Zero Buffering**: Tokens stream as they arrive - Low Latency: First token appears immediat...

(MISSING_AT)


[style] ~118-~118: Using many exclamation marks might seem excessive (in this case: 9 exclamation marks for a text that’s 6510 characters long)
Context: ...4096 # 4KB for faster first token ``` !!! tip "Stream Buffer Size" The `strea...

(EN_EXCESSIVE_EXCLAMATION)

docs/content/development/architecture.md

[grammar] ~268-~268: A determiner may be missing.
Context: ...: Cycle through available endpoints - Least Connections: Route to endpoint with f...

(THE_SUPERLATIVE)


[grammar] ~268-~268: A determiner may be missing.
Context: ...t Connections**: Route to endpoint with fewest active connections #### Health Checkin...

(THE_SUPERLATIVE)


[uncategorized] ~599-~599: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...nt Selection**: O(1) for priority, O(n) worst case 2. Health Checks: Cached with TTL, ...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

docs/content/concepts/overview.md

[grammar] ~26-~26: A determiner may be missing.
Context: ...ints - Least-connections: Routes to least busy endpoints Load balancing ensures ...

(THE_SUPERLATIVE)

docs/content/integrations/backend/vllm.md

[uncategorized] ~430-~430: Possible missing preposition found.
Context: ...9) 2. Decrease --max-model-len 3. Use quantisation (--quantization awq or `--quantizatio...

(AI_HYDRA_LEO_MISSING_OF)


[uncategorized] ~430-~430: Do not mix variants of the same word (‘quantization’ and ‘quantisation’) within a single text.
Context: ... --max-model-len 3. Use quantisation (--quantization awq or --quantization gptq) 4. Enabl...

(EN_WORD_COHERENCY)


[uncategorized] ~430-~430: Do not mix variants of the same word (‘quantization’ and ‘quantisation’) within a single text.
Context: ...e quantisation (--quantization awq or --quantization gptq) 4. Enable tensor parallelism for...

(EN_WORD_COHERENCY)


[style] ~435-~435: This informal phrase is redundant. Consider writing “time”.
Context: ...i-GPU ### Slow First Token Issue: High time to first token (TTFT) Solution: 1...

(HIGH_TIME)

docs/content/configuration/practices/security.md

[grammar] ~34-~34: A determiner may be missing.
Context: ...ltiple layers of security controls 2. Least Privilege: Minimal permissions requir...

(THE_SUPERLATIVE)

docs/content/concepts/model-unification.md

[grammar] ~215-~215: A determiner may be missing.
Context: ... type: 1. Priority-based: Route to highest priority endpoint with the model 2. **R...

(THE_SUPERLATIVE)


[grammar] ~217-~217: A determiner may be missing.
Context: ...odel 3. Least-connections: Route to least busy endpoint with the model ```yaml p...

(THE_SUPERLATIVE)


[uncategorized] ~398-~398: Use a comma before ‘but’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...Name conflicts*: Models with same name but different actual files may be incorrect...

(COMMA_COMPOUND_SENTENCE_2)

docs/content/faq.md

[uncategorized] ~58-~58: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ailable. ### What is stream_buffer_size and how should I tune it? `stream_buffer_s...

(COMMA_COMPOUND_SENTENCE_2)


[uncategorized] ~292-~292: Loose punctuation mark.
Context: ...aders to responses: - X-Olla-Endpoint: Which backend served the request - `X-O...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~314-~314: It appears that a hyphen is missing (if ‘auto’ is not used in the context of ‘cars’).
Context: ...`` ## Best Practices ### Should I use auto proxy profile? Yes, the auto profile intel...

(AUTO_HYPHEN)


[typographical] ~323-~323: If specifying a range, consider using an en dash instead of a hyphen.
Context: ...ion**: 30-60 seconds - Development: 10-30 seconds - Critical systems: 5-10 se...

(HYPHEN_TO_EN)


[typographical] ~324-~324: If specifying a range, consider using an en dash instead of a hyphen.
Context: ...: 10-30 seconds - Critical systems: 5-10 seconds ### Should I enable request lo...

(HYPHEN_TO_EN)

docs/content/concepts/load-balancing.md

[grammar] ~10-~10: A determiner may be missing.
Context: ... > - priority (default) - Routes to highest priority endpoint > - round-robin - C...

(THE_SUPERLATIVE)


[grammar] ~12-~12: A determiner may be missing.
Context: ...nly > - least-connections - Routes to least busy endpoint > > **Environment Variab...

(THE_SUPERLATIVE)


[grammar] ~36-~36: A determiner may be missing.
Context: ...00, higher = preferred) 2. Selects from highest priority tier only 3. Within same prior...

(THE_SUPERLATIVE)


[grammar] ~112-~112: A determiner may be missing.
Context: ...onnections Routes to the endpoint with fewest active connections. How it works: ...

(THE_SUPERLATIVE)


[grammar] ~151-~151: A determiner may be missing.
Context: ...oderate | Homogeneous servers | Low | | Least Connections | Dynamic | Fast | Variable...

(THE_SUPERLATIVE)


[grammar] ~385-~385: A determiner may be missing.
Context: ...*: Development or identical servers - Least Connections: Mixed workloads or strea...

(THE_SUPERLATIVE)

docs/content/development/overview.md

[uncategorized] ~13-~13: Use a comma before ‘but’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ux and macOS, you can develop on Windows but you may hit UAC prompts for port usage ...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~121-~121: A determiner may be missing.
Context: ...s available: - Priority: Routes to highest priority endpoint - Round-Robin: Di...

(THE_SUPERLATIVE)


[grammar] ~123-~123: A determiner may be missing.
Context: ...enly - Least-Connections: Routes to least busy endpoint ### Health Checking Aut...

(THE_SUPERLATIVE)


[uncategorized] ~175-~175: The preposition ‘to’ seems more likely in this position.
Context: ...ementations 2. Update shared test suite in internal/adapter/proxy/ 3. Run benchm...

(AI_HYDRA_LEO_REPLACE_IN_TO)

docs/content/configuration/overview.md

[uncategorized] ~25-~25: Possible missing comma found.
Context: ...ovides an overview of the configuration structure with links to detailed documentation fo...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~103-~103: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...0/16" # Private network ``` !!! info "Rate Limiting Behaviour" - Global limits apply ac...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[uncategorized] ~109-~109: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ... for accurate client IP detection See Rate Limiting Reference ...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[grammar] ~170-~170: A determiner may be missing.
Context: ...|----------| | priority | Routes to highest priority endpoint | Preferring local/ch...

(THE_SUPERLATIVE)


[grammar] ~172-~172: A determiner may be missing.
Context: ...y | | least-connections | Routes to least busy endpoint | Optimising response tim...

(THE_SUPERLATIVE)


[uncategorized] ~224-~224: Possible missing comma found.
Context: ...5 # Parallel discovery workers ``` !!! note "Discovery Behaviour" Model discove...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/content/getting-started/quickstart.md

[uncategorized] ~69-~69: Possible missing preposition found.
Context: ...calhost:40114/internal/health List available models through the proxy: bash # Fo...

(AI_HYDRA_LEO_MISSING_OF)


[uncategorized] ~167-~167: Loose punctuation mark.
Context: ... for these headers: - X-Olla-Endpoint: Which backend handled the request - `X-...

(UNLIKELY_OPENING_PUNCTUATION)

docs/content/development/circuit-breaker.md

[uncategorized] ~131-~131: Possible missing comma found.
Context: ...nternal/status` endpoint shows endpoint health which reflects circuit breaker state: ...

(AI_HYDRA_LEO_MISSING_COMMA)

docs/content/getting-started/installation.md

[grammar] ~105-~105: The verb form ‘execute’ does not seem to be suitable in this context.
Context: ...: On Linux/macOS, ensure the binary has execute permissions: chmod +x olla **Port al...

(HAVE_VB)

docs/content/concepts/health-checking.md

[typographical] ~107-~107: If specifying a range, consider using an en dash instead of a hyphen.
Context: ...ommendations**: - Local endpoints: 2-5 seconds - LAN endpoints: 5-10 secon...

(HYPHEN_TO_EN)


[typographical] ~109-~109: If specifying a range, consider using an en dash instead of a hyphen.
Context: ...s**: 5-10 seconds - Remote/Cloud: 15-30 seconds - Critical endpoints: 2-3 s...

(HYPHEN_TO_EN)


[typographical] ~110-~110: If specifying a range, consider using an en dash instead of a hyphen.
Context: ...15-30 seconds - Critical endpoints: 2-3 seconds ### Check Timeouts Set approp...

(HYPHEN_TO_EN)


[duplication] ~269-~269: Possible typo: you repeated a word.
Context: ... Metrics include: - Request counts per model - Model availability across endpoints - Average...

(ENGLISH_WORD_REPEAT_RULE)

docs/content/configuration/practices/overview.md

[typographical] ~311-~311: If specifying a range, consider using an en dash instead of a hyphen.
Context: ...onsiderations: - Primarily I/O bound - 1-2 cores sufficient for most deployments -...

(HYPHEN_TO_EN)

docs/content/concepts/profile-system.md

[misspelling] ~24-~24: This word is normally spelled as one.
Context: ...> Key Features: > > - Profiles are auto-loaded from config/profiles/ > - Custom prof...

(EN_COMPOUNDS_AUTO_LOADED)


[style] ~76-~76: Consider using the synonym “brief” (= concise, using a few words, not lasting long) to strengthen your wording.
Context: ...n about the profile - description - A short description for the interface ### Rout...

(QUICK_BRIEF)


[uncategorized] ~94-~94: The abbreviation “e.g.” (= for example) requires two periods.
Context: ...uests before forwarding to the backend (Eg. /olla/ma/v1/chat => /v1/chat sent t...

(E_G)


[typographical] ~610-~610: Consider adding a comma before the interrupter.
Context: ... versions in natively supported profiles however. ## Profile Reference ### Built-in Pr...

(HOWEVER_COMMA)

docs/content/configuration/reference.md

[uncategorized] ~355-~355: Loose punctuation mark.
Context: ...ut: "stdout" ``` Log levels: - debug: Detailed debugging information - `info`...

(UNLIKELY_OPENING_PUNCTUATION)

docs/content/index.md

[uncategorized] ~29-~29: The abbreviation “e.g.” (= for example) requires two periods.
Context: ...ed across instances (of the same type - Eg. Ollama or LMStudio) - **Dual Proxy Engi...

(E_G)

🪛 markdownlint-cli2 (0.17.2)
docs/content/api-reference/ollama.md

76-76: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


191-191: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/development/contributing.md

66-66: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/development/architecture.md

62-62: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/integrations/backend/ollama.md

294-294: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/development/testing.md

20-20: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/development/overview.md

35-35: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


91-91: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/development/circuit-breaker.md

42-42: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


48-48: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


54-54: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

docs/content/api-reference/overview.md

13-13: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/getting-started/installation.md

80-80: Code block style
Expected: indented; Actual: fenced

(MD046, code-block-style)

docs/content/concepts/health-checking.md

39-39: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


178-178: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/api-reference/openai.md

121-121: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/integrations/frontend/openwebui.md

32-32: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


33-33: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


35-35: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


36-36: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

docs/content/api-reference/vllm.md

153-153: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


266-266: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/concepts/profile-system.md

56-56: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


108-108: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/api-reference/lmstudio.md

125-125: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

docs/content/index.md

126-126: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


133-133: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)

🪛 Gitleaks (8.27.2)
docs/content/api-reference/openai.md

27-28: Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource.

(curl-auth-header)


68-70: Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource.

(curl-auth-header)


138-140: Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource.

(curl-auth-header)


172-174: Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource.

(curl-auth-header)


196-198: Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource.

(curl-auth-header)


240-242: Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource.

(curl-auth-header)


279-281: Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource.

(curl-auth-header)

🪛 YAMLlint (1.37.1)
docs/mkdocs.yml

[error] 112-112: trailing spaces

(trailing-spaces)


[warning] 137-137: wrong indentation: expected 6 but found 8

(indentation)


[error] 161-161: no new line character at the end of file

(new-line-at-end-of-file)

.github/workflows/docs.yml

[error] 1-1: wrong new line character: expected \n

(new-lines)


[error] 78-78: no new line character at the end of file

(new-line-at-end-of-file)

🪛 GitHub Actions: CI
docs/content/stylesheets/nightowl.css

[warning] 1-1: warning: in the working copy of 'docs/content/stylesheets/nightowl.css', CRLF will be replaced by LF the next time Git touches it


[error] 1-172: Command 'make fmt && git diff --exit-code' failed. Formatting changes detected in this file.

.github/workflows/docs.yml

[warning] 1-1: warning: in the working copy of '.github/workflows/docs.yml', CRLF will be replaced by LF the next time Git touches it


[error] 1-78: Command 'make fmt && git diff --exit-code' failed. Formatting changes detected in this file.

docs/content/stylesheets/extra.css

[warning] 1-1: warning: in the working copy of 'docs/content/stylesheets/extra.css', CRLF will be replaced by LF the next time Git touches it


[error] 1-135: Command 'make fmt && git diff --exit-code' failed. Formatting changes detected in this file.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (26)
docs/requirements.txt (1)

1-2: mkdocs-minify-plugin configuration verified

The minify plugin is correctly enabled in docs/mkdocs.yml (lines 105–109), so the dependency in docs/requirements.txt is in use. No further action required.

docs/content/development/setup.md (2)

15-18: Go toolchain version verified

The documentation’s “Go 1.24+” requirement aligns with the repository’s go.mod (go 1.24). No updates needed here.


374-376: Internal links verified – no updates needed

All three target files live alongside setup.md in docs/content/development, so using simple relative links (contributing.md, testing.md, benchmarking.md) resolves correctly under MkDocs.

docs/content/configuration/practices/performance.md (1)

117-128: write_timeout guidance is consistent across documentation

Verified that every example and default setting specifies write_timeout: 0s for streaming. The lone 30s entry in docs/content/concepts/proxy-profiles.md is explicitly for buffered responses, not streaming, and is therefore correct. No mixed guidance remains.

docs/content/development/contributing.md (1)

248-256: Australian English is already used well — keep explaining “why” in comments.

The Go comment examples focus on rationale over mechanics, which aligns with our guidelines. No changes needed here.

docs/content/configuration/practices/security.md (1)

56-61: Good guidance on bind addresses and reverse proxies.

Clear recommendations that reduce unintended exposure; aligns with production hardening.

.github/workflows/docs.yml (1)

57-66: Build/upload paths are consistent — good.

mkdocs build in docs/ and uploading docs/site matches MkDocs defaults.

docs/content/development/benchmarking.md (1)

9-25: Bench quick-start is clear and actionable.

Solid, reproducible commands with sensible flags.

docs/content/faq.md (1)

246-252: Monitoring endpoints list is helpful and complete.

Good operational guidance for users wiring up observability.

docs/content/development/testing.md (1)

150-179: Nice: shared proxy test suite emphasised.

This aligns with our prior learning to keep Sherpa and Olla engines compatible via shared tests.

docs/content/configuration/reference.md (1)

101-112: Rate-limit trust settings are well documented.

Clear about proxy header trust and CIDRs; matches security guidance.

Also applies to: 113-128

docs/content/integrations/overview.md (1)

29-37: Australian English already used — nice

Use of “customise” aligns with en‑AU guidance. No changes needed here.

docs/mkdocs.yml (1)

57-60: Verified: extra CSS assets are present

Both referenced files exist under docs/content/stylesheets:

  • docs/content/stylesheets/extra.css
  • docs/content/stylesheets/nightowl.css

No further action required.

docs/content/configuration/examples.md (1)

1-481: Solid, comprehensive examples.

Examples are coherent, cover diverse scenarios, and follow the configuration surface consistently. No action required.

docs/content/getting-started/quickstart.md (1)

71-77: Verify OpenAI path prefix and fix model listing example.

The example lists OpenAI-compatible models under an “ollama” prefix. If your routing uses provider prefixes, this likely should be “/olla/openai/v1/models”.

Apply this tentative fix if accurate:

-# For OpenAI-compatible endpoints
-curl http://localhost:40114/olla/ollama/v1/models
+# For OpenAI-compatible endpoints
+curl http://localhost:40114/olla/openai/v1/models

If OpenAI is intentionally routed via the Ollama prefix in your profile system, please confirm and document that convention here.

docs/content/api-reference/system.md (1)

1-245: Well-structured and clear API reference.

Endpoints, examples, and response schema are comprehensive and easy to consume. Reads cleanly with consistent formatting.

docs/content/configuration/practices/overview.md (1)

1-425: Excellent comprehensive production deployment guide.

This best practices overview provides thorough guidance for production deployments with practical examples and clear configuration patterns. The use of Australian English spellings like "optimisation" correctly follows the coding guidelines.

The static analysis hint about using en dash (–) instead of hyphen (-) for ranges like "1-2 cores" is technically correct typography, but hyphens are widely accepted and more accessible in technical documentation contexts.

docs/content/development/architecture.md (1)

1-617: Outstanding comprehensive architecture documentation.

This document provides excellent coverage of Olla's Hexagonal Architecture with detailed implementation examples, request flows, and performance considerations. The technical depth and practical examples make this a valuable resource for developers.

docs/content/api-reference/overview.md (1)

1-132: Well-structured API reference hub.

This overview provides a clear entry point to the API documentation with good organisation by provider type and comprehensive coverage of endpoints, headers, and error handling.

docs/content/concepts/proxy-profiles.md (1)

1-476: Comprehensive proxy profiles documentation.

This document provides excellent coverage of Olla's proxy profile system with clear explanations of auto, streaming, and standard profiles. The practical examples, configuration options, and troubleshooting guidance make this highly useful. The use of Australian English spellings like "optimise" correctly follows the coding guidelines.

The static analysis warnings about "auto" hyphenation and excessive exclamation marks can be safely ignored - "auto profile" is clear in context, and the exclamation marks are MkDocs admonition syntax (!!! tip), not excessive punctuation.

docs/content/concepts/profile-system.md (1)

1-637: Excellent comprehensive profile system documentation.

This document provides outstanding coverage of Olla's profile system with detailed examples, configuration options, and troubleshooting guidance. The technical depth and practical examples make this invaluable for customising backend integrations.

docs/content/index.md (1)

1-172: Excellent landing page for Olla documentation.

This landing page provides a comprehensive and engaging introduction to Olla with clear feature descriptions, practical use cases, and well-organised quick start information. The structure and content effectively communicate Olla's value proposition.

docs/content/api-reference/models.md (1)

1-308: Comprehensive unified models API documentation.

This document provides excellent coverage of the unified models API with clear examples, multiple response formats, and detailed operational information about discovery and caching. The structure and examples make this highly useful for API consumers.

docs/content/concepts/model-unification.md (1)

1-405: Excellent model unification documentation.

This document provides comprehensive coverage of Olla's model unification system with clear explanations of per-provider unification, practical examples, and detailed monitoring guidance. The distinction between per-provider vs cross-provider unification is well-explained, and the Australian English usage is correct throughout.

docs/content/concepts/load-balancing.md (1)

250-252: No endpoint mismatch – /status and /stats serve different functions
The service actually exposes two distinct endpoints:

  • GET /internal/status/models (model registry status)
  • GET /internal/stats/models (model usage statistics)

The load-balancing guide is illustrating routing statistics, so /internal/stats/models is correct there. Other docs reference /internal/status/models when covering registry status. No change to the load-balancing snippet is needed.

Likely an incorrect or invalid review comment.

docs/content/integrations/backend/lmstudio.md (1)

1-405: Overall doc quality

Clear, thorough, and aligned with the rest of the site. Prefix coverage, examples, and troubleshooting are strong.

@@ -0,0 +1,78 @@
name: Deploy Documentation
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Normalise line endings and add trailing newline to pass formatting checks.

Current CRLF and missing EOF newline break CI formatting. Convert to LF and ensure a newline at end-of-file.

You can fix locally with:

Also applies to: 78-78


🏁 Script executed:

git config core.autocrlf false
dos2unix .github/workflows/docs.yml
printf '\n' >> .github/workflows/docs.yml

Length of output: 183


Let’s verify the workflow file for any CRLF line endings and check the final byte for a trailing newline.


🏁 Script executed:

#!/bin/bash
# Search for any carriage-return characters
echo "🔍 Checking for CRLF (\\r) occurrences:"
grep -n $'\r' .github/workflows/docs.yml || echo "✔ No CRLF found"

# Inspect the last byte of the file in hex to confirm EOF newline (0a)
echo "🔍 Inspecting last byte in hex (expect 0a for LF newline):"
tail -c1 .github/workflows/docs.yml | od -An -t x1

Length of output: 2487


We still need to confirm whether there’s a proper LF newline at EOF (since od isn’t available). Let’s grab the last byte via Python:


🏁 Script executed:

#!/bin/bash
echo "🔍 Inspecting last byte in hex via Python:"
python3 - << 'EOF'
import sys
path = ".github/workflows/docs.yml"
try:
    data = open(path, "rb").read()
except FileNotFoundError:
    sys.exit(f"File not found: {path}")
if not data:
    sys.exit("File is empty")
print(hex(data[-1]))
EOF

Length of output: 110


Convert CRLF to LF in .github/workflows/docs.yml

  • CRLF (\r\n) line endings were found on lines 1–77.
  • A proper LF (0x0a) newline is already present at EOF.

To normalise the file to LF-only, you can run:

# Strip carriage returns in-place
sed -i 's/\r$//' .github/workflows/docs.yml

Or enforce via Git:

  1. Create or update .gitattributes in your repo root:
    .github/workflows/docs.yml text eol=lf
    
  2. Re-checkout the file:
    git add .gitattributes
    git rm --cached .github/workflows/docs.yml
    git checkout -- .github/workflows/docs.yml
    git commit -m "Normalise docs.yml to LF line endings"
🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 1-1: wrong new line character: expected \n

(new-lines)

🪛 GitHub Actions: CI

[warning] 1-1: warning: in the working copy of '.github/workflows/docs.yml', CRLF will be replaced by LF the next time Git touches it


[error] 1-78: Command 'make fmt && git diff --exit-code' failed. Formatting changes detected in this file.

🤖 Prompt for AI Agents
.github/workflows/docs.yml lines 1 to 77: the file contains CRLF (\r\n) line
endings on lines 1–77 which can break CI or cross-platform tools; convert those
carriage-return line endings to LF-only. Fix by normalising the file to LF:
either run a command to strip trailing \r characters in-place or add a
.gitattributes entry (.github/workflows/docs.yml text eol=lf), re-checkout the
file so Git applies LF normalization, and commit the change.

Comment on lines +27 to +29
curl -X GET http://localhost:40114/olla/openai/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Avoid gitleaks false-positives in curl headers

Examples with Authorization: Bearer YOUR_API_KEY trigger secret scanners. Use env substitution or angle brackets to avoid noise.

Apply across all affected snippets:

-  -H "Authorization: Bearer YOUR_API_KEY"
+  -H "Authorization: Bearer ${OPENAI_API_KEY}"

or

-  -H "Authorization: Bearer YOUR_API_KEY"
+  -H "Authorization: Bearer <YOUR_API_KEY>"

Also applies to: 68-71, 138-141, 172-175, 196-199, 240-243, 279-282

🧰 Tools
🪛 Gitleaks (8.27.2)

27-28: Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource.

(curl-auth-header)

🤖 Prompt for AI Agents
In docs/content/api-reference/openai.md around lines 27 to 29 (and also update
the snippets at 68-71, 138-141, 172-175, 196-199, 240-243, 279-282), replace
hardcoded Authorization header values that read Authorization: Bearer
YOUR_API_KEY with a non-secret example form to avoid gitleaks false positives —
use either shell environment substitution (e.g., Authorization: Bearer
$OPENAI_API_KEY) or angle-bracket placeholders (e.g., Authorization: Bearer
<YOUR_API_KEY>) consistently across all listed snippets; update each curl
example header accordingly and ensure the README text (if any) reflects the
chosen placeholder convention.

Comment on lines +462 to +463
OLLA_LOAD_BALANCER: "round-robin"
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Environment variable naming is inconsistent; standardise

Top section documents OLLA_PROXY_LOAD_BALANCER but Docker example uses OLLA_LOAD_BALANCER. Pick one canonical name and use it everywhere. If the application reads only one of them, the current example will mislead readers.

-      OLLA_LOAD_BALANCER: "round-robin"
+      OLLA_PROXY_LOAD_BALANCER: "round-robin"

If both are valid, briefly document the precedence and deprecate one to avoid drift.

Also applies to: 14-14

🤖 Prompt for AI Agents
In docs/content/concepts/load-balancing.md around lines 462-463 (and also line
14), the environment variable name is inconsistent between the top section
(OLLA_PROXY_LOAD_BALANCER) and the Docker example (OLLA_LOAD_BALANCER); pick one
canonical name and update both the top doc and the Docker example to use that
single name throughout the file, or if the application supports both, explicitly
document which variable takes precedence and add a short deprecation note for
the secondary name so readers aren’t misled; ensure the examples, descriptions,
and any Env var tables are all changed to reflect the chosen canonical name and
precedence.

Comment on lines +1 to +135
/* Olla Brand Colors */
:root {
--olla-primary: #67E9BE;
--olla-accent: #67B7E9;
--olla-outline: #2C3C47;
--olla-white: #F9FAFB;
--olla-slate: #94A3B8;
}

/* Light theme overrides */
[data-md-color-scheme="default"] {
--md-primary-fg-color: var(--olla-primary);
--md-primary-fg-color--light: #85edc9;
--md-primary-fg-color--dark: #4de4b3;
--md-accent-fg-color: var(--olla-accent);
--md-accent-fg-color--transparent: rgba(103, 183, 233, 0.1);
}

/* Dark theme overrides */
[data-md-color-scheme="slate"] {
--md-primary-fg-color: var(--olla-primary);
--md-primary-fg-color--light: #85edc9;
--md-primary-fg-color--dark: #4de4b3;
--md-accent-fg-color: var(--olla-accent);
--md-accent-fg-color--transparent: rgba(103, 183, 233, 0.1);
}

/* Custom styling for brand consistency */
.md-header {
background: var(--olla-accent); /* Solid blue header */
}

/* Code blocks with brand accent */
.md-typeset .highlight .gp {
color: var(--olla-accent);
}

/* Links with brand colors */
.md-typeset a {
color: var(--olla-accent);
}

.md-typeset a:hover {
color: var(--olla-primary);
}

/* Navigation active states */
.md-nav__link--active {
color: var(--olla-primary);
}

.md-nav__link:hover {
color: var(--olla-accent);
}

/* Button styling */
.md-button {
background: linear-gradient(135deg, var(--olla-primary) 0%, var(--olla-accent) 100%);
color: white;
border: none;
}

.md-button:hover {
background: linear-gradient(135deg, var(--olla-accent) 0%, var(--olla-primary) 100%);
}

/* Custom admonition colors */
.md-typeset .admonition.tip,
.md-typeset details.tip {
border-color: var(--olla-primary);
}

.md-typeset .tip > .admonition-title,
.md-typeset .tip > summary {
background-color: rgba(103, 233, 190, 0.1);
border-color: var(--olla-primary);
}

.md-typeset .admonition.info,
.md-typeset details.info {
border-color: var(--olla-accent);
}

.md-typeset .info > .admonition-title,
.md-typeset .info > summary {
background-color: rgba(103, 183, 233, 0.1);
border-color: var(--olla-accent);
}

/* Search highlighting */
.md-search-result__article--document .md-search-result__title {
color: var(--olla-primary);
}

/* Logo and branding area */
.md-header__title {
font-weight: 600;
color: white;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
}

/* Header navigation text */
.md-header__button {
color: white;
}

.md-search__input {
background-color: rgba(255, 255, 255, 0.9);
color: var(--olla-outline);
}

.md-search__input::placeholder {
color: var(--olla-slate);
}

/* Navigation tabs - dark text for green background */
.md-tabs {
background: var(--olla-primary); /* Green background for tabs */
}

.md-tabs__link--active {
color: var(--olla-outline);
opacity: 1;
font-weight: 600;
}

.md-tabs__link {
color: var(--olla-outline);
opacity: 0.8;
}

.md-tabs__link:hover {
color: var(--olla-outline);
opacity: 1;
} No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

CI failing: line endings and formatting

The pipeline reports CRLF line endings and formatting drift. Convert to LF and run the project formatter so CI passes.

Quick fix:

- (CRLF line endings)
+ (LF line endings)

Then:

  • Ensure your editor uses LF for this repo.
  • Run: make fmt
  • Commit the formatter’s changes.

If you prefer a code-only tweak, you can also add an .editorconfig entry:

[*]
end_of_line = lf

🏁 Script executed:

#!/usr/bin/env bash
# Check for CRLF line endings in docs/content/stylesheets/extra.css
echo "Checking for CRLF in docs/content/stylesheets/extra.css"
grep -n $'\r' docs/content/stylesheets/extra.css || echo "No CRLF found"

# Show the first line bytes to confirm line endings
echo "First line bytes:"
head -n1 docs/content/stylesheets/extra.css | od -c

# Verify the existence of a Makefile and a fmt target
echo "Checking Makefile for fmt target"
if [ -f Makefile ]; then
  grep -R "fmt" -n Makefile || echo "No fmt target in Makefile"
else
  echo "Makefile not found"
fi

# Look for .editorconfig at repo root
echo "Searching for .editorconfig"
find . -maxdepth 2 -name .editorconfig

# Look for .gitattributes at repo root
echo "Searching for .gitattributes"
find . -maxdepth 2 -name .gitattributes

Length of output: 4197


🏁 Script executed:

#!/usr/bin/env bash
# Inspect the first 50 lines of .gitattributes
echo "==== .gitattributes (first 50 lines) ===="
head -n50 .gitattributes 2>/dev/null || echo ".gitattributes not found or is empty"

# Check for package.json in the repo root
echo; echo "==== Searching for package.json ===="
if [ -f package.json ]; then
  echo "package.json found"
  echo; echo "==== package.json scripts containing 'format' or 'fmt' ===="
  grep -nE '"(format|fmt)"' package.json || echo "No format/fmt scripts in package.json"
else
  echo "package.json not found"
fi

# Look for Prettier or other formatter config files
echo; echo "==== Searching for Prettier or formatter configs ===="
find . -maxdepth 2 -type f \( -iname ".prettierrc*" -o -iname "prettier.config.*" -o -iname "stylelint.config.*" \) -print || echo "No Prettier/stylelint configs found"

Length of output: 1195


Convert CRLF to LF in docs/content/stylesheets/extra.css

CI is failing because docs/content/stylesheets/extra.css contains CRLF line endings, but your .gitattributes enforces LF for *.css.

Quick steps to fix:

  • Run:
    dos2unix docs/content/stylesheets/extra.css
    or
    git add --renormalize docs/content/stylesheets/extra.css
  • Commit the change.

Then ensure your editor uses LF for this repo (you can add an .editorconfig entry if you like):

[*]
end_of_line = lf
🧰 Tools
🪛 GitHub Actions: CI

[warning] 1-1: warning: in the working copy of 'docs/content/stylesheets/extra.css', CRLF will be replaced by LF the next time Git touches it


[error] 1-135: Command 'make fmt && git diff --exit-code' failed. Formatting changes detected in this file.

🤖 Prompt for AI Agents
In docs/content/stylesheets/extra.css (lines 1-135) the file uses CRLF line
endings which violates .gitattributes and fails CI; convert the file to LF line
endings (e.g., run dos2unix on that file or run git add --renormalize
docs/content/stylesheets/extra.css) and commit the change, then ensure your
editor is configured to use LF for this repo (optionally add an .editorconfig
entry with end_of_line = lf).

Comment on lines +1 to +172
/* Night Owl Theme Modified */
/*
Based on Sarah Drasner's Night Owl theme
customised for mkdocs by Thushan Fernando

Full credits to Sarah Drasner for the original theme.

Copyright (c) 2018 Sarah Drasner
Licensed under the MIT License
*/

/* Light theme (Night Owl Light) */
[data-md-color-scheme="default"] .highlight {
background: #fbfbfb;
color: #403f53;
}

[data-md-color-scheme="default"] .highlight .hll { background-color: #e6ffed; }
[data-md-color-scheme="default"] .highlight .c { color: #989fb1; font-style: italic; } /* Comment */
[data-md-color-scheme="default"] .highlight .err { color: #ff6363; } /* Error */
[data-md-color-scheme="default"] .highlight .k { color: #994cc3; font-weight: bold; } /* Keyword */
[data-md-color-scheme="default"] .highlight .l { color: #aa0982; } /* Literal */
[data-md-color-scheme="default"] .highlight .n { color: #403f53; } /* Name */
[data-md-color-scheme="default"] .highlight .o { color: #7c3aed; } /* Operator */
[data-md-color-scheme="default"] .highlight .p { color: #403f53; } /* Punctuation */
[data-md-color-scheme="default"] .highlight .ch { color: #989fb1; font-style: italic; } /* Comment.Hashbang */
[data-md-color-scheme="default"] .highlight .cm { color: #989fb1; font-style: italic; } /* Comment.Multiline */
[data-md-color-scheme="default"] .highlight .cp { color: #994cc3; } /* Comment.Preproc */
[data-md-color-scheme="default"] .highlight .cpf { color: #989fb1; font-style: italic; } /* Comment.PreprocFile */
[data-md-color-scheme="default"] .highlight .c1 { color: #989fb1; font-style: italic; } /* Comment.Single */
[data-md-color-scheme="default"] .highlight .cs { color: #989fb1; font-weight: bold; font-style: italic; } /* Comment.Special */
[data-md-color-scheme="default"] .highlight .gd { color: #ff6363; } /* Generic.Deleted */
[data-md-color-scheme="default"] .highlight .ge { font-style: italic; } /* Generic.Emph */
[data-md-color-scheme="default"] .highlight .gr { color: #ff6363; } /* Generic.Error */
[data-md-color-scheme="default"] .highlight .gh { color: #403f53; font-weight: bold; } /* Generic.Heading */
[data-md-color-scheme="default"] .highlight .gi { color: #08916a; } /* Generic.Inserted */
[data-md-color-scheme="default"] .highlight .go { color: #989fb1; } /* Generic.Output */
[data-md-color-scheme="default"] .highlight .gp { color: #994cc3; font-weight: bold; } /* Generic.Prompt */
[data-md-color-scheme="default"] .highlight .gs { font-weight: bold; } /* Generic.Strong */
[data-md-color-scheme="default"] .highlight .gu { color: #403f53; font-weight: bold; } /* Generic.Subheading */
[data-md-color-scheme="default"] .highlight .gt { color: #ff6363; } /* Generic.Traceback */
[data-md-color-scheme="default"] .highlight .kc { color: #994cc3; font-weight: bold; } /* Keyword.Constant */
[data-md-color-scheme="default"] .highlight .kd { color: #994cc3; font-weight: bold; } /* Keyword.Declaration */
[data-md-color-scheme="default"] .highlight .kn { color: #994cc3; font-weight: bold; } /* Keyword.Namespace */
[data-md-color-scheme="default"] .highlight .kp { color: #994cc3; } /* Keyword.Pseudo */
[data-md-color-scheme="default"] .highlight .kr { color: #994cc3; font-weight: bold; } /* Keyword.Reserved */
[data-md-color-scheme="default"] .highlight .kt { color: #0c969b; font-weight: bold; } /* Keyword.Type */
[data-md-color-scheme="default"] .highlight .ld { color: #4876d6; } /* Literal.Date */
[data-md-color-scheme="default"] .highlight .m { color: #aa0982; } /* Literal.Number */
[data-md-color-scheme="default"] .highlight .s { color: #4876d6; } /* Literal.String */
[data-md-color-scheme="default"] .highlight .na { color: #0c969b; } /* Name.Attribute */
[data-md-color-scheme="default"] .highlight .nb { color: #994cc3; } /* Name.Builtin */
[data-md-color-scheme="default"] .highlight .nc { color: #111827; font-weight: bold; } /* Name.Class */
[data-md-color-scheme="default"] .highlight .no { color: #aa0982; } /* Name.Constant */
[data-md-color-scheme="default"] .highlight .nd { color: #0c969b; } /* Name.Decorator */
[data-md-color-scheme="default"] .highlight .ni { color: #403f53; } /* Name.Entity */
[data-md-color-scheme="default"] .highlight .ne { color: #ff6363; font-weight: bold; } /* Name.Exception */
[data-md-color-scheme="default"] .highlight .nf { color: #111827; font-weight: bold; } /* Name.Function */
[data-md-color-scheme="default"] .highlight .nl { color: #403f53; } /* Name.Label */
[data-md-color-scheme="default"] .highlight .nn { color: #403f53; } /* Name.Namespace */
[data-md-color-scheme="default"] .highlight .nx { color: #403f53; } /* Name.Other */
[data-md-color-scheme="default"] .highlight .py { color: #403f53; } /* Name.Property */
[data-md-color-scheme="default"] .highlight .nt { color: #994cc3; } /* Name.Tag */
[data-md-color-scheme="default"] .highlight .nv { color: #403f53; } /* Name.Variable */
[data-md-color-scheme="default"] .highlight .ow { color: #7c3aed; font-weight: bold; } /* Operator.Word */
[data-md-color-scheme="default"] .highlight .w { color: #403f53; } /* Text.Whitespace */
[data-md-color-scheme="default"] .highlight .mb { color: #aa0982; } /* Literal.Number.Bin */
[data-md-color-scheme="default"] .highlight .mf { color: #aa0982; } /* Literal.Number.Float */
[data-md-color-scheme="default"] .highlight .mh { color: #aa0982; } /* Literal.Number.Hex */
[data-md-color-scheme="default"] .highlight .mi { color: #aa0982; } /* Literal.Number.Integer */
[data-md-color-scheme="default"] .highlight .mo { color: #aa0982; } /* Literal.Number.Oct */
[data-md-color-scheme="default"] .highlight .sa { color: #4876d6; } /* Literal.String.Affix */
[data-md-color-scheme="default"] .highlight .sb { color: #4876d6; } /* Literal.String.Backtick */
[data-md-color-scheme="default"] .highlight .sc { color: #4876d6; } /* Literal.String.Char */
[data-md-color-scheme="default"] .highlight .dl { color: #4876d6; } /* Literal.String.Delimiter */
[data-md-color-scheme="default"] .highlight .sd { color: #989fb1; font-style: italic; } /* Literal.String.Doc */
[data-md-color-scheme="default"] .highlight .s2 { color: #4876d6; } /* Literal.String.Double */
[data-md-color-scheme="default"] .highlight .se { color: #ff6363; } /* Literal.String.Escape */
[data-md-color-scheme="default"] .highlight .sh { color: #4876d6; } /* Literal.String.Heredoc */
[data-md-color-scheme="default"] .highlight .si { color: #ff6363; } /* Literal.String.Interpol */
[data-md-color-scheme="default"] .highlight .sx { color: #4876d6; } /* Literal.String.Other */
[data-md-color-scheme="default"] .highlight .sr { color: #0c969b; } /* Literal.String.Regex */
[data-md-color-scheme="default"] .highlight .s1 { color: #4876d6; } /* Literal.String.Single */
[data-md-color-scheme="default"] .highlight .ss { color: #4876d6; } /* Literal.String.Symbol */
[data-md-color-scheme="default"] .highlight .bp { color: #994cc3; } /* Name.Builtin.Pseudo */
[data-md-color-scheme="default"] .highlight .fm { color: #111827; font-weight: bold; } /* Name.Function.Magic */
[data-md-color-scheme="default"] .highlight .vc { color: #403f53; } /* Name.Variable.Class */
[data-md-color-scheme="default"] .highlight .vg { color: #403f53; } /* Name.Variable.Global */
[data-md-color-scheme="default"] .highlight .vi { color: #403f53; } /* Name.Variable.Instance */
[data-md-color-scheme="default"] .highlight .vm { color: #403f53; } /* Name.Variable.Magic */
[data-md-color-scheme="default"] .highlight .il { color: #aa0982; } /* Literal.Number.Integer.Long */

/* Dark theme (Night Owl Dark) */
[data-md-color-scheme="slate"] .highlight {
background: #011627;
color: #d6deeb;
}

[data-md-color-scheme="slate"] .highlight .hll { background-color: #010e1a; }
[data-md-color-scheme="slate"] .highlight .c { color: #637777; font-style: italic; } /* Comment */
[data-md-color-scheme="slate"] .highlight .err { color: #ef5350; } /* Error */
[data-md-color-scheme="slate"] .highlight .k { color: #c792ea; font-weight: bold; } /* Keyword */
[data-md-color-scheme="slate"] .highlight .l { color: #f78c6c; } /* Literal */
[data-md-color-scheme="slate"] .highlight .n { color: #d6deeb; } /* Name */
[data-md-color-scheme="slate"] .highlight .o { color: #c792ea; } /* Operator */
[data-md-color-scheme="slate"] .highlight .p { color: #d6deeb; } /* Punctuation */
[data-md-color-scheme="slate"] .highlight .ch { color: #637777; font-style: italic; } /* Comment.Hashbang */
[data-md-color-scheme="slate"] .highlight .cm { color: #637777; font-style: italic; } /* Comment.Multiline */
[data-md-color-scheme="slate"] .highlight .cp { color: #c792ea; } /* Comment.Preproc */
[data-md-color-scheme="slate"] .highlight .cpf { color: #637777; font-style: italic; } /* Comment.PreprocFile */
[data-md-color-scheme="slate"] .highlight .c1 { color: #637777; font-style: italic; } /* Comment.Single */
[data-md-color-scheme="slate"] .highlight .cs { color: #637777; font-weight: bold; font-style: italic; } /* Comment.Special */
[data-md-color-scheme="slate"] .highlight .gd { color: #ef5350; } /* Generic.Deleted */
[data-md-color-scheme="slate"] .highlight .ge { font-style: italic; } /* Generic.Emph */
[data-md-color-scheme="slate"] .highlight .gr { color: #ef5350; } /* Generic.Error */
[data-md-color-scheme="slate"] .highlight .gh { color: #d6deeb; font-weight: bold; } /* Generic.Heading */
[data-md-color-scheme="slate"] .highlight .gi { color: #addb67; } /* Generic.Inserted */
[data-md-color-scheme="slate"] .highlight .go { color: #637777; } /* Generic.Output */
[data-md-color-scheme="slate"] .highlight .gp { color: #c792ea; font-weight: bold; } /* Generic.Prompt */
[data-md-color-scheme="slate"] .highlight .gs { font-weight: bold; } /* Generic.Strong */
[data-md-color-scheme="slate"] .highlight .gu { color: #d6deeb; font-weight: bold; } /* Generic.Subheading */
[data-md-color-scheme="slate"] .highlight .gt { color: #ef5350; } /* Generic.Traceback */
[data-md-color-scheme="slate"] .highlight .kc { color: #c792ea; font-weight: bold; } /* Keyword.Constant */
[data-md-color-scheme="slate"] .highlight .kd { color: #c792ea; font-weight: bold; } /* Keyword.Declaration */
[data-md-color-scheme="slate"] .highlight .kn { color: #c792ea; font-weight: bold; } /* Keyword.Namespace */
[data-md-color-scheme="slate"] .highlight .kp { color: #c792ea; } /* Keyword.Pseudo */
[data-md-color-scheme="slate"] .highlight .kr { color: #c792ea; font-weight: bold; } /* Keyword.Reserved */
[data-md-color-scheme="slate"] .highlight .kt { color: #82aaff; font-weight: bold; } /* Keyword.Type */
[data-md-color-scheme="slate"] .highlight .ld { color: #ecc48d; } /* Literal.Date */
[data-md-color-scheme="slate"] .highlight .m { color: #f78c6c; } /* Literal.Number */
[data-md-color-scheme="slate"] .highlight .s { color: #ecc48d; } /* Literal.String */
[data-md-color-scheme="slate"] .highlight .na { color: #82aaff; } /* Name.Attribute */
[data-md-color-scheme="slate"] .highlight .nb { color: #c792ea; } /* Name.Builtin */
[data-md-color-scheme="slate"] .highlight .nc { color: #ffcb8b; font-weight: bold; } /* Name.Class */
[data-md-color-scheme="slate"] .highlight .no { color: #f78c6c; } /* Name.Constant */
[data-md-color-scheme="slate"] .highlight .nd { color: #82aaff; } /* Name.Decorator */
[data-md-color-scheme="slate"] .highlight .ni { color: #d6deeb; } /* Name.Entity */
[data-md-color-scheme="slate"] .highlight .ne { color: #ef5350; font-weight: bold; } /* Name.Exception */
[data-md-color-scheme="slate"] .highlight .nf { color: #82aaff; font-weight: bold; } /* Name.Function */
[data-md-color-scheme="slate"] .highlight .nl { color: #d6deeb; } /* Name.Label */
[data-md-color-scheme="slate"] .highlight .nn { color: #d6deeb; } /* Name.Namespace */
[data-md-color-scheme="slate"] .highlight .nx { color: #d6deeb; } /* Name.Other */
[data-md-color-scheme="slate"] .highlight .py { color: #d6deeb; } /* Name.Property */
[data-md-color-scheme="slate"] .highlight .nt { color: #c792ea; } /* Name.Tag */
[data-md-color-scheme="slate"] .highlight .nv { color: #d6deeb; } /* Name.Variable */
[data-md-color-scheme="slate"] .highlight .ow { color: #c792ea; font-weight: bold; } /* Operator.Word */
[data-md-color-scheme="slate"] .highlight .w { color: #d6deeb; } /* Text.Whitespace */
[data-md-color-scheme="slate"] .highlight .mb { color: #f78c6c; } /* Literal.Number.Bin */
[data-md-color-scheme="slate"] .highlight .mf { color: #f78c6c; } /* Literal.Number.Float */
[data-md-color-scheme="slate"] .highlight .mh { color: #f78c6c; } /* Literal.Number.Hex */
[data-md-color-scheme="slate"] .highlight .mi { color: #f78c6c; } /* Literal.Number.Integer */
[data-md-color-scheme="slate"] .highlight .mo { color: #f78c6c; } /* Literal.Number.Oct */
[data-md-color-scheme="slate"] .highlight .sa { color: #ecc48d; } /* Literal.String.Affix */
[data-md-color-scheme="slate"] .highlight .sb { color: #ecc48d; } /* Literal.String.Backtick */
[data-md-color-scheme="slate"] .highlight .sc { color: #ecc48d; } /* Literal.String.Char */
[data-md-color-scheme="slate"] .highlight .dl { color: #ecc48d; } /* Literal.String.Delimiter */
[data-md-color-scheme="slate"] .highlight .sd { color: #637777; font-style: italic; } /* Literal.String.Doc */
[data-md-color-scheme="slate"] .highlight .s2 { color: #ecc48d; } /* Literal.String.Double */
[data-md-color-scheme="slate"] .highlight .se { color: #ef5350; } /* Literal.String.Escape */
[data-md-color-scheme="slate"] .highlight .sh { color: #ecc48d; } /* Literal.String.Heredoc */
[data-md-color-scheme="slate"] .highlight .si { color: #ef5350; } /* Literal.String.Interpol */
[data-md-color-scheme="slate"] .highlight .sx { color: #ecc48d; } /* Literal.String.Other */
[data-md-color-scheme="slate"] .highlight .sr { color: #82aaff; } /* Literal.String.Regex */
[data-md-color-scheme="slate"] .highlight .s1 { color: #ecc48d; } /* Literal.String.Single */
[data-md-color-scheme="slate"] .highlight .ss { color: #ecc48d; } /* Literal.String.Symbol */
[data-md-color-scheme="slate"] .highlight .bp { color: #c792ea; } /* Name.Builtin.Pseudo */
[data-md-color-scheme="slate"] .highlight .fm { color: #82aaff; font-weight: bold; } /* Name.Function.Magic */
[data-md-color-scheme="slate"] .highlight .vc { color: #d6deeb; } /* Name.Variable.Class */
[data-md-color-scheme="slate"] .highlight .vg { color: #d6deeb; } /* Name.Variable.Global */
[data-md-color-scheme="slate"] .highlight .vi { color: #d6deeb; } /* Name.Variable.Instance */
[data-md-color-scheme="slate"] .highlight .vm { color: #d6deeb; } /* Name.Variable.Magic */
[data-md-color-scheme="slate"] .highlight .il { color: #f78c6c; } /* Literal.Number.Integer.Long */ No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix formatting to unblock CI (line endings and formatting)

CI reports formatting changes and CRLF→LF conversion pending. Normalise line endings to LF, add a trailing newline, and re-run the formatter to satisfy make fmt.

Suggested steps:

  • Convert line endings: dos2unix docs/content/stylesheets/nightowl.css (or git config core.autocrlf false and re-checkout)
  • Ensure a trailing newline at EOF
  • Run: make fmt && git add docs/content/stylesheets/nightowl.css && git commit --no-verify -m "fix: normalise CSS EOLs and formatting"
🧰 Tools
🪛 GitHub Actions: CI

[warning] 1-1: warning: in the working copy of 'docs/content/stylesheets/nightowl.css', CRLF will be replaced by LF the next time Git touches it


[error] 1-172: Command 'make fmt && git diff --exit-code' failed. Formatting changes detected in this file.

🤖 Prompt for AI Agents
In docs/content/stylesheets/nightowl.css around lines 1 to 172, CI flagged CRLF
line endings and missing EOF newline causing formatting failures; convert the
file to LF line endings, add a single trailing newline at EOF, then run the
repository formatter (make fmt) and commit the formatted file. Use dos2unix or
disable autocrlf and re-checkout to normalise EOLs, ensure the file ends with
one newline, run make fmt to apply project styling, stage the file, and commit
with a message like "fix: normalise CSS EOLs and formatting".

minify_html: true

nav:
- Home:
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix trailing space in nav item.

Remove the trailing space after "Home:" to satisfy yamllint and avoid spurious diffs.

Apply this diff:

-  - Home: 
+  - Home:
📝 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.

Suggested change
- Home:
- Home:
🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 112-112: trailing spaces

(trailing-spaces)

🤖 Prompt for AI Agents
In docs/mkdocs.yml around line 112, the nav item "Home:" contains a trailing
space causing yamllint failures and spurious diffs; remove the trailing space so
the line reads "Home:" (no trailing whitespace) and save the file to eliminate
the lint warning and prevent unnecessary diffs.

Comment on lines +137 to +144
- Overview: integrations/overview.md
- Backends:
- Ollama: integrations/backend/ollama.md
- LM Studio: integrations/backend/lmstudio.md
- vLLM: integrations/backend/vllm.md
- Frontends:
- OpenWebUI: integrations/frontend/openwebui.md
- Development:
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Normalise indentation under Integrations.

Indentation is inconsistent (yamllint warns: expected 6, found 8). Align with the rest of the nav so MkDocs/Material renders sections correctly.

Apply this diff:

-  - Integrations:
-        - Overview: integrations/overview.md
-        - Backends:
-            - Ollama: integrations/backend/ollama.md
-            - LM Studio: integrations/backend/lmstudio.md
-            - vLLM: integrations/backend/vllm.md
-        - Frontends:
-            - OpenWebUI: integrations/frontend/openwebui.md
+  - Integrations:
+      - Overview: integrations/overview.md
+      - Backends:
+          - Ollama: integrations/backend/ollama.md
+          - LM Studio: integrations/backend/lmstudio.md
+          - vLLM: integrations/backend/vllm.md
+      - Frontends:
+          - OpenWebUI: integrations/frontend/openwebui.md
📝 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.

Suggested change
- Overview: integrations/overview.md
- Backends:
- Ollama: integrations/backend/ollama.md
- LM Studio: integrations/backend/lmstudio.md
- vLLM: integrations/backend/vllm.md
- Frontends:
- OpenWebUI: integrations/frontend/openwebui.md
- Development:
- Integrations:
- Overview: integrations/overview.md
- Backends:
- Ollama: integrations/backend/ollama.md
- LM Studio: integrations/backend/lmstudio.md
- vLLM: integrations/backend/vllm.md
- Frontends:
- OpenWebUI: integrations/frontend/openwebui.md
🧰 Tools
🪛 YAMLlint (1.37.1)

[warning] 137-137: wrong indentation: expected 6 but found 8

(indentation)

🤖 Prompt for AI Agents
In docs/mkdocs.yml around lines 137 to 144, the nested list under "Integrations"
has inconsistent indentation (yamllint expects 6 spaces but found 8); fix by
normalising indentation to match the rest of the nav: align the "- Overview" and
the "- Backends:" / "- Frontends:" entries to the same indentation level as
other top-level nav children under Integrations, and indent their sub-items
(e.g., "Ollama", "LM Studio", "OpenWebUI") exactly two spaces further than their
parent list item so the YAML lists are consistently nested and MkDocs Material
renders correctly.

Comment on lines +1 to +2
mkdocs-material>=9.6.0
mkdocs-minify-plugin>=0.8.0 No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Pin versions for reproducible docs builds

Using >= ranges will yield non-deterministic builds in CI and locally. Prefer pinned versions or a constraints/lock file to stabilise builds and caching keys.

Example options:

  • Pin exact versions:
-mkdocs-material>=9.6.0
-mkdocs-minify-plugin>=0.8.0
+mkdocs-material==9.6.0
+mkdocs-minify-plugin==0.8.0
  • Or keep loose requirements but add constraints.txt and install with -c constraints.txt.

Also consider adding mkdocs explicitly to avoid implicit resolver differences:

+mkdocs==1.6.0
📝 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.

Suggested change
mkdocs-material>=9.6.0
mkdocs-minify-plugin>=0.8.0
mkdocs-material==9.6.0
mkdocs-minify-plugin==0.8.0
mkdocs==1.6.0
🤖 Prompt for AI Agents
In docs/requirements.txt around lines 1 to 2, the dependency spec uses
open-ended >= ranges which causes non-deterministic builds; update the file to
pin exact versions (e.g. replace "mkdocs-material>=9.6.0" and
"mkdocs-minify-plugin>=0.8.0" with fixed versions), or alternatively add a
constraints.txt and document installing with pip -c constraints.txt and add
mkdocs explicitly to the requirements; ensure CI installs using the pinned
versions or the constraints file so builds and cache keys are stable.

Convert CRLF to LF for consistency with Unix-style line endings
@thushan thushan merged commit 10dfa98 into main Aug 11, 2025
7 checks passed
@thushan thushan deleted the feature/mkdocs branch August 11, 2025 13:00
This was referenced Aug 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant