Merge branch 'refactor_endpoints' into develop

This commit is contained in:
misyaguziya
2025-11-13 10:02:40 +09:00
12 changed files with 141 additions and 104 deletions

View File

@@ -639,6 +639,9 @@ class Config:
MIC_MAX_PHRASES = ManagedProperty('MIC_MAX_PHRASES', type_=int)
MIC_AVG_LOGPROB = ManagedProperty('MIC_AVG_LOGPROB', type_=(int, float))
MIC_NO_SPEECH_PROB = ManagedProperty('MIC_NO_SPEECH_PROB', type_=(int, float))
MIC_NO_REPEAT_NGRAM_SIZE = ManagedProperty('MIC_NO_REPEAT_NGRAM_SIZE', type_=int)
MIC_VAD_FILTER = ManagedProperty('MIC_VAD_FILTER', type_=bool)
MIC_VAD_PARAMETERS = ManagedProperty('MIC_VAD_PARAMETERS', type_=dict, mutable_tracking=True)
HOTKEYS = ValidatedProperty('HOTKEYS',
validator=lambda val, inst: (
{k: (v if (isinstance(v, list) or v is None) else inst.HOTKEYS.get(k))
@@ -655,6 +658,9 @@ class Config:
SPEAKER_MAX_PHRASES = ManagedProperty('SPEAKER_MAX_PHRASES', type_=int)
SPEAKER_AVG_LOGPROB = ManagedProperty('SPEAKER_AVG_LOGPROB', type_=(int, float))
SPEAKER_NO_SPEECH_PROB = ManagedProperty('SPEAKER_NO_SPEECH_PROB', type_=(int, float))
SPEAKER_NO_REPEAT_NGRAM_SIZE = ManagedProperty('SPEAKER_NO_REPEAT_NGRAM_SIZE', type_=int)
SPEAKER_VAD_FILTER = ManagedProperty('SPEAKER_VAD_FILTER', type_=bool)
SPEAKER_VAD_PARAMETERS = ManagedProperty('SPEAKER_VAD_PARAMETERS', type_=dict, mutable_tracking=True)
# --- Auth and API settings ---
AUTH_KEYS = ValidatedProperty('AUTH_KEYS',
@@ -862,6 +868,16 @@ class Config:
self._PLUGINS_STATUS = []
self._MIC_AVG_LOGPROB = -0.8
self._MIC_NO_SPEECH_PROB = 0.6
self._MIC_NO_REPEAT_NGRAM_SIZE = 0
self._MIC_VAD_FILTER = False
self._MIC_VAD_PARAMETERS = {
"threshold": 0.5,
"neg_threshold": None,
"min_speech_duration_ms": 0,
"max_speech_duration_s": float("inf"),
"min_silence_duration_ms": 2000,
"speech_pad_ms": 400,
}
self._AUTO_SPEAKER_SELECT = True
try:
if device_manager is not None:
@@ -879,6 +895,16 @@ class Config:
self._SPEAKER_MAX_PHRASES = 10
self._SPEAKER_AVG_LOGPROB = -0.8
self._SPEAKER_NO_SPEECH_PROB = 0.6
self._SPEAKER_NO_REPEAT_NGRAM_SIZE = 0
self._SPEAKER_VAD_FILTER = False
self._SPEAKER_VAD_PARAMETERS = {
"threshold": 0.5,
"neg_threshold": None,
"min_speech_duration_ms": 0,
"max_speech_duration_s": float("inf"),
"min_silence_duration_ms": 2000,
"speech_pad_ms": 400,
}
self._OSC_IP_ADDRESS = "127.0.0.1"
self._OSC_PORT = 9000
self._AUTH_KEYS = {

View File

@@ -79,21 +79,21 @@ class Controller:
def updateMicHostList(self) -> None:
self.run(
200,
self.run_mapping["mic_host_list"],
self.run_mapping["selectable_mic_host_list"],
model.getListMicHost(),
)
def updateMicDeviceList(self) -> None:
self.run(
200,
self.run_mapping["mic_device_list"],
self.run_mapping["selectable_mic_device_list"],
model.getListMicDevice(),
)
def updateSpeakerDeviceList(self) -> None:
self.run(
200,
self.run_mapping["speaker_device_list"],
self.run_mapping["selectable_speaker_device_list"],
model.getListSpeakerDevice(),
)

View File

@@ -12,7 +12,7 @@ VRCTアプリケーションのAPIエンドポイントを包括的にテスト
- マイク/スピーカー関連タイムアウト値の正常範囲チェック(取得した最新値を基準にバリデーション)
- Whisper / CTranslate2 重みタイプ辞書のキー集合変化への追従
例: `"/set/data/selected_translation_engines"` 試験前に `"/get/data/translation_engines"` を呼び、取得したリストから `random.choice()`。従来の初期キャッシュ依存から、実行時取得へ移行。
例: `"/set/data/selected_translation_engines"` 試験前に `"/get/data/selectable_translation_engines"` を呼び、取得したリストから `random.choice()`。従来の初期キャッシュ依存から、実行時取得へ移行。
## 主要機能
@@ -94,13 +94,13 @@ test.test_endpoints_specific_random()
動的取得対象(代表例):
- `selected_translation_engines``/get/data/translation_engines`
- `selected_transcription_engine``/get/data/transcription_engines`
- `selected_translation_compute_device``/get/data/translation_compute_device_list`
- `selected_translation_engines``/get/data/selectable_translation_engines`
- `selected_transcription_engine``/get/data/selectable_transcription_engines`
- `selected_translation_compute_device``/get/data/selectable_translation_compute_device_list`
- `ctranslate2_weight_type``/get/data/selectable_ctranslate2_weight_type_dict`
- `whisper_weight_type``/get/data/selectable_whisper_weight_type_dict`
- `selected_mic_host` / `selected_mic_device``/get/data/mic_host_list` / `/get/data/mic_device_list`
- `selected_speaker_device``/get/data/speaker_device_list`
- `selected_mic_host` / `selected_mic_device``/get/data/selectable_mic_host_list` / `/get/data/selectable_mic_device_list`
- `selected_speaker_device``/get/data/selectable_speaker_device_list`
### 実行系

View File

@@ -79,8 +79,8 @@
`mainloop.py``mapping` / `run_mapping` に以下を追加:
- `/get/data/lmstudio_model_list`, `/get/data/lmstudio_model`, `/set/data/lmstudio_model`, `/get/data/lmstudio_url`, `/set/data/lmstudio_url`
- `/get/data/ollama_connection`, `/get/data/ollama_model_list`, `/get/data/ollama_model`, `/set/data/ollama_model`
- `/get/data/selectable_lmstudio_model_list`, `/get/data/selected_lmstudio_model`, `/set/data/selected_lmstudio_model`, `/get/data/lmstudio_url`, `/set/data/lmstudio_url`
- `/get/data/ollama_connection`, `/get/data/selectable_ollama_model_list`, `/get/data/selected_ollama_model`, `/set/data/selected_ollama_model`
- OpenAI 系: `getOpenAIAuthKey`, `setOpenAIAuthKey`, `delOpenAIAuthKey`, `getOpenAIModelList`, `getOpenAIModel`, `setOpenAIModel` に名称統一。
### 翻訳言語定義の構造変更

View File

@@ -63,9 +63,9 @@ run_mapping = {
"selectable_ollama_model_list":"/run/selectable_ollama_model_list",
"selected_ollama_model":"/run/selected_ollama_model",
"mic_host_list":"/run/mic_host_list",
"mic_device_list":"/run/mic_device_list",
"speaker_device_list":"/run/speaker_device_list",
"selectable_mic_host_list":"/run/selectable_mic_host_list",
"selectable_mic_device_list":"/run/selectable_mic_device_list",
"selectable_speaker_device_list":"/run/selectable_speaker_device_list",
"software_update_info":"/run/software_update_info",
@@ -103,7 +103,7 @@ mapping = {
"/set/enable/main_window_sidebar_compact_mode": {"status": True, "variable":controller.setEnableMainWindowSidebarCompactMode},
"/set/disable/main_window_sidebar_compact_mode": {"status": True, "variable":controller.setDisableMainWindowSidebarCompactMode},
"/get/data/translation_engines": {"status": True, "variable":controller.getTranslationEngines},
"/get/data/selectable_translation_engines": {"status": True, "variable":controller.getTranslationEngines},
"/get/data/selectable_language_list": {"status": True, "variable":controller.getListLanguageAndCountry},
"/get/data/selected_translation_engines": {"status": False, "variable":controller.getSelectedTranslationEngines},
@@ -115,7 +115,7 @@ mapping = {
"/get/data/selected_target_languages": {"status": True, "variable":controller.getSelectedTargetLanguages},
"/set/data/selected_target_languages": {"status": True, "variable":controller.setSelectedTargetLanguages},
"/get/data/transcription_engines": {"status": False, "variable":controller.getTranscriptionEngines},
"/get/data/selectable_transcription_engines": {"status": False, "variable":controller.getTranscriptionEngines},
"/get/data/selected_transcription_engine": {"status": False, "variable":controller.getSelectedTranscriptionEngine},
"/set/data/selected_transcription_engine": {"status": False, "variable":controller.setSelectedTranscriptionEngine},
@@ -164,18 +164,18 @@ mapping = {
# Compute device
"/get/data/compute_mode": {"status": True, "variable":controller.getComputeMode},
"/get/data/translation_compute_device_list": {"status": True, "variable":controller.getComputeDeviceList},
"/get/data/selectable_translation_compute_device_list": {"status": True, "variable":controller.getComputeDeviceList},
"/get/data/selected_translation_compute_device": {"status": True, "variable":controller.getSelectedTranslationComputeDevice},
"/set/data/selected_translation_compute_device": {"status": True, "variable":controller.setSelectedTranslationComputeDevice},
"/get/data/transcription_compute_device_list": {"status": True, "variable":controller.getComputeDeviceList},
"/get/data/selectable_transcription_compute_device_list": {"status": True, "variable":controller.getComputeDeviceList},
"/get/data/selected_transcription_compute_device": {"status": True, "variable":controller.getSelectedTranscriptionComputeDevice},
"/set/data/selected_transcription_compute_device": {"status": True, "variable":controller.setSelectedTranscriptionComputeDevice},
# Translation
"/get/data/selectable_ctranslate2_weight_type_dict": {"status": True, "variable":controller.getSelectableCtranslate2WeightTypeDict},
"/get/data/ctranslate2_weight_type": {"status": True, "variable":controller.getCtranslate2WeightType},
"/set/data/ctranslate2_weight_type": {"status": True, "variable":controller.setCtranslate2WeightType},
"/get/data/selected_ctranslate2_weight_type": {"status": True, "variable":controller.getCtranslate2WeightType},
"/set/data/selected_ctranslate2_weight_type": {"status": True, "variable":controller.setCtranslate2WeightType},
"/get/data/selected_translation_compute_type": {"status": True, "variable":controller.getSelectedTranslationComputeType},
"/set/data/selected_translation_compute_type": {"status": True, "variable":controller.setSelectedTranslationComputeType},
@@ -186,38 +186,38 @@ mapping = {
"/set/data/deepl_auth_key": {"status": False, "variable":controller.setDeeplAuthKey},
"/delete/data/deepl_auth_key": {"status": False, "variable":controller.delDeeplAuthKey},
"/get/data/plamo_model_list": {"status": False, "variable":controller.getPlamoModelList},
"/get/data/plamo_model": {"status": False, "variable":controller.getPlamoModel},
"/set/data/plamo_model": {"status": False, "variable":controller.setPlamoModel},
"/get/data/selectable_plamo_model_list": {"status": False, "variable":controller.getPlamoModelList},
"/get/data/selected_plamo_model": {"status": False, "variable":controller.getPlamoModel},
"/set/data/selected_plamo_model": {"status": False, "variable":controller.setPlamoModel},
"/get/data/plamo_auth_key": {"status": False, "variable":controller.getPlamoAuthKey},
"/set/data/plamo_auth_key": {"status": False, "variable":controller.setPlamoAuthKey},
"/delete/data/plamo_auth_key": {"status": False, "variable":controller.delPlamoAuthKey},
"/get/data/gemini_model_list": {"status": True, "variable":controller.getGeminiModelList},
"/get/data/gemini_model": {"status": True, "variable":controller.getGeminiModel},
"/set/data/gemini_model": {"status": True, "variable":controller.setGeminiModel},
"/get/data/selectable_gemini_model_list": {"status": True, "variable":controller.getGeminiModelList},
"/get/data/selected_gemini_model": {"status": True, "variable":controller.getGeminiModel},
"/set/data/selected_gemini_model": {"status": True, "variable":controller.setGeminiModel},
"/get/data/gemini_auth_key": {"status": True, "variable":controller.getGeminiAuthKey},
"/set/data/gemini_auth_key": {"status": True, "variable":controller.setGeminiAuthKey},
"/delete/data/gemini_auth_key": {"status": True, "variable":controller.delGeminiAuthKey},
"/get/data/openai_model_list": {"status": True, "variable":controller.getOpenAIModelList},
"/get/data/openai_model": {"status": True, "variable":controller.getOpenAIModel},
"/set/data/openai_model": {"status": True, "variable":controller.setOpenAIModel},
"/get/data/selectable_openai_model_list": {"status": True, "variable":controller.getOpenAIModelList},
"/get/data/selected_openai_model": {"status": True, "variable":controller.getOpenAIModel},
"/set/data/selected_openai_model": {"status": True, "variable":controller.setOpenAIModel},
"/get/data/openai_auth_key": {"status": True, "variable":controller.getOpenAIAuthKey},
"/set/data/openai_auth_key": {"status": True, "variable":controller.setOpenAIAuthKey},
"/delete/data/openai_auth_key": {"status": True, "variable":controller.delOpenAIAuthKey},
"/run/lmstudio_connection": {"status": True, "variable":controller.checkTranslatorLMStudioConnection},
"/get/data/lmstudio_model_list": {"status": True, "variable":controller.getTranslatorLStudioModelList},
"/get/data/lmstudio_model": {"status": True, "variable":controller.getTranslatorLMStudioModel},
"/set/data/lmstudio_model": {"status": True, "variable":controller.setTranslatorLMStudioModel},
"/get/data/selectable_lmstudio_model_list": {"status": True, "variable":controller.getTranslatorLStudioModelList},
"/get/data/selected_lmstudio_model": {"status": True, "variable":controller.getTranslatorLMStudioModel},
"/set/data/selected_lmstudio_model": {"status": True, "variable":controller.setTranslatorLMStudioModel},
"/get/data/lmstudio_url": {"status": True, "variable":controller.getTranslatorLMStudioURL},
"/set/data/lmstudio_url": {"status": True, "variable":controller.setTranslatorLMStudioURL},
"/run/ollama_connection": {"status": True, "variable":controller.checkTranslatorOllamaConnection},
"/get/data/ollama_model_list": {"status": True, "variable":controller.getTranslatorOllamaModelList},
"/get/data/ollama_model": {"status": True, "variable":controller.getTranslatorOllamaModel},
"/set/data/ollama_model": {"status": True, "variable":controller.setTranslatorOllamaModel},
"/get/data/selectable_ollama_model_list": {"status": True, "variable":controller.getTranslatorOllamaModelList},
"/get/data/selected_ollama_model": {"status": True, "variable":controller.getTranslatorOllamaModel},
"/set/data/selected_ollama_model": {"status": True, "variable":controller.setTranslatorOllamaModel},
# Transliteration
"/get/data/convert_message_to_romaji": {"status": True, "variable":controller.getConvertMessageToRomaji},
@@ -229,9 +229,9 @@ mapping = {
"/set/disable/convert_message_to_hiragana": {"status": True, "variable":controller.setDisableConvertMessageToHiragana},
# Transcription
"/get/data/mic_host_list": {"status": True, "variable":controller.getMicHostList},
"/get/data/mic_device_list": {"status": True, "variable":controller.getMicDeviceList},
"/get/data/speaker_device_list": {"status": True, "variable":controller.getSpeakerDeviceList},
"/get/data/selectable_mic_host_list": {"status": True, "variable":controller.getMicHostList},
"/get/data/selectable_mic_device_list": {"status": True, "variable":controller.getMicDeviceList},
"/get/data/selectable_speaker_device_list": {"status": True, "variable":controller.getSpeakerDeviceList},
# "/get/data/max_mic_threshold": {"status": True, "variable":controller.getMaxMicThreshold},
# "/get/data/max_speaker_threshold": {"status": True, "variable":controller.getMaxSpeakerThreshold},
@@ -314,8 +314,8 @@ mapping = {
"/get/data/selectable_whisper_weight_type_dict": {"status": True, "variable":controller.getSelectableWhisperWeightTypeDict},
"/get/data/whisper_weight_type": {"status": True, "variable":controller.getWhisperWeightType},
"/set/data/whisper_weight_type": {"status": True, "variable":controller.setWhisperWeightType},
"/get/data/selected_whisper_weight_type": {"status": True, "variable":controller.getWhisperWeightType},
"/set/data/selected_whisper_weight_type": {"status": True, "variable":controller.setWhisperWeightType},
"/get/data/selected_transcription_compute_type": {"status": True, "variable":controller.getSelectedTranscriptionComputeType},
"/set/data/selected_transcription_compute_type": {"status": True, "variable":controller.setSelectedTranscriptionComputeType},

View File

@@ -664,7 +664,10 @@ class Model:
languages,
countries,
config.MIC_AVG_LOGPROB,
config.MIC_NO_SPEECH_PROB
config.MIC_NO_SPEECH_PROB,
config.MIC_NO_REPEAT_NGRAM_SIZE,
config.MIC_VAD_FILTER,
config.MIC_VAD_PARAMETERS,
)
if res:
result = self.mic_transcriber.getTranscript()
@@ -856,7 +859,10 @@ class Model:
languages,
countries,
config.SPEAKER_AVG_LOGPROB,
config.SPEAKER_NO_SPEECH_PROB
config.SPEAKER_NO_SPEECH_PROB,
config.SPEAKER_NO_REPEAT_NGRAM_SIZE,
config.SPEAKER_VAD_FILTER,
config.SPEAKER_VAD_PARAMETERS,
)
if res:
result = self.speaker_transcriber.getTranscript()

View File

@@ -8,7 +8,7 @@ import time
from io import BytesIO
from threading import Event
import wave
from typing import Any, Callable, Dict, List, Optional, Tuple
from typing import Any, Dict, List, Optional, Union
from speech_recognition import Recognizer, AudioData, AudioFile
from speech_recognition.exceptions import UnknownValueError
from datetime import timedelta
@@ -84,6 +84,9 @@ class AudioTranscriber:
countries: List[str],
avg_logprob: float = -0.8,
no_speech_prob: float = 0.6,
no_repeat_ngram_size: int = 0,
vad_filter: bool = False,
vad_parameters: Optional[Union[dict, Any]] = None,
) -> bool:
if audio_queue.empty():
time.sleep(0.01)
@@ -130,7 +133,9 @@ class AudioTranscriber:
word_timestamps=False,
without_timestamps=True,
task="transcribe",
vad_filter=False,
no_repeat_ngram_size=no_repeat_ngram_size,
vad_filter=vad_filter,
vad_parameters=vad_parameters,
)
for s in segments:
if s.avg_logprob < avg_logprob or s.no_speech_prob > no_speech_prob:

View File

@@ -394,16 +394,16 @@ class AutomatedEndpointTester:
"/set/data/main_window_geometry",
"/set/data/selected_translation_compute_device",
"/set/data/selected_transcription_compute_device",
"/set/data/ctranslate2_weight_type",
"/set/data/plamo_model",
"/set/data/selected_ctranslate2_weight_type",
"/set/data/selected_plamo_model",
"/set/data/plamo_auth_key",
"/set/data/gemini_model",
"/set/data/selected_gemini_model",
"/set/data/gemini_auth_key",
"/set/data/openai_model",
"/set/data/selected_openai_model",
"/set/data/openai_auth_key",
"/set/data/lmstudio_model",
"/set/data/selected_lmstudio_model",
"/set/data/lmstudio_url",
"/set/data/ollama_model",
"/set/data/selected_ollama_model",
"/set/data/deepl_auth_key",
"/set/data/selected_mic_host",
"/set/data/selected_mic_device",
@@ -423,7 +423,7 @@ class AutomatedEndpointTester:
"/set/data/speaker_max_phrases",
"/set/data/speaker_avg_logprob",
"/set/data/speaker_no_speech_prob",
"/set/data/whisper_weight_type",
"/set/data/selected_whisper_weight_type",
"/set/data/overlay_small_log_settings",
"/set/data/overlay_large_log_settings",
"/set/data/send_message_format_parts",
@@ -482,7 +482,7 @@ class AutomatedEndpointTester:
data = sys.modules.get('__random_tab_choices', None) or None # placeholder for future dynamic
data = data or "1"
elif endpoint == "/set/data/selected_translation_engines":
engines = self._get("/get/data/translation_engines") or []
engines = self._get("/get/data/selectable_translation_engines") or []
data = {i: (engines and (engines[0] if len(engines) else None)) for i in ["1","2","3"]}
elif endpoint == "/set/data/selected_your_languages":
lang_list = self._get("/get/data/selectable_language_list") or []
@@ -495,7 +495,7 @@ class AutomatedEndpointTester:
base = lang_list[0]
data = {i: {j: {**base, "enable": (j=="1")} for j in ["1","2","3"]} for i in ["1","2","3"]}
elif endpoint == "/set/data/selected_transcription_engine":
engines = self._get("/get/data/transcription_engines") or []
engines = self._get("/get/data/selectable_transcription_engines") or []
data = engines[0] if engines else None
elif endpoint == "/set/data/transparency":
import random
@@ -524,44 +524,44 @@ class AutomatedEndpointTester:
"height": random.randint(600,1080)
}
elif endpoint == "/set/data/selected_translation_compute_device":
lst = self._get("/get/data/translation_compute_device_list") or []
lst = self._get("/get/data/selectable_translation_compute_device_list") or []
import random
data = random.choice(lst) if lst else None
elif endpoint == "/set/data/selected_transcription_compute_device":
lst = self._get("/get/data/transcription_compute_device_list") or []
lst = self._get("/get/data/selectable_transcription_compute_device_list") or []
import random
data = random.choice(lst) if lst else None
elif endpoint == "/set/data/ctranslate2_weight_type":
elif endpoint == "/set/data/selected_ctranslate2_weight_type":
dct = self._get("/get/data/selectable_ctranslate2_weight_type_dict") or {}
keys = list(dct.keys())
import random
data = random.choice(keys) if keys else None
elif endpoint == "/set/data/plamo_model":
lst = self._get("/get/data/plamo_model_list") or []
elif endpoint == "/set/data/selected_plamo_model":
lst = self._get("/get/data/selectable_plamo_model_list") or []
import random
data = random.choice(lst) if lst else None
expected = [200,400]
elif endpoint == "/set/data/plamo_auth_key":
data = "PLAMO_DUMMY_KEY"
expected = [200,400]
elif endpoint == "/set/data/gemini_model":
lst = self._get("/get/data/gemini_model_list") or []
elif endpoint == "/set/data/selected_gemini_model":
lst = self._get("/get/data/selectable_gemini_model_list") or []
import random
data = random.choice(lst) if lst else None
expected = [200,400]
elif endpoint == "/set/data/gemini_auth_key":
data = "GEMINI_DUMMY_KEY"
expected = [200,400]
elif endpoint == "/set/data/openai_model":
lst = self._get("/get/data/openai_model_list") or []
elif endpoint == "/set/data/selected_openai_model":
lst = self._get("/get/data/selectable_openai_model_list") or []
import random
data = random.choice(lst) if lst else None
expected = [200,400]
elif endpoint == "/set/data/openai_auth_key":
data = "OPENAI_DUMMY_KEY"
expected = [200,400]
elif endpoint == "/set/data/lmstudio_model":
lst = self._get("/get/data/lmstudio_model_list") or []
elif endpoint == "/set/data/selected_lmstudio_model":
lst = self._get("/get/data/selectable_lmstudio_model_list") or []
import random
data = random.choice(lst) if lst else None
expected = [200,400]
@@ -569,8 +569,8 @@ class AutomatedEndpointTester:
import random
data = random.choice(["http://localhost:1234/v1","http://127.0.0.1:1234/v1","http://invalid_host:9999/v1"])
expected=[200,400]
elif endpoint == "/set/data/ollama_model":
lst = self._get("/get/data/ollama_model_list") or []
elif endpoint == "/set/data/selected_ollama_model":
lst = self._get("/get/data/selectable_ollama_model_list") or []
import random
data = random.choice(lst) if lst else None
expected = [200,400]
@@ -578,11 +578,11 @@ class AutomatedEndpointTester:
data = "DEEPL_DUMMY_KEY"
expected=[200,400]
elif endpoint == "/set/data/selected_mic_host":
lst = self._get("/get/data/mic_host_list") or []
lst = self._get("/get/data/selectable_mic_host_list") or []
import random
data = random.choice(lst) if lst else None
elif endpoint == "/set/data/selected_mic_device":
lst = self._get("/get/data/mic_device_list") or []
lst = self._get("/get/data/selectable_mic_device_list") or []
import random
data = random.choice(lst) if lst else None
elif endpoint == "/set/data/mic_threshold":
@@ -623,7 +623,7 @@ class AutomatedEndpointTester:
import random
data = random.choice([["test_0_0","test_0_1","test_0_2",None],["test_1_0","test_1_1",None],["test_2_0",None],[None]])
elif endpoint == "/set/data/selected_speaker_device":
lst = self._get("/get/data/speaker_device_list") or []
lst = self._get("/get/data/selectable_speaker_device_list") or []
import random
data = random.choice(lst) if lst else None
elif endpoint == "/set/data/speaker_threshold":
@@ -654,7 +654,7 @@ class AutomatedEndpointTester:
elif endpoint == "/set/data/speaker_no_speech_prob":
import random
data = random.uniform(0,1)
elif endpoint == "/set/data/whisper_weight_type":
elif endpoint == "/set/data/selected_whisper_weight_type":
dct = self._get("/get/data/selectable_whisper_weight_type_dict") or {}
import random
keys=[k for k,v in dct.items() if v]

View File

@@ -181,7 +181,7 @@ class TestMainloop():
data = random.choice(["1", "2", "3"])
case "/set/data/selected_translation_engines":
print("Fetching endpoint data for translation_engines...")
self.config_dict["translation_engines"], _ = self.main.handleRequest("/get/data/translation_engines", None)
self.config_dict["translation_engines"], _ = self.main.handleRequest("/get/data/selectable_translation_engines", None)
translation_engines = self.config_dict.get("translation_engines", None)
data = {}
for i in ["1", "2", "3"]:
@@ -202,7 +202,7 @@ class TestMainloop():
for j in ["1", "2", "3"]:
data[i][j] = random.choice(selectable_language_list) | {"enable": random.choice([True, False])}
case "/set/data/selected_transcription_engine":
self.config_dict["transcription_engines"], _ = self.main.handleRequest("/get/data/transcription_engines", None)
self.config_dict["transcription_engines"], _ = self.main.handleRequest("/get/data/selectable_transcription_engines", None)
transcription_engines = self.config_dict.get("transcription_engines", None)
data = random.choice(transcription_engines)
case "/set/data/transparency":
@@ -227,42 +227,42 @@ class TestMainloop():
"height": random.randint(600, 1080)
}
case "/set/data/selected_translation_compute_device":
self.config_dict["translation_compute_device_list"], _ = self.main.handleRequest("/get/data/translation_compute_device_list", None)
self.config_dict["translation_compute_device_list"], _ = self.main.handleRequest("/get/data/selectable_translation_compute_device_list", None)
translation_compute_device_list = self.config_dict.get("translation_compute_device_list", None)
data = random.choice(translation_compute_device_list)
case "/set/data/selected_transcription_compute_device":
self.config_dict["transcription_compute_device_list"], _ = self.main.handleRequest("/get/data/transcription_compute_device_list", None)
self.config_dict["transcription_compute_device_list"], _ = self.main.handleRequest("/get/data/selectable_transcription_compute_device_list", None)
transcription_compute_device_list = self.config_dict.get("transcription_compute_device_list", None)
data = random.choice(transcription_compute_device_list)
case "/set/data/ctranslate2_weight_type":
case "/set/data/selected_ctranslate2_weight_type":
self.config_dict["selectable_ctranslate2_weight_type_dict"], _ = self.main.handleRequest("/get/data/selectable_ctranslate2_weight_type_dict", None)
selectable_ctranslate2_weight_type_dict = self.config_dict.get("selectable_ctranslate2_weight_type_dict", None)
data = random.choice(list(selectable_ctranslate2_weight_type_dict.keys()))
# LLM / API Clients
case "/set/data/plamo_model":
case "/set/data/selected_plamo_model":
# 事前にモデルリストを取得
self.config_dict["plamo_model_list"], _ = self.main.handleRequest("/get/data/plamo_model_list", None)
self.config_dict["plamo_model_list"], _ = self.main.handleRequest("/get/data/selectable_plamo_model_list", None)
model_list = self.config_dict.get("plamo_model_list", [])
data = random.choice(model_list) if model_list else None
case "/set/data/plamo_auth_key":
data = "PLAMO_DUMMY_KEY" # 成功か失敗かは内部判定に依存
expected_status = [200, 400]
case "/set/data/gemini_model":
self.config_dict["gemini_model_list"], _ = self.main.handleRequest("/get/data/gemini_model_list", None)
case "/set/data/selected_gemini_model":
self.config_dict["gemini_model_list"], _ = self.main.handleRequest("/get/data/selectable_gemini_model_list", None)
model_list = self.config_dict.get("gemini_model_list", [])
data = random.choice(model_list) if model_list else None
case "/set/data/gemini_auth_key":
data = "GEMINI_DUMMY_KEY"
expected_status = [200, 400]
case "/set/data/openai_model":
self.config_dict["openai_model_list"], _ = self.main.handleRequest("/get/data/openai_model_list", None)
case "/set/data/selected_openai_model":
self.config_dict["openai_model_list"], _ = self.main.handleRequest("/get/data/selectable_openai_model_list", None)
model_list = self.config_dict.get("openai_model_list", [])
data = random.choice(model_list) if model_list else None
case "/set/data/openai_auth_key":
data = "OPENAI_DUMMY_KEY"
expected_status = [200, 400]
case "/set/data/lmstudio_model":
self.config_dict["lmstudio_model_list"], _ = self.main.handleRequest("/get/data/lmstudio_model_list", None)
case "/set/data/selected_lmstudio_model":
self.config_dict["lmstudio_model_list"], _ = self.main.handleRequest("/get/data/selectable_lmstudio_model_list", None)
model_list = self.config_dict.get("lmstudio_model_list", [])
data = random.choice(model_list) if model_list else None
case "/set/data/lmstudio_url":
@@ -273,8 +273,8 @@ class TestMainloop():
"http://invalid_host:9999/v1",
])
expected_status = [200, 400]
case "/set/data/ollama_model":
self.config_dict["ollama_model_list"], _ = self.main.handleRequest("/get/data/ollama_model_list", None)
case "/set/data/selected_ollama_model":
self.config_dict["ollama_model_list"], _ = self.main.handleRequest("/get/data/selectable_ollama_model_list", None)
model_list = self.config_dict.get("ollama_model_list", [])
data = random.choice(model_list) if model_list else None
case "/set/data/deepl_auth_key":
@@ -290,12 +290,12 @@ class TestMainloop():
data = "OPENAI_DUMMY_KEY"
expected_status = [200, 400]
case "/set/data/selected_mic_host":
self.config_dict["mic_host_list"], _ = self.main.handleRequest("/get/data/mic_host_list", None)
mic_host_list = self.config_dict.get("mic_host_list", None)
self.config_dict["selectable_mic_host_list"], _ = self.main.handleRequest("/get/data/selectable_mic_host_list", None)
mic_host_list = self.config_dict.get("selectable_mic_host_list", None)
data = random.choice(mic_host_list)
case "/set/data/selected_mic_device":
self.config_dict["mic_device_list"], _ = self.main.handleRequest("/get/data/mic_device_list", None)
mic_device_list = self.config_dict.get("mic_device_list", None)
self.config_dict["selectable_mic_device_list"], _ = self.main.handleRequest("/get/data/selectable_mic_device_list", None)
mic_device_list = self.config_dict.get("selectable_mic_device_list", None)
data = random.choice(mic_device_list)
case "/set/data/mic_threshold":
data = random.randint(-1000, 3000)
@@ -348,8 +348,8 @@ class TestMainloop():
]
)
case "/set/data/selected_speaker_device":
self.config_dict["speaker_device_list"], _ = self.main.handleRequest("/get/data/speaker_device_list", None)
speaker_device_list = self.config_dict.get("speaker_device_list", None)
self.config_dict["selectable_speaker_device_list"], _ = self.main.handleRequest("/get/data/selectable_speaker_device_list", None)
speaker_device_list = self.config_dict.get("selectable_speaker_device_list", None)
data = random.choice(speaker_device_list)
case "/set/data/speaker_threshold":
data = random.randint(-1000, 5000)
@@ -383,7 +383,7 @@ class TestMainloop():
data = random.uniform(-5, 0)
case "/set/data/speaker_no_speech_prob":
data = random.uniform(0, 1)
case "/set/data/whisper_weight_type":
case "/set/data/selected_whisper_weight_type":
self.config_dict["selectable_whisper_weight_type_dict"], _ = self.main.handleRequest("/get/data/selectable_whisper_weight_type_dict", None)
selectable_whisper_weight_type_dict = self.config_dict.get("selectable_whisper_weight_type_dict", None)
data = random.choice([key for key, value in selectable_whisper_weight_type_dict.items() if value is True])
@@ -647,7 +647,7 @@ class TestMainloop():
]
self.set_data_specific_endpoints = [
# "/set/data/ctranslate2_weight_type",
# "/set/data/selected_ctranslate2_weight_type",
# "/set/data/websocket_host",
# "/set/data/websocket_port",
"/set/data/osc_ip_address",
@@ -766,7 +766,7 @@ class TestMainloop():
self.main.handleRequest("/set/data/selected_target_languages", data)
# 翻訳エンジンを設定する(例: "CTranslate2"
self.config_dict["translation_engines"], _ = self.main.handleRequest("/get/data/translation_engines", None)
self.config_dict["translation_engines"], _ = self.main.handleRequest("/get/data/selectable_translation_engines", None)
translation_engines = self.config_dict.get("translation_engines", None)
for engine in translation_engines:
results[source_lang["language"]][target_lang["language"]][engine] = None

View File

@@ -29,7 +29,7 @@ export const SETTINGS_ARRAY = [
ui_template_id: "list",
logics_template_id: "get_set",
add_endpoint_run_array: ["from_backend"],
base_endpoint_name: "mic_host_list",
base_endpoint_name: "selectable_mic_host_list",
response_transform: "arrayToObject",
},
{
@@ -39,7 +39,7 @@ export const SETTINGS_ARRAY = [
ui_template_id: "list",
logics_template_id: "get_set",
add_endpoint_run_array: ["from_backend"],
base_endpoint_name: "mic_device_list",
base_endpoint_name: "selectable_mic_device_list",
response_transform: "arrayToObject",
},
{
@@ -91,7 +91,7 @@ export const SETTINGS_ARRAY = [
ui_template_id: "list",
logics_template_id: "get_set",
add_endpoint_run_array: ["from_backend"],
base_endpoint_name: "speaker_device_list",
base_endpoint_name: "selectable_speaker_device_list",
response_transform: "arrayToObject",
},
{
@@ -194,7 +194,7 @@ export const SETTINGS_ARRAY = [
default_value: "",
ui_template_id: "select",
logics_template_id: "get_set",
base_endpoint_name: "ctranslate2_weight_type",
base_endpoint_name: "selected_ctranslate2_weight_type",
},
{
Category: "Translation",
@@ -210,7 +210,7 @@ export const SETTINGS_ARRAY = [
default_value: [],
ui_template_id: "list",
logics_template_id: "get_set",
base_endpoint_name: "translation_compute_device_list",
base_endpoint_name: "selectable_translation_compute_device_list",
response_transform: "transformToIndexedArray",
},
{
@@ -312,7 +312,7 @@ export const SETTINGS_ARRAY = [
default_value: "",
ui_template_id: "select",
logics_template_id: "get_set",
base_endpoint_name: "whisper_weight_type",
base_endpoint_name: "selected_whisper_weight_type",
},
{
Category: "Transcription",
@@ -328,7 +328,7 @@ export const SETTINGS_ARRAY = [
default_value: [],
ui_template_id: "list",
logics_template_id: "get_set",
base_endpoint_name: "transcription_compute_device_list",
base_endpoint_name: "selectable_transcription_compute_device_list",
response_transform: "transformToIndexedArray",
},
{

View File

@@ -107,7 +107,7 @@ export const useLanguageSettings = () => {
const getTranslationEngines = () => {
pendingTranslationEngines();
asyncStdoutToPython("/get/data/translation_engines");
asyncStdoutToPython("/get/data/selectable_translation_engines");
};
const updateTranslatorAvailability = (payload) => {

View File

@@ -74,7 +74,7 @@ export const STATIC_ROUTE_META_LIST = [
{ endpoint: "/get/data/selected_target_languages", ns: main, hook_name: "useLanguageSettings", method_name: "updateSelectedTargetLanguages" },
{ endpoint: "/set/data/selected_target_languages", ns: main, hook_name: "useLanguageSettings", method_name: "updateSelectedTargetLanguages" },
{ endpoint: "/get/data/translation_engines", ns: main, hook_name: "useLanguageSettings", method_name: "updateTranslatorAvailability" },
{ endpoint: "/get/data/selectable_translation_engines", ns: main, hook_name: "useLanguageSettings", method_name: "updateTranslatorAvailability" },
{ endpoint: "/run/translation_engines", ns: main, hook_name: "useLanguageSettings", method_name: "updateTranslatorAvailability" },
{ endpoint: "/get/data/selected_translation_engines", ns: main, hook_name: "useLanguageSettings", method_name: "updateSelectedTranslationEngines" },
@@ -102,7 +102,7 @@ export const STATIC_ROUTE_META_LIST = [
{ endpoint: "/set/data/plugins_status", ns: configs, hook_name: "usePlugins", method_name: "setSuccessSavedPluginsStatus" },
// // Not Implemented Yet...
{ endpoint: "/get/data/transcription_engines", ns: null, hook_name: null, method_name: null }, // Not implemented on UI yet. (if ai_models has not been detected, this will be blank array[]. if the ai_models are ok but just network has not connected, it'l be only ["Whisper"])
{ endpoint: "/get/data/selectable_transcription_engines", ns: null, hook_name: null, method_name: null }, // Not implemented on UI yet. (if ai_models has not been detected, this will be blank array[]. if the ai_models are ok but just network has not connected, it'l be only ["Whisper"])
];
export const useReceiveRoutes = () => {