Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
b057902
refactor(agents): migrate docqa + routing to hub (#1102)
Jun 4, 2026
dc71d62
fix(agents): repoint gaia-agent-code at relocated RoutingAgent (#1102)
Jun 4, 2026
42d3220
Merge remote-tracking branch 'origin/main' into claudia/task-8fa7ecef
Jun 10, 2026
7b7379f
Merge remote-tracking branch 'origin/main' into claudia/task-8fa7ecef
Jun 10, 2026
1674258
Merge branch 'main' into claudia/task-8fa7ecef
kovtcharov-amd Jun 10, 2026
3b81417
Merge branch 'main' into claudia/task-8fa7ecef
kovtcharov-amd Jun 11, 2026
7fc433d
Merge remote-tracking branch 'origin/main' into claudia/task-8fa7ecef
kovtcharov Jun 17, 2026
633e365
fix(agents): complete docqa+routing migration cleanup (#1102)
kovtcharov Jun 17, 2026
f5e3586
ci(code-agent): install local routing wheel before code agent (#1102)
kovtcharov Jun 17, 2026
81b07b8
ci(api): install routing+code wheels so gaia-code API path works (#1102)
kovtcharov Jun 17, 2026
28a643a
Merge remote-tracking branch 'origin/main' into pr1455-update
kovtcharov Jun 19, 2026
8fa14a5
docs(agents): fix stale docqa/routing paths flagged in review (#1102)
kovtcharov Jun 19, 2026
e8f5f45
Merge remote-tracking branch 'origin/main' into pr1455-update
kovtcharov Jun 19, 2026
17221cc
Merge remote-tracking branch 'origin/main' into pr1455-update
kovtcharov Jun 19, 2026
2c9f0ce
feat(agent-email): add GET /v1/email/init readiness preflight (#1795)
kovtcharov Jun 21, 2026
2995d77
test(agent-email): handle mounted sub-routers in init mount test
kovtcharov Jun 22, 2026
11da149
test(agent-email): prove init mount via HTTP, not route introspection
kovtcharov Jun 22, 2026
50d8649
feat(agent-email): add POST /v1/email/init streaming provisioning ver…
kovtcharov Jun 22, 2026
5ac76d8
feat(agent-email): readiness checks Lemonade VERSION compat, not just…
kovtcharov Jun 22, 2026
4941caa
feat(cli): add gaia init --profile email (download + version-check th…
kovtcharov Jun 22, 2026
2cb31af
Merge remote-tracking branch 'origin/main' into claudia/task-4a1065f9
kovtcharov Jun 22, 2026
6e13daf
Merge branch 'main' into claudia/task-4a1065f9
kovtcharov Jun 23, 2026
0fc78a1
Merge branch 'main' into claudia/task-4a1065f9
kovtcharov Jun 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/workflows/test_api.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ on:
- 'src/gaia/api/**'
- 'src/gaia/agents/base/**'
- 'src/gaia/llm/**'
- 'hub/agents/python/routing/**'
- 'hub/agents/python/code/**'
- 'tests/test_api.py'
- 'setup.py'
- '.github/workflows/test_api.yml'
Expand All @@ -24,6 +26,8 @@ on:
- 'src/gaia/api/**'
- 'src/gaia/agents/base/**'
- 'src/gaia/llm/**'
- 'hub/agents/python/routing/**'
- 'hub/agents/python/code/**'
- 'tests/test_api.py'
- 'setup.py'
- '.github/workflows/test_api.yml'
Expand Down Expand Up @@ -58,6 +62,13 @@ jobs:
shell: powershell
run: |
uv pip install pytest pytest-timeout requests --python .venv\Scripts\python.exe
# The 'gaia-code' API model routes through RoutingAgent, which now
# ships as the standalone gaia-agent-routing wheel (#1102). Install
# both local hub packages (routing first, since gaia-agent-code
# depends on it and it isn't on PyPI) so the gaia-code streaming
# tests exercise the real agent instead of the missing-wheel error.
uv pip install -e hub/agents/python/routing --python .venv\Scripts\python.exe
uv pip install -e hub/agents/python/code --python .venv\Scripts\python.exe

- name: Install Lemonade Server
uses: ./.github/actions/install-lemonade
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/test_code_agent.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ on:
paths:
- 'hub/agents/python/code/**'
- 'src/gaia/agents/base/**'
- 'src/gaia/agents/routing/**'
- 'hub/agents/python/routing/**'
- 'setup.py'
- '.github/workflows/test_code_agent.yml'
pull_request:
Expand All @@ -22,7 +22,7 @@ on:
paths:
- 'hub/agents/python/code/**'
- 'src/gaia/agents/base/**'
- 'src/gaia/agents/routing/**'
- 'hub/agents/python/routing/**'
- 'setup.py'
- '.github/workflows/test_code_agent.yml'
merge_group:
Expand Down Expand Up @@ -59,6 +59,10 @@ jobs:
- name: Install dependencies
run: |
uv pip install --system -e .[dev]
# gaia-agent-code depends on gaia-agent-routing, which isn't published
# to PyPI — install the local hub package first so the dependency
# resolves locally instead of hitting the registry (#1102).
uv pip install --system -e hub/agents/python/routing
# CodeAgent ships as the standalone gaia-agent-code wheel (#1397, #1102)
uv pip install --system -e hub/agents/python/code
# Install optional dependencies for code agent
Expand Down
63 changes: 63 additions & 0 deletions .github/workflows/test_docqa_agent.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
# SPDX-License-Identifier: MIT

# Tests the GAIA Document Q&A agent, which ships as the standalone gaia-agent-docqa
# wheel (#1102).

name: DocQA Agent Tests

on:
workflow_call:
push:
branches: [ main ]
paths:
- 'hub/agents/python/docqa/**'
- 'src/gaia/agents/base/**'
- 'src/gaia/agents/tools/**'
- 'setup.py'
- '.github/workflows/test_docqa_agent.yml'
pull_request:
branches: [ main ]
types: [opened, synchronize, reopened, ready_for_review]
paths:
- 'hub/agents/python/docqa/**'
- 'src/gaia/agents/base/**'
- 'src/gaia/agents/tools/**'
- 'setup.py'
- '.github/workflows/test_docqa_agent.yml'
merge_group:
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
test-docqa-agent:
name: Test DocQA Agent
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false || contains(github.event.pull_request.labels.*.name, 'ready_for_ci')

steps:
- uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.12'

- name: Install uv
run: curl -LsSf https://astral.sh/uv/install.sh | sh

- name: Install dependencies
run: |
uv pip install --system -e .[dev]
# DocumentQAAgent ships as the standalone gaia-agent-docqa wheel (#1102)
uv pip install --system -e hub/agents/python/docqa

- name: Run DocQA Agent Tests
run: |
python -m pytest hub/agents/python/docqa/tests/ -v --tb=short
16 changes: 15 additions & 1 deletion .github/workflows/test_gaia_cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,20 @@ jobs:
uses: ./.github/workflows/test_browser_agent.yml
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false || contains(github.event.pull_request.labels.*.name, 'ready_for_ci')

# Test DocQA Agent (standalone hub wheel, #1102)
test-docqa-agent:
name: DocQA Agent Tests
needs: lint
uses: ./.github/workflows/test_docqa_agent.yml
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false || contains(github.event.pull_request.labels.*.name, 'ready_for_ci')

# Test Routing Agent (standalone hub wheel, #1102)
test-routing-agent:
name: Routing Agent Tests
needs: lint
uses: ./.github/workflows/test_routing_agent.yml
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false || contains(github.event.pull_request.labels.*.name, 'ready_for_ci')

# Test Email Agent (standalone hub wheel, #1102)
test-email-agent:
name: Email Agent Tests
Expand All @@ -112,7 +126,7 @@ jobs:
test-summary:
name: Test Summary
runs-on: ubuntu-latest
needs: [lint, unit-tests, test-windows, test-linux, test-mcp, test-code-agent, test-chat-agent, test-connectors-demo, test-analyst-agent, test-browser-agent, test-email-agent, test-security]
needs: [lint, unit-tests, test-windows, test-linux, test-mcp, test-code-agent, test-chat-agent, test-connectors-demo, test-analyst-agent, test-browser-agent, test-docqa-agent, test-routing-agent, test-email-agent, test-security]
# Run always except when workflow or any dependency is cancelled (e.g., by cancel-in-progress)
if: >-
${{ always() && !cancelled() &&
Expand Down
65 changes: 65 additions & 0 deletions .github/workflows/test_routing_agent.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
# SPDX-License-Identifier: MIT

# Tests the GAIA Routing agent, which ships as the standalone gaia-agent-routing
# wheel (#1102).

name: Routing Agent Tests

on:
workflow_call:
push:
branches: [ main ]
paths:
- 'hub/agents/python/routing/**'
- 'src/gaia/agents/base/**'
- 'src/gaia/agents/registry.py'
- 'src/gaia/api/agent_registry.py'
- 'setup.py'
- '.github/workflows/test_routing_agent.yml'
pull_request:
branches: [ main ]
types: [opened, synchronize, reopened, ready_for_review]
paths:
- 'hub/agents/python/routing/**'
- 'src/gaia/agents/base/**'
- 'src/gaia/agents/registry.py'
- 'src/gaia/api/agent_registry.py'
- 'setup.py'
- '.github/workflows/test_routing_agent.yml'
merge_group:
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
test-routing-agent:
name: Test Routing Agent
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false || contains(github.event.pull_request.labels.*.name, 'ready_for_ci')

steps:
- uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.12'

- name: Install uv
run: curl -LsSf https://astral.sh/uv/install.sh | sh

- name: Install dependencies
run: |
uv pip install --system -e .[dev]
# RoutingAgent ships as the standalone gaia-agent-routing wheel (#1102)
uv pip install --system -e hub/agents/python/routing

- name: Run Routing Agent Tests
run: |
python -m pytest hub/agents/python/routing/tests/ -v --tb=short
6 changes: 3 additions & 3 deletions docs/guides/routing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ icon: "route"
---

<Info>
**Source Code:** [`src/gaia/agents/routing/agent.py`](https://github.com/amd/gaia/blob/main/src/gaia/agents/routing/agent.py) · [`src/gaia/agents/routing/system_prompt.py`](https://github.com/amd/gaia/blob/main/src/gaia/agents/routing/system_prompt.py)
**Source Code:** [`hub/agents/python/routing/gaia_agent_routing/agent.py`](https://github.com/amd/gaia/blob/main/hub/agents/python/routing/gaia_agent_routing/agent.py) · [`hub/agents/python/routing/gaia_agent_routing/system_prompt.py`](https://github.com/amd/gaia/blob/main/hub/agents/python/routing/gaia_agent_routing/system_prompt.py)
</Info>

## Overview
Expand Down Expand Up @@ -239,8 +239,8 @@ gaia-code "Create an Express API with SQLite"
## Technical Details

For implementation details, see:
- Source code: `src/gaia/agents/routing/agent.py`
- System prompt: `src/gaia/agents/routing/system_prompt.py`
- Source code: `hub/agents/python/routing/gaia_agent_routing/agent.py`
- System prompt: `hub/agents/python/routing/gaia_agent_routing/system_prompt.py`
- CLI integration: `src/gaia/cli.py` (search for "RoutingAgent")

## See Also
Expand Down
2 changes: 1 addition & 1 deletion docs/playbooks/chat-agent/part-3-deployment.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ def _generate_search_keys(self, query: str) -> List[str]:
```python title="src/gaia/api/agent_registry.py (excerpt)"
AGENT_MODELS = {
"gaia-code": {
"class_name": "gaia.agents.routing.agent.RoutingAgent",
"class_name": "gaia_agent_routing.agent.RoutingAgent",
"init_params": {"api_mode": True, "silent_mode": True, "max_steps": 100},
"description": "Default routing agent",
},
Expand Down
12 changes: 6 additions & 6 deletions docs/sdk/agents/routing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ title: "Multi-Agent Orchestration"
---

<Info>
**Source Code:** [`src/gaia/agents/routing/`](https://github.com/amd/gaia/blob/main/src/gaia/agents/routing/)
**Source Code:** [`hub/agents/python/routing/`](https://github.com/amd/gaia/blob/main/hub/agents/python/routing/)
</Info>

<Note>
**Import:** `from gaia.agents.routing.agent import RoutingAgent`
**Import:** `from gaia_agent_routing.agent import RoutingAgent`
</Note>
---

Expand All @@ -28,7 +28,7 @@ title: "Multi-Agent Orchestration"
## 11.1 Basic Routing

```python
from gaia.agents.routing.agent import RoutingAgent
from gaia_agent_routing.agent import RoutingAgent

# Create router (no interactive mode - uses defaults)
router = RoutingAgent(api_mode=True)
Expand All @@ -53,7 +53,7 @@ print(result)
## 11.2 Interactive Routing (CLI Mode)

```python
from gaia.agents.routing.agent import RoutingAgent
from gaia_agent_routing.agent import RoutingAgent

# Create router with user interaction
router = RoutingAgent(api_mode=False)
Expand All @@ -77,7 +77,7 @@ result = agent.process_query("Build the app")
## 11.3 Routing with Conversation History

```python
from gaia.agents.routing.agent import RoutingAgent
from gaia_agent_routing.agent import RoutingAgent

router = RoutingAgent(api_mode=False)

Expand Down Expand Up @@ -110,7 +110,7 @@ agent = router.process_query(
## 11.4 Intent Detection Patterns

```python
from gaia.agents.routing.agent import RoutingAgent
from gaia_agent_routing.agent import RoutingAgent

router = RoutingAgent(api_mode=True)

Expand Down
2 changes: 1 addition & 1 deletion docs/sdk/infrastructure/api-server.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ model, append an entry to `AGENT_MODELS`:
# src/gaia/api/agent_registry.py
AGENT_MODELS = {
"gaia-code": {
"class_name": "gaia.agents.routing.agent.RoutingAgent",
"class_name": "gaia_agent_routing.agent.RoutingAgent",
"init_params": {
"api_mode": True,
"silent_mode": True,
Expand Down
2 changes: 1 addition & 1 deletion docs/spec/api-server.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ from typing import Any, Dict

AGENT_MODELS: Dict[str, Dict[str, Any]] = {
"gaia-code": {
"class_name": "gaia.agents.routing.agent.RoutingAgent",
"class_name": "gaia_agent_routing.agent.RoutingAgent",
"init_params": {"api_mode": True, "silent_mode": True,
"streaming": False, "max_steps": 100},
"description": "Intelligent routing agent ...",
Expand Down
8 changes: 4 additions & 4 deletions docs/spec/routing-agent.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ title: "RoutingAgent"
---

<Info>
**Source Code:** [`src/gaia/agents/routing/agent.py`](https://github.com/amd/gaia/blob/main/src/gaia/agents/routing/agent.py)
**Source Code:** [`hub/agents/python/routing/gaia_agent_routing/agent.py`](https://github.com/amd/gaia/blob/main/hub/agents/python/routing/gaia_agent_routing/agent.py)
</Info>

<Note>
**Component:** RoutingAgent - Multi-agent orchestration
**Module:** `gaia.agents.routing.agent`
**Import:** `from gaia.agents.routing.agent import RoutingAgent`
**Module:** `gaia_agent_routing.agent`
**Import:** `from gaia_agent_routing.agent import RoutingAgent`
</Note>
---

Expand Down Expand Up @@ -129,7 +129,7 @@ class RoutingAgent:
### Example 1: CLI Mode with Disambiguation

```python
from gaia.agents.routing.agent import RoutingAgent
from gaia_agent_routing.agent import RoutingAgent

router = RoutingAgent()

Expand Down
6 changes: 4 additions & 2 deletions hub/agents/python/code/gaia_agent_code/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,10 @@ def cmd_run(args):
return 1

try:
# Import RoutingAgent for intelligent language detection
from gaia.agents.routing.agent import RoutingAgent
# Import RoutingAgent for intelligent language detection. It ships as
# the standalone gaia-agent-routing wheel (#1102), declared as a
# dependency of this package.
from gaia_agent_routing.agent import RoutingAgent

# Handle --path argument
project_path = args.path if hasattr(args, "path") else None
Expand Down
4 changes: 3 additions & 1 deletion hub/agents/python/code/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ authors = [{ name = "AMD" }]
license = { text = "MIT" }
readme = "README.md"
requires-python = ">=3.10"
dependencies = ["amd-gaia>=0.20.0"]
# gaia-agent-routing: the `gaia-code` query path routes through RoutingAgent
# for language/project-type detection (#1102).
dependencies = ["amd-gaia>=0.20.0", "gaia-agent-routing>=0.1.0"]

[project.entry-points."gaia.agent"]
code = "gaia_agent_code:build_registration"
Expand Down
22 changes: 22 additions & 0 deletions hub/agents/python/docqa/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# gaia-agent-docqa

Standalone GAIA agent — RAG-focused document Q&A and indexing. Depends on the published
`amd-gaia` framework wheel.

## Install

```bash
pip install gaia-agent-docqa # from PyPI (once published)
pip install -e hub/agents/python/docqa # editable, for development
```

Installing registers the `docqa` agent via the `gaia.agent` entry-point group;
the GAIA registry discovers it automatically. It is a building-block agent,
hidden from the UI selector by default.

## Develop / test

```bash
pip install -e ".[test]"
pytest hub/agents/python/docqa/tests/ -x
```
Loading
Loading