File size: 3,313 Bytes
5c14a47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
729ab1c
24b20ec
 
 
 
5aedb42
e463f93
118d7b4
 
0589f7a
 
 
 
 
 
 
 
fef6bf3
729ab1c
fef6bf3
 
 
 
 
 
 
118d7b4
fef6bf3
 
118d7b4
 
fef6bf3
5aedb42
0589f7a
5aedb42
 
 
 
118d7b4
 
fef6bf3
 
 
118d7b4
fef6bf3
 
 
 
 
 
 
118d7b4
fef6bf3
118d7b4
fef6bf3
 
 
118d7b4
fef6bf3
 
 
 
 
 
118d7b4
fef6bf3
dd516a8
 
 
 
 
f24d6b2
fef6bf3
44777fa
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
92
93
94
95
96
97
98
99
100
101
102
103
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")
        
        CONFIG = {
            "temperature": 0.5,
            "top_p": 1,
            "top_k": 32,
            "max_output_tokens": 4096,
        }
        
        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, generation_config=genai.GenerationConfig(candidate_count=1, max_output_tokens=4096, temperature=0.6))
            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 = ""
        try:
            for chunk in res:
                res_text += chunk.text
                res_area.markdown(res_text)
        except:
            res_text += f"запрос не прошел цензуру:\n{str(res.prompt_feedback)}"
            res_area.markdown(res_text)


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