Spaces:
Sleeping
Sleeping
| import json | |
| from groq import Groq | |
| import os | |
| STYLE_TIMES = { | |
| "Summary Notes": "3-5 min", | |
| "Detailed Explanation": "8-12 min", | |
| "Bullet Points": "2-4 min", | |
| "Concept Map": "5-7 min" | |
| } | |
| GROQ_API_KEY = os.environ.get("GROQ_API_KEY") | |
| def generate_content(topic, level, content_style, focus=""): | |
| focus_note = " Focus specifically on: " + focus + "." if focus else "" | |
| prompt = ( | |
| "Generate structured study notes for '" + topic + "' at " + level + " level " | |
| "in the style of " + content_style + "." + focus_note + "\n\n" | |
| "Return ONLY a JSON object with:\n" | |
| "- sections: array of 3 objects each with 'title' and 'content'\n" | |
| "- key_terms: array of 4-6 objects each with 'term' and 'definition'\n" | |
| "- summary: one string (1-2 sentences)\n\n" | |
| "JSON only, no markdown, no backticks, no extra text." | |
| ) | |
| try: | |
| client = Groq(api_key=GROQ_API_KEY) | |
| r = client.chat.completions.create( | |
| model="llama-3.3-70b-versatile", | |
| messages=[{"role": "user", "content": prompt}], | |
| max_tokens=1500 | |
| ) | |
| raw = r.choices[0].message.content.strip() | |
| # Strip markdown fences if model adds them anyway | |
| if raw.startswith("```"): | |
| raw = raw.split("```", 2)[1] | |
| if raw.startswith("json"): | |
| raw = raw[4:] | |
| data = json.loads(raw.strip()) | |
| return { | |
| "topic": topic.title(), | |
| "level": level, | |
| "style": content_style, | |
| "read_time": STYLE_TIMES.get(content_style, "5 min"), | |
| "sections": data["sections"], | |
| "key_terms": data["key_terms"], | |
| "summary": data["summary"], | |
| "ai_generated": True, | |
| } | |
| except Exception as e: | |
| # Graceful fallback so the app never crashes | |
| return { | |
| "topic": topic.title(), | |
| "level": level, | |
| "style": content_style, | |
| "read_time": STYLE_TIMES.get(content_style, "5 min"), | |
| "sections": [ | |
| {"title": "Overview", "content": f"Study notes for {topic} at {level} level could not be generated. Please try again."}, | |
| ], | |
| "key_terms": [], | |
| "summary": f"Content generation failed: {str(e)}", | |
| "ai_generated": False, | |
| } |