Files
ALwrity/backend/services/persona
ajaysi 63a0df2536 feat: LinkedIn LLM alignment - Phase 1-3 complete
Phase 1: Dead Code Cleanup
- Remove GeminiGroundedProvider import and property from linkedin_service.py
- Remove fallback_provider property (gemini_provider imports)
- Fix routers/linkedin.py edit endpoint to use llm_text_gen
- Delete dead LinkedInImageEditor class
- Remove dead _transform_gemini_sources from content_generator.py

Phase 2: Research Infrastructure Alignment
- Add user_id to _conduct_research() for pre-flight validation
- Add validate_exa_research_operations() before Exa/Tavily calls
- Pass user_id to provider.simple_search() for usage tracking
- Inject research content into LLM prompts via _build_research_context()
- Fix Google engine path to fallback to Exa
- Add Exa → Tavily fallback on research failure

Phase 3: Cosmetic Cleanup
- Rename _generate_prompts_with_gemini → _generate_prompts_with_llm
- Rename _build_gemini_prompt → _build_image_prompt
- Rename _parse_gemini_response → _parse_llm_response
- Remove all Gemini references from LinkedIn code (0 remaining)
- Update docstrings and log messages

Additional:
- Research caching using existing ResearchCache
- Shared ExaContentResearchProvider in services/research/
- Persona service uses llm_text_gen instead of gemini_structured_json_response
- LinkedInWriter.tsx ChatMessage → ChatMsg type mapping fix
- RegisterLinkedInActionsEnhanced.tsx content_format_rules typing fix
2026-06-12 18:58:53 +05:30
..
2025-09-05 15:22:43 +05:30
2025-09-05 15:22:43 +05:30

Persona Services Package

This package contains platform-specific persona generation and analysis services, providing a modular and extensible architecture for creating platform-optimized writing personas.

Structure

services/persona/
├── __init__.py                    # Package initialization
├── linkedin/                      # LinkedIn-specific persona services
│   ├── __init__.py               # LinkedIn package initialization
│   ├── linkedin_persona_service.py    # Main LinkedIn persona service
│   ├── linkedin_persona_prompts.py    # LinkedIn-specific prompts
│   └── linkedin_persona_schemas.py    # LinkedIn-specific schemas
└── README.md                     # This documentation

LinkedIn Persona Services

LinkedInPersonaService

The main service class for generating LinkedIn-specific persona adaptations.

Key Features:

  • Enhanced LinkedIn-specific prompt generation
  • Professional networking optimization
  • Industry-specific adaptations
  • Algorithm optimization for LinkedIn
  • Persona validation and quality scoring

Methods:

  • generate_linkedin_persona() - Generate LinkedIn-optimized persona
  • validate_linkedin_persona() - Validate persona data quality
  • optimize_for_linkedin_algorithm() - Algorithm-specific optimizations
  • get_linkedin_constraints() - Get LinkedIn platform constraints

LinkedInPersonaPrompts

Handles LinkedIn-specific prompt generation with professional optimization.

Key Features:

  • Industry-specific targeting (technology, business, etc.)
  • Professional networking focus
  • Thought leadership positioning
  • B2B optimization
  • LinkedIn algorithm awareness

LinkedInPersonaSchemas

Defines LinkedIn-specific JSON schemas for persona generation.

Key Features:

  • Enhanced LinkedIn schema with professional fields
  • Algorithm optimization fields
  • Professional networking elements
  • LinkedIn feature-specific adaptations

Usage

from services.persona.linkedin.linkedin_persona_service import LinkedInPersonaService

# Initialize the service
linkedin_service = LinkedInPersonaService()

# Generate LinkedIn persona
linkedin_persona = linkedin_service.generate_linkedin_persona(
    core_persona=core_persona_data,
    onboarding_data=onboarding_data
)

# Validate persona quality
validation_results = linkedin_service.validate_linkedin_persona(linkedin_persona)

# Optimize for LinkedIn algorithm
optimized_persona = linkedin_service.optimize_for_linkedin_algorithm(linkedin_persona)

Integration with Main Persona Service

The main PersonaAnalysisService automatically uses the LinkedIn service when generating LinkedIn personas:

# In PersonaAnalysisService._generate_single_platform_persona()
if platform.lower() == "linkedin":
    return self.linkedin_service.generate_linkedin_persona(core_persona, onboarding_data)

Benefits of This Architecture

  1. Modularity: Each platform has its own dedicated service
  2. Extensibility: Easy to add new platforms (Facebook, Instagram, etc.)
  3. Maintainability: Platform-specific logic is isolated
  4. Testability: Each service can be tested independently
  5. Reusability: Services can be used across different parts of the application

Future Extensions

This architecture makes it easy to add new platform-specific services:

  • services/persona/facebook/ - Facebook-specific persona services
  • services/persona/instagram/ - Instagram-specific persona services
  • services/persona/twitter/ - Twitter-specific persona services
  • services/persona/blog/ - Blog-specific persona services

Each platform service would follow the same pattern:

  • {platform}_persona_service.py - Main service class
  • {platform}_persona_prompts.py - Platform-specific prompts
  • {platform}_persona_schemas.py - Platform-specific schemas