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()