import streamlit as st import streamlit.components.v1 as components import requests import os import time import streamlit as st import base64 from streamlit_mic_recorder import mic_recorder from notion_client import Client import pandas as pd MODEL_NAME = "drinktoomuchsax/whisper-small-hi" lang = "en" from threading import Thread os.environ["COQUI_TOS_AGREED"] = "1" os.environ["TRAINER_TELEMETRY"]= "0" # Constants HF_TOKEN = os.environ.get("HF_TOKEN", None) BASETEN_API = os.environ.get("BASETEN_API", None) BASETEN_KEY = os.environ.get("BASETEN_KEY", None) NOTION_KEY = os.environ.get("NOTION_API_KEY", None) NOTION_DB_ID = os.environ.get("NOTION_DB_ID", None) notion = Client(auth=f"{NOTION_KEY}") database_id = f"{NOTION_DB_ID}" st.set_page_config(layout="wide") # Load custom CSS to integrate Bootstrap, Font Awesome, and Google Fonts st.markdown(''' ''', unsafe_allow_html=True) # Title Section st.markdown('

My Streamlit Application

Integrating Streamlit with Bootstrap Carousel

', unsafe_allow_html=True) left, ml, right = st.columns([3,3,3]) with left: # Carousel Structure st.markdown('''

Calculator

''', unsafe_allow_html=True) # Box 1: Calculator # Define the calculator layout buttons = [ ['7', '8', '9', '/'], ['4', '5', '6', '\*'], ['1', '2', '3', '\-'], ['C', '0', '.', '\+'], ['='] ] # To store the calculation input if 'calc_input' not in st.session_state: st.session_state.calc_input = "" # Custom calculation function def calculate(expression): expression = expression.replace("\\","") try: result = eval(expression) # placeholder for a safe eval replacement return str(result) except ZeroDivisionError: return "Error: Division by zero" except Exception: return "Error" # Display the calculator buttons for row in buttons: cols = st.columns(len(row)) for i, btn_label in enumerate(row): if btn_label and cols[i].button(btn_label): if btn_label == '=': st.session_state.calc_input = calculate(st.session_state.calc_input) elif btn_label == 'C': st.session_state.calc_input = "" else: st.session_state.calc_input += btn_label.replace("\\","") # Display the current calculation input/output st.text_input("Calculation", st.session_state.calc_input, key="display", disabled=True) with ml: st.markdown('''

Gen Image

''', unsafe_allow_html=True) api_key = f"{BASETEN_KEY}" negative_prompt = st.text_input("Negative Prompt", "blurry, text, low quality") positive_prompt = st.text_input("Positive Prompt", "An igloo on a snowy day, 4k, hd") controlnet_image_url = st.text_input("ControlNet Image URL", "https://storage.googleapis.com/logos-bucket-01/baseten_logo.png") # Button to trigger generation if st.button("Generate Prompt"): # Making the API request response = requests.post( "https://model-7wlx9oew.api.baseten.co/production/predict", headers={"Authorization": f"Api-Key {api_key}"}, json={ 'workflow_values': { 'negative_prompt': negative_prompt, 'positive_prompt': positive_prompt, 'controlnet_image': controlnet_image_url } } ) # Display the response if response.status_code == 200: result = response.json().get("result") if result: image_data = result[0].get("data") if image_data: # Decode the base64 image data image = base64.b64decode(image_data) # Display the image in Streamlit st.image(image, caption="Generated Image", use_column_width=True) else: st.error("No image data found in the response.") else: st.error("No result found in the response.") else: st.error(f"Error: {response.status_code}, {response.text}") # with rl: # # End of Box 2 and second Carousel Item # st.markdown('''

Transcribe

''', unsafe_allow_html=True) # # Box 3: Form 2 # # Audio recording using mic_recorder # audio = mic_recorder( # start_prompt="Start recording", # stop_prompt="Stop recording", # just_once=False, # use_container_width=False, # callback=None, # key="mic_recorder" # ) # #uploaded_file = st.file_uploader("Or upload an audio file", type=["mp3", "wav", "flac", "aac"]) # if st.button("Transcribe"): # if audio and "bytes" in audio: # st.success("Recording detected. Transcribing your recording...") # with open("temp_recording.wav", "wb") as f: # f.write(audio["bytes"]) # with st.spinner("Transcribing..."): # #transcription = transcribe("temp_recording.wav") # #need to send the data here # transcription = "Under Process" # print("") # st.text_area("Transcription", transcription, height=200) # else: # st.error("Please record audio or upload a file to transcribe.") with right: st.markdown('''

Chat with Mistral

''', unsafe_allow_html=True) # Box 4: Form 3 prompt3 = st.text_input("Enter Prompt", key="prompt3", value="Why is Sky Blue?") #image_url3 = st.text_input("Enter Image URL", key="image_url3") if st.button("Submit", key="submit3"): payload = {"prompt": prompt3} headers = { "Authorization": f"Api-Key {BASETEN_KEY}" } response = requests.post(f"{BASETEN_API}", headers=headers, json=payload) if response.status_code == 200: st.write(f"**Response:** {response.json()}") else: st.write("Failed to get a response") # End of Box 4 and fourth Carousel Item left, middle, right = st.columns([1,3,1]) with middle: # Streamlit form for data input with st.form(key='data_entry_form'): name = st.text_input("Name") age = st.number_input("Age", min_value=0) location = st.text_input("Location") submit_button = st.form_submit_button(label='Submit') # Function to add data to Notion def add_to_notion(name, age, location): new_page = { "Name": { "title": [ { "text": { "content": name } } ] }, "Age": { "number": age }, "Location": { "rich_text": [ { "text": { "content": location } } ] } } notion.pages.create(parent={"database_id": database_id}, properties=new_page) # Add data to Notion when form is submitted if submit_button: add_to_notion(name, age, location) st.success("Data submitted to Notion!") # Function to retrieve data from Notion def retrieve_data_from_notion(): query_result = notion.databases.query(database_id=database_id) data = [] for result in query_result["results"]: # Safely extract the "Name" property name = result["properties"]["Name"]["title"][0]["text"]["content"] if result["properties"]["Name"]["title"] else "No Name" # Safely extract the "Age" property age = result["properties"]["Age"]["number"] if result["properties"]["Age"]["number"] is not None else "No Age" # Safely extract the "Location" property location = result["properties"]["Location"]["rich_text"][0]["text"]["content"] if result["properties"]["Location"]["rich_text"] else "No Location" data.append({"Name": name, "Age": age, "Location": location}) return pd.DataFrame(data) # Display the data in a table st.subheader("Stored Data") data_df = retrieve_data_from_notion() st.table(data_df) hide_default_format = """ """ st.markdown(hide_default_format, unsafe_allow_html=True)