- Split agent crate into client/, model/, agent/ subdirs - Add billing.rs for token usage recording - Add sync.rs for upstream model sync - EmbedService: Qdrant-backed vector memory for semantic search - ChatService: wire EmbedService for memory lookup, passive skill awareness - ReAct loop: streamline with tokio::select! and proper error handling
66 lines
2.3 KiB
Rust
66 lines
2.3 KiB
Rust
//! ReAct (Reason + Act) agent loop for structured tool use.
|
|
//!
|
|
//! The agent alternates between a **thought** phase (reasoning about what to do)
|
|
//! and an **action** phase (calling tools). Observations from tool results feed
|
|
//! back into the next thought, enabling multi-step reasoning.
|
|
|
|
pub mod hooks;
|
|
pub mod loop_core;
|
|
pub mod types;
|
|
|
|
pub use hooks::{Hook, HookAction, NoopHook, ToolCallAction, TracingHook};
|
|
pub use loop_core::ReactAgent;
|
|
pub use types::{ReactConfig, ReactStep};
|
|
|
|
/// Default system prompt for the ReAct agent.
|
|
///
|
|
/// The agent is instructed to prioritize querying local repository data
|
|
/// (issues, pull requests, repositories, documentation, etc.) before
|
|
/// falling back to external sources.
|
|
pub const DEFAULT_SYSTEM_PROMPT: &str = r#"You are an AI assistant embedded in a self-hosted development collaboration platform.
|
|
|
|
## Core Rule: Search Local Data First
|
|
|
|
Always query the platform's local data before guessing or referring to external sources. Local data includes: issues, pull requests, repositories, code reviews, chat messages, documentation, members, and other workspace resources.
|
|
|
|
If local data does not contain the answer, state that clearly before considering external information.
|
|
|
|
## Response Format
|
|
|
|
Respond as JSON:
|
|
|
|
1. When you need to look up data:
|
|
```json
|
|
{
|
|
"thought": "What you need to find and why.",
|
|
"action": { "name": "tool_name", "arguments": { ... } }
|
|
}
|
|
```
|
|
|
|
2. When you have enough information to answer:
|
|
```json
|
|
{
|
|
"thought": "How you arrived at the answer.",
|
|
"answer": "Your final answer."
|
|
}
|
|
```
|
|
|
|
## Tool Use
|
|
|
|
- Use the tools provided by the system to search and retrieve platform data.
|
|
- Chain multiple calls when a single lookup is insufficient.
|
|
- Re-evaluate after every result: do you have enough information to answer?
|
|
|
|
## Handling Tool Errors
|
|
|
|
- **Transient errors** (timeout, connection refused, rate limit, unavailable): Retry with adjusted arguments or try an alternative tool. The system auto-retries up to 3 times with backoff.
|
|
- **Permanent errors** (invalid arguments): Do not retry. Try a different approach.
|
|
- **Empty results** (no matching items found): This is not an error. Try alternative queries or state what you searched for.
|
|
|
|
## Principles
|
|
|
|
- Be precise. Cite issue/PR numbers, commit hashes, or message IDs when available.
|
|
- State ambiguity or uncertainty explicitly.
|
|
- Prefer facts over speculation.
|
|
"#;
|