Merge_PR_416_fix_textgen_ai_models_mapping
This commit is contained in:
@@ -10,6 +10,20 @@ from services.database import get_session_for_user
|
||||
from api.content_planning.services.content_strategy.onboarding import OnboardingDataIntegrationService
|
||||
|
||||
|
||||
def _ensure_dict(value: Any) -> Dict[str, Any]:
|
||||
"""Safely coerce arbitrary payload shape into a dictionary."""
|
||||
return value if isinstance(value, dict) else {}
|
||||
|
||||
|
||||
def _ensure_list(value: Any) -> List[Any]:
|
||||
"""Safely coerce arbitrary payload shape into a list."""
|
||||
if isinstance(value, list):
|
||||
return value
|
||||
if value is None:
|
||||
return []
|
||||
return [value]
|
||||
|
||||
|
||||
class PersonalizationService:
|
||||
"""
|
||||
Service for extracting user preferences from onboarding data
|
||||
@@ -52,6 +66,7 @@ class PersonalizationService:
|
||||
return self._get_default_preferences()
|
||||
|
||||
integration_service = OnboardingDataIntegrationService()
|
||||
<<<<<<< HEAD
|
||||
integrated_data = integration_service.get_integrated_data_sync(user_id, db)
|
||||
if not isinstance(integrated_data, dict):
|
||||
logger.warning(
|
||||
@@ -65,15 +80,28 @@ class PersonalizationService:
|
||||
f"[Personalization] Canonical profile is non-dict for user {user_id}; using defaults"
|
||||
)
|
||||
canonical_profile = {}
|
||||
=======
|
||||
integrated_data_raw = integration_service.get_integrated_data_sync(user_id, db)
|
||||
integrated_data = _ensure_dict(integrated_data_raw)
|
||||
canonical_profile = _ensure_dict(integrated_data.get('canonical_profile'))
|
||||
>>>>>>> pr-416
|
||||
|
||||
# Map strictly from Canonical Profile
|
||||
preferences = {
|
||||
"industry": canonical_profile.get("industry"),
|
||||
<<<<<<< HEAD
|
||||
"target_audience": self._as_dict(canonical_profile.get("target_audience", {})),
|
||||
"platform_preferences": self._as_list(canonical_profile.get("platform_preferences", [])),
|
||||
"content_preferences": self._as_list(canonical_profile.get("content_types", [])),
|
||||
"style_preferences": self._as_dict(canonical_profile.get("visual_style", {})),
|
||||
"brand_colors": self._as_list(canonical_profile.get("brand_colors", [])),
|
||||
=======
|
||||
"target_audience": _ensure_dict(canonical_profile.get("target_audience")),
|
||||
"platform_preferences": _ensure_list(canonical_profile.get("platform_preferences")),
|
||||
"content_preferences": _ensure_list(canonical_profile.get("content_types")),
|
||||
"style_preferences": _ensure_dict(canonical_profile.get("visual_style")),
|
||||
"brand_colors": _ensure_list(canonical_profile.get("brand_colors")),
|
||||
>>>>>>> pr-416
|
||||
"recommended_templates": [],
|
||||
"recommended_channels": [],
|
||||
"writing_style": {
|
||||
@@ -82,7 +110,11 @@ class PersonalizationService:
|
||||
"complexity": canonical_profile.get("writing_complexity", "intermediate"),
|
||||
"engagement_level": canonical_profile.get("writing_engagement", "moderate"),
|
||||
},
|
||||
<<<<<<< HEAD
|
||||
"brand_values": self._as_list(canonical_profile.get("brand_values", [])),
|
||||
=======
|
||||
"brand_values": _ensure_list(canonical_profile.get("brand_values")),
|
||||
>>>>>>> pr-416
|
||||
}
|
||||
|
||||
# Ensure target_audience structure
|
||||
@@ -118,7 +150,7 @@ class PersonalizationService:
|
||||
if not preferences["recommended_channels"]:
|
||||
preferences["recommended_channels"] = self._get_recommended_channels(
|
||||
preferences.get("industry"),
|
||||
preferences.get("target_audience", {}).get("demographics", [])
|
||||
_ensure_list(_ensure_dict(preferences.get("target_audience")).get("demographics"))
|
||||
)
|
||||
|
||||
logger.info(f"[Personalization] Extracted preferences for user {user_id}: industry={preferences.get('industry')}")
|
||||
|
||||
Reference in New Issue
Block a user