import gradio as gr import json import os import google.generativeai as genai # Function to get available JSON files in the working directory def get_available_weeks(): files = [f for f in os.listdir() if f.startswith('week-') and f.endswith('.json')] return files # Function to load questions from the specified week file def load_questions(week_file): try: with open(week_file, "r") as f: data = json.load(f) return data, None except FileNotFoundError: return None, f"File {week_file} not found." # Flashcard UI function def flashcard_ui(week_file, index): data, error = load_questions(week_file) if error: return f"Error: {error}", None question = data[index]["question"] total = len(data) return f"Question {index + 1}/{total}: {question}", "" # Reveal answer function def reveal_answer(week_file, index): data, error = load_questions(week_file) if error: return None answer = data[index]["answer"] return answer # Function to handle navigation def change_question(week_file, index, direction): data, _ = load_questions(week_file) total = len(data) index = (index + direction) % total return index, *flashcard_ui(week_file, index) with open("aa2.txt", "r") as f: prompt = f.read() genai.configure(api_key=os.environ["GEMINI_API_KEY"]) # Create the model configuration generation_config = { "temperature": 0.5, "top_p": 0.98, "top_k": 64, "max_output_tokens": 8192, "response_mime_type": "text/plain", } model = genai.GenerativeModel( model_name="gemini-1.5-flash-8b-exp-0827", generation_config=generation_config, ) # AI Chatbot function def chat_with_ai(user_input): chat_session = model.start_chat( history=[ { "role": "user", "parts": [ prompt ], }, { "role": "model", "parts": [ "Sure, I can answer your question. \n", ], }, ] ) response = chat_session.send_message(user_input) return response.text # Gradio interface with gr.Blocks() as demo: available_weeks = get_available_weeks() # Splash page to select the week with gr.Row(): week_file = gr.Dropdown(choices=available_weeks, label="Select CAM Week to Study") start_button = gr.Button("Start Studying") # Flashcard UI (hidden until week is selected) with gr.Column(visible=False) as flashcard_section: index = gr.State(0) question_output = gr.Textbox(label="Flashcard", interactive=False) answer_output = gr.Textbox(label="Answer", interactive=False) with gr.Row(): prev_btn = gr.Button("Previous") reveal_btn = gr.Button("Reveal Answer") next_btn = gr.Button("Next") with gr.Column(visible=True): chat_input = gr.Textbox(label="Ask a question to the A.I.") with gr.Row(): gr.Markdown(">Note: This A.I. has only been given the NBAA Management guide. Use the flashcards for specific week information.") chat_output = gr.Markdown(label="AI Response") chat_button = gr.Button("Ask AI") # Start button action to reveal the flashcard section start_button.click(lambda: gr.update(visible=True), inputs=[], outputs=flashcard_section) # Event handling for flashcards week_file.change(flashcard_ui, inputs=[week_file, index], outputs=[question_output, answer_output]) reveal_btn.click(reveal_answer, inputs=[week_file, index], outputs=answer_output) prev_btn.click(change_question, inputs=[week_file, index, gr.Number(-1, visible=False)], outputs=[index, question_output, answer_output]) next_btn.click(change_question, inputs=[week_file, index, gr.Number(1, visible=False)], outputs=[index, question_output, answer_output]) # Chatbot button action chat_button.click(chat_with_ai, inputs=[chat_input], outputs=[chat_output]) # Launch the app demo.launch()