mirror of
https://github.com/Nighthawk42/Qwen3-TTS-streaming.git
synced 2026-08-30 10:42:27 +00:00
209 lines
6.4 KiB
Python
209 lines
6.4 KiB
Python
"""
|
|
Examples demonstrating the extended Qwen3-TTS API endpoints.
|
|
"""
|
|
|
|
import requests
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
BASE_URL = "http://localhost:8000"
|
|
|
|
|
|
def example_text_validation():
|
|
"""Example: Validate text before TTS."""
|
|
print("\n=== Text Validation Example ===")
|
|
|
|
response = requests.post(
|
|
f"{BASE_URL}/v1/text/validate",
|
|
json={
|
|
"text": "Hello, this is a test of the text-to-speech system.",
|
|
"language": "English"
|
|
}
|
|
)
|
|
|
|
data = response.json()
|
|
print(f"Valid: {data['valid']}")
|
|
print(f"Characters: {data['character_count']}")
|
|
print(f"Estimated duration: {data['estimated_duration']:.2f}s")
|
|
if data['warnings']:
|
|
print(f"Warnings: {data['warnings']}")
|
|
|
|
|
|
def example_batch_processing():
|
|
"""Example: Create and monitor batch job."""
|
|
print("\n=== Batch Processing Example ===")
|
|
|
|
# Create batch job
|
|
response = requests.post(
|
|
f"{BASE_URL}/v1/batch/create",
|
|
json={
|
|
"items": [
|
|
{"text": "Hello world", "language": "English"},
|
|
{"text": "Bonjour le monde", "language": "English"},
|
|
{"text": "Hola mundo", "language": "English"},
|
|
],
|
|
"model": "Qwen/Qwen3-TTS-12Hz-1.7B-Base"
|
|
}
|
|
)
|
|
|
|
job = response.json()
|
|
job_id = job['id']
|
|
print(f"Created batch job: {job_id}")
|
|
print(f"Status: {job['status']}")
|
|
print(f"Total items: {job['request_counts']['total']}")
|
|
|
|
# Check job status
|
|
response = requests.get(f"{BASE_URL}/v1/batch/{job_id}")
|
|
job = response.json()
|
|
print(f"Updated status: {job['status']}")
|
|
|
|
|
|
def example_voice_management():
|
|
"""Example: Upload and manage custom voices."""
|
|
print("\n=== Voice Management Example ===")
|
|
|
|
# List existing voices
|
|
response = requests.get(f"{BASE_URL}/v1/voices")
|
|
voices = response.json()
|
|
print(f"Voices available: {len(voices['data'])}")
|
|
|
|
for voice in voices['data']:
|
|
print(f" - {voice['name']} ({voice['language']}): {voice['id']}")
|
|
|
|
# To upload a voice:
|
|
# response = requests.post(
|
|
# f"{BASE_URL}/v1/voices/upload",
|
|
# data={
|
|
# "name": "Alice",
|
|
# "language": "English",
|
|
# "ref_text": "This is a reference audio for voice cloning."
|
|
# },
|
|
# files={"audio": open("ref_audio.wav", "rb")}
|
|
# )
|
|
# voice = response.json()
|
|
# print(f"Uploaded voice: {voice['id']}")
|
|
|
|
|
|
def example_usage_tracking():
|
|
"""Example: Check API usage and quota."""
|
|
print("\n=== Usage & Quota Example ===")
|
|
|
|
# Get usage statistics
|
|
response = requests.get(f"{BASE_URL}/v1/usage")
|
|
usage = response.json()
|
|
print(f"Total requests: {usage['requests_made']}")
|
|
print(f"Audio generated: {usage['audio_generated_minutes']:.2f} minutes")
|
|
print(f"Requests by model:")
|
|
for model, count in usage['requests_by_model'].items():
|
|
print(f" - {model}: {count}")
|
|
|
|
# Get quota info
|
|
response = requests.get(f"{BASE_URL}/v1/quota")
|
|
quota = response.json()
|
|
print(f"\nRate limit: {quota['requests_per_minute']} requests/minute")
|
|
print(f"Remaining: {quota['remaining_requests']} requests this minute")
|
|
|
|
|
|
def example_audio_conversion():
|
|
"""Example: Convert audio format/sample rate."""
|
|
print("\n=== Audio Conversion Example ===")
|
|
|
|
# First, generate some audio
|
|
response = requests.post(
|
|
f"{BASE_URL}/v1/audio/speech",
|
|
json={
|
|
"text": "This is audio to convert.",
|
|
"language": "English"
|
|
}
|
|
)
|
|
audio_data = response.json()
|
|
|
|
# Convert format (resample to 16kHz)
|
|
response = requests.post(
|
|
f"{BASE_URL}/v1/audio/convert",
|
|
json={
|
|
"audio_base64": audio_data['audio_base64'],
|
|
"target_format": "wav",
|
|
"target_sample_rate": 16000
|
|
}
|
|
)
|
|
|
|
converted = response.json()
|
|
print(f"Original sample rate: {audio_data['sample_rate']} Hz")
|
|
print(f"Converted to: {converted['sample_rate']} Hz")
|
|
print(f"Format: {converted['format']}")
|
|
|
|
|
|
def example_model_info():
|
|
"""Example: Get model configuration and languages."""
|
|
print("\n=== Model Information Example ===")
|
|
|
|
# Get model config
|
|
response = requests.get(
|
|
f"{BASE_URL}/v1/models/Qwen/Qwen3-TTS-12Hz-1.7B-Base/config"
|
|
)
|
|
config = response.json()
|
|
print(f"Model: {config['id']}")
|
|
print(f"Size: {config['size']}")
|
|
print(f"Max text length: {config['max_text_length']}")
|
|
print(f"Output sample rate: {config['output_sample_rate']} Hz")
|
|
print(f"Languages: {', '.join(config['languages'])}")
|
|
|
|
# Get supported languages with details
|
|
response = requests.get(
|
|
f"{BASE_URL}/v1/models/Qwen/Qwen3-TTS-12Hz-1.7B-Base/languages"
|
|
)
|
|
languages = response.json()
|
|
print(f"\nSupported languages:")
|
|
for lang in languages['languages']:
|
|
print(f" - {lang['name']} ({lang['code']})")
|
|
|
|
|
|
def example_health_and_models():
|
|
"""Example: Check API health and list models."""
|
|
print("\n=== Health & Models Example ===")
|
|
|
|
# Health check
|
|
response = requests.get(f"{BASE_URL}/v1/health")
|
|
health = response.json()
|
|
print(f"API Status: {health['status']}")
|
|
print(f"Model: {health['model']}")
|
|
print(f"Device: {health['device']}")
|
|
print(f"Ready: {health['ready']}")
|
|
|
|
# List models
|
|
response = requests.get(f"{BASE_URL}/v1/models")
|
|
models = response.json()
|
|
print(f"\nAvailable models: {len(models['data'])}")
|
|
for model in models['data']:
|
|
print(f" - {model['id']}")
|
|
print(f" Streaming: {model['supports_streaming']}")
|
|
print(f" Voice cloning: {model['supports_voice_clone']}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("Qwen3-TTS Extended API Examples")
|
|
print("=" * 50)
|
|
print(f"API Server: {BASE_URL}")
|
|
|
|
try:
|
|
# Run examples
|
|
example_health_and_models()
|
|
example_text_validation()
|
|
example_model_info()
|
|
example_usage_tracking()
|
|
example_voice_management()
|
|
example_batch_processing()
|
|
example_audio_conversion()
|
|
|
|
print("\n" + "=" * 50)
|
|
print("✅ All examples completed!")
|
|
print("For more details, visit: http://localhost:8000/docs")
|
|
|
|
except requests.exceptions.ConnectionError:
|
|
print("\n❌ Error: Could not connect to API server")
|
|
print(f"Make sure the server is running at {BASE_URL}")
|
|
except Exception as e:
|
|
print(f"\n❌ Error: {e}")
|