#importing libraries import gradio as gr import tensorflow.keras as keras import time import keras_nlp import os model_path = "Zul001/HydroSense_Gemma_Finetuned_Model" gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset(f"hf://{model_path}") # reset_triggered = False custom_css = """ @import url('https://fonts.googleapis.com/css2?family=Edu+AU+VIC+WA+NT+Dots:wght@400..700&family=Give+You+Glory&family=Sofia&family=Sunshiney&family=Vujahday+Script&display=swap'); .gradio-container, .gradio-container * { font-family: "Playfair Display", serif; font-optical-sizing: auto; font-weight: ; font-style: normal; } """ js = """ function refresh() { const url = new URL(window.location); if (url.searchParams.get('__theme') === 'light') { url.searchParams.set('__theme', 'light'); window.location.href = url.href; } } """ previous_sessions = [] def post_process_output(prompt, result): # Remove the prompt if it's repeated at the beginning of the answer answer = result.strip() if answer.startswith(prompt): answer = answer[len(prompt):].strip() # Remove any leading colons or whitespace answer = answer.lstrip(':') # Ensure the answer starts with a capital letter answer = answer.capitalize() # Ensure the answer ends with a period if it doesn't already if not answer.endswith('.'): answer += '.' return f"{answer}" def add_session(prompt): global previous_sessions session_name = ' '.join(prompt.split()[:5]) if session_name and session_name not in previous_sessions: previous_sessions.append(session_name) return "\n".join(previous_sessions) # Return only the session logs as a string def inference(prompt): prompt_text = prompt generated_text = gemma_lm.generate(prompt_text) #Apply post-processing formatted_output = post_process_output(prompt_text, generated_text) print(formatted_output) #adding a bit of delay time.sleep(1) result = formatted_output sessions = add_session(prompt_text) return result, sessions # def inference(prompt): # time.sleep(1) # result = "Your Result" # # sessions = add_session(prompt) # return result # def remember(prompt, result): # global memory # # Store the session as a dictionary # session = {'prompt': prompt, 'result': result} # memory.append(session) # # Update previous_sessions for display # session_display = [f"Q: {s['prompt']} \nA: {s['result']}" for s in memory] # return "\n\n".join(session_display) # Return formatted sessions as a string def clear_sessions(): global previous_sessions previous_sessions.clear() return "\n".join(previous_sessions) def clear_fields(): global reset_triggered # reset_triggered = True return "", "" # Return empty strings to clear the prompt and output fields with gr.Blocks(theme='gradio/soft', css=custom_css) as demo: gr.Markdown("

HydroSense LLM Demo

") with gr.Row(): with gr.Column(scale=1): gr.Markdown("## Previous Sessions") session_list = gr.Textbox(label="Sessions", value="\n".join(previous_sessions), interactive=False, lines=4, max_lines=20) add_button = gr.Button("New Session") clear_session = gr.Button("Clear Session") with gr.Column(scale=2): output = gr.Textbox(label="Result", lines=5, max_lines=20) prompt = gr.Textbox(label="Enter your Prompt here", max_lines=20) with gr.Row(): generate_btn = gr.Button("Generate Answer", variant="primary", size="sm") reset_btn = gr.Button("Clear Content", variant="secondary", size="sm", elem_id="primary") generate_btn.click( fn=inference, inputs=[prompt], outputs=[output, session_list] ) prompt.submit( fn=inference, inputs=[prompt], outputs=[output, session_list], ) reset_btn.click( lambda: ("", ""), inputs=None, outputs=[prompt, output] ) # Button to clear the prompt and output fields add_button.click( fn=clear_fields, # Only call the clear_fields function inputs=None, # No inputs needed outputs=[prompt, output] # Clear the prompt and output fields ) clear_session.click( fn=clear_sessions, inputs=None, outputs=[session_list] ) demo.launch(share=True)