import streamlit as st
from openai import OpenAI
# Настройки страницы (тёмная тема, "wide" разметка)
st.set_page_config(page_title="Чат с deepseek-reasoner", layout="wide")
# Глобальная стилизация через CSS
st.markdown(
"""
""",
unsafe_allow_html=True
)
# Инициализация клиента для DeepSeek (замените ключ на свой)
client = OpenAI(
api_key="sk-a02694cf3c8640c9ae60428ee2c5a62e",
base_url="https://api.deepseek.com"
)
# Заголовок
st.title("Чат с deepseek-reasoner")
# Инициализируем историю сообщений в сессии
if "messages" not in st.session_state:
st.session_state["messages"] = []
# Функция для отрисовки всей истории чата
def render_chat():
st.markdown("
", unsafe_allow_html=True)
# Проходим по всем сообщениям
for msg in st.session_state["messages"]:
if msg["role"] == "user":
bubble_class = "user-bubble"
else:
bubble_class = "assistant-bubble"
st.markdown(
f"
{msg['content']}
",
unsafe_allow_html=True
)
st.markdown("
", unsafe_allow_html=True)
# Сразу выводим чат-окно, чтобы было сверху
render_chat()
# Внизу располагаем поле ввода (многострочное) и кнопку «Отправить»
with st.container():
user_input = st.text_area("Напишите сообщение и нажмите Enter или кнопку «Отправить»:",
value="", height=80)
if st.button("Отправить"):
content = user_input.strip()
if content:
# Добавляем реплику пользователя в историю
st.session_state["messages"].append({"role": "user", "content": content})
# Пытаемся получить ответ от модели
try:
response = client.chat.completions.create(
model="deepseek-reasoner",
messages=st.session_state["messages"]
)
# Содержимое ответа
assistant_content = response.choices[0].message.content
# Добавляем ответ ассистента в историю
st.session_state["messages"].append(
{"role": "assistant", "content": assistant_content}
)
except Exception as e:
st.error(f"Ошибка при обращении к API: {e}")
# Очищаем поле ввода после отправки (перезагрузка скрипта сделает это)
st.experimental_rerun()