Skip to content

Commit 79a9974

Browse files
committed
Reorganize docs structure and add forge-ui, TOON pages
- Homepage: reorganize features into Components section, add Example MCP Servers, move Tool RAG to Key Innovations - Add forge-ui docs page with screenshots - Add TOON Format docs page - Sidebar: rename Architecture to Components, add Techniques section with Tool RAG and TOON - Remove code examples from orchestrator, armory, interfaces docs (keep tables and diagrams) - Add new blog posts to sidebar
1 parent f083403 commit 79a9974

11 files changed

Lines changed: 238 additions & 230 deletions

File tree

.vitepress/config.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,32 @@ export default defineConfig({
4848
]
4949
},
5050
{
51-
text: 'Architecture',
51+
text: 'Components',
5252
items: [
5353
{ text: 'Overview', link: '/docs/' },
5454
{ text: 'Orchestrator', link: '/docs/orchestrator' },
5555
{ text: 'Armory', link: '/docs/armory' },
56+
{ text: 'forge-ui', link: '/docs/forge-ui' },
5657
{ text: 'Anvil', link: '/docs/anvil' },
57-
{ text: 'Tool RAG', link: '/docs/tool-rag' },
5858
{ text: 'Interfaces', link: '/docs/interfaces' },
5959
]
60+
},
61+
{
62+
text: 'Techniques',
63+
items: [
64+
{ text: 'Tool RAG', link: '/docs/tool-rag' },
65+
{ text: 'TOON Format', link: '/docs/toon' },
66+
]
6067
}
6168
],
6269
'/blog/': [
6370
{
6471
text: 'Blog',
6572
items: [
6673
{ text: 'All Posts', link: '/blog/' },
74+
{ text: 'Cutting Context by 60%', link: '/blog/token-optimization-toon-rag' },
75+
{ text: 'Tool RAG: Dynamic Discovery', link: '/blog/tool-rag-dynamic-discovery' },
76+
{ text: 'TOON Format Support', link: '/blog/toon-format-support' },
6777
{ text: 'Multi-Provider Orchestrator', link: '/blog/multi-provider-orchestrator' },
6878
{ text: 'Armory MCP Gateway', link: '/blog/armory-mcp-gateway' },
6979
{ text: 'Streaming Tool Calls', link: '/blog/streaming-tool-calls' },

docs/armory.md

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,6 @@ Armory exposes multiple MCP endpoints, giving clients flexibility:
4040

4141
Orchestrators connect to the Armory as a single MCP server. They don't need to know about the various backends - they just see a collection of tools.
4242

43-
```python
44-
# Pydantic AI connects to Armory as MCP server
45-
from pydantic_ai import Agent
46-
from pydantic_ai.mcp import MCPServerSSE
47-
48-
armory = MCPServerSSE('http://localhost:8000/mcp')
49-
agent = Agent('openai:gpt-4o', toolsets=[armory])
50-
51-
async with agent.run_mcp_servers():
52-
# All tools from all backends are available
53-
result = await agent.run("Search and summarize")
54-
```
55-
5643
### Protocol Translation
5744

5845
The Armory translates between different protocol formats automatically:
@@ -63,18 +50,7 @@ The Armory translates between different protocol formats automatically:
6350

6451
### Result Transformation (JSON → TOON)
6552

66-
Tool results are converted to TOON format for token efficiency:
67-
68-
```python
69-
class ResultTransformer:
70-
def transform(self, result: Any) -> str:
71-
# TOON for tabular data (30-40% savings)
72-
if self._is_tabular(result):
73-
return toon.encode(result)
74-
75-
# JSON for complex nested structures
76-
return json.dumps(result)
77-
```
53+
Tool results are automatically converted to TOON format for token efficiency. Send `Accept: text/toon` header to enable.
7854

7955
**Before (JSON):**
8056
```json
@@ -179,24 +155,6 @@ sources:
179155
args: ["-m", "forge_mcp_servers.notes"]
180156
```
181157
182-
## Usage
183-
184-
```python
185-
from agentic_forge import Armory
186-
187-
# Load from config
188-
armory = Armory.from_config("armory.yaml")
189-
190-
# Or configure programmatically
191-
armory = Armory()
192-
await armory.register_mcp_server("http://localhost:3001/mcp", prefix="fs_")
193-
await armory.register_rest_api("https://api.weather.com", tools=[...])
194-
await armory.register_local_function(my_function)
195-
196-
# Start the server
197-
await armory.start() # Exposes MCP at http://localhost:8000/mcp
198-
```
199-
200158
## Benefits
201159
202160
| Problem | Solution |

docs/forge-ui.md

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# forge-ui
2+
3+
Vue.js chat interface for interacting with AI agents through the Forge Orchestrator. Features real-time streaming, multi-model support, and tool call visualization.
4+
5+
## Features
6+
7+
| Feature | Description |
8+
|---------|-------------|
9+
| SSE Streaming | Real-time response streaming via Server-Sent Events |
10+
| Multi-Model Support | Switch between OpenAI, Anthropic, Google, and 300+ OpenRouter models |
11+
| Tool Call Visualization | Expandable tool calls showing arguments and results |
12+
| Thinking Blocks | Collapsible reasoning display for models that support it |
13+
| Conversation Management | Save, export, and import conversations as JSON |
14+
| Dark/Light Mode | Theme toggle with persistent preference |
15+
16+
## Screenshots
17+
18+
### Welcome Screen
19+
20+
Start a new conversation or import a previously exported one.
21+
22+
<div class="screenshot-container">
23+
<img src="/screenshots/forge-ui-landing.png" alt="Forge UI Welcome Screen" style="max-width: 100%; height: auto; border-radius: 8px;" />
24+
</div>
25+
26+
### Chat Interface
27+
28+
Real-time conversation with tool call chips and markdown rendering.
29+
30+
<div class="screenshot-container">
31+
<img src="/screenshots/forge-ui.png" alt="Forge UI Chat Interface" style="max-width: 100%; height: auto; border-radius: 8px;" />
32+
</div>
33+
34+
### Tool Call Details
35+
36+
Click any tool call to inspect arguments and results.
37+
38+
<div class="screenshot-container">
39+
<img src="/screenshots/forge-ui-tc-detail.png" alt="Tool Call Details" style="max-width: 100%; height: auto; border-radius: 8px;" />
40+
</div>
41+
42+
### Model Management
43+
44+
Browse and configure models from multiple providers. Fetch available models, add custom endpoints, and manage favorites.
45+
46+
<div class="screenshot-container">
47+
<img src="/screenshots/forge-ui-model-selection.png" alt="Model Management" style="max-width: 100%; height: auto; border-radius: 8px;" />
48+
</div>
49+
50+
## Installation
51+
52+
```bash
53+
# Clone the repository
54+
git clone https://github.com/agentic-forge/forge-ui.git
55+
cd forge-ui
56+
57+
# Install dependencies
58+
npm install
59+
60+
# Start development server
61+
npm run dev
62+
```
63+
64+
The UI runs on port 4040 by default: [http://localhost:4040](http://localhost:4040)
65+
66+
## Configuration
67+
68+
forge-ui connects to the Orchestrator API. Configure the endpoint in the Advanced settings or via environment variable:
69+
70+
```bash
71+
VITE_ORCHESTRATOR_URL=http://localhost:4041
72+
```
73+
74+
## Architecture
75+
76+
```
77+
forge-ui
78+
├── src/
79+
│ ├── components/
80+
│ │ ├── ChatMessage.vue # Message rendering with markdown
81+
│ │ ├── ToolCallChip.vue # Expandable tool call display
82+
│ │ ├── ThinkingBlock.vue # Collapsible reasoning
83+
│ │ └── ModelSelector.vue # Model picker dropdown
84+
│ ├── views/
85+
│ │ └── ChatView.vue # Main chat interface
86+
│ └── services/
87+
│ └── api.ts # SSE streaming client
88+
```
89+
90+
## Keyboard Shortcuts
91+
92+
| Shortcut | Action |
93+
|----------|--------|
94+
| `Enter` | Send message |
95+
| `Shift+Enter` | New line in input |
96+
| `Escape` | Cancel generation |
97+
98+
## Technology Stack
99+
100+
| Layer | Technology |
101+
|-------|------------|
102+
| Framework | Vue 3 + TypeScript |
103+
| UI Components | PrimeVue 4 (Aura theme) |
104+
| Styling | CSS Variables + PrimeVue tokens |
105+
| Streaming | Server-Sent Events (SSE) |
106+
| State | Vue Composition API |
107+
108+
## Links
109+
110+
- [GitHub Repository](https://github.com/agentic-forge/forge-ui)
111+
- [Orchestrator Docs](/docs/orchestrator) — Backend API that forge-ui connects to
112+
- [Armory Docs](/docs/armory) — Tool gateway that provides MCP tools

docs/interfaces.md

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -81,41 +81,6 @@ event: ping
8181
data: {}
8282
```
8383

84-
## Python SDK
85-
86-
For Python projects, direct import is the cleanest approach:
87-
88-
```python
89-
from agentic_forge import Orchestrator, ModelRouter, ToolRouter
90-
91-
# Setup
92-
orchestrator = Orchestrator(
93-
model_router=ModelRouter(...),
94-
tool_router=ToolRouter(...)
95-
)
96-
97-
# Synchronous (simple scripts)
98-
result = orchestrator.run_sync("Search for AI news")
99-
print(result.content)
100-
101-
# Async (applications)
102-
async def main():
103-
result = await orchestrator.run("Search for AI news")
104-
print(result.content)
105-
106-
# Streaming
107-
async for event in orchestrator.run_stream("Search..."):
108-
if event.type == "token":
109-
print(event.token, end="", flush=True)
110-
elif event.type == "tool_call":
111-
print(f"\n[Calling {event.tool_name}...]")
112-
113-
# With hooks for observability
114-
@orchestrator.on("tool_calls")
115-
def log_tools(data):
116-
print(f"Tools: {[c.name for c in data['calls']]}")
117-
```
118-
11984
## CLI Interface
12085

12186
### Commands
@@ -169,46 +134,6 @@ REST API for managing the Armory:
169134
| GET | /api/v1/tools | List all available tools |
170135
| GET | /api/v1/health | Health check |
171136

172-
## Non-Python Integration
173-
174-
For projects not written in Python, use the REST + SSE API:
175-
176-
```javascript
177-
// JavaScript/TypeScript
178-
const baseUrl = 'http://localhost:8001';
179-
180-
// Create conversation and send message
181-
const conv = await fetch(`${baseUrl}/conversations`, {
182-
method: 'POST',
183-
headers: { 'Content-Type': 'application/json' },
184-
body: JSON.stringify({ system_prompt: 'You are a helpful assistant' })
185-
}).then(r => r.json());
186-
187-
await fetch(`${baseUrl}/conversations/${conv.id}/messages`, {
188-
method: 'POST',
189-
headers: { 'Content-Type': 'application/json' },
190-
body: JSON.stringify({ content: 'Search for AI news' })
191-
});
192-
193-
// Listen to SSE stream
194-
const eventSource = new EventSource(`${baseUrl}/conversations/${conv.id}/stream`);
195-
196-
eventSource.addEventListener('token', (e) => {
197-
const data = JSON.parse(e.data);
198-
process.stdout.write(data.token);
199-
});
200-
201-
eventSource.addEventListener('tool_call', (e) => {
202-
const data = JSON.parse(e.data);
203-
console.log(`\n[${data.name}: ${data.status}]`);
204-
});
205-
206-
eventSource.addEventListener('complete', () => {
207-
console.log('\nDone!');
208-
eventSource.close();
209-
});
210-
```
211-
212137
## Summary
213138

214139
| Interface | Use Case | Protocol |

0 commit comments

Comments
 (0)