import gradio as gr import requests import time # For simulating a loading effect # API Endpoints LOGIN_URL = "http://127.0.0.1:8000/auth/v1/login" COURSE_API_URL = "http://127.0.0.1:8000/ai_course/v1/generate-course/" # Hardcoded user credentials (Ideally, this should be entered dynamically) USERNAME = "aankitroy1990@gmail.com" PASSWORD = "xyzpassword" # Function to authenticate and get access token def get_access_token(): try: response = requests.post( LOGIN_URL, data={ "grant_type": "password", "username": USERNAME, "password": PASSWORD, "scope": "", "client_id": "string", "client_secret": "string", }, headers={"Content-Type": "application/x-www-form-urlencoded"}, ) response_data = response.json() if "access_token" in response_data: return response_data["access_token"] else: return None except Exception as e: return print(f"Failed to get access token: {str(e)}") # Function to fetch course details with loading effect def get_course(course_name, goal, course_type, proficiency, difficulty): yield "**Generating course... Please wait.** ⏳" # Show loading message access_token = get_access_token() if not access_token: yield "**❌ Authentication failed. Please check credentials.**" return headers = {"Authorization": f"Bearer {access_token}"} payload = { "course_name": course_name, "goal": goal, "course_type": course_type, "proficiency": proficiency, "difficulty": difficulty, } try: response = requests.post(COURSE_API_URL, json=payload, headers=headers) response_data = response.json() if "course_content" in response_data: yield response_data["course_content"] # Final response else: yield "**⚠️ Error: Unexpected response from server.**" except Exception as e: yield f"**❌ Failed to parse response: {str(e)}**" # Gradio Interface iface = gr.Interface( fn=get_course, inputs=[ gr.Textbox(label="Course Name"), gr.Textbox(label="Goal/Target"), gr.Radio(["Micro", "Full"], label="Course Type"), gr.Radio(["Beginner", "Intermediate", "Advanced"], label="Proficiency"), gr.Radio(["Easy", "Medium", "Hard"], label="Difficulty"), ], outputs=gr.Markdown(label="Generated Course"), title="AI Course Generator", description="Create structured courses with AI.", ) # Launch with sharing enabled iface.launch(share=True)