File size: 2,456 Bytes
a36d2f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import os
import streamlit as st
from streamlit_option_menu import option_menu
from gemini_utility import (load_gemini_pro, 
                            gemini_pro_vision_responce)
from PIL import Image

# To get the working directory
working_directory = os.path.dirname(os.path.abspath(__file__))

# Setting the page config
st.set_page_config(
    page_title="Gemini AI",
    page_icon="🤖",
    layout="centered",
    initial_sidebar_state="expanded",
)

with st.sidebar:
    selected = option_menu("Gemini AI",
                           ["Chatbot",
                            "Image Captioning",
                            ],
                           menu_icon="robot", 
                           icons=['chat-dots-fill', 'image-fill'],
                           default_index=0)

def translate_role_to_streamlit(user_role):
    if user_role == "model":
        return "assistant"
    else:
        return user_role

if selected == "Chatbot":
    model = load_gemini_pro()

    # Initialize chat session in Streamlit if not present
    if "chat_session" not in st.session_state:
        st.session_state.chat_session = model.start_chat(history=[])

    # Streamlit page title
    st.title("Gemini Chatbot 🤖")

    # Display the chatbot history
    for message in st.session_state.chat_session.history:
        with st.chat_message(translate_role_to_streamlit(message.role)):
            st.markdown(message.parts[0].text)

    # Input field for user's message
    user_prompt = st.chat_input("Ask Gemini Pro...")

    if user_prompt:
        st.chat_message("user").markdown(user_prompt)
        gemini_response = st.session_state.chat_session.send_message(user_prompt)

        # Display the chatbot response
        with st.chat_message("assistant"):
            st.markdown(gemini_response.text)


if selected == "Image Captioning":

    # Streamlit title
    st.title("Gemini Image Caption Generation📸")

    upload_image = st.file_uploader("Upload an image...", type=["jpg", "jpeg", "png"])

    if upload_image and st.button("Generate"):
        image = Image.open(upload_image)

        col1, col2 = st.columns(2)

        with col1:
            st.image(image, caption="Uploaded Image", use_column_width=True)

        default_prompt = "Write a caption for this image"

        # Getting the response from gemini
        caption = gemini_pro_vision_responce(default_prompt, image)

        with col2:
            st.info(caption)