# LinkedIn Content Generation Service A comprehensive FastAPI-based service for generating professional LinkedIn content using AI. This service has been migrated from the legacy Streamlit implementation to provide robust API endpoints for LinkedIn content creation. ## Overview The LinkedIn Content Generation Service provides AI-powered tools for creating various types of LinkedIn content: - **Posts**: Short-form professional posts with research-backed content - **Articles**: Long-form articles with SEO optimization - **Carousels**: Multi-slide visual content - **Video Scripts**: Structured scripts for LinkedIn videos - **Comment Responses**: Professional responses to LinkedIn comments ## Features ### 🚀 Core Capabilities - **Multi-format Content Generation**: Posts, articles, carousels, video scripts, and comment responses - **Research Integration**: Automated research using multiple search engines (Metaphor, Google, Tavily) - **AI-Powered Optimization**: Industry-specific content optimization using Gemini AI - **SEO Enhancement**: Built-in SEO optimization for LinkedIn articles - **Engagement Prediction**: AI-based engagement metrics prediction - **Professional Tone Control**: Multiple tone options (professional, conversational, authoritative, etc.) ### 🛠 Technical Features - **FastAPI Integration**: RESTful API with automatic documentation - **Comprehensive Error Handling**: Robust exception handling and logging - **Database Monitoring**: Request logging and performance monitoring - **Async/Await Support**: Non-blocking operations for better performance - **Pydantic Validation**: Strong request/response validation - **Structured JSON Responses**: Consistent API response format ## API Endpoints ### Base URL ``` /api/linkedin ``` ### Available Endpoints | Endpoint | Method | Description | |----------|--------|-------------| | `/health` | GET | Health check for service status | | `/generate-post` | POST | Generate LinkedIn posts | | `/generate-article` | POST | Generate LinkedIn articles | | `/generate-carousel` | POST | Generate LinkedIn carousels | | `/generate-video-script` | POST | Generate video scripts | | `/generate-comment-response` | POST | Generate comment responses | | `/content-types` | GET | Get available content types | | `/usage-stats` | GET | Get usage statistics | ## Quick Start ### 1. Prerequisites ```bash # Install dependencies pip install -r requirements.txt # Set environment variables export GEMINI_API_KEY="your_gemini_api_key" export DATABASE_URL="sqlite:///./alwrity.db" ``` ### 2. Start the Service ```bash # Start FastAPI server uvicorn app:app --host 0.0.0.0 --port 8000 --reload ``` ### 3. Access Documentation - **Interactive API Docs**: http://localhost:8000/docs - **Alternative Docs**: http://localhost:8000/redoc ## Usage Examples ### Generate a LinkedIn Post ```python import requests # Request payload payload = { "topic": "Artificial Intelligence in Healthcare", "industry": "Healthcare", "post_type": "thought_leadership", "tone": "professional", "target_audience": "Healthcare executives", "key_points": ["AI diagnostics", "Patient outcomes", "Cost reduction"], "include_hashtags": True, "include_call_to_action": True, "research_enabled": True, "max_length": 2000 } # Make request response = requests.post( "http://localhost:8000/api/linkedin/generate-post", json=payload ) # Process response if response.status_code == 200: data = response.json() print(f"Generated post: {data['data']['content']}") print(f"Hashtags: {[h['hashtag'] for h in data['data']['hashtags']]}") else: print(f"Error: {response.status_code}") ``` ### Generate a LinkedIn Article ```python payload = { "topic": "Digital Transformation in Manufacturing", "industry": "Manufacturing", "tone": "professional", "target_audience": "Manufacturing leaders", "key_sections": ["Current challenges", "Technology solutions", "Implementation strategies"], "include_images": True, "seo_optimization": True, "research_enabled": True, "word_count": 1500 } response = requests.post( "http://localhost:8000/api/linkedin/generate-article", json=payload ) ``` ### Generate a LinkedIn Carousel ```python payload = { "topic": "5 Ways to Improve Team Productivity", "industry": "Business Management", "slide_count": 8, "tone": "professional", "target_audience": "Team leaders and managers", "key_takeaways": ["Clear communication", "Goal setting", "Tool optimization"], "include_cover_slide": True, "include_cta_slide": True, "visual_style": "modern" } response = requests.post( "http://localhost:8000/api/linkedin/generate-carousel", json=payload ) ``` ## Request/Response Models ### LinkedIn Post Request ```json { "topic": "string", "industry": "string", "post_type": "professional|thought_leadership|industry_news|personal_story|company_update|poll", "tone": "professional|conversational|authoritative|inspirational|educational|friendly", "target_audience": "string (optional)", "key_points": ["string"] (optional), "include_hashtags": true, "include_call_to_action": true, "research_enabled": true, "search_engine": "metaphor|google|tavily", "max_length": 3000 } ``` ### LinkedIn Post Response ```json { "success": true, "data": { "content": "Generated post content...", "character_count": 1250, "hashtags": [ { "hashtag": "#AIinHealthcare", "category": "industry", "popularity_score": 0.9 } ], "call_to_action": "What's your experience with AI in healthcare?", "engagement_prediction": { "estimated_likes": 120, "estimated_comments": 15, "estimated_shares": 8 } }, "research_sources": [ { "title": "AI in Healthcare: Current Trends", "url": "https://example.com/ai-healthcare", "content": "Summary of AI healthcare trends...", "relevance_score": 0.95 } ], "generation_metadata": { "generation_time": 3.2, "timestamp": "2025-01-27T10:00:00Z", "model_used": "gemini-2.0-flash-001" } } ``` ## Configuration ### Environment Variables | Variable | Description | Required | Default | |----------|-------------|----------|---------| | `GEMINI_API_KEY` | Google Gemini API key | Yes | - | | `DATABASE_URL` | Database connection string | No | `sqlite:///./alwrity.db` | | `LOG_LEVEL` | Logging level | No | `INFO` | ### Content Generation Settings The service supports various customization options: #### Post Types - `professional`: Standard professional posts - `thought_leadership`: Industry insights and expertise - `industry_news`: News and updates - `personal_story`: Personal experiences and stories - `company_update`: Company news and announcements - `poll`: Interactive polls #### Tone Options - `professional`: Formal business tone - `conversational`: Casual but professional - `authoritative`: Expert and confident - `inspirational`: Motivational and uplifting - `educational`: Informative and teaching - `friendly`: Warm and approachable #### Search Engines - `metaphor`: Metaphor AI search (recommended) - `google`: Google Search API - `tavily`: Tavily AI search ## Architecture ### Service Structure ``` backend/ ├── models/ │ └── linkedin_models.py # Pydantic models for requests/responses ├── services/ │ └── linkedin_service.py # Core business logic ├── routers/ │ └── linkedin.py # FastAPI route handlers ├── middleware/ │ └── monitoring_middleware.py # Request monitoring └── docs/ └── LINKEDIN_CONTENT_GENERATION.md ``` ### Key Components #### LinkedInContentService The core service class that handles all content generation logic: - **Content Generation**: AI-powered content creation - **Research Integration**: Multi-source research capabilities - **Error Handling**: Comprehensive exception management - **Logging**: Detailed operation logging #### Request Models Pydantic models for strong typing and validation: - `LinkedInPostRequest` - `LinkedInArticleRequest` - `LinkedInCarouselRequest` - `LinkedInVideoScriptRequest` - `LinkedInCommentResponseRequest` #### Response Models Structured response models with metadata: - `LinkedInPostResponse` - `LinkedInArticleResponse` - `LinkedInCarouselResponse` - `LinkedInVideoScriptResponse` - `LinkedInCommentResponseResult` ## Performance Considerations ### Response Times - **Posts**: 3-8 seconds (with research) - **Articles**: 15-45 seconds (depending on length) - **Carousels**: 5-15 seconds - **Video Scripts**: 3-10 seconds - **Comment Responses**: 1-3 seconds ### Rate Limiting The service respects API rate limits: - Gemini API: Built-in retry logic with exponential backoff - Research APIs: Configurable rate limiting ### Caching - Research results caching (planned) - Response caching for similar requests (planned) ## Error Handling ### Common Error Scenarios #### 422 Validation Error ```json { "detail": [ { "loc": ["body", "topic"], "msg": "ensure this value has at least 3 characters", "type": "value_error.any_str.min_length" } ] } ``` #### 500 Internal Server Error ```json { "success": false, "error": "Content generation failed: API key not configured", "generation_metadata": { "service_version": "1.0.0", "timestamp": "2025-01-27T10:00:00Z" } } ``` ### Error Recovery - Automatic retry logic for transient failures - Graceful fallback for content generation - Detailed error logging for debugging ## Monitoring and Logging ### Request Monitoring All API requests are logged with: - Request path and method - Response time and status code - User information (if available) - Request/response sizes ### Performance Metrics - Generation time tracking - Success/failure rates - Popular content types - Error frequency analysis ### Health Checks ```bash curl http://localhost:8000/api/linkedin/health ``` ## Migration from Streamlit ### Key Changes 1. **Architecture**: Streamlit UI → FastAPI REST API 2. **Dependencies**: Integrated with existing backend services 3. **Error Handling**: Enhanced exception handling and logging 4. **Monitoring**: Database-backed request monitoring 5. **Validation**: Strong request/response validation 6. **Documentation**: Automatic API documentation ### Compatibility - All original functionality preserved - Enhanced features and capabilities - Better integration with existing systems - Improved performance and scalability ## Testing ### Running Tests ```bash # Structure validation python3 validate_linkedin_structure.py # Full functionality tests (requires dependencies) python3 test_linkedin_endpoints.py ``` ### Test Coverage - ✅ Post generation - ✅ Article generation - ✅ Carousel generation - ✅ Video script generation - ✅ Comment response generation - ✅ Error handling - ✅ Structure validation ## Troubleshooting ### Common Issues #### 1. Import Errors ```bash ModuleNotFoundError: No module named 'pydantic' ``` **Solution**: Install dependencies ```bash pip install -r requirements.txt ``` #### 2. API Key Issues ```bash Error: GEMINI_API_KEY environment variable is not set ``` **Solution**: Set the environment variable ```bash export GEMINI_API_KEY="your_api_key_here" ``` #### 3. Database Connection Issues ```bash Error creating database session ``` **Solution**: Check database configuration and permissions #### 4. Generation Timeouts **Solution**: Increase timeout settings or reduce content complexity ### Debug Mode Enable debug logging: ```bash export LOG_LEVEL=DEBUG ``` ## Future Enhancements ### Planned Features - [ ] Real search engine integration (Metaphor, Google, Tavily) - [ ] Content scheduling and calendar integration - [ ] A/B testing capabilities - [ ] Advanced analytics and reporting - [ ] Multi-language support - [ ] Custom templates and brand voice - [ ] LinkedIn API integration for direct posting - [ ] Content performance tracking ### Performance Improvements - [ ] Response caching - [ ] Parallel processing for multiple requests - [ ] Background job processing - [ ] CDN integration for static assets ## Support For issues and questions: 1. Check the [troubleshooting section](#troubleshooting) 2. Review the API documentation at `/docs` 3. Check the logs for detailed error information 4. Validate your request format against the examples ## License This LinkedIn Content Generation Service is part of the ALwrity platform and follows the same licensing terms.