File size: 2,595 Bytes
cbb3419
5b0e46c
5f6fe65
 
 
 
 
5b0e46c
5f6fe65
5b0e46c
 
5f6fe65
5b0e46c
 
5f6fe65
5b0e46c
 
 
 
 
 
 
 
 
 
 
 
 
 
5f6fe65
5b0e46c
 
 
5f6fe65
5b0e46c
 
 
 
 
5f6fe65
5b0e46c
 
5f6fe65
5b0e46c
 
 
5f6fe65
5b0e46c
 
 
 
5f6fe65
5b0e46c
 
5f6fe65
5b0e46c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Import the necessary libraries
import openai
import streamlit as st
from openai import OpenAI  # TODO: Install the OpenAI library using pip install openai

st.title("Mini Project 2: Streamlit Chatbot")

client = None

if "is_valid" not in st.session_state:
    st.session_state["is_valid"] = False

if 'api_key' not in st.session_state:
    st.session_state["api_key"] = ""

def check_openai_api_key():
    client = OpenAI(api_key=st.session_state["api_key"])
    st.session_state["is_valid"] = False
    try:
        client.models.list()
    except openai.APIError as e:
        st.session_state["is_valid"] = False
    except openai.APIConnectionError as e:
        st.session_state["is_valid"] = False
    except openai.AuthenticationError as e:
        st.session_state["is_valid"] = False
    else:
        st.session_state["is_valid"] = True
        st.success("Valid OpenAI API key entered successfully!")

if not st.session_state["is_valid"]:
    st.session_state["api_key"] = st.text_input(label="Enter your OpenAI API Key", type="password")
    check_openai_api_key()

if st.session_state["is_valid"]:
    client = OpenAI(api_key=st.session_state["api_key"])
    # Check for existing session state variables
    if "openai_model" not in st.session_state:
        st.session_state['openai_model'] = "gpt-3.5-turbo"

    if "messages" not in st.session_state:
        st.session_state['messages'] = [] # {"role": "assistant", "content": "text"}

    # Display existing chat messages
    for message in st.session_state['messages']:
        st.chat_message(message['role']).write(message['content'])

    # Wait for user input
    if prompt := st.chat_input("What would you like to chat about?"):
        # ... (append user message to messages)
        st.session_state['messages'].append({"role": "user", "content": prompt})

        # ... (display user message)
        st.chat_message(st.session_state['messages'][-1]['role']).write(st.session_state['messages'][-1]['content'])

        # ... (send request to OpenAI API

        # Generate AI response
        with st.chat_message("assistant"):
            # ... (send request to OpenAI API)
            stream = client.chat.completions.create(
                model=st.session_state['openai_model'],
                messages=st.session_state['messages'],
                stream=True,
            )
            # ... (get AI response and display it)
            response = st.write_stream(stream)

        # ... (append AI response to messages)
        st.session_state['messages'].append({"role": "assistant", "content": response})