Skip to content

Commit f0e62ff

Browse files
committed
chore(ci): lint markdown files
- Use markdownlint-cli2 to lint markdown files - Add a workflow to trigger on PRs and after pushing, to lint all markdown files - Add a minimal configuration for the linter - Update all .md files to abide by the linter rules
1 parent 6028a90 commit f0e62ff

File tree

16 files changed

+467
-270
lines changed

16 files changed

+467
-270
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# .github/workflows/markdownlint.yml
2+
name: Lint
3+
4+
on:
5+
push:
6+
paths:
7+
- '**/*.md'
8+
- '.github/workflows/markdownlint.yaml'
9+
branches:
10+
- main
11+
pull_request:
12+
paths:
13+
- '**/*.md'
14+
- '.github/workflows/markdownlint.yaml'
15+
16+
permissions:
17+
contents: read
18+
19+
jobs:
20+
lint-markdown:
21+
runs-on: ubuntu-latest
22+
steps:
23+
- name: Checkout repo
24+
uses: actions/checkout@v4
25+
26+
- name: Install Task
27+
uses: arduino/setup-task@8b35f53e4d5a51bf691c94c71f2c7222483206cb
28+
29+
- name: Lint Markdown Files
30+
run: task lint:markdown

.markdownlint-cli2.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Define glob expressions to use (only valid at root)
2+
globs:
3+
- "**/*.md"
4+
ignores:
5+
- "**/.venv/**"
6+
# Show found files on stdout (only valid at root)
7+
showFound: true

.markdownlint.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# .markdownlint.yaml
2+
3+
# MD001: Heading levels should only increment by one level at a time
4+
MD001: false
5+
6+
# MD004: Unordered list style - allow different styles in sublists
7+
MD004:
8+
style: sublist
9+
10+
# MD013: Line length
11+
MD013:
12+
line_length: 120
13+
code_blocks: false
14+
tables: false
15+
16+
# MD025: Multiple top-level headings allowed
17+
MD025: false
18+
19+
# MD033: Inline HTML
20+
MD033:
21+
allowed_elements: [p, img]

README.md

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,50 @@
22

33
## Prerequisites
44

5-
+ **[Docker Desktop](https://www.docker.com/products/docker-desktop/) 4.43.0+ or [Docker Engine](https://docs.docker.com/engine/)** installed
6-
+ **A laptop or workstation with a GPU** (e.g., a MacBook) for running open models locally. If you don't have a GPU, you can alternatively use [**Docker Offload**](https://www.docker.com/products/docker-offload).
7-
+ If you're using Docker Engine on Linux or Docker Desktop on Windows, ensure that the [Docker Model Runner requirements](https://docs.docker.com/ai/model-runner/) are met (specifically that GPU support is enabled) and the necessary drivers are installed
8-
+ If you're using Docker Engine on Linux, ensure you have Compose 2.38.1 or later installed
5+
+ **[Docker Desktop] 4.43.0+ or [Docker Engine]** installed.
6+
+ **A laptop or workstation with a GPU** (e.g., a MacBook) for running open models locally. If you
7+
don't have a GPU, you can alternatively use **[Docker Offload]**.
8+
+ If you're using [Docker Engine] on Linux or [Docker Desktop] on Windows, ensure that the
9+
[Docker Model Runner requirements] are met (specifically that GPU
10+
support is enabled) and the necessary drivers are installed.
11+
+ If you're using Docker Engine on Linux, ensure you have [Docker Compose] 2.38.1 or later installed.
912

1013
## Demos
1114

12-
Each of these demos is self-contained and can be run either locally or using a cloud context. They are all configured using two steps.
15+
Each of these demos is self-contained and can be run either locally or using a cloud context. They
16+
are all configured using two steps.
1317

1418
1. change directory to the root of the demo project
15-
1. create a `.mcp.env` file from the `mcp.env.example` file (if it exists, otherwise the demo doesn't need any secrets) and supply the required MCP tokens
16-
1. run `docker compose up --build`
19+
2. create a `.mcp.env` file from the `mcp.env.example` file (if it exists, otherwise the demo
20+
doesn't need any secrets) and supply the required MCP tokens
21+
3. run `docker compose up --build`
1722

1823
### Using OpenAI models
1924

2025
The demos support using OpenAI models instead of running models locally with Docker Model Runner. To use OpenAI:
26+
2127
1. Create a `secret.openai-api-key` file with your OpenAI API key:
2228

23-
```
24-
sk-...
25-
```
29+
```plaintext
30+
sk-...
31+
```
32+
2633
2. Start the project with the OpenAI configuration:
2734
28-
```
29-
docker compose -f compose.yaml -f compose.openai.yaml up
30-
```
35+
```sh
36+
docker compose -f compose.yaml -f compose.openai.yaml up
37+
```
3138
3239
# Compose for Agents Demos - Classification
3340
3441
| Demo | Agent System | Models | MCPs | project | compose |
3542
| ---- | ---- | ---- | ---- | ---- | ---- |
36-
| [A2A](https://github.com/a2a-agents/agent2agent) Multi-Agent Fact Checker | Multi-Agent | OpenAI | duckduckgo | [./a2a](./a2a) | [compose.yaml](./a2a/compose.yaml) |
43+
| [A2A](https://github.com/a2a-agents/agent2agent) Multi-Agent Fact Checker | Multi-Agent | OpenAI | duckduckgo | [./a2a](./a2a) | [compose.yaml](./a2a/compose.yaml) |
3744
| [Agno](https://github.com/agno-agi/agno) agent that summarizes GitHub issues | Multi-Agent | qwen3(local) | github-official | [./agno](./agno) | [compose.yaml](./agno/compose.yaml) |
3845
| [Vercel AI-SDK](https://github.com/vercel/ai) Chat-UI for mixing MCPs and Model | Single Agent | llama3.2(local), qwen3(local) | wikipedia-mcp, brave, resend(email) | [./vercel](./vercel) | [compose.yaml](https://github.com/slimslenderslacks/scira-mcp-chat/blob/main/compose.yaml) |
3946
| [CrewAI](https://github.com/crewAIInc/crewAI) Marketing Strategy Agent | Multi-Agent | qwen3(local) | duckduckgo | [./crew-ai](./crew-ai) | [compose.yaml](https://github.com/docker/compose-agents-demo/blob/main/crew-ai/compose.yaml) |
4047
| [ADK](https://github.com/google/adk-python) Multi-Agent Fact Checker | Multi-Agent | gemma3-qat(local) | duckduckgo | [./adk](./adk) | [compose.yaml](./adk/compose.yaml) |
41-
| [ADK](https://github.com/google/adk-python) & [Cerebras](https://www.cerebras.ai/) Golang Experts | Multi-Agent | unsloth/qwen3-gguf:4B-UD-Q4_K_XL & ai/qwen2.5:latest (DMR local), llama-4-scout-17b-16e-instruct (Cerebras remote) | | [./adk-cerebras](./adk-cerebras) | [compose.yml](./adk-cerebras/compose.yml) |
48+
| [ADK](https://github.com/google/adk-python) & [Cerebras](https://www.cerebras.ai/) Golang Experts | Multi-Agent | unsloth/qwen3-gguf:4B-UD-Q4_K_XL & ai/qwen2.5:latest (DMR local), llama-4-scout-17b-16e-instruct (Cerebras remote) | | [./adk-cerebras](./adk-cerebras) | [compose.yml](./adk-cerebras/compose.yml) |
4249
| [LangGraph](https://github.com/langchain-ai/langgraph) SQL Agent | Single Agent | qwen3(local) | postgres | [./langgraph](./langgraph) | [compose.yaml](./langgraph/compose.yaml) |
4350
| [Embabel](https://github.com/embabel/embabel-agent) Travel Agent | Multi-Agent | qwen3, Claude3.7, llama3.2, jimclark106/all-minilm:23M-F16 | brave, github-official, wikipedia-mcp, weather, google-maps, airbnb | [./embabel](./embabel) | [compose.yaml](https://github.com/embabel/travel-planner-agent/blob/main/compose.yaml) and [compose.dmr.yaml](https://github.com/embabel/travel-planner-agent/blob/main/compose.dmr.yaml) |
4451
| [Spring AI](https://spring.io/projects/spring-ai) Brave Search | Single Agent | none | duckduckgo | [./spring-ai](./spring-ai) | [compose.yaml](./spring-ai/compose.yaml) |
@@ -54,3 +61,9 @@ made by Docker in this repository.
5461
> apply to that specific example, and they must be respected accordingly.
5562
5663
`SPDX-License-Identifier: Apache-2.0 OR MIT`
64+
65+
[Docker Compose]: https://github.com/docker/compose
66+
[Docker Desktop]: https://www.docker.com/products/docker-desktop/
67+
[Docker Engine]: https://docs.docker.com/engine/
68+
[Docker Model Runner requirements]: https://docs.docker.com/ai/model-runner/
69+
[Docker Offload]: https://www.docker.com/products/docker-offload/

Taskfile.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
version: '3'
2+
3+
vars:
4+
MARKDOWN_CLI2_CMD: docker run --rm -v $(pwd):/workdir davidanson/markdownlint-cli2:v0.18.1
5+
6+
tasks:
7+
lint:markdown:
8+
desc: Lint Markdown files
9+
cmds:
10+
- "{{ .MARKDOWN_CLI2_CMD }}"
11+
dir: .
12+
lint:markdown:fix:
13+
desc: Lint and Fix Markdown files
14+
cmds:
15+
- "{{ .MARKDOWN_CLI2_CMD }} --fix"
16+
dir: .
17+
18+
lint:
19+
deps:
20+
- lint:markdown
21+
desc: Lint all files

a2a/README.md

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ internal reasoning alone. The system showcases how agents with distinct roles an
1010
> [!Tip]
1111
> ✨ No configuration needed — run it with a single command.
1212
13-
1413
<p align="center">
1514
<img src="demo.gif"
1615
alt="A2A Multi-Agent Fact Check Demo"
@@ -22,17 +21,20 @@ internal reasoning alone. The system showcases how agents with distinct roles an
2221

2322
### Requirements
2423

25-
+ **[Docker Desktop](https://www.docker.com/products/docker-desktop/) 4.43.0+ or [Docker Engine](https://docs.docker.com/engine/)** installed
26-
+ **A laptop or workstation with a GPU** (e.g., a MacBook) for running open models locally. If you don't have a GPU, you can alternatively use [**Docker Offload**](https://www.docker.com/products/docker-offload).
27-
+ If you're using Docker Engine on Linux or Docker Desktop on Windows, ensure that the [Docker Model Runner requirements](https://docs.docker.com/ai/model-runner/) are met (specifically that GPU support is enabled) and the necessary drivers are installed
28-
+ If you're using Docker Engine on Linux, ensure you have Compose 2.38.1 or later installed
29-
+ An [OpenAI API Key](https://platform.openai.com/api-keys) 🔑
24+
+ **[Docker Desktop] 4.43.0+ or [Docker Engine]** installed.
25+
+ **A laptop or workstation with a GPU** (e.g., a MacBook) for running open models locally. If you
26+
don't have a GPU, you can alternatively use **[Docker Offload]**.
27+
+ If you're using [Docker Engine] on Linux or [Docker Desktop] on Windows, ensure that the
28+
[Docker Model Runner requirements] are met (specifically that GPU
29+
support is enabled) and the necessary drivers are installed.
30+
+ If you're using Docker Engine on Linux, ensure you have [Docker Compose] 2.38.1 or later installed.
31+
+ An [OpenAI API Key](https://platform.openai.com/api-keys) 🔑.
3032

3133
### Run the project
3234

3335
Create a `secret.openai-api-key` file with your OpenAI API key:
3436

35-
```
37+
```plaintext
3638
sk-...
3739
```
3840

@@ -61,18 +63,17 @@ same demo with a larger model that takes advantage of a more powerful GPU on the
6163
docker compose -f compose.dmr.yaml -f compose.offload.yaml up --build
6264
```
6365

64-
6566
# ❓ What Can It Do?
6667

6768
This system performs multi-agent fact verification, coordinated by an **Auditor**:
6869

69-
- 🧑‍⚖️ **Auditor**:
70-
- Orchestrates the process from input to verdict.
71-
- Delegates tasks to Critic and Reviser agents.
72-
- 🧠 **Critic**:
73-
- Uses DuckDuckGo via MCP to gather real-time external evidence.
74-
- ✍️ **Reviser**:
75-
- Refines and verifies the Critic’s conclusions using only reasoning.
70+
+ 🧑‍⚖️ **Auditor**:
71+
* Orchestrates the process from input to verdict.
72+
* Delegates tasks to Critic and Reviser agents.
73+
+ 🧠 **Critic**:
74+
* Uses DuckDuckGo via MCP to gather real-time external evidence.
75+
+ ✍️ **Reviser**:
76+
* Refines and verifies the Critic’s conclusions using only reasoning.
7677

7778
**🧠 All agents use the Docker Model Runner for LLM-based inference.**
7879

@@ -89,7 +90,6 @@ Example question:
8990
| `src/AgentKit` | Agent runtime |
9091
| `agents/*.yaml` | Agent definitions |
9192

92-
9393
# 🔧 Architecture Overview
9494

9595
```mermaid
@@ -115,10 +115,10 @@ flowchart TD
115115
116116
```
117117

118-
- The Auditor is a Sequential Agent, it coordinates Critic and Reviser agents to verify user-provided claims.
119-
- The Critic agent performs live web searches through DuckDuckGo using an MCP-compatible gateway.
120-
- The Reviser agent refines the Critic’s conclusions using internal reasoning alone.
121-
- All agents run inference through a Docker-hosted Model Runner, enabling fully containerized LLM reasoning.
118+
+ The Auditor is a Sequential Agent, it coordinates Critic and Reviser agents to verify user-provided claims.
119+
+ The Critic agent performs live web searches through DuckDuckGo using an MCP-compatible gateway.
120+
+ The Reviser agent refines the Critic’s conclusions using internal reasoning alone.
121+
+ All agents run inference through a Docker-hosted Model Runner, enabling fully containerized LLM reasoning.
122122

123123
# 🤝 Agent Roles
124124

@@ -128,7 +128,6 @@ flowchart TD
128128
| **Critic** | ✅ DuckDuckGo via MCP | Gathers evidence to support or refute the claim |
129129
| **Reviser** | ❌ None | Refines and finalizes the answer without external input |
130130

131-
132131
# 🧹 Cleanup
133132

134133
To stop and remove containers and volumes:
@@ -137,15 +136,16 @@ To stop and remove containers and volumes:
137136
docker compose down -v
138137
```
139138

140-
141139
# 📎 Credits
142-
- [A2A]
143-
- [DuckDuckGo]
144-
- [Docker Compose]
145140

141+
+ [A2A]
142+
+ [DuckDuckGo]
143+
+ [Docker Compose]
146144

147145
[A2A]: https://github.com/a2aproject/a2a-python
148146
[DuckDuckGo]: https://duckduckgo.com
149147
[Docker Compose]: https://github.com/docker/compose
150148
[Docker Desktop]: https://www.docker.com/products/docker-desktop/
151-
[Docker Model Runner]: https://docs.docker.com/ai/model-runner/
149+
[Docker Engine]: https://docs.docker.com/engine/
150+
[Docker Model Runner requirements]: https://docs.docker.com/ai/model-runner/
151+
[Docker Offload]: https://www.docker.com/products/docker-offload/

adk-cerebras/README.md

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,39 @@
11
# DevDuck agents
22

3-
A multi-agent system for Go programming assistance built with Google Agent Development Kit (ADK). This project features a coordinating agent (DevDuck) that manages two specialized sub-agents (Bob and Cerebras) for different programming tasks.
3+
A multi-agent system for Go programming assistance built with Google Agent Development Kit (ADK). This
4+
project features a coordinating agent (DevDuck) that manages two specialized sub-agents (Bob and
5+
Cerebras) for different programming tasks.
46

57
## Architecture
68

7-
The system consists of three main agents orchestrated by Docker Compose, which plays a **primordial role** in launching and coordinating all agent services:
9+
The system consists of three main agents orchestrated by Docker Compose, which plays a
10+
**primordial role** in launching and coordinating all agent services:
811

912
### 🐙 Docker Compose Orchestration
13+
1014
- **Central Role**: Docker Compose serves as the foundation for the entire multi-agent system
1115
- **Service Orchestration**: Manages the lifecycle of all three agents (DevDuck, Bob, and Cerebras)
12-
- **Configuration Management**: Defines agent prompts, model configurations, and service dependencies directly in the compose file
16+
- **Configuration Management**: Defines agent prompts, model configurations, and service dependencies
17+
directly in the compose file
1318
- **Network Coordination**: Establishes secure inter-agent communication channels
1419
- **Environment Management**: Handles API keys, model parameters, and runtime configurations
1520

16-
### Agent Components:
21+
### Agent Components
1722

1823
### 🦆 DevDuck (Main Agent)
24+
1925
- **Role**: Main development assistant and project coordinator
2026
- **Model**: Qwen3 (unsloth/qwen3-gguf:4B-UD-Q4_K_XL)
2127
- **Capabilities**: Routes requests to appropriate sub-agents based on user needs
2228

2329
### 👨‍💻 Bob Agent
30+
2431
- **Role**: General development tasks and project coordination
2532
- **Model**: Qwen2.5 (ai/qwen2.5:latest)
2633
- **Specialization**: Go programming expert for understanding code, explaining concepts, and generating code snippets
2734

2835
### 🧠 Cerebras Agent
36+
2937
- **Role**: Advanced computational tasks and complex problem-solving
3038
- **Model**: Llama-4 Scout (llama-4-scout-17b-16e-instruct)
3139
- **Provider**: Cerebras API
@@ -43,21 +51,25 @@ The system consists of three main agents orchestrated by Docker Compose, which p
4351

4452
### Prerequisites
4553

46-
+ **[Docker Desktop](https://www.docker.com/products/docker-desktop/) 4.43.0+ or [Docker Engine](https://docs.docker.com/engine/)** installed
47-
+ **A laptop or workstation with a GPU** (e.g., a MacBook) for running open models locally. If you don't have a GPU, you can alternatively use [**Docker Offload**](https://www.docker.com/products/docker-offload).
48-
+ If you're using Docker Engine on Linux or Docker Desktop on Windows, ensure that the [Docker Model Runner requirements](https://docs.docker.com/ai/model-runner/) are met (specifically that GPU support is enabled) and the necessary drivers are installed
49-
+ If you're using Docker Engine on Linux, ensure you have Compose 2.38.1 or later installed
54+
- **[Docker Desktop] 4.43.0+ or [Docker Engine]** installed.
55+
- **A laptop or workstation with a GPU** (e.g., a MacBook) for running open models locally. If you
56+
don't have a GPU, you can alternatively use **[Docker Offload]**.
57+
- If you're using [Docker Engine] on Linux or [Docker Desktop] on Windows, ensure that the
58+
[Docker Model Runner requirements] are met (specifically that GPU
59+
support is enabled) and the necessary drivers are installed.
60+
- If you're using Docker Engine on Linux, ensure you have [Docker Compose] 2.38.1 or later installed.
5061

5162
### Configuration
5263

53-
1. **You need a Cerebras API Key**: https://cloud.cerebras.ai/
64+
1. **You need a Cerebras API Key**: <https://cloud.cerebras.ai/>
5465
2. Create a `.env` file with the following content:
5566

5667
```env
5768
CEREBRAS_API_KEY=<your_cerebras_api_key>
5869
CEREBRAS_BASE_URL=https://api.cerebras.ai/v1
5970
CEREBRAS_CHAT_MODEL=llama-4-scout-17b-16e-instruct
6071
```
72+
6173
> look at the `.env.sample` file
6274
6375
### ✋ All the prompts are defined in the 🐙 compose file
@@ -71,14 +83,14 @@ docker compose up
7183

7284
The application will be available at [http://0.0.0.0:8000](http://0.0.0.0:8000)
7385

74-
7586
### Usage
7687

7788
The agents can be accessed through the web interface or API endpoints.
7889

7990
> Activate Token Streaming
8091
8192
**You can try this**:
93+
8294
```text
8395
Hello I'm Phil
8496
@@ -90,20 +102,28 @@ Cerebras can you analyse and comment this code
90102
91103
Can you generate the tests
92104
```
105+
93106
> ✋ For a public demo, stay simple, the above examples are working.
94107
95108
**🎥 How to use the demo**: [https://youtu.be/WYB31bzfXnM](https://youtu.be/WYB31bzfXnM)
96109

97110
#### Routing Requests
98111

99112
- **General requests**: Handled by DevDuck, who routes to appropriate sub-agents
100-
- **Specific agent requests**:
101-
- "I want to speak with Bob" → Routes to Bob agent
102-
- "I want to speak with Cerebras" → Routes to Cerebras agent
113+
- **Specific agent requests**
114+
+ "I want to speak with Bob" → Routes to Bob agent
115+
+ "I want to speak with Cerebras" → Routes to Cerebras agent
103116

104117
## Tips
105118

106119
If for any reason, you cannot go back from the Cerebras agent to the Bob agent, try this:
120+
107121
```text
108122
go back to devduck
109123
```
124+
125+
[Docker Compose]: https://github.com/docker/compose
126+
[Docker Desktop]: https://www.docker.com/products/docker-desktop/
127+
[Docker Engine]: https://docs.docker.com/engine/
128+
[Docker Model Runner requirements]: https://docs.docker.com/ai/model-runner/
129+
[Docker Offload]: https://www.docker.com/products/docker-offload/

0 commit comments

Comments
 (0)