✅ TICKET-006: Wake-word Detection Service - Implemented wake-word detection using openWakeWord - HTTP/WebSocket server on port 8002 - Real-time detection with configurable threshold - Event emission for ASR integration - Location: home-voice-agent/wake-word/ ✅ TICKET-010: ASR Service - Implemented ASR using faster-whisper - HTTP endpoint for file transcription - WebSocket endpoint for streaming transcription - Support for multiple audio formats - Auto language detection - GPU acceleration support - Location: home-voice-agent/asr/ ✅ TICKET-014: TTS Service - Implemented TTS using Piper - HTTP endpoint for text-to-speech synthesis - Low-latency processing (< 500ms) - Multiple voice support - WAV audio output - Location: home-voice-agent/tts/ ✅ TICKET-047: Updated Hardware Purchases - Marked Pi5 kit, SSD, microphone, and speakers as purchased - Updated progress log with purchase status 📚 Documentation: - Added VOICE_SERVICES_README.md with complete testing guide - Each service includes README.md with usage instructions - All services ready for Pi5 deployment 🧪 Testing: - Created test files for each service - All imports validated - FastAPI apps created successfully - Code passes syntax validation 🚀 Ready for: - Pi5 deployment - End-to-end voice flow testing - Integration with MCP server Files Added: - wake-word/detector.py - wake-word/server.py - wake-word/requirements.txt - wake-word/README.md - wake-word/test_detector.py - asr/service.py - asr/server.py - asr/requirements.txt - asr/README.md - asr/test_service.py - tts/service.py - tts/server.py - tts/requirements.txt - tts/README.md - tts/test_service.py - VOICE_SERVICES_README.md Files Modified: - tickets/done/TICKET-047_hardware-purchases.md Files Moved: - tickets/backlog/TICKET-006_prototype-wake-word-node.md → tickets/done/ - tickets/backlog/TICKET-010_streaming-asr-service.md → tickets/done/ - tickets/backlog/TICKET-014_tts-service.md → tickets/done/
192 lines
7.0 KiB
Markdown
192 lines
7.0 KiB
Markdown
# Tool-Calling Policy
|
|
|
|
This document defines the policy for when and how LLM agents should call tools in the Atlas voice agent system.
|
|
|
|
## Overview
|
|
|
|
The tool-calling policy ensures that:
|
|
- Tools are used appropriately and safely
|
|
- High-risk actions require confirmation
|
|
- Agents understand when to use tools vs. respond directly
|
|
- Tool permissions are clearly defined
|
|
|
|
## Tool Risk Categories
|
|
|
|
### Low-Risk Tools (Always Allowed)
|
|
|
|
These tools provide information or perform safe operations that don't modify data or have external effects:
|
|
|
|
- `get_current_time` - Read-only time information
|
|
- `get_date` - Read-only date information
|
|
- `get_timezone_info` - Read-only timezone information
|
|
- `convert_timezone` - Read-only timezone conversion
|
|
- `weather` - Read-only weather information (external API, but read-only)
|
|
- `list_tasks` - Read-only task listing
|
|
- `list_timers` - Read-only timer listing
|
|
- `list_notes` - Read-only note listing
|
|
- `read_note` - Read-only note reading
|
|
- `search_notes` - Read-only note searching
|
|
|
|
**Policy**: These tools can be called automatically without user confirmation.
|
|
|
|
### Medium-Risk Tools (Require Context Confirmation)
|
|
|
|
These tools modify local data but don't have external effects:
|
|
|
|
- `add_task` - Creates a new task
|
|
- `update_task_status` - Moves tasks between columns
|
|
- `create_timer` - Creates a timer
|
|
- `create_reminder` - Creates a reminder
|
|
- `cancel_timer` - Cancels a timer/reminder
|
|
- `create_note` - Creates a new note
|
|
- `append_to_note` - Modifies an existing note
|
|
|
|
**Policy**:
|
|
- Can be called when the user explicitly requests the action
|
|
- Should confirm what will be done before execution (e.g., "I'll add 'buy milk' to your todo list")
|
|
- No explicit user approval token required, but agent should be confident about user intent
|
|
|
|
### High-Risk Tools (Require Explicit Confirmation)
|
|
|
|
These tools have external effects or significant consequences:
|
|
|
|
- **Future tools** (not yet implemented):
|
|
- `send_email` - Sends email to external recipients
|
|
- `create_calendar_event` - Creates calendar events
|
|
- `modify_calendar_event` - Modifies existing events
|
|
- `set_smart_home_device` - Controls smart home devices
|
|
- `purchase_item` - Makes purchases
|
|
- `execute_shell_command` - Executes system commands
|
|
|
|
**Policy**:
|
|
- **MUST** require explicit user confirmation token
|
|
- Agent should explain what will happen
|
|
- User must approve via client interface (not just LLM decision)
|
|
- Confirmation token must be signed/validated
|
|
|
|
## Tool Permission Matrix
|
|
|
|
| Tool | Family Agent | Work Agent | Confirmation Required |
|
|
|------|--------------|------------|----------------------|
|
|
| `get_current_time` | ✅ | ✅ | No |
|
|
| `get_date` | ✅ | ✅ | No |
|
|
| `get_timezone_info` | ✅ | ✅ | No |
|
|
| `convert_timezone` | ✅ | ✅ | No |
|
|
| `weather` | ✅ | ✅ | No |
|
|
| `add_task` | ✅ (home only) | ✅ (work only) | Context |
|
|
| `update_task_status` | ✅ (home only) | ✅ (work only) | Context |
|
|
| `list_tasks` | ✅ (home only) | ✅ (work only) | No |
|
|
| `create_timer` | ✅ | ✅ | Context |
|
|
| `create_reminder` | ✅ | ✅ | Context |
|
|
| `list_timers` | ✅ | ✅ | No |
|
|
| `cancel_timer` | ✅ | ✅ | Context |
|
|
| `create_note` | ✅ (home only) | ✅ (work only) | Context |
|
|
| `read_note` | ✅ (home only) | ✅ (work only) | No |
|
|
| `append_to_note` | ✅ (home only) | ✅ (work only) | Context |
|
|
| `search_notes` | ✅ (home only) | ✅ (work only) | No |
|
|
| `list_notes` | ✅ (home only) | ✅ (work only) | No |
|
|
|
|
## Tool-Calling Guidelines
|
|
|
|
### When to Call Tools
|
|
|
|
**Always call tools when:**
|
|
1. User explicitly requests information that requires a tool (e.g., "What time is it?")
|
|
2. User explicitly requests an action that requires a tool (e.g., "Add a task")
|
|
3. Tool would provide significantly better information than guessing
|
|
4. Tool is necessary to complete the user's request
|
|
|
|
**Don't call tools when:**
|
|
1. You can answer directly from context
|
|
2. User is asking a general question that doesn't require specific data
|
|
3. Tool call would be redundant (e.g., calling weather twice in quick succession)
|
|
4. User hasn't explicitly requested the action
|
|
|
|
### Tool Selection
|
|
|
|
**Choose the most specific tool:**
|
|
- If user asks "What time is it?", use `get_current_time` (not `get_date`)
|
|
- If user asks "Set a timer", use `create_timer` (not `create_reminder`)
|
|
- If user asks "What's on my todo list?", use `list_tasks` with status filter
|
|
|
|
**Combine tools when helpful:**
|
|
- If user asks "What's the weather and what time is it?", call both `weather` and `get_current_time`
|
|
- If user asks "What tasks do I have and what reminders?", call both `list_tasks` and `list_timers`
|
|
|
|
### Error Handling
|
|
|
|
**When a tool fails:**
|
|
1. Explain what went wrong in user-friendly terms
|
|
2. Suggest alternatives if available
|
|
3. Don't retry automatically unless it's a transient error
|
|
4. If it's a permission error, explain the limitation clearly
|
|
|
|
**Example**: "I couldn't access that file because it's outside my allowed directories. I can only access files in the home notes directory."
|
|
|
|
## Confirmation Flow
|
|
|
|
### For Medium-Risk Tools
|
|
|
|
1. **Agent explains action**: "I'll add 'buy groceries' to your todo list."
|
|
2. **Agent calls tool**: Execute the tool call
|
|
3. **Agent confirms completion**: "Done! I've added it to your todo list."
|
|
|
|
### For High-Risk Tools (Future)
|
|
|
|
1. **Agent explains action**: "I'm about to send an email to john@example.com with subject 'Meeting Notes'. Should I proceed?"
|
|
2. **Agent requests confirmation**: Wait for user approval token
|
|
3. **If approved**: Execute tool call
|
|
4. **If rejected**: Acknowledge and don't execute
|
|
|
|
## Tool Argument Validation
|
|
|
|
**Before calling a tool:**
|
|
- Validate required arguments are present
|
|
- Validate argument types match schema
|
|
- Validate argument values are reasonable (e.g., duration > 0)
|
|
- Sanitize user input if needed
|
|
|
|
**If validation fails:**
|
|
- Don't call the tool
|
|
- Explain what's missing or invalid
|
|
- Ask user to provide correct information
|
|
|
|
## Rate Limiting
|
|
|
|
Some tools have rate limits:
|
|
- `weather`: 60 requests/hour (enforced by tool)
|
|
- Other tools: No explicit limits, but use reasonably
|
|
|
|
**Guidelines:**
|
|
- Don't call the same tool repeatedly in quick succession
|
|
- Cache results when appropriate
|
|
- If rate limit is hit, explain and suggest waiting
|
|
|
|
## Tool Result Handling
|
|
|
|
**After tool execution:**
|
|
1. **Parse result**: Extract relevant information from tool response
|
|
2. **Format for user**: Present result in user-friendly format
|
|
3. **Provide context**: Add relevant context or suggestions
|
|
4. **Handle empty results**: If no results, explain clearly
|
|
|
|
**Example**:
|
|
- Tool returns: `{"tasks": []}`
|
|
- Agent says: "You don't have any tasks in your todo list right now. Would you like me to add one?"
|
|
|
|
## Escalation Rules
|
|
|
|
**If user requests something you cannot do:**
|
|
1. Explain the limitation clearly
|
|
2. Suggest alternatives if available
|
|
3. Don't attempt to bypass restrictions
|
|
4. Be helpful about what you CAN do
|
|
|
|
**Example**: "I can't access work files, but I can help you with home tasks and notes. Would you like me to create a note about what you need to do?"
|
|
|
|
## Version
|
|
|
|
**Version**: 1.0
|
|
**Last Updated**: 2026-01-06
|
|
**Applies To**: Both Family Agent and Work Agent
|