import streamlit as st import g4f from streamlit_lottie import st_lottie import json # Функция для загрузки анимаций Lottie def load_lottiefile(filepath: str): with open(filepath, "r") as f: return json.load(f) # Функция для отправки сообщений в GPT def get_gpt_response(messages): client = g4f.Client() response = client.chat.completions.create( model="gpt-3.5-turbo", messages=messages, ) return response.choices[0].message.content # Инициализация списка сообщений if 'messages' not in st.session_state: st.session_state['messages'] = [{"role": "user", "content": "Hello"}] # Загрузка анимаций Lottie lottie_hello = load_lottiefile("lottie_hello.json") lottie_typing = load_lottiefile("lottie_typing.json") # Настройки страницы st.set_page_config(page_title="GPT Chat", page_icon="🤖", layout="wide") # Стили CSS для красивого интерфейса st.markdown(""" """, unsafe_allow_html=True) # Заголовок st.title("Chat with GPT 🤖") # Показ анимации в верхней части страницы st_lottie(lottie_hello, height=200, key="hello") # Форма для ввода сообщения пользователя with st.form(key="chat_form", clear_on_submit=True): user_message = st.text_input("You:", placeholder="Type your message here...") submit_button = st.form_submit_button(label="Send") # Отправка сообщения пользователя if submit_button and user_message: # Добавление сообщения пользователя в историю st.session_state['messages'].append({"role": "user", "content": user_message}) # Показ анимации "бот печатает" перед ответом with st.spinner('GPT is typing...'): st_lottie(lottie_typing, height=100, key="typing") # Получение ответа от GPT bot_message = get_gpt_response(st.session_state['messages']) # Добавление ответа бота в историю st.session_state['messages'].append({"role": "assistant", "content": bot_message}) # Отображение всех сообщений for message in st.session_state['messages']: if message['role'] == 'user': st.markdown(f"