morshu-server: use resolved absolute paths and pass env properly

This commit is contained in:
2026-06-06 19:55:17 -05:00
parent 33aa6aba33
commit 561cec8bee
3 changed files with 27 additions and 9 deletions
+7 -3
View File
@@ -3,18 +3,22 @@
Morshu TTS Server — standalone HTTP API for MorshuTalk engine.
Runs on port 3002. GET /say?text=... returns WAV audio.
"""
import os
import sys
import io
from pathlib import Path
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import urlparse, parse_qs
# Add ttstoy to path so we can import the engine
sys.path.insert(0, str(Path(__file__).parent.parent))
# Add ttstoy root to path so we can import the engine
SCRIPT_DIR = Path(__file__).resolve().parent
TTSTOY_DIR = SCRIPT_DIR.parent
sys.path.insert(0, str(TTSTOY_DIR))
from morshutalk_engine import Morshu
morshu = Morshu()
PORT = 3002
PORT = int(os.environ.get("PORT", 3002))
class Handler(BaseHTTPRequestHandler):
+6 -4
View File
@@ -4,7 +4,8 @@
echo "🗣️ Starting Morshu TTS Server..."
cd "$(dirname "$0")"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
# Check if python3 is available
if ! command -v python3 &> /dev/null; then
@@ -22,12 +23,13 @@ for pkg in pydub nltk g2p_en numpy; do
done
# Check if the morshu wav file exists
if [ ! -f "../morshutalk_morshu.wav" ]; then
if [ ! -f "$SCRIPT_DIR/../morshutalk_morshu.wav" ]; then
echo "❌ Error: morshutalk_morshu.wav not found in parent directory"
exit 1
fi
# Start the server
echo "✅ Starting server on port ${PORT:-3002}..."
export PORT="${PORT:-3002}"
echo "✅ Starting server on port $PORT..."
echo "🗣️ Using MorshuTalk engine"
exec python3 server.py
exec python3 "$SCRIPT_DIR/server.py"
+14 -2
View File
@@ -523,6 +523,10 @@ class TtsToy(Cog):
log.info("Morshu server already running")
return True
if not self.morshu_dir.exists():
log.error(f"Morshu server directory not found: {self.morshu_dir}")
return False
server_py = self.morshu_dir / "server.py"
if not server_py.exists():
log.error(f"Morshu server not found: {server_py}")
@@ -533,7 +537,7 @@ class TtsToy(Cog):
self.morshu_process = await asyncio.to_thread(
subprocess.Popen,
[sys.executable, "server.py"],
[sys.executable, str(server_py)],
cwd=str(self.morshu_dir),
env=env,
stdout=subprocess.PIPE,
@@ -541,10 +545,18 @@ class TtsToy(Cog):
text=True
)
# Wait for server to start
await asyncio.sleep(3)
# Check if it's still running
if self.morshu_process.poll() is not None:
log.error("Morshu server failed to start")
stderr = self.morshu_process.stderr.read()
stdout = self.morshu_process.stdout.read()
log.error(f"Morshu server failed to start (exit {self.morshu_process.returncode})")
if stderr:
log.error(f"Morshu stderr: {stderr}")
if stdout:
log.error(f"Morshu stdout: {stdout}")
return False
log.info(f"Morshu server started on port {self.morshu_port}")