CoolFace
Apppublic

FrancisSilva/Loyalty_Strategy

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py136 linesDownload Raw Back to root
1# app.py2import streamlit as st3from transformers import pipeline4import requests5from bs4 import BeautifulSoup6import json7import os8from dotenv import load_dotenv9 10# Load environment variables11load_dotenv()12 13# Initialize session state14if 'current_strategy' not in st.session_state:15    st.session_state.current_strategy = None16if 'rejected_components' not in st.session_state:17    st.session_state.rejected_components = set()18 19def get_competitor_info(competitor_name):20    """21    Scrape basic information about competitors.22    Note: In a production environment, you'd want to use proper APIs23    """24    headers = {25        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'26    }27    28    try:29        response = requests.get(30            f"https://www.google.com/search?q={competitor_name}+loyalty+program",31            headers=headers32        )33        soup = BeautifulSoup(response.text, 'html.parser')34        # Extract relevant text (simplified for example)35        snippets = soup.find_all('div', class_='VwiC3b')36        return ' '.join([s.text for s in snippets[:3]])37    except Exception as e:38        return f"Error fetching competitor info: {str(e)}"39 40def generate_loyalty_strategy(inputs, competitor_info, rejected_components):41    """42    Generate loyalty strategy using an LLM43    """44    # Initialize HuggingFace pipeline45    generator = pipeline('text-generation', 46                        model='gpt2',  # Replace with your preferred model47                        token=os.getenv('HUGGINGFACE_TOKEN'))48    49    # Construct prompt50    prompt = f"""51    Create a loyalty strategy based on these inputs:52    Industry: {inputs['industry']}53    Target Customer: {inputs['target_customer']}54    Budget Level: {inputs['budget']}55    56    Competitor Information:57    {competitor_info}58    59    Previously rejected components:60    {', '.join(rejected_components) if rejected_components else 'None'}61    62    Generate a loyalty strategy with 5 distinct components.63    """64    65    # Generate strategy66    response = generator(prompt, max_length=500, num_return_sequences=1)[0]['generated_text']67    68    # Parse response into components (simplified)69    components = [comp.strip() for comp in response.split('\n') if comp.strip()]70    return components[:5]  # Ensure we return exactly 5 components71 72def main():73    st.title("Loyalty Strategy Generator")74    75    # Input Section76    st.header("Input Parameters")77    with st.form("input_form"):78        industry = st.text_input("Industry")79        target_customer = st.text_input("Target Customer Profile")80        budget = st.selectbox("Budget Level", ["Low", "Medium", "High"])81        competitors = st.text_area("Competitor Names (one per line)")82        submitted = st.form_submit_button("Generate Strategy")83    84    if submitted:85        # Get competitor information86        competitor_list = [comp.strip() for comp in competitors.split('\n') if comp.strip()]87        competitor_info = '\n'.join([88            f"{comp}: {get_competitor_info(comp)}"89            for comp in competitor_list90        ])91        92        # Generate strategy93        inputs = {94            'industry': industry,95            'target_customer': target_customer,96            'budget': budget97        }98        99        components = generate_loyalty_strategy(100            inputs, 101            competitor_info, 102            st.session_state.rejected_components103        )104        st.session_state.current_strategy = components105    106    # Display and evaluate strategy components107    if st.session_state.current_strategy:108        st.header("Evaluate Strategy Components")109        st.write("Select ✓ to keep or ✗ to reject each component:")110        111        rejected_this_round = set()112        for i, component in enumerate(st.session_state.current_strategy):113            col1, col2, col3 = st.columns([3, 1, 1])114            with col1:115                st.write(f"{i+1}. {component}")116            with col2:117                if st.button("✓", key=f"accept_{i}"):118                    pass  # Keep component119            with col3:120                if st.button("✗", key=f"reject_{i}"):121                    rejected_this_round.add(component)122        123        # Update rejected components and regenerate if needed124        if rejected_this_round:125            st.session_state.rejected_components.update(rejected_this_round)126            if st.button("Regenerate Strategy"):127                components = generate_loyalty_strategy(128                    inputs,129                    competitor_info,130                    st.session_state.rejected_components131                )132                st.session_state.current_strategy = components133                st.experimental_rerun()134 135if __name__ == "__main__":136    main()