67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
"""
|
|
FunASR Server — OpenAI-compatible speech recognition API.
|
|
|
|
Usage:
|
|
funasr-server # default: sensevoice on cuda:0, port 8000
|
|
funasr-server --device cpu --port 9000
|
|
funasr-server --model paraformer
|
|
"""
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="FunASR OpenAI-Compatible API Server",
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
epilog="""
|
|
Examples:
|
|
funasr-server # Start with SenseVoice on GPU
|
|
funasr-server --device cpu # Start on CPU
|
|
funasr-server --model paraformer # Use Paraformer model
|
|
funasr-server --port 9000 # Custom port
|
|
|
|
Then use with OpenAI SDK:
|
|
from openai import OpenAI
|
|
client = OpenAI(base_url="http://localhost:8000/v1", api_key="x")
|
|
result = client.audio.transcriptions.create(model="sensevoice", file=open("a.wav","rb"))
|
|
""",
|
|
)
|
|
parser.add_argument("--host", default="0.0.0.0", help="Bind address (default: 0.0.0.0)")
|
|
parser.add_argument("--port", type=int, default=8000, help="Port (default: 8000)")
|
|
parser.add_argument("--device", default="cuda", help="Device: cuda, cpu, mps (default: cuda)")
|
|
parser.add_argument("--model", default="auto", help="Pre-load model: auto (GPU=fun-asr-nano, CPU=sensevoice), sensevoice, paraformer, fun-asr-nano")
|
|
args = parser.parse_args()
|
|
|
|
try:
|
|
import uvicorn
|
|
import fastapi
|
|
except ImportError:
|
|
print("Error: funasr-server requires additional packages.")
|
|
print("Install with: pip install vllm fastapi uvicorn python-multipart")
|
|
sys.exit(1)
|
|
|
|
# Import and configure the app
|
|
import os
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', 'examples', 'openai_api'))
|
|
|
|
# Use inline app to avoid path issues
|
|
from funasr.bin._server_app import create_app
|
|
|
|
app = create_app(device=args.device, preload_model=args.model)
|
|
|
|
print(f"╔══════════════════════════════════════════════╗")
|
|
print(f"║ FunASR Server v1.3.6 ║")
|
|
print(f"║ Device: {args.device:<8} ║")
|
|
print(f"║ Model: {args.model:<12} ║")
|
|
print(f"║ URL: http://{args.host}:{args.port}/v1 ║")
|
|
print(f"║ Docs: http://{args.host}:{args.port}/docs ║")
|
|
print(f"╚══════════════════════════════════════════════╝")
|
|
|
|
uvicorn.run(app, host=args.host, port=args.port)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|