135 lines
3.8 KiB
Markdown
135 lines
3.8 KiB
Markdown
# PocketFlow FastAPI WebSocket Chat Interface
|
|
|
|
A minimal real-time chat interface built with FastAPI, WebSocket, and PocketFlow that supports streaming LLM responses.
|
|
|
|
## Features
|
|
|
|
- 🚀 **Real-time Communication**: WebSocket-based bidirectional communication
|
|
- 📡 **Streaming Responses**: See AI responses being typed out in real-time
|
|
- 🔄 **Persistent Connection**: Stay connected throughout the conversation
|
|
- 💬 **Conversation History**: Maintains context across messages
|
|
- 🎨 **Modern UI**: Clean, responsive chat interface
|
|
- 🛠️ **Minimal Dependencies**: Built with minimal, production-ready dependencies
|
|
|
|
## Quick Start
|
|
|
|
### 1. Install Dependencies
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 2. Set Up OpenAI API Key (Optional)
|
|
|
|
For real LLM responses, set your OpenAI API key:
|
|
|
|
```bash
|
|
export OPENAI_API_KEY="your-api-key-here"
|
|
```
|
|
|
|
### 3. Run the Application
|
|
|
|
```bash
|
|
python main.py
|
|
```
|
|
|
|
### 4. Open in Browser
|
|
|
|
Navigate to: `http://localhost:8000`
|
|
|
|
## Architecture
|
|
|
|
This application uses a **simplified single-node pattern** with PocketFlow:
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
websocket[FastAPI WebSocket] --> stream[Streaming Chat Node]
|
|
stream --> websocket
|
|
```
|
|
|
|
### Components
|
|
|
|
- **FastAPI**: Web framework with WebSocket support
|
|
- **PocketFlow**: Single node handles message processing and LLM streaming
|
|
- **Streaming LLM**: Real-time response generation
|
|
|
|
### File Structure
|
|
|
|
```
|
|
cookbook/pocketflow-fastapi-websocket/
|
|
├── main.py # FastAPI application with WebSocket endpoint
|
|
├── nodes.py # Single PocketFlow node for chat processing
|
|
├── flow.py # Simple flow with one node
|
|
├── utils/
|
|
│ └── stream_llm.py # LLM streaming utilities
|
|
├── requirements.txt # Dependencies
|
|
├── README.md # This file
|
|
└── docs/
|
|
└── design.md # Detailed design documentation
|
|
```
|
|
|
|
## Usage
|
|
|
|
1. **Start a Conversation**: Type a message and press Enter or click Send
|
|
2. **Watch Streaming**: See the AI response appear in real-time
|
|
3. **Continue Chatting**: The conversation maintains context automatically
|
|
4. **Multiple Users**: Each WebSocket connection has its own conversation
|
|
|
|
## Development
|
|
|
|
### Using Real OpenAI API
|
|
|
|
To use real OpenAI API instead of fake responses:
|
|
|
|
1. Set your API key: `export OPENAI_API_KEY="your-key"`
|
|
2. In `nodes.py`, change line 35 from `fake_stream_llm(formatted_prompt)` to `stream_llm(formatted_prompt)`
|
|
|
|
### Testing
|
|
|
|
Test the PocketFlow logic without WebSocket:
|
|
|
|
```bash
|
|
python test_flow.py
|
|
```
|
|
|
|
Test the streaming utility:
|
|
|
|
```bash
|
|
cd utils
|
|
python stream_llm.py
|
|
```
|
|
|
|
### Customization
|
|
|
|
- **Modify System Prompt**: Edit the system prompt in `nodes.py` StreamingChatNode
|
|
- **Change UI**: Update the HTML template in `main.py`
|
|
- **Add Features**: Extend the single node or add new nodes to the flow
|
|
|
|
## Why This Simple Design?
|
|
|
|
This implementation demonstrates PocketFlow's philosophy of **minimal complexity**:
|
|
|
|
- **Single Node**: One node handles message processing, LLM calls, and streaming
|
|
- **No Utility Bloat**: Direct JSON handling instead of wrapper functions
|
|
- **Clear Separation**: FastAPI handles WebSocket, PocketFlow handles LLM logic
|
|
- **Easy to Extend**: Simple to add features like RAG, agents, or multi-step workflows
|
|
|
|
## Production Considerations
|
|
|
|
- **Connection Management**: Use Redis or database for connection storage
|
|
- **Rate Limiting**: Add rate limiting for API calls
|
|
- **Error Handling**: Enhance error handling and user feedback
|
|
- **Authentication**: Add user authentication if needed
|
|
- **Scaling**: Use multiple workers with proper session management
|
|
|
|
## Technology Stack
|
|
|
|
- **Backend**: FastAPI + WebSocket
|
|
- **Frontend**: Pure HTML/CSS/JavaScript
|
|
- **AI Framework**: PocketFlow (single node)
|
|
- **LLM**: OpenAI GPT-4
|
|
- **Real-time**: WebSocket with streaming
|
|
|
|
## License
|
|
|
|
MIT License |