diff --git a/backend/app/routes/focus_group_ai.py b/backend/app/routes/focus_group_ai.py index 1bbd6799..46ae53b3 100755 --- a/backend/app/routes/focus_group_ai.py +++ b/backend/app/routes/focus_group_ai.py @@ -189,8 +189,8 @@ Be genuine and specific in your feedback, drawing on your personal experiences a conversation_context=multimodal_context['conversation_context'], temperature=temperature, model_name=llm_model, - reasoning_effort=reasoning_effort if llm_model == 'gpt-5.2' else None, - verbosity=verbosity if llm_model == 'gpt-5.2' else None + reasoning_effort=reasoning_effort if llm_model in ('gpt-5', 'gpt-5.2') else None, + verbosity=verbosity if llm_model in ('gpt-5', 'gpt-5.2') else None ) else: print(f"💬 Using standard response generation (no visual context)") diff --git a/backend/app/services/focus_group_response_service.py b/backend/app/services/focus_group_response_service.py index d21e2d67..664f0134 100755 --- a/backend/app/services/focus_group_response_service.py +++ b/backend/app/services/focus_group_response_service.py @@ -49,7 +49,7 @@ async def generate_persona_response( print(f"🎭 Generating persona response for {persona.get('name', 'Unknown')}") print(f" - focus_group_id: {focus_group_id}") print(f" - current_topic: {current_topic[:50]}...") - if llm_model == 'gpt-5.2': + if llm_model in ('gpt-5', 'gpt-5.2'): print(f" - llm_model: {llm_model} (reasoning_effort: {reasoning_effort or 'medium'}, verbosity: {verbosity or 'medium'}) [using Responses API]") else: print(f" - llm_model: {llm_model or 'default (gemini-3-pro-preview)'}") diff --git a/backend/app/services/llm_service.py b/backend/app/services/llm_service.py index 889ce2ae..8e2fa5f5 100755 --- a/backend/app/services/llm_service.py +++ b/backend/app/services/llm_service.py @@ -53,6 +53,11 @@ SUPPORTED_MODELS = { 'gpt-5.2': 'openai' } +# Aliases for renamed/legacy model IDs stored in the database +MODEL_ALIASES = { + 'gpt-5': 'gpt-5.2', +} + class LLMServiceError(Exception): """Exception raised for errors in LLM operations.""" pass @@ -91,18 +96,32 @@ class LLMService: return result.strip() + @staticmethod + def _resolve_model(model_name: Optional[str] = None) -> str: + """ + Resolve a model name, applying aliases for legacy/renamed models. + + Args: + model_name: Optional model name to use. Defaults to the default model. + + Returns: + The resolved model name + """ + actual_model = model_name or DEFAULT_MODEL + return MODEL_ALIASES.get(actual_model, actual_model) + @staticmethod def _get_model_provider(model_name: Optional[str] = None) -> str: """ Get the provider for a given model name. - + Args: model_name: Optional model name to use. Defaults to the default model. - + Returns: The provider name ('gemini' or 'openai') """ - actual_model = model_name or DEFAULT_MODEL + actual_model = LLMService._resolve_model(model_name) return SUPPORTED_MODELS.get(actual_model, 'gemini') @@ -180,7 +199,7 @@ class LLMService: max_retries = 3 last_error = None - actual_model = model_name or DEFAULT_MODEL + actual_model = LLMService._resolve_model(model_name) provider = LLMService._get_model_provider(model_name) for attempt in range(max_retries): @@ -492,10 +511,10 @@ class LLMService: logger = logging.getLogger(__name__) max_retries = 3 last_error = None - - actual_model = model_name or DEFAULT_MODEL + + actual_model = LLMService._resolve_model(model_name) provider = LLMService._get_model_provider(model_name) - + logger.info(f"Generating multimodal content with {len(image_paths)} image(s) using {provider} provider") for attempt in range(max_retries): @@ -727,9 +746,9 @@ class LLMService: if image_parts: print(f"🎨 Using multimodal generation with {len(image_parts)} images") - actual_model = model_name or DEFAULT_MODEL + actual_model = LLMService._resolve_model(model_name) provider = LLMService._get_model_provider(model_name) - + max_retries = 3 last_error = None diff --git a/backend/app/services/persona_modification_service.py b/backend/app/services/persona_modification_service.py index aa7d3cfa..1d5f8f01 100755 --- a/backend/app/services/persona_modification_service.py +++ b/backend/app/services/persona_modification_service.py @@ -188,8 +188,8 @@ class PersonaModificationService: prompt=final_prompt, temperature=0.3, # Lower temperature for consistent modifications model_name=llm_model, - reasoning_effort=reasoning_effort if llm_model == 'gpt-5.2' else None, - verbosity=verbosity if llm_model == 'gpt-5.2' else None + reasoning_effort=reasoning_effort if llm_model in ('gpt-5', 'gpt-5.2') else None, + verbosity=verbosity if llm_model in ('gpt-5', 'gpt-5.2') else None ) # Parse JSON response