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:
김보곤
2026-03-08 12:51:08 +09:00
parent 301369bb37
commit e7f81cb063

View File

@@ -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();