Parler_TTS_API / TEST_WEBSOCKET.md
aspirant312's picture
Add comprehensive WebSocket testing suite and documentation
8721de0
|
Raw
History Blame Contribute Delete
5.16 kB
# WebSocket Testing Guide
## Quick Test Methods
### 1. **Python Test Suite** (Recommended)
```bash
python3 test_websocket.py
```
Tests:
- ✅ Connection establishment
- ✅ Request/response handling
- ✅ Latency measurement
- ✅ Audio streaming and saving
---
### 2. **Command Line with wscat**
Install wscat:
```bash
npm install -g wscat
```
Test connection:
```bash
wscat -c wss://ebitlogix-parler-tts-api.hf.space/ws/tts
```
Then send JSON:
```json
{"text":"سلام دنیا","speaker":"Divya"}
```
You should see:
```
> {"text":"سلام دنیا","speaker":"Divya"}
< {"status":"generating","message":"Generating audio for speaker Divya..."}
< [binary audio chunk 1]
< [binary audio chunk 2]
< [binary audio chunk 3]
< {"status":"complete","chunks_sent":5}
```
---
### 3. **JavaScript/Node Test**
```javascript
const WebSocket = require('ws');
const ws = new WebSocket('wss://ebitlogix-parler-tts-api.hf.space/ws/tts');
ws.on('open', () => {
console.log('✅ Connected');
ws.send(JSON.stringify({
text: 'سلام دنیا',
speaker: 'Divya'
}));
});
ws.on('message', (data) => {
if (typeof data === 'string') {
console.log('📨 Status:', JSON.parse(data));
} else {
console.log('🔊 Audio chunk:', data.length, 'bytes');
}
});
ws.on('error', (err) => {
console.error('❌ Error:', err);
});
```
---
### 4. **Curl Test** (for connection only)
```bash
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" \
-H "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" \
-H "Sec-WebSocket-Version: 13" \
https://ebitlogix-parler-tts-api.hf.space/ws/tts
```
---
## Expected Responses
### Success Response Flow:
```
1. Connection accepted (WebSocket upgrade)
2. Status message: {"status":"generating",...}
3. Audio chunks (binary data) arriving in real-time
4. Complete message: {"status":"complete","chunks_sent":N}
5. Connection closes
```
### Error Response:
```json
{"error": "Text cannot be empty"}
```
---
## What to Check
**Connection**
- [ ] WebSocket handshake completes (101 Switching Protocols)
- [ ] No connection refused or timeout errors
**Response Time**
- [ ] Status message within 1-2 seconds
- [ ] First audio chunk within 3-5 seconds
- [ ] Audio chunks every 0.5 seconds
**Data**
- [ ] Receives JSON status messages (parseable)
- [ ] Receives binary audio chunks (non-zero size)
- [ ] All chunks have data (not empty)
**Completion**
- [ ] Complete message sent
- [ ] Connection closes gracefully
- [ ] No hanging connections
---
## Troubleshooting
### Connection Refused
```
❌ Error: Connection refused
```
→ Space might be rebuilding. Check: https://huggingface.co/spaces/ebitlogix/Parler_TTS_API
### Timeout
```
❌ timeout waiting for response
```
→ Model might be loading. Wait 30 seconds and try again.
### No Audio Chunks
```
❌ Only status message, no audio chunks
```
→ Check text is not empty. Try different text.
### Wrong Protocol
```
❌ WebSocket is not supported
```
→ Make sure you're using `wss://` (secure) or `ws://` (local), not `https://` or `http://`
---
## Test Matrix
| Test | URL | Expected | Status |
|------|-----|----------|--------|
| Connection | `wss://...` | 101 Upgrade | ✅ |
| Send JSON | `{"text":"..."}` | Status message | ✅ |
| Audio Stream | Binary chunks | Every 0.5s | ✅ |
| Latency | Complete flow | <10 seconds | ✅ |
---
## Live Testing
### Test 1: Simple Message
```json
{"text":"سلام دنیا","speaker":"Divya"}
```
Expected: Audio generated in ~4-5 seconds
### Test 2: Longer Text
```json
{"text":"مرحبا بك في تطبيق تحويل النص إلى كلام","speaker":"Rani"}
```
Expected: More chunks, ~8-10 seconds total
### Test 3: Different Speaker
```json
{"text":"یہ ایک اردو متن ہے","speaker":"Generic Female"}
```
Expected: Same timing, different voice
---
## Pipecat Integration Testing
```python
# test_pipecat_integration.py
import asyncio
import websockets
import json
async def test_pipecat():
async with websockets.connect('wss://ebitlogix-parler-tts-api.hf.space/ws/tts') as ws:
# Simulate Pipecat sending TTS request
await ws.send(json.dumps({
"text": "سلام دنیا",
"speaker": "Divya"
}))
# Simulate receiving audio for playback
while True:
msg = await ws.recv()
if isinstance(msg, bytes):
print(f"Got audio: {len(msg)} bytes - READY FOR PIPECAT")
elif isinstance(msg, str):
data = json.loads(msg)
if data.get("status") == "complete":
print("Audio stream complete")
break
asyncio.run(test_pipecat())
```
---
## Success Indicators
✅ All these should be true:
- Connection establishes without error
- Receives status message within 2 seconds
- First audio chunk arrives within 5 seconds
- Subsequent chunks arrive continuously every 0.5-1 second
- Complete message received
- Connection closes normally
If any fail, check Space status and rebuild if needed.