Spaces:
Runtime error
Runtime error
| { | |
| "openapi": "3.1.0", | |
| "info": { | |
| "title": "voicebox API", | |
| "description": "Production-quality Qwen3-TTS voice cloning API", | |
| "version": "0.1.0" | |
| }, | |
| "servers": [ | |
| { | |
| "url": "http://localhost:8000", | |
| "description": "Local development server" | |
| } | |
| ], | |
| "paths": { | |
| "/": { | |
| "get": { | |
| "summary": "Root", | |
| "description": "Root endpoint.", | |
| "operationId": "root__get", | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "General" | |
| ] | |
| } | |
| }, | |
| "/health": { | |
| "get": { | |
| "summary": "Health", | |
| "description": "Health check endpoint.", | |
| "operationId": "health_health_get", | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HealthResponse" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "General" | |
| ] | |
| } | |
| }, | |
| "/profiles": { | |
| "get": { | |
| "summary": "List Profiles", | |
| "description": "List all voice profiles.", | |
| "operationId": "list_profiles_profiles_get", | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "items": { | |
| "$ref": "#/components/schemas/VoiceProfileResponse" | |
| }, | |
| "type": "array", | |
| "title": "Response List Profiles Profiles Get" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Profiles" | |
| ] | |
| }, | |
| "post": { | |
| "summary": "Create Profile", | |
| "description": "Create a new voice profile.", | |
| "operationId": "create_profile_profiles_post", | |
| "requestBody": { | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/VoiceProfileCreate" | |
| } | |
| } | |
| }, | |
| "required": true | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/VoiceProfileResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Profiles" | |
| ] | |
| } | |
| }, | |
| "/profiles/{profile_id}": { | |
| "get": { | |
| "summary": "Get Profile", | |
| "description": "Get a voice profile by ID.", | |
| "operationId": "get_profile_profiles__profile_id__get", | |
| "parameters": [ | |
| { | |
| "name": "profile_id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Profile Id" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/VoiceProfileResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Profiles" | |
| ] | |
| }, | |
| "put": { | |
| "summary": "Update Profile", | |
| "description": "Update a voice profile.", | |
| "operationId": "update_profile_profiles__profile_id__put", | |
| "parameters": [ | |
| { | |
| "name": "profile_id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Profile Id" | |
| } | |
| } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/VoiceProfileCreate" | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/VoiceProfileResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Profiles" | |
| ] | |
| }, | |
| "delete": { | |
| "summary": "Delete Profile", | |
| "description": "Delete a voice profile.", | |
| "operationId": "delete_profile_profiles__profile_id__delete", | |
| "parameters": [ | |
| { | |
| "name": "profile_id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Profile Id" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Profiles" | |
| ] | |
| } | |
| }, | |
| "/profiles/{profile_id}/samples": { | |
| "post": { | |
| "summary": "Add Profile Sample", | |
| "description": "Add a sample to a voice profile.", | |
| "operationId": "add_profile_sample_profiles__profile_id__samples_post", | |
| "parameters": [ | |
| { | |
| "name": "profile_id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Profile Id" | |
| } | |
| } | |
| ], | |
| "requestBody": { | |
| "required": true, | |
| "content": { | |
| "multipart/form-data": { | |
| "schema": { | |
| "$ref": "#/components/schemas/Body_add_profile_sample_profiles__profile_id__samples_post" | |
| } | |
| } | |
| } | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ProfileSampleResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Profiles" | |
| ] | |
| }, | |
| "get": { | |
| "summary": "Get Profile Samples", | |
| "description": "Get all samples for a profile.", | |
| "operationId": "get_profile_samples_profiles__profile_id__samples_get", | |
| "parameters": [ | |
| { | |
| "name": "profile_id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Profile Id" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "type": "array", | |
| "items": { | |
| "$ref": "#/components/schemas/ProfileSampleResponse" | |
| }, | |
| "title": "Response Get Profile Samples Profiles Profile Id Samples Get" | |
| } | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Profiles" | |
| ] | |
| } | |
| }, | |
| "/profiles/samples/{sample_id}": { | |
| "delete": { | |
| "summary": "Delete Profile Sample", | |
| "description": "Delete a profile sample.", | |
| "operationId": "delete_profile_sample_profiles_samples__sample_id__delete", | |
| "parameters": [ | |
| { | |
| "name": "sample_id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Sample Id" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Profiles" | |
| ] | |
| } | |
| }, | |
| "/generate": { | |
| "post": { | |
| "summary": "Generate Speech", | |
| "description": "Generate speech from text using a voice profile.", | |
| "operationId": "generate_speech_generate_post", | |
| "requestBody": { | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/GenerationRequest" | |
| } | |
| } | |
| }, | |
| "required": true | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/GenerationResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Generation" | |
| ] | |
| } | |
| }, | |
| "/history": { | |
| "get": { | |
| "summary": "List History", | |
| "description": "List generation history with optional filters.", | |
| "operationId": "list_history_history_get", | |
| "parameters": [ | |
| { | |
| "name": "profile_id", | |
| "in": "query", | |
| "required": false, | |
| "schema": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Profile Id" | |
| } | |
| }, | |
| { | |
| "name": "search", | |
| "in": "query", | |
| "required": false, | |
| "schema": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Search" | |
| } | |
| }, | |
| { | |
| "name": "limit", | |
| "in": "query", | |
| "required": false, | |
| "schema": { | |
| "type": "integer", | |
| "default": 50, | |
| "title": "Limit" | |
| } | |
| }, | |
| { | |
| "name": "offset", | |
| "in": "query", | |
| "required": false, | |
| "schema": { | |
| "type": "integer", | |
| "default": 0, | |
| "title": "Offset" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HistoryListResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "History" | |
| ] | |
| } | |
| }, | |
| "/history/{generation_id}": { | |
| "get": { | |
| "summary": "Get Generation", | |
| "description": "Get a generation by ID.", | |
| "operationId": "get_generation_history__generation_id__get", | |
| "parameters": [ | |
| { | |
| "name": "generation_id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Generation Id" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HistoryResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "History" | |
| ] | |
| }, | |
| "delete": { | |
| "summary": "Delete Generation", | |
| "description": "Delete a generation.", | |
| "operationId": "delete_generation_history__generation_id__delete", | |
| "parameters": [ | |
| { | |
| "name": "generation_id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Generation Id" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "History" | |
| ] | |
| } | |
| }, | |
| "/history/stats": { | |
| "get": { | |
| "summary": "Get Stats", | |
| "description": "Get generation statistics.", | |
| "operationId": "get_stats_history_stats_get", | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "History" | |
| ] | |
| } | |
| }, | |
| "/transcribe": { | |
| "post": { | |
| "summary": "Transcribe Audio", | |
| "description": "Transcribe audio file to text.", | |
| "operationId": "transcribe_audio_transcribe_post", | |
| "requestBody": { | |
| "content": { | |
| "multipart/form-data": { | |
| "schema": { | |
| "$ref": "#/components/schemas/Body_transcribe_audio_transcribe_post" | |
| } | |
| } | |
| }, | |
| "required": true | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/TranscriptionResponse" | |
| } | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Generation" | |
| ] | |
| } | |
| }, | |
| "/audio/{generation_id}": { | |
| "get": { | |
| "summary": "Get Audio", | |
| "description": "Serve generated audio file.", | |
| "operationId": "get_audio_audio__generation_id__get", | |
| "parameters": [ | |
| { | |
| "name": "generation_id", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Generation Id" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Generation" | |
| ] | |
| } | |
| }, | |
| "/models/load": { | |
| "post": { | |
| "summary": "Load Model", | |
| "description": "Manually load TTS model.", | |
| "operationId": "load_model_models_load_post", | |
| "parameters": [ | |
| { | |
| "name": "model_size", | |
| "in": "query", | |
| "required": false, | |
| "schema": { | |
| "type": "string", | |
| "default": "1.7B", | |
| "title": "Model Size" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Models" | |
| ] | |
| } | |
| }, | |
| "/models/unload": { | |
| "post": { | |
| "summary": "Unload Model", | |
| "description": "Unload TTS model to free memory.", | |
| "operationId": "unload_model_models_unload_post", | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Models" | |
| ] | |
| } | |
| }, | |
| "/models/progress/{model_name}": { | |
| "get": { | |
| "summary": "Get Model Progress", | |
| "description": "Get model download progress via Server-Sent Events.", | |
| "operationId": "get_model_progress_models_progress__model_name__get", | |
| "parameters": [ | |
| { | |
| "name": "model_name", | |
| "in": "path", | |
| "required": true, | |
| "schema": { | |
| "type": "string", | |
| "title": "Model Name" | |
| } | |
| } | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Models" | |
| ] | |
| } | |
| }, | |
| "/models/status": { | |
| "get": { | |
| "summary": "Get Model Status", | |
| "description": "Get status of all available models.", | |
| "operationId": "get_model_status_models_status_get", | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ModelStatusListResponse" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Models" | |
| ] | |
| } | |
| }, | |
| "/models/download": { | |
| "post": { | |
| "summary": "Trigger Model Download", | |
| "description": "Trigger download of a specific model.", | |
| "operationId": "trigger_model_download_models_download_post", | |
| "requestBody": { | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/ModelDownloadRequest" | |
| } | |
| } | |
| }, | |
| "required": true | |
| }, | |
| "responses": { | |
| "200": { | |
| "description": "Successful Response", | |
| "content": { | |
| "application/json": { | |
| "schema": {} | |
| } | |
| } | |
| }, | |
| "422": { | |
| "description": "Validation Error", | |
| "content": { | |
| "application/json": { | |
| "schema": { | |
| "$ref": "#/components/schemas/HTTPValidationError" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| "Models" | |
| ] | |
| } | |
| } | |
| }, | |
| "components": { | |
| "schemas": { | |
| "Body_add_profile_sample_profiles__profile_id__samples_post": { | |
| "properties": { | |
| "file": { | |
| "type": "string", | |
| "format": "binary", | |
| "title": "File" | |
| }, | |
| "reference_text": { | |
| "type": "string", | |
| "title": "Reference Text" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "file", | |
| "reference_text" | |
| ], | |
| "title": "Body_add_profile_sample_profiles__profile_id__samples_post" | |
| }, | |
| "Body_transcribe_audio_transcribe_post": { | |
| "properties": { | |
| "file": { | |
| "type": "string", | |
| "format": "binary", | |
| "title": "File" | |
| }, | |
| "language": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Language" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "file" | |
| ], | |
| "title": "Body_transcribe_audio_transcribe_post" | |
| }, | |
| "GenerationRequest": { | |
| "properties": { | |
| "profile_id": { | |
| "type": "string", | |
| "title": "Profile Id" | |
| }, | |
| "text": { | |
| "type": "string", | |
| "maxLength": 5000, | |
| "minLength": 1, | |
| "title": "Text" | |
| }, | |
| "language": { | |
| "type": "string", | |
| "pattern": "^(en|zh)$", | |
| "title": "Language", | |
| "default": "en" | |
| }, | |
| "seed": { | |
| "anyOf": [ | |
| { | |
| "type": "integer", | |
| "minimum": 0.0 | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Seed" | |
| }, | |
| "model_size": { | |
| "anyOf": [ | |
| { | |
| "type": "string", | |
| "pattern": "^(1\\.7B|0\\.6B)$" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Model Size", | |
| "default": "1.7B" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "profile_id", | |
| "text" | |
| ], | |
| "title": "GenerationRequest", | |
| "description": "Request model for voice generation." | |
| }, | |
| "GenerationResponse": { | |
| "properties": { | |
| "id": { | |
| "type": "string", | |
| "title": "Id" | |
| }, | |
| "profile_id": { | |
| "type": "string", | |
| "title": "Profile Id" | |
| }, | |
| "text": { | |
| "type": "string", | |
| "title": "Text" | |
| }, | |
| "language": { | |
| "type": "string", | |
| "title": "Language" | |
| }, | |
| "audio_path": { | |
| "type": "string", | |
| "title": "Audio Path" | |
| }, | |
| "duration": { | |
| "type": "number", | |
| "title": "Duration" | |
| }, | |
| "seed": { | |
| "anyOf": [ | |
| { | |
| "type": "integer" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Seed" | |
| }, | |
| "created_at": { | |
| "type": "string", | |
| "format": "date-time", | |
| "title": "Created At" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "id", | |
| "profile_id", | |
| "text", | |
| "language", | |
| "audio_path", | |
| "duration", | |
| "seed", | |
| "created_at" | |
| ], | |
| "title": "GenerationResponse", | |
| "description": "Response model for voice generation." | |
| }, | |
| "HTTPValidationError": { | |
| "properties": { | |
| "detail": { | |
| "items": { | |
| "$ref": "#/components/schemas/ValidationError" | |
| }, | |
| "type": "array", | |
| "title": "Detail" | |
| } | |
| }, | |
| "type": "object", | |
| "title": "HTTPValidationError" | |
| }, | |
| "HealthResponse": { | |
| "properties": { | |
| "status": { | |
| "type": "string", | |
| "title": "Status" | |
| }, | |
| "model_loaded": { | |
| "type": "boolean", | |
| "title": "Model Loaded" | |
| }, | |
| "model_downloaded": { | |
| "anyOf": [ | |
| { | |
| "type": "boolean" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Model Downloaded" | |
| }, | |
| "model_size": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Model Size" | |
| }, | |
| "gpu_available": { | |
| "type": "boolean", | |
| "title": "Gpu Available" | |
| }, | |
| "vram_used_mb": { | |
| "anyOf": [ | |
| { | |
| "type": "number" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Vram Used Mb" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "status", | |
| "model_loaded", | |
| "gpu_available" | |
| ], | |
| "title": "HealthResponse", | |
| "description": "Response model for health check." | |
| }, | |
| "HistoryListResponse": { | |
| "properties": { | |
| "items": { | |
| "items": { | |
| "$ref": "#/components/schemas/HistoryResponse" | |
| }, | |
| "type": "array", | |
| "title": "Items" | |
| }, | |
| "total": { | |
| "type": "integer", | |
| "title": "Total" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "items", | |
| "total" | |
| ], | |
| "title": "HistoryListResponse", | |
| "description": "Response model for history list." | |
| }, | |
| "HistoryResponse": { | |
| "properties": { | |
| "id": { | |
| "type": "string", | |
| "title": "Id" | |
| }, | |
| "profile_id": { | |
| "type": "string", | |
| "title": "Profile Id" | |
| }, | |
| "profile_name": { | |
| "type": "string", | |
| "title": "Profile Name" | |
| }, | |
| "text": { | |
| "type": "string", | |
| "title": "Text" | |
| }, | |
| "language": { | |
| "type": "string", | |
| "title": "Language" | |
| }, | |
| "audio_path": { | |
| "type": "string", | |
| "title": "Audio Path" | |
| }, | |
| "duration": { | |
| "type": "number", | |
| "title": "Duration" | |
| }, | |
| "seed": { | |
| "anyOf": [ | |
| { | |
| "type": "integer" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Seed" | |
| }, | |
| "created_at": { | |
| "type": "string", | |
| "format": "date-time", | |
| "title": "Created At" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "id", | |
| "profile_id", | |
| "profile_name", | |
| "text", | |
| "language", | |
| "audio_path", | |
| "duration", | |
| "seed", | |
| "created_at" | |
| ], | |
| "title": "HistoryResponse", | |
| "description": "Response model for history entry (includes profile name)." | |
| }, | |
| "ModelDownloadRequest": { | |
| "properties": { | |
| "model_name": { | |
| "type": "string", | |
| "title": "Model Name" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "model_name" | |
| ], | |
| "title": "ModelDownloadRequest", | |
| "description": "Request model for triggering model download." | |
| }, | |
| "ModelStatus": { | |
| "properties": { | |
| "model_name": { | |
| "type": "string", | |
| "title": "Model Name" | |
| }, | |
| "display_name": { | |
| "type": "string", | |
| "title": "Display Name" | |
| }, | |
| "downloaded": { | |
| "type": "boolean", | |
| "title": "Downloaded" | |
| }, | |
| "size_mb": { | |
| "anyOf": [ | |
| { | |
| "type": "number" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Size Mb" | |
| }, | |
| "loaded": { | |
| "type": "boolean", | |
| "title": "Loaded", | |
| "default": false | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "model_name", | |
| "display_name", | |
| "downloaded" | |
| ], | |
| "title": "ModelStatus", | |
| "description": "Response model for model status." | |
| }, | |
| "ModelStatusListResponse": { | |
| "properties": { | |
| "models": { | |
| "items": { | |
| "$ref": "#/components/schemas/ModelStatus" | |
| }, | |
| "type": "array", | |
| "title": "Models" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "models" | |
| ], | |
| "title": "ModelStatusListResponse", | |
| "description": "Response model for model status list." | |
| }, | |
| "ProfileSampleResponse": { | |
| "properties": { | |
| "id": { | |
| "type": "string", | |
| "title": "Id" | |
| }, | |
| "profile_id": { | |
| "type": "string", | |
| "title": "Profile Id" | |
| }, | |
| "audio_path": { | |
| "type": "string", | |
| "title": "Audio Path" | |
| }, | |
| "reference_text": { | |
| "type": "string", | |
| "title": "Reference Text" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "id", | |
| "profile_id", | |
| "audio_path", | |
| "reference_text" | |
| ], | |
| "title": "ProfileSampleResponse", | |
| "description": "Response model for profile sample." | |
| }, | |
| "TranscriptionResponse": { | |
| "properties": { | |
| "text": { | |
| "type": "string", | |
| "title": "Text" | |
| }, | |
| "duration": { | |
| "type": "number", | |
| "title": "Duration" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "text", | |
| "duration" | |
| ], | |
| "title": "TranscriptionResponse", | |
| "description": "Response model for transcription." | |
| }, | |
| "ValidationError": { | |
| "properties": { | |
| "loc": { | |
| "items": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "integer" | |
| } | |
| ] | |
| }, | |
| "type": "array", | |
| "title": "Location" | |
| }, | |
| "msg": { | |
| "type": "string", | |
| "title": "Message" | |
| }, | |
| "type": { | |
| "type": "string", | |
| "title": "Error Type" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "loc", | |
| "msg", | |
| "type" | |
| ], | |
| "title": "ValidationError" | |
| }, | |
| "VoiceProfileCreate": { | |
| "properties": { | |
| "name": { | |
| "type": "string", | |
| "maxLength": 100, | |
| "minLength": 1, | |
| "title": "Name" | |
| }, | |
| "description": { | |
| "anyOf": [ | |
| { | |
| "type": "string", | |
| "maxLength": 500 | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Description" | |
| }, | |
| "language": { | |
| "type": "string", | |
| "pattern": "^(en|zh)$", | |
| "title": "Language", | |
| "default": "en" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "name" | |
| ], | |
| "title": "VoiceProfileCreate", | |
| "description": "Request model for creating a voice profile." | |
| }, | |
| "VoiceProfileResponse": { | |
| "properties": { | |
| "id": { | |
| "type": "string", | |
| "title": "Id" | |
| }, | |
| "name": { | |
| "type": "string", | |
| "title": "Name" | |
| }, | |
| "description": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "title": "Description" | |
| }, | |
| "language": { | |
| "type": "string", | |
| "title": "Language" | |
| }, | |
| "created_at": { | |
| "type": "string", | |
| "format": "date-time", | |
| "title": "Created At" | |
| }, | |
| "updated_at": { | |
| "type": "string", | |
| "format": "date-time", | |
| "title": "Updated At" | |
| } | |
| }, | |
| "type": "object", | |
| "required": [ | |
| "id", | |
| "name", | |
| "description", | |
| "language", | |
| "created_at", | |
| "updated_at" | |
| ], | |
| "title": "VoiceProfileResponse", | |
| "description": "Response model for voice profile." | |
| } | |
| } | |
| }, | |
| "tags": [ | |
| { | |
| "name": "General", | |
| "description": "Root and health check endpoints" | |
| }, | |
| { | |
| "name": "Profiles", | |
| "description": "Voice profile management" | |
| }, | |
| { | |
| "name": "Generation", | |
| "description": "Speech generation, transcription, and audio retrieval" | |
| }, | |
| { | |
| "name": "History", | |
| "description": "Generation history and statistics" | |
| }, | |
| { | |
| "name": "Models", | |
| "description": "Model loading, unloading, and status management" | |
| } | |
| ] | |
| } |