From 380bb1967381887e7046e97c114fc62eea693642 Mon Sep 17 00:00:00 2001 From: ajaysi Date: Sun, 14 Sep 2025 10:21:36 +0530 Subject: [PATCH] Added enhanced linguistic analyzer and persona quality improver --- .../facebook_writer/services/post_service.py | 3 +- .../services/remaining_services.py | 3 +- .../facebook_writer/services/story_service.py | 3 +- backend/api/persona_routes.py | 33 ++- .../research_analysis_20250911_173832.json | 84 ------- .../research_analysis_20250911_174238.json | 206 ------------------ .../services/linkedin/content_generator.py | 10 +- backend/{ => test}/test_detailed.py | 0 backend/{ => test}/test_gemini_direct.py | 0 backend/{ => test}/test_research.py | 0 backend/{ => test}/test_research_analysis.py | 0 .../{ => test}/test_subscription_system.py | 0 backend/{ => test}/validate_database.py | 0 .../{ => test}/validate_linkedin_structure.py | 0 backend/{ => test}/verify_billing_setup.py | 0 .../{ => test}/verify_subscription_setup.py | 0 16 files changed, 34 insertions(+), 308 deletions(-) delete mode 100644 backend/research_analysis_20250911_173832.json delete mode 100644 backend/research_analysis_20250911_174238.json rename backend/{ => test}/test_detailed.py (100%) rename backend/{ => test}/test_gemini_direct.py (100%) rename backend/{ => test}/test_research.py (100%) rename backend/{ => test}/test_research_analysis.py (100%) rename backend/{ => test}/test_subscription_system.py (100%) rename backend/{ => test}/validate_database.py (100%) rename backend/{ => test}/validate_linkedin_structure.py (100%) rename backend/{ => test}/verify_billing_setup.py (100%) rename backend/{ => test}/verify_subscription_setup.py (100%) diff --git a/backend/api/facebook_writer/services/post_service.py b/backend/api/facebook_writer/services/post_service.py index 4a86aef2..949c902e 100644 --- a/backend/api/facebook_writer/services/post_service.py +++ b/backend/api/facebook_writer/services/post_service.py @@ -24,7 +24,8 @@ class FacebookPostService(FacebookWriterBaseService): actual_tone = request.custom_tone if request.post_tone.value == "Custom" else request.post_tone.value # Get persona data for enhanced content generation - user_id = getattr(request, 'user_id', 1) + # Beta testing: Force user_id=1 for all requests + user_id = 1 persona_data = self._get_persona_data(user_id) # Build the prompt diff --git a/backend/api/facebook_writer/services/remaining_services.py b/backend/api/facebook_writer/services/remaining_services.py index 48e39965..601d470b 100644 --- a/backend/api/facebook_writer/services/remaining_services.py +++ b/backend/api/facebook_writer/services/remaining_services.py @@ -16,7 +16,8 @@ class FacebookReelService(FacebookWriterBaseService): actual_style = request.custom_style if request.reel_style.value == "Custom" else request.reel_style.value # Get persona data for enhanced content generation - user_id = getattr(request, 'user_id', 1) + # Beta testing: Force user_id=1 for all requests + user_id = 1 persona_data = self._get_persona_data(user_id) base_prompt = f""" diff --git a/backend/api/facebook_writer/services/story_service.py b/backend/api/facebook_writer/services/story_service.py index 2f1748ab..2cee86ed 100644 --- a/backend/api/facebook_writer/services/story_service.py +++ b/backend/api/facebook_writer/services/story_service.py @@ -30,7 +30,8 @@ class FacebookStoryService(FacebookWriterBaseService): actual_tone = request.custom_tone if request.story_tone.value == "Custom" else request.story_tone.value # Get persona data for enhanced content generation - user_id = getattr(request, 'user_id', 1) + # Beta testing: Force user_id=1 for all requests + user_id = 1 persona_data = self._get_persona_data(user_id) # Build the prompt diff --git a/backend/api/persona_routes.py b/backend/api/persona_routes.py index 38b7f7f6..18451df2 100644 --- a/backend/api/persona_routes.py +++ b/backend/api/persona_routes.py @@ -48,7 +48,8 @@ async def generate_persona_endpoint( @router.get("/user/{user_id}") async def get_user_personas_endpoint(user_id: int): """Get all personas for a user.""" - return await get_user_personas(user_id) + # Beta testing: Force user_id=1 for all requests + return await get_user_personas(1) @router.get("/{persona_id}") async def get_persona_details_endpoint( @@ -56,7 +57,8 @@ async def get_persona_details_endpoint( user_id: int = Query(..., description="User ID") ): """Get detailed information about a specific persona.""" - return await get_persona_details(user_id, persona_id) + # Beta testing: Force user_id=1 for all requests + return await get_persona_details(1, persona_id) @router.get("/platform/{platform}") async def get_platform_persona_endpoint( @@ -64,7 +66,8 @@ async def get_platform_persona_endpoint( user_id: int = Query(1, description="User ID") ): """Get persona adaptation for a specific platform.""" - return await get_platform_persona(user_id, platform) + # Beta testing: Force user_id=1 for all requests + return await get_platform_persona(1, platform) @router.put("/{persona_id}") async def update_persona_endpoint( @@ -73,7 +76,8 @@ async def update_persona_endpoint( user_id: int = Query(..., description="User ID") ): """Update an existing persona.""" - return await update_persona(user_id, persona_id, update_data) + # Beta testing: Force user_id=1 for all requests + return await update_persona(1, persona_id, update_data) @router.delete("/{persona_id}") async def delete_persona_endpoint( @@ -81,21 +85,24 @@ async def delete_persona_endpoint( user_id: int = Query(..., description="User ID") ): """Delete a persona.""" - return await delete_persona(user_id, persona_id) + # Beta testing: Force user_id=1 for all requests + return await delete_persona(1, persona_id) @router.get("/check/readiness") async def check_persona_readiness_endpoint( user_id: int = Query(1, description="User ID") ): """Check if user has sufficient data for persona generation.""" - return await validate_persona_generation_readiness(user_id) + # Beta testing: Force user_id=1 for all requests + return await validate_persona_generation_readiness(1) @router.get("/preview/generate") async def generate_preview_endpoint( user_id: int = Query(1, description="User ID") ): """Generate a preview of the writing persona without saving.""" - return await generate_persona_preview(user_id) + # Beta testing: Force user_id=1 for all requests + return await generate_persona_preview(1) @router.get("/platforms/supported") async def get_supported_platforms_endpoint(): @@ -136,7 +143,8 @@ async def generate_content_with_persona_endpoint( ): """Generate content using persona replication engine.""" try: - user_id = request.get("user_id", 1) + # Beta testing: Force user_id=1 for all requests + user_id = 1 platform = request.get("platform") content_request = request.get("content_request") content_type = request.get("content_type", "post") @@ -165,7 +173,8 @@ async def export_persona_prompt_endpoint( """Export hardened persona prompt for external use.""" try: engine = PersonaReplicationEngine() - export_package = engine.export_persona_for_external_use(user_id, platform) + # Beta testing: Force user_id=1 for all requests + export_package = engine.export_persona_for_external_use(1, platform) if "error" in export_package: raise HTTPException(status_code=400, detail=export_package["error"]) @@ -181,7 +190,8 @@ async def validate_content_endpoint( ): """Validate content against persona constraints.""" try: - user_id = request.get("user_id", 1) + # Beta testing: Force user_id=1 for all requests + user_id = 1 platform = request.get("platform") content = request.get("content") @@ -217,4 +227,5 @@ async def update_platform_persona_endpoint( Allows editing persona fields in the UI and saving them to the database. """ - return await update_platform_persona(user_id, platform, update_data) \ No newline at end of file + # Beta testing: Force user_id=1 for all requests + return await update_platform_persona(1, platform, update_data) \ No newline at end of file diff --git a/backend/research_analysis_20250911_173832.json b/backend/research_analysis_20250911_173832.json deleted file mode 100644 index 102f6169..00000000 --- a/backend/research_analysis_20250911_173832.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "success": true, - "sources": [ - { - "title": "Search: AI content generation trends 2024 2025 technology industry", - "url": "https://www.google.com/search?q=AI+content+generation+trends+2024+2025+technology+industry", - "excerpt": "Source from Search: AI content generation trends 2024 2025 technology industry", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "Search: AI content generation market statistics 2024 2025", - "url": "https://www.google.com/search?q=AI+content+generation+market+statistics+2024+2025", - "excerpt": "Source from Search: AI content generation market statistics 2024 2025", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "Search: AI content generation expert opinions 2024 2025", - "url": "https://www.google.com/search?q=AI+content+generation+expert+opinions+2024+2025", - "excerpt": "Source from Search: AI content generation expert opinions 2024 2025", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "Search: recent developments AI content generation 2024 2025", - "url": "https://www.google.com/search?q=recent+developments+AI+content+generation+2024+2025", - "excerpt": "Source from Search: recent developments AI content generation 2024 2025", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "Search: AI content generation market analysis forecast 2024 2025", - "url": "https://www.google.com/search?q=AI+content+generation+market+analysis+forecast+2024+2025", - "excerpt": "Source from Search: AI content generation market analysis forecast 2024 2025", - "credibility_score": 0.8, - "published_at": "2024-01-01" - } - ], - "keyword_analysis": { - "primary": [ - "AI content generation" - ], - "secondary": [ - "blog writing" - ], - "long_tail": [ - "AI content generation guide", - "blog writing guide" - ], - "search_intent": "informational", - "difficulty": 6, - "content_gaps": [ - "AI content generation best practices", - "blog writing best practices" - ], - "analysis_content": "## The AI Content Generation Revolution: Navigating 2024-2025 Trends for Strategic Advantage\n\nThe landscape of content creation is undergoing a seismic shift, powered by the rapid advancements in Arti" - }, - "competitor_analysis": { - "top_competitors": [], - "content_gaps": [], - "opportunities": [], - "analysis_notes": "Competitor analysis from research" - }, - "suggested_angles": [ - "How ALwrity content generation is Transforming Technology", - "Latest ALwrity content generation Trends: What You Need to Know", - "ALwrity content generation Best Practices for Technology", - "Case Study: ALwrity content generation Success Stories", - "The Future of ALwrity content generation in Technology" - ], - "search_widget": "\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n
\n", - "search_queries": [ - "AI content generation trends 2024 2025 technology industry", - "AI content generation market statistics 2024 2025", - "AI content generation expert opinions 2024 2025", - "recent developments AI content generation 2024 2025", - "AI content generation market analysis forecast 2024 2025", - "best practices AI content generation case studies 2024 2025", - "keywords for AI content generation technology", - "top AI content generation competitors market share 2024", - "AI content generation content gaps" - ] -} \ No newline at end of file diff --git a/backend/research_analysis_20250911_174238.json b/backend/research_analysis_20250911_174238.json deleted file mode 100644 index 8379d320..00000000 --- a/backend/research_analysis_20250911_174238.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "success": true, - "sources": [ - { - "title": "alwrity.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEbkhlVuzpjaGypNYMsWxvHBbX3AmqYaaOrbGeSKtT03vLSAx9LQlACNs0ulmX0oFvX610EvDErz6lWd9TTh7pSvrbWM-L6WaKh8HiAEucGVHXbKQ==", - "excerpt": "Source from alwrity.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "alwrity.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHI_UttMuqLpNEDZnP22X5mhTqjrqObIjM66Ks8UoMHPN_SlF5XenKZlUiOPGQRuYPoNDqRctDEeheEZOZMm3SqM5OkrActXWVNXaqsdk4WwPcI4Jhep8vo1cm27c4=", - "excerpt": "Source from alwrity.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "youtube.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGkWsMQ3Tjq8DewK8EikdNign9gcrLv11xR30xrMx-vq1sSfdmGk5w8s6vuDtIL4-YxqSyDcpb4ifwmwF9lq9tsKF_fd0Zenzd19PHrQ0-65vgeEO5CV6oGdO1TN7eZ0SCkLHsmFZ8=", - "excerpt": "Source from youtube.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "youtube.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEBvGGtIXARTEe4XR1DH-6yFwzEC8HkG7GXEz6OpKTwznIJPC3V2VWbU5BqZpEzdt5U82qbuAdo4iZ006PzcanX-OQWA8EVy0R5-Yz43snYK-kt9JfvniBxLGDHXdz70J4creDZoSY=", - "excerpt": "Source from youtube.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "beyondkey.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGRwVUwjgBma_K_ceWgs1ha6f5zat1idtf7AAXTnGW94yvWxNSSCA4615crchD8y4aSxXbVcyxj-mxDQP685ZvKevkDxPUTKdlTYvRWkT5Ewbc5vMo17qqvcw2MPF3SEvLjODMUT7hzUFJXb5gIehVh1Pq0g1MFz_3uW8jxdcHMend_PjiR6VE=", - "excerpt": "Source from beyondkey.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "medium.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQG3nG07PWqQhD9bLlXOBM9fBHVxgkZM_DEnKsUeHl-te61BWZcKL0fQbe8_oZUZWRFggLi4CgZxO__3Sfw5mfaYHDU6394PWEQ7qTa0UUwaTuKnLWBA2RX4A5LjGY0LglG01higs7_fetcOWwPTSvg-Y06d8pSZWUHHuiunoklPoQuR1tAQKvhKDvZbmJMIHPMkoLyovsag6rjmN_Chn0hqPf4=", - "excerpt": "Source from medium.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "quickcreator.io", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHedj-KoY0QaU_0xyYVSyIb6NJWQjYPx5OpFxdRefde4fxALVZZ_uCcDyODW8UOeCTEJl_ynXnE5yKlFd_6jgHND9koGUnCPfwLDeZ-XzVjHlgY5V2GnmH6B8bH-lvdzVYUBZlvI0iDtq5hoNxqfz10jLh834ZrIc6NjTtG7kXLR7ddMg7FjEQ57Cu49Ug=", - "excerpt": "Source from quickcreator.io", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "eimt.edu.eu", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFEyrobre2Q5LbCgLAYSxH1C8BCNy3Ln4iOIQ6_NGAD63_lp6EqMYourvzgiSOXtane5aLyRCzc0erIbMe0TIsO406sZ7jULZ8AbkaD93TTn34wRbNuUGOg9sCf9PcTAJSWMfX05cle8BfK6mhQU2t9EslhcSTEZBRTTGgPu_NmfMUVjZJ_9_6fT4qLUZtAuqpe", - "excerpt": "Source from eimt.edu.eu", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "youtube.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEgK2_pZbhzW_wihG2wmD383PgA3awfJLNUBdMoevHvDou8oDoI24xQeKAaJsDpHJ-LxtRIdhOlg6RZCwLSRsjKQlL3_mFddH30OLZU-_IXAZ8sLmMCGgM8J7isNuhWQZTNrkoT2x0=", - "excerpt": "Source from youtube.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "synthesia.io", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHMYC4-O4vRXhpwIZZ49Y7sJVJQ9pSJ6rDEN_dayRuoct0Q2ECmVH26wsyqdQAYiLPZLkQTlIgGZBIocrhqkZDj97UmGF66dGzvSGFUJXvOA127mFWYKXJ8TUYIr8Tjn9HQ", - "excerpt": "Source from synthesia.io", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "tryleap.ai", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGZKtSSrxOYpXnBKsFhUoAtpw01oVKooJkUIpyVYqEguhSDWcX7svylTkuFy_8RrxKmvKBkNJjRn6KE6OMCTHV4AOET0fUaPJhxfwcnyvY1BB8GHQeDa_B-VfchBp_qeAdeS2m-_IQuLOUI-jV7wFpaA9Gg3-rcK_uqwtmrprxZCztkyJM=", - "excerpt": "Source from tryleap.ai", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "hulkapps.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGcKDCewhOKAICoIWfiwqPDerQO3P6Ipm6vsTz-ujH7G-Vg9eo3LgACMbsTxk9IUCg7-fn_bV_QKah9N8VW0YEXBfyWZRqdTMbBbg07fswpACpIn1znpRmiJU3o_G3w99AgLNBtenIzIPpTnBj2ascMGNgEmrgDDznNFaX4LP5E0F6ToIWt3A3SrwJWpJwKyfyJ", - "excerpt": "Source from hulkapps.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "marketful.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGFSpjwPUVCdlTrnxsqCp-O7T2-kUk4_hZrVYYZDrfFxvDLp5knmTd8PSTcoDybNfq8Iiod5DLhYaFIrL5G8yl2oU3UCl4KNqkRb95U6alKy2LumA1iHzYE4xtXDlvPdoP31pWPt5Pi2P_1aMTt921v_0oE1s4=", - "excerpt": "Source from marketful.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "ics-digital.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHf0mDC8n9_pdUthEbF2f_FbRkiwcyc0I4GcRqa1dnbRzSU50Y9LiSWmWDpOM3-GYNmB3YmNZT7p0QBxbtKuju0ol7jA58RYphVUHtmJXwhea4lEwkKCAf8ONvIHtcGqpY4QdbsixE4rV2en6d9qoPER7i1QkPyknYsPw0QSJI=", - "excerpt": "Source from ics-digital.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "frase.io", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQG7h5MlbO5qp0jD2NFIyH1HUQff6CMreopPd0MExSZ00saW_ikR9QJTABCBmdR8CSdkAphaMJYOJG9i3qQQyoOlg_Seh_9JF8zQqdPj", - "excerpt": "Source from frase.io", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "thebusinessresearchcompany.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEEvY4sZPVx7eA9v_j8qaQ_Tj7ljjwZ0hIdrxERYykbSkTId97TlSY74VYyu9IlOmcRtXpwNSgp6Q35BUKB3gvb6o0o6-PNfoYoEPHx6N6sXZs6lrtvqqpcTLqc7sOskZ-jxmZ_IEKX_VeIRxp41XBTY603RDiU-1CqrNUUkjwbxNorilqmV-3Oa0bbi5TvqoSNS98GHQrV0VUN9d21jMLPSpj9xRcB", - "excerpt": "Source from thebusinessresearchcompany.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "grandviewresearch.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQE-1--CbRoZLTs6PrEs7_b5Q4D2eJViu2pZrVlDTS8QfRf1DSDepwb2KO0ozfq04iLJRHXeBjLnu8tV6bOD9mXTv8paG_3Irgow9cpOw5jsPrvvqXmAJA-IvebcDdISuIUk7rZsfn95_BpnMsm4cWR4HTlYwTLWfGR5zUOtuupKG0Od2E5HpnYIH3TmlZ45y2fvvhw0wk8qjA==", - "excerpt": "Source from grandviewresearch.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "verifiedmarketresearch.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEAPa_eY2-XR46ROJMDfq4b4YbZivGtdu2F0z2I3tHk10ZRr_j4HIPFZkmwFuvFm4iSBh7efJBbsvvp8TjelRmgskKKZSJw52f4oNsp4b-ewlmv5daOrwcH-to89YjZVvzpj-fs_hvCoKIDnmSQubcS62jqs_EVbWAomX-8cr7_gfg=", - "excerpt": "Source from verifiedmarketresearch.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "siegemedia.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHkqpyuKPcPnTPdEI0qp6aR_gS7FOAgmJMjST58kZQtmApd9g1eynllR3vtkjVg1Y4IjLifjICqueLx-32ugvMPISwXlqq8D8LgC5j_YLvvyTAaq9drZM56OpgaRscGt4cuD-YoEhMs53xX18h798fs7gbc3g==", - "excerpt": "Source from siegemedia.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "synthesia.io", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEtHmkgnrc-O2jG90jSY2OL_SvNN2ToZFl2CYmA7eSpPuDGvMWDpbg6NuTsAB8fFBwP4eRcRvqtoP74lJINPvxHw6uARdRuGIZmlBcldYRYiBvWLOz4oMcRzfIDNXSzzQUM57cmQwc=", - "excerpt": "Source from synthesia.io", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "makebot.ai", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGNko08ftgaMVm9H1Jh-4vsgHjfFRriAeloVI_KWg2Ee-1MIs1N6o7X3MC0n98C4YgVzeXWM8W_3R-pFze-6R6uJsu1tdZms_1MI3NPGi4oKdSVRULy2vaY_SQVOiEDyqM3JSkJ3z1QZos-lUEeuG46iLr43KX3bJHRR5dzTh7eNFDv43DjEupuGR2KYX60j7ui929PXdP-e92yNcQuOu18740to6Gto2FdPT0=", - "excerpt": "Source from makebot.ai", - "credibility_score": 0.8, - "published_at": "2024-01-01" - }, - { - "title": "medium.com", - "url": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQE2oEe411ttOlvnVvTUNZI60cD5iLva5mD7SDy0q1bGMM-DTyxXsNeAnegRIGY--svZZXEoqZrWnnA0K-j9T7KKZgZcqSodRYS8I5Qx_xKyuZ6OwJhKMUo4PFPhbvcid2mq1m9oS65rgHVM8iNFUBOtxyvYYOQGGf0tOsYGYevF68eQ5PaGJ-6iEbA=", - "excerpt": "Source from medium.com", - "credibility_score": 0.8, - "published_at": "2024-01-01" - } - ], - "keyword_analysis": { - "primary": [ - "AI content generation" - ], - "secondary": [ - "blog writing" - ], - "long_tail": [ - "AI content generation guide", - "blog writing guide" - ], - "search_intent": "informational", - "difficulty": 6, - "content_gaps": [ - "AI content generation best practices", - "blog writing best practices" - ], - "analysis_content": "## The Future of Content Creation: A Deep Dive into ALwrity and AI-Powered Content Generation (2024-2025)\n\nThe landscape of content creation is undergoing a profound transformation, largely driven by " - }, - "competitor_analysis": { - "top_competitors": [], - "content_gaps": [], - "opportunities": [], - "analysis_notes": "Competitor analysis from research" - }, - "suggested_angles": [ - "How ALwrity content generation is Transforming Technology", - "Latest ALwrity content generation Trends: What You Need to Know", - "ALwrity content generation Best Practices for Technology", - "Case Study: ALwrity content generation Success Stories", - "The Future of ALwrity content generation in Technology" - ], - "search_widget": "\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n
\n", - "search_queries": [ - "ALwrity content generation", - "AI content generation trends 2024 2025", - "AI content writing market size forecast 2024 2025", - "expert opinions on AI content creation 2024 2025", - "recent developments in generative AI for content 2024 2025", - "best practices for AI-powered content strategy", - "AI content generation tools comparison 2024", - "AI content writing software", - "top AI content generators 2024", - "keywords for AI content generation", - "long tail keywords AI content writing", - "AI content creation case studies 2024" - ] -} \ No newline at end of file diff --git a/backend/services/linkedin/content_generator.py b/backend/services/linkedin/content_generator.py index 391fea70..99b95219 100644 --- a/backend/services/linkedin/content_generator.py +++ b/backend/services/linkedin/content_generator.py @@ -410,8 +410,9 @@ class ContentGenerator: raise Exception("Gemini Grounded Provider not available - cannot generate content without AI provider") # Build the prompt for grounded generation using persona if available (DB vs session override) - user_id = getattr(request, 'user_id', 1) - persona_data = self._get_cached_persona_data(user_id, 'linkedin') if hasattr(request, 'user_id') else None + # Beta testing: Force user_id=1 for all requests + user_id = 1 + persona_data = self._get_cached_persona_data(user_id, 'linkedin') if getattr(request, 'persona_override', None): try: # Merge shallowly: override core and platform adaptation parts @@ -484,8 +485,9 @@ class ContentGenerator: raise Exception("Gemini Grounded Provider not available - cannot generate content without AI provider") # Build the prompt for grounded generation using persona if available (DB vs session override) - user_id = getattr(request, 'user_id', 1) - persona_data = self._get_cached_persona_data(user_id, 'linkedin') if hasattr(request, 'user_id') else None + # Beta testing: Force user_id=1 for all requests + user_id = 1 + persona_data = self._get_cached_persona_data(user_id, 'linkedin') if getattr(request, 'persona_override', None): try: override = request.persona_override diff --git a/backend/test_detailed.py b/backend/test/test_detailed.py similarity index 100% rename from backend/test_detailed.py rename to backend/test/test_detailed.py diff --git a/backend/test_gemini_direct.py b/backend/test/test_gemini_direct.py similarity index 100% rename from backend/test_gemini_direct.py rename to backend/test/test_gemini_direct.py diff --git a/backend/test_research.py b/backend/test/test_research.py similarity index 100% rename from backend/test_research.py rename to backend/test/test_research.py diff --git a/backend/test_research_analysis.py b/backend/test/test_research_analysis.py similarity index 100% rename from backend/test_research_analysis.py rename to backend/test/test_research_analysis.py diff --git a/backend/test_subscription_system.py b/backend/test/test_subscription_system.py similarity index 100% rename from backend/test_subscription_system.py rename to backend/test/test_subscription_system.py diff --git a/backend/validate_database.py b/backend/test/validate_database.py similarity index 100% rename from backend/validate_database.py rename to backend/test/validate_database.py diff --git a/backend/validate_linkedin_structure.py b/backend/test/validate_linkedin_structure.py similarity index 100% rename from backend/validate_linkedin_structure.py rename to backend/test/validate_linkedin_structure.py diff --git a/backend/verify_billing_setup.py b/backend/test/verify_billing_setup.py similarity index 100% rename from backend/verify_billing_setup.py rename to backend/test/verify_billing_setup.py diff --git a/backend/verify_subscription_setup.py b/backend/test/verify_subscription_setup.py similarity index 100% rename from backend/verify_subscription_setup.py rename to backend/test/verify_subscription_setup.py