def create_campaign()

in genai-for-marketing/backend_apis/app/main.py [0:0]


def create_campaign(user_id: str,data: CampaignCreateRequest
                    ) -> CampaignCreateResponse:
    """Campaing Creation and content generation with PaLM API
        Parameters:
            user_id: str
            campaign_name: str
            theme: str
            brief: dict = {
                "gender_select_theme":"Male",
                "age_select_theme":"20-30",
                "objective_select_theme":"Drive Awareness",
                "competitor_select_theme":"Fashion Forward"
                }
        Returns:
            id (str): Response of generated Campaign ID
            campaign_name:str
            workspace_asset: dict
        """
    
    gender_select_theme = data.brief.gender_select_theme
    age_select_theme = data.brief.age_select_theme
    objective_select_theme = data.brief.objective_select_theme
    competitor_select_theme = data.brief.competitor_select_theme
    async def generate_campaign() -> tuple:
            return await asyncio.gather(
                utils_prompt.async_predict_text_gemini(
                    BRAND_STATEMENT_PROMPT_TEMPLATE.format(
                        gender_select_theme, 
                        age_select_theme,
                        objective_select_theme,
                        competitor_select_theme,
                        BRAND_OVERVIEW)
                        ),
                utils_prompt.async_predict_text_gemini(
                    PRIMARY_MSG_PROMPT_TEMPLATE.format(
                        gender_select_theme, 
                        age_select_theme,
                        objective_select_theme,
                        competitor_select_theme,
                        BRAND_OVERVIEW)
                    ),
                utils_prompt.async_predict_text_gemini(
                    COMMS_CHANNEL_PROMPT_TEMPLATE.format(
                        gender_select_theme, 
                        age_select_theme,
                        objective_select_theme,
                        competitor_select_theme)
                    )) 
    try:
        generated_tuple = asyncio.run(generate_campaign())
        print(generated_tuple)
        brand_statement = generated_tuple[0] 
        primary_message = generated_tuple[1]
        comm_channels = generated_tuple[2]
        brief_scenario = (
                    f'Targeting gender: {gender_select_theme}, '
                    f'Age group: {age_select_theme}, '
                    f'Campaign objective: {objective_select_theme}, '
                    f'Competitor: {competitor_select_theme}') 
        workspace_asset = post_brief_create_upload(BriefCreateRequest(
            campaign_name=data.campaign_name,
            business_name=BUSINESS_NAME,
            brief_scenario=brief_scenario,
            brand_statement=brand_statement,
            primary_message=primary_message,
            comm_channels=comm_channels
            ))
    except Exception as e:
        print("Failed in Creating Content Asset")
        raise HTTPException(status_code=400, detail=str(e))
    else:
        campaign = Campaign(
            name=data.campaign_name,
            theme=data.theme,
            brief=data.brief,
            workspace_assets=workspace_asset
            )
        update_time,campaign_id = utils_firebase.create_campaign(
            user_id=user_id,
            campaign=campaign
            )
        print(update_time,campaign_id)
        return CampaignCreateResponse(
            id=campaign_id,
            campaign_name=data.campaign_name,
            theme=data.theme,
            workspace_assets=workspace_asset
            )