import streamlit as st import os from groq import Groq import pandas as pd import random from typing import Dict, Any, Optional, List # Streamlit page configuration st.set_page_config(layout="wide", page_title="Game User Assessment & AI ML Planning", initial_sidebar_state="expanded") # Supported models SUPPORTED_MODELS: Dict[str, str] = { "Llama 3.2 1B (Preview)": "llama-3.2-1b-preview", "Llama 3 70B": "llama3-70b-8192", "Llama 3 8B": "llama3-8b-8192", "Llama 3.1 70B": "llama-3.1-70b-versatile", "Llama 3.1 8B": "llama-3.1-8b-instant", "Mixtral 8x7B": "mixtral-8x7b-32768", "Gemma 2 9B": "gemma2-9b-it", "LLaVA 1.5 7B": "llava-v1.5-7b-4096-preview", "Llama 3.2 3B (Preview)": "llama-3.2-3b-preview", "Llama 3.2 11B Vision (Preview)": "llama-3.2-11b-vision-preview" } MAX_TOKENS: int = 1000 # Initialize Groq client with API key @st.cache_resource def get_groq_client() -> Optional[Groq]: groq_api_key = os.getenv("GROQ_API_KEY") if not groq_api_key: st.error("GROQ_API_KEY not found in environment variables. Please set it and restart the app.") return None return Groq(api_key=groq_api_key) client = get_groq_client() # Game Genres and Features based on the PDF game_genres = [ "Casual", "Hyper Casual", "Puzzle", "RPG", "Shooter", "Strategy", "Sports & Driving", "Casino", "Simulation", "AR/Location-Based" ] live_event_types = [ "Live Events", "Seasonal Events", "Special Promotions", "Challenges", "Leaderboard Tournaments", "Guild Competitions", "PvP Events" ] # Function to query Groq LLM for expanding strategies def expand_strategies_with_llm(model: str, system_prompt: str, strategy: str, temperature: float = 0.7) -> str: user_query = f"Expand the following strategy and include recommendations for best practices:\n\nStrategy: {strategy}" try: response = client.chat.completions.create( model=SUPPORTED_MODELS[model], messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_query} ], temperature=temperature, max_tokens=MAX_TOKENS ) if response.choices: return response.choices[0].message.content else: return "No expansion available for this strategy." except Exception as e: return f"Error generating strategy expansion: {str(e)}" def create_user_profile() -> Optional[Dict[str, Any]]: st.header("with AI-driven strategies and marketing insights.") with st.form(key='assessment_form'): age = st.slider("How old are you?", 10, 60, 25) gaming_frequency = st.selectbox("How often do you play mobile games?", ["Daily", "Weekly", "Monthly", "Rarely"]) preferred_genre = st.radio("Which genre do you prefer?", game_genres) hours_played = st.slider("Average hours spent playing games per week?", 0, 40, 5) competitiveness = st.selectbox("How competitive are you in gaming?", ["Not at all", "Somewhat", "Moderately", "Very Competitive"]) # Add Select Game Features and Event Types to the form st.subheader("Select Game Features") features = [ "Progression", "Buildings", "Characters & Units", "Game Progression", "Items", "Ad Monetization", "Gacha", "IAP & Monetization", "Trading & Economy", "Competition & PVP", "Social Interaction", "Appointment Mechanics", "Session Length", "Live Events", "Retention" ] selected_features = st.multiselect("Choose relevant game features:", features) st.subheader("Select Live Event Types") selected_event_types = st.multiselect("Choose relevant live event types:", live_event_types) submit_button = st.form_submit_button(label='Submit Assessment') if submit_button: return { "Age": age, "Gaming Frequency": gaming_frequency, "Preferred Genre": preferred_genre, "Hours Played per Week": hours_played, "Competitiveness": competitiveness, "Selected Features": selected_features, "Selected Event Types": selected_event_types } return None def generate_seo_aso_suggestions(user_profile: Dict[str, Any]) -> Dict[str, List[str]]: seo_suggestions = [] aso_suggestions = [] # SEO Suggestions based on user profile genre = user_profile['Preferred Genre'] selected_features = user_profile['Selected Features'] if genre == 'Casual': seo_suggestions.append("Target keywords like 'free casual games', 'best casual games', 'mobile games to relax'.") elif genre == 'RPG': seo_suggestions.append("Optimize for 'top RPG mobile games', 'best free RPGs', 'immersive RPG games'.") elif genre == 'Puzzle': seo_suggestions.append("Use keywords such as 'brain games', 'best puzzle games', 'mobile puzzle games'.") if 'Game Progression' in selected_features: seo_suggestions.append("Include keywords related to 'level-based games', 'game progression mechanics'.") # ASO Suggestions based on user profile if 'Special Promotions' in user_profile['Selected Event Types']: aso_suggestions.append("Utilize limited-time events in app description to encourage installs.") aso_suggestions.append("Highlight special promotions and seasonal events in the app’s title or subtitle.") if 'Social Interaction' in selected_features: aso_suggestions.append("Mention social features like multiplayer and leaderboards in the description.") return { "SEO Suggestions": seo_suggestions, "ASO Suggestions": aso_suggestions } def generate_action_plan_with_features(user_profile: Dict[str, Any]) -> Dict[str, Any]: action_plan = { "game_recommendations": [], "strategies": [] } genre = user_profile['Preferred Genre'] hours = user_profile['Hours Played per Week'] competitiveness = user_profile['Competitiveness'] # Game recommendations based on profile game_recommendations = { "Puzzle": ["Candy Crush Saga", "Two Dots", "Monument Valley"], "Action": ["PUBG Mobile", "Call of Duty: Mobile", "Brawl Stars"], "RPG": ["Genshin Impact", "Final Fantasy Brave Exvius", "Another Eden"], "Strategy": ["Clash Royale", "Rise of Kingdoms", "Plague Inc."], "Casual": ["Among Us", "Subway Surfers", "Temple Run"] } action_plan['game_recommendations'] = game_recommendations.get(genre, []) # Basic strategies if hours < 5: action_plan['strategies'].append("Set aside specific times for gaming to maintain consistency.") if hours > 20: action_plan['strategies'].append("Consider balancing gaming time with other activities for a well-rounded lifestyle.") if competitiveness == "Very Competitive": action_plan['strategies'].append("Focus on mastering one or two games rather than playing many casually.") return action_plan def display_ai_agent_results(action_plan: Dict[str, Any], user_profile: Dict[str, Any]): st.write("### AI Agent: Reasoning and Planning") # Display User Profile in a more readable format st.subheader("User Profile") st.write(f""" **Age:** {user_profile['Age']} **Gaming Frequency:** {user_profile['Gaming Frequency']} **Preferred Genre:** {user_profile['Preferred Genre']} **Hours Played per Week:** {user_profile['Hours Played per Week']} **Competitiveness:** {user_profile['Competitiveness']} **Selected Features:** {', '.join(user_profile['Selected Features']) if user_profile['Selected Features'] else 'None'} **Selected Event Types:** {', '.join(user_profile['Selected Event Types']) if user_profile['Selected Event Types'] else 'None'} """) # Display game recommendations st.subheader("Game Recommendations") if action_plan["game_recommendations"]: st.write("\n".join([f"- {game}" for game in action_plan["game_recommendations"]])) else: st.write("*No game recommendations available based on the profile.*") # Display and expand strategies using Groq LLM st.subheader("Strategies and Best Practices") if action_plan["strategies"]: for strategy in action_plan["strategies"]: st.write(f"**Strategy**: {strategy}") # Expand strategy with best practices using LLM expanded_strategy = expand_strategies_with_llm("Llama 3 70B", "You are an expert in game development and strategy.", strategy) st.write(f"**Best Practices**: {expanded_strategy}") else: st.write("*No strategies or best practices available based on the profile.*") # Generate and display SEO and ASO suggestions seo_aso_suggestions = generate_seo_aso_suggestions(user_profile) st.subheader("SEO and ASO Suggestions") st.write("**SEO Suggestions**:") if seo_aso_suggestions["SEO Suggestions"]: st.write("\n".join([f"- {suggestion}" for suggestion in seo_aso_suggestions["SEO Suggestions"]])) else: st.write("*No SEO suggestions available based on the profile.*") st.write("**ASO Suggestions**:") if seo_aso_suggestions["ASO Suggestions"]: st.write("\n".join([f"- {suggestion}" for suggestion in seo_aso_suggestions["ASO Suggestions"]])) else: st.write("*No ASO suggestions available based on the profile.*") # Display the full game strategy plan in a readable format full_results = f"User Profile:\n{user_profile}\n\nGame Recommendations:\n{action_plan['game_recommendations']}\n\nStrategies and Best Practices:\n{action_plan['strategies']}\n\nSEO and ASO Suggestions:\n{seo_aso_suggestions}" st.subheader("Full Game Strategy Plan") st.write(full_results) # Display full results on the page # Add a download button for the results st.download_button("Download Results", data=full_results, file_name="game_strategy_plan.txt", mime="text/plain") def groq_ai_section_with_features(user_profile: Dict[str, Any]): with st.sidebar: st.header("Groq AI Configuration") model = st.selectbox("Select LLM Model", list(SUPPORTED_MODELS.keys())) temperature = st.slider("Temperature", 0.0, 1.0, 0.7) if st.button("Generate Enhanced AI Plan with Groq"): system_prompt = """ You are an AI assistant specializing in mobile game strategy and player profiling. Based on the following user profile and selected game features, generate a detailed plan for enhancing their gaming experience. """ user_query = f""" User Profile: - Age: {user_profile['Age']} - Gaming Frequency: {user_profile['Gaming Frequency']} - Preferred Genre: {user_profile['Preferred Genre']} - Hours Played per Week: {user_profile['Hours Played per Week']} - Competitiveness: {user_profile['Competitiveness']} - Selected Features: {', '.join(user_profile['Selected Features']) if user_profile['Selected Features'] else 'None'} - Selected Event Types: {', '.join(user_profile['Selected Event Types']) if user_profile['Selected Event Types'] else 'None'} Please provide a comprehensive gaming plan and strategy for this user, including relevant suggestions for the selected features and event types. """ with st.spinner("Generating AI plan... This may take a few moments."): response = query_groq(model, temperature, system_prompt, user_query) if response.startswith("Error:"): st.error(response) else: st.subheader("AI-Generated Enhanced Plan") st.write(response) st.download_button(label="Download Enhanced AI Plan", data=response, file_name="enhanced_ai_game_plan.txt", mime="text/plain") def main(): st.image("p1.png") st.sidebar.image("p2.png", width=200) st.title("Game User Assessment and ML Personas App") # Create the user profile from the form user_profile = create_user_profile() # Only call the AI section once the user profile is created if user_profile: action_plan = generate_action_plan_with_features(user_profile) display_ai_agent_results(action_plan, user_profile) # Pass the user profile into the AI section to avoid the KeyError groq_ai_section_with_features(user_profile) if __name__ == "__main__": main()