branch:
README.md
3420 bytesRaw
# Human-in-the-Loop Weather Agent
This example demonstrates a web-based human-in-the-loop interface for OpenAI Agents, where certain tool calls require human approval before execution.
## Features
- **Interactive Chat Interface**: Modern web UI for conversing with the weather agent
- **Human-in-the-Loop Approval**: Automatic approval requests for sensitive operations
- **Real-time Updates**: WebSocket communication for live agent responses
- **State Persistence**: Conversation history and approval state management
- **Responsive Design**: Works on desktop and mobile devices
## How It Works
The agent is configured with a weather lookup tool that requires approval for queries about San Francisco. Here's the workflow:
1. **User asks a question** asking about weather in different cities
2. **Agent processes the request** and identifies which tool calls need approval
3. **Approval modal appears** when San Francisco weather is requested
4. **User approves or rejects** the tool call and the agent continues execution
5. **Agent continues execution** and provides the final result
## Getting Started
### Prerequisites
- Node.js 18+
- Cloudflare account with Workers enabled
- OpenAI API key
### Setup
1. **Install dependencies**:
```bash
npm install
```
2. **Configure environment variables**:
```bash
cp .dev.vars.example .dev.vars
```
Edit `.dev.vars` and add your OpenAI API key:
```
OPENAI_API_KEY=your_openai_api_key_here
```
3. **Start the development server**:
```bash
npm start
```
4. **Open your browser** and navigate to `http://localhost:5173`
## Usage
1. **Ask about weather**: Type questions like "What's the weather in San Francisco?"
2. **Handle approvals**: When the modal appears, review the tool call details and approve/reject
3. **View results**: See the agent's final response after all approvals are handled
## Example Conversations
- "What's the weather in New York?" (No approval needed)
- "What's the weather in San Francisco?" (Approval required)
- "Compare weather in Oakland and San Francisco" (Approval required for SF)
## Technical Details
### Architecture
- **Frontend**: React with TypeScript and Tailwind CSS
- **Backend**: Cloudflare Workers with Durable Objects
- **Communication**: WebSocket for real-time updates
- **State Management**: Agent state serialization/deserialization
### Key Components
- **Agent Configuration**: Weather tool with approval logic
- **WebSocket Handler**: Real-time message passing
- **Approval Workflow**: Modal interface for tool call approval
- **State Persistence**: Database storage for conversation history
### Customization
To modify the approval logic, edit the `needsApproval` function in `src/server.ts`:
```typescript
needsApproval: async (_context, { location }) => {
// Customize approval conditions here
return location === "San Francisco";
},
```
## Troubleshooting
- **WebSocket connection issues**: Check that the development server is running
- **Approval not working**: Verify the agent state is properly managed
- **No responses**: Ensure your OpenAI API key is correctly configured
## Learn More
- [OpenAI Agents Documentation](https://openai.github.io/openai-agents-js/)
- [Human-in-the-Loop Guide](https://openai.github.io/openai-agents-js/guides/human-in-the-loop/)
- [Cloudflare Workers Documentation](https://developers.cloudflare.com/workers/)