fix: [rd] TTS 500 에러 수정 및 AI 응답 파싱 개선
- 짧은 텍스트(4자 미만) TTS 요청 시 따옴표 래핑으로 Gemini TTS 인식률 개선 - TTS API 에러 시 실제 에러 메시지 반환 (기존: 일괄 500) - AI 생성 temperature 0.9→0.7, maxOutputTokens 2048→4096으로 응답 안정성 개선 - 프롬프트에 name/desc 길이 제한 추가하여 JSON 잘림 방지
This commit is contained in:
@@ -408,6 +408,7 @@ public function soundLogoGenerate(Request $request): JsonResponse
|
||||
- 카테고리 특성에 맞는 synth와 ADSR 선택
|
||||
- 음악적으로 조화롭고 기억에 남는 멜로디 설계
|
||||
- 최소 2개, 최대 12개 음표 사용
|
||||
- name은 10자 이내, desc는 30자 이내로 간결하게 작성
|
||||
PROMPT;
|
||||
|
||||
try {
|
||||
@@ -418,8 +419,8 @@ public function soundLogoGenerate(Request $request): JsonResponse
|
||||
['parts' => [['text' => $prompt]]],
|
||||
],
|
||||
'generationConfig' => [
|
||||
'temperature' => 0.9,
|
||||
'maxOutputTokens' => 2048,
|
||||
'temperature' => 0.7,
|
||||
'maxOutputTokens' => 4096,
|
||||
'responseMimeType' => 'application/json',
|
||||
],
|
||||
]
|
||||
@@ -469,12 +470,18 @@ public function soundLogoTts(Request $request): JsonResponse
|
||||
return response()->json(['success' => false, 'error' => 'Gemini API 키가 설정되지 않았습니다.'], 500);
|
||||
}
|
||||
|
||||
// 짧은 텍스트는 TTS 모델이 텍스트 생성으로 인식할 수 있으므로 발화 컨텍스트 추가
|
||||
$ttsText = $request->text;
|
||||
if (mb_strlen($ttsText) < 4) {
|
||||
$ttsText = "'{$ttsText}' ";
|
||||
}
|
||||
|
||||
try {
|
||||
$response = Http::timeout(30)->post(
|
||||
"{$baseUrl}/models/gemini-2.5-flash-preview-tts:generateContent?key={$apiKey}",
|
||||
[
|
||||
'contents' => [
|
||||
['parts' => [['text' => $request->text]]],
|
||||
['parts' => [['text' => $ttsText]]],
|
||||
],
|
||||
'generationConfig' => [
|
||||
'responseModalities' => ['AUDIO'],
|
||||
@@ -495,7 +502,11 @@ public function soundLogoTts(Request $request): JsonResponse
|
||||
}
|
||||
|
||||
if (! $response->successful()) {
|
||||
return response()->json(['success' => false, 'error' => 'TTS 생성 실패: '.$response->status()], 500);
|
||||
$body = $response->json();
|
||||
$msg = $body['error']['message'] ?? ('TTS 생성 실패: '.$response->status());
|
||||
Log::warning('SoundLogo TTS API 에러', ['status' => $response->status(), 'body' => $msg]);
|
||||
|
||||
return response()->json(['success' => false, 'error' => $msg], $response->status());
|
||||
}
|
||||
|
||||
$data = $response->json();
|
||||
|
||||
Reference in New Issue
Block a user