File size: 2,855 Bytes
5c14a47 729ab1c 118d7b4 729ab1c 118d7b4 fef6bf3 729ab1c 118d7b4 fef6bf3 118d7b4 fef6bf3 118d7b4 fef6bf3 118d7b4 fef6bf3 118d7b4 fef6bf3 118d7b4 fef6bf3 118d7b4 fef6bf3 118d7b4 fef6bf3 118d7b4 fef6bf3 118d7b4 fef6bf3 118d7b4 729ab1c |
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 |
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"
},
]
if "authenticated" not in st.session_state:
st.session_state["authenticated"] = False
password = st.text_input("пасскод", type="password") if not st.session_state["authenticated"] else ""
if password == st.secrets["real_password"]:
st.session_state["authenticated"] = True
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"):
model = genai.GenerativeModel(model)
res = model.generate_content(messages, stream=True, safety_settings=safety_settings)
return res
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:
if password:
st.warning("неправильный пароль, увы...")
|