Add files via upload

This commit is contained in:
erew123 authored and GitHub committed 2024-09-18 01:35:36 +01:00
1 parent bb26cb8f28
commit e36c67efe4
1 file changed
+13 -9
+13 -9
View File
@@ -4,13 +4,13 @@ import time
import argparse import argparse
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
async def send_tts_request(session, url, text, request_id): async def send_tts_request(session, url, text, voice, request_id):
start_time = time.time() start_time = time.time()
try: try:
async with session.post(url, data={ async with session.post(url, data={
"text_input": text, "text_input": text,
"text_filtering": "standard", "text_filtering": "standard",
"character_voice_gen": "en_US-ljspeech-high.onnx", "character_voice_gen": voice,
"narrator_enabled": "false", "narrator_enabled": "false",
"narrator_voice_gen": "en_US-ljspeech-high.onnx", "narrator_voice_gen": "en_US-ljspeech-high.onnx",
"text_not_inside": "character", "text_not_inside": "character",
@@ -29,12 +29,12 @@ async def send_tts_request(session, url, text, request_id):
print(f"Request {request_id} failed: {str(e)}") print(f"Request {request_id} failed: {str(e)}")
return None return None
async def run_load_test(num_requests, text_length, api_url): async def run_load_test(num_requests, text_length, api_url, voice):
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
tasks = [] tasks = []
for i in range(num_requests): for i in range(num_requests):
text = f"This is a test of the MEM load balancing system. Request number {i+1}. " * (text_length // 10) text = f"This is a test of the MEM load balancing system. Request number {i+1}. " * (text_length // 10)
task = asyncio.ensure_future(send_tts_request(session, api_url, text, i+1)) task = asyncio.ensure_future(send_tts_request(session, api_url, text, voice, i+1))
tasks.append(task) tasks.append(task)
results = await asyncio.gather(*tasks) results = await asyncio.gather(*tasks)
@@ -45,18 +45,22 @@ def main():
parser.add_argument("--requests", type=int, default=5, help="Number of simultaneous requests to send") parser.add_argument("--requests", type=int, default=5, help="Number of simultaneous requests to send")
parser.add_argument("--length", type=int, default=50, help="Approximate length of text for each request") parser.add_argument("--length", type=int, default=50, help="Approximate length of text for each request")
parser.add_argument("--url", type=str, default="http://127.0.0.1:7401/api/tts-generate", help="URL of the MEM API") parser.add_argument("--url", type=str, default="http://127.0.0.1:7401/api/tts-generate", help="URL of the MEM API")
parser.add_argument("--voice", type=str, default="en_US-ljspeech-high.onnx", help="A voice the current TTS engine supports")
args = parser.parse_args() args = parser.parse_args()
print(f"AllTalk MEM load tester.") print(f"AllTalk MEM load tester.")
print(f"\nYou can use this to load test MEM. You can specify:") print(f"\nYou can use this to load test MEM. You can specify:")
print(f"\n - the amount of simultaneous request to send --requests") print(f"\n --requests (the amount of simultaneous request to send)")
print(f" - the amount of character text per request --length") print(f" --length (the amount of character text per request)")
print(f" - the URL to send the request to --url") print(f" --url (the URL to send the request to)")
print(f" --voice (the voice/audio sample to use)")
print(f"\nA full command line would look like this") print(f"\nA full command line would look like this")
print(f"\npython mem_load_test.py --requests 3 --length 50 --url `http://127.0.0.1:7401/api/tts-generate`") print(f"\npython mem_load_test.py --requests 3 --length 50 --url http://127.0.0.1:7401/api/tts-generate --voice female_01.wav")
print(f"\nAll requests are sent simultaniously at the same time. As such the 'completed in' time is") print(f"\nAll requests are sent simultaniously at the same time. As such the 'completed in' time is")
print(f"calculated from the time the requests were sent, not the actual TTS processing time per") print(f"calculated from the time the requests were sent, not the actual TTS processing time per")
print(f"individual request within the TTS engine.") print(f"individual request within the TTS engine.")
print(f"\nIf you dont specify a voice the loaded TTS engine uses, this will fail. The default voice")
print(f"being sent is en_US-ljspeech-high.onnx which is for Piper TTS.")
print(f"\nStarting load test with {args.requests} simultaneous requests...") print(f"\nStarting load test with {args.requests} simultaneous requests...")
print(f"Each request will have approximately {args.length} characters of text.") print(f"Each request will have approximately {args.length} characters of text.")
print(f"Sending requests to: {args.url}\n") print(f"Sending requests to: {args.url}\n")
@@ -65,7 +69,7 @@ def main():
# Run the async function in a separate thread to avoid blocking # Run the async function in a separate thread to avoid blocking
with ThreadPoolExecutor() as executor: with ThreadPoolExecutor() as executor:
future = executor.submit(asyncio.run, run_load_test(args.requests, args.length, args.url)) future = executor.submit(asyncio.run, run_load_test(args.requests, args.length, args.url, args.voice))
results = future.result() results = future.result()
end_time = time.time() end_time = time.time()