File size: 2,861 Bytes
5c14a47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
729ab1c
24b20ec
 
 
 
5aedb42
e463f93
118d7b4
 
 
fef6bf3
729ab1c
fef6bf3
 
 
 
 
 
 
118d7b4
fef6bf3
 
118d7b4
 
fef6bf3
5aedb42
 
 
 
 
 
118d7b4
 
fef6bf3
 
 
118d7b4
fef6bf3
 
 
 
 
 
 
118d7b4
fef6bf3
118d7b4
fef6bf3
 
 
118d7b4
fef6bf3
 
 
 
 
 
118d7b4
fef6bf3
 
 
 
118d7b4
fef6bf3
24b20ec
 
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
84
85
86
87
88
89
90
91
from PIL import Image
import io
import streamlit as st
import google.generativeai as genai

safety_settings = [
  {
    "category": "HARM_CATEGORY_HARASSMENT",
    "threshold": "BLOCK_NONE"
  },
  {
    "category": "HARM_CATEGORY_HATE_SPEECH",
    "threshold": "BLOCK_NONE"
  },
  {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_NONE"
  },
  {
    "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
    "threshold": "BLOCK_NONE"
  },
]


password_placeholder = st.empty()
password = password_placeholder.text_input("пасскод", type="password")
if password == st.secrets["real_password"]:
    password_placeholder.empty()
    # st.success("тебе позволено войти, хорошо")

    with st.sidebar:
        st.title("Gemini Pro")

        genai.configure(api_key=st.secrets["api_key"])

        uploaded_image = st.file_uploader(
            label="загрузи изображение",
            label_visibility="visible",
            help="если загружено изображение - можно спрашивать по нему что-то, если нет - будет обычный чат",
            accept_multiple_files=False,
            type=["png", "jpg"],
        )

        if uploaded_image:
            image_bytes = uploaded_image.read()


    def get_response(messages, model="gemini-pro"):
        try:
            model = genai.GenerativeModel(model)
            res = model.generate_content(messages, stream=True, safety_settings=safety_settings)
            return res
        except:
            return "Извини, но запрос не прошел цензуру."


    if "messages" not in st.session_state:
        st.session_state["messages"] = []
    messages = st.session_state["messages"]

    if messages:
        for item in messages:
            role, parts = item.values()
            if role == "user":
                st.chat_message("user").markdown(parts[0])
            elif role == "model":
                st.chat_message("assistant").markdown(parts[0])

    chat_message = st.chat_input("Спроси что-нибудь!")

    if chat_message:
        st.chat_message("user").markdown(chat_message)
        res_area = st.chat_message("assistant").empty()

        if "image_bytes" in globals():
            vision_message = [chat_message, Image.open(io.BytesIO(image_bytes))]
            res = get_response(vision_message, model="gemini-pro-vision")
        else:
            vision_message = [{"role": "user", "parts": [chat_message]}]
            res = get_response(vision_message)

        res_text = ""
        for chunk in res:
            res_text += chunk.text
            res_area.markdown(res_text)

        messages.append({"role": "model", "parts": [res_text]})
else:
    st.warning("неправильный пароль, увы...")