Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2877ae996d | ||
|
|
dbafd4fb73 |
Binary file not shown.
Binary file not shown.
+2
-1
@@ -2,4 +2,5 @@ fastapi==0.110.0
|
||||
uvicorn==0.27.1
|
||||
python-multipart==0.0.9
|
||||
aiohttp==3.9.3
|
||||
edge-tts==6.1.9
|
||||
edge-tts==6.1.9
|
||||
requests==2.31.0
|
||||
+14
-7
@@ -372,9 +372,9 @@
|
||||
<div class="name">🌐 Edge TTS</div>
|
||||
<div class="status" id="edgeStatus">检测中...</div>
|
||||
</div>
|
||||
<div class="tts-option disabled" data-provider="chattts">
|
||||
<div class="tts-option" data-provider="chattts">
|
||||
<div class="name">🤖 ChatTTS</div>
|
||||
<div class="status">暂未部署</div>
|
||||
<div class="status" id="chatttsStatus">检测中...</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="voice-select" id="voiceSelect" style="display: none;">
|
||||
@@ -490,13 +490,20 @@
|
||||
|
||||
// 更新状态
|
||||
data.providers.forEach(p => {
|
||||
if (p.name === 'edge') {
|
||||
const statusEl = document.getElementById('edgeStatus');
|
||||
const statusElId = p.name === 'edge' ? 'edgeStatus' :
|
||||
p.name === 'chattts' ? 'chatttsStatus' : null;
|
||||
|
||||
if (statusElId) {
|
||||
const statusEl = document.getElementById(statusElId);
|
||||
statusEl.textContent = p.available ? '可用 ✓' : '不可用';
|
||||
|
||||
const optionEl = ttsOptions.querySelector('[data-provider="edge"]');
|
||||
if (p.available) {
|
||||
optionEl.classList.remove('disabled');
|
||||
const optionEl = ttsOptions.querySelector(`[data-provider="${p.name}"]`);
|
||||
if (optionEl) {
|
||||
if (p.available) {
|
||||
optionEl.classList.remove('disabled');
|
||||
} else {
|
||||
optionEl.classList.add('disabled');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
+7
-18
@@ -145,24 +145,13 @@ class ChatTTSProvider(TTSProvider):
|
||||
"""检查 ChatTTS 是否可用"""
|
||||
if self._available is None:
|
||||
try:
|
||||
import aiohttp
|
||||
import asyncio
|
||||
|
||||
async def check():
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(
|
||||
f"{self.CHATTTS_URL}/health",
|
||||
timeout=aiohttp.ClientTimeout(total=5)
|
||||
) as resp:
|
||||
if resp.status == 200:
|
||||
data = await resp.json()
|
||||
return data.get("status") == "ok"
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
self._available = asyncio.get_event_loop().run_until_complete(check())
|
||||
import requests
|
||||
resp = requests.get(f"{self.CHATTTS_URL}/health", timeout=5)
|
||||
if resp.status_code == 200:
|
||||
data = resp.json()
|
||||
self._available = data.get("status") == "ok"
|
||||
else:
|
||||
self._available = False
|
||||
except Exception as e:
|
||||
logger.warning(f"ChatTTS check failed: {e}")
|
||||
self._available = False
|
||||
|
||||
Reference in New Issue
Block a user