artintel235 commited on
Commit
0b1cdca
·
verified ·
1 Parent(s): 6a2401f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -112
app.py CHANGED
@@ -1,121 +1,88 @@
1
- # import streamlit as st
2
- # import openai
3
- # import os
4
-
5
- # # Function to get the API key from Streamlit secrets
6
- # def get_api_key():
7
- # try:
8
- # return st.secrets["API_KEY"]
9
- # except KeyError:
10
- # st.error("API_KEY not found in Streamlit secrets. Please add it.")
11
- # return None
12
-
13
- # # Function to interact with the OpenAI API with streaming
14
- # def generate_response(messages, model_name, api_key): # Modified to accept 'messages'
15
- # try:
16
- # client = openai.OpenAI(api_key=api_key) # Instantiate OpenAI client with api_key
17
-
18
- # stream = client.chat.completions.create(
19
- # model=model_name,
20
- # messages=messages, # Use the entire conversation history
21
- # stream=True,
22
- # )
23
- # return stream
24
- # except openai.APIError as e:
25
- # st.error(f"OpenAI API Error with {model_name}: {e}")
26
- # return None
27
- # except openai.RateLimitError as e:
28
- # st.error(f"OpenAI Rate Limit Error with {model_name}: {e}")
29
- # return None
30
- # except openai.AuthenticationError as e:
31
- # st.error(f"OpenAI Authentication Error with {model_name}: {e}")
32
- # return None
33
- # except Exception as e:
34
- # st.error(f"An unexpected error occurred with {model_name}: {e}")
35
- # return None
36
-
37
- # # Main Streamlit app
38
- # def main():
39
- # st.title("Chatbot with Model Switching and Streaming")
40
-
41
- # # Initialize conversation history in session state
42
- # if "messages" not in st.session_state:
43
- # st.session_state.messages = []
44
-
45
- # # Display previous messages
46
- # for message in st.session_state.messages:
47
- # with st.chat_message(message["role"]):
48
- # st.markdown(message["content"])
49
-
50
- # # Get user input
51
- # prompt = st.chat_input("Say something")
52
-
53
- # if prompt:
54
- # # Add user message to the state
55
- # st.session_state.messages.append({"role": "user", "content": prompt})
56
- # with st.chat_message("user"):
57
- # st.markdown(prompt)
58
-
59
- # # Define model priority
60
- # models = ["gpt-4o", "gpt-4o-mini"] # Add more models as needed
61
-
62
- # # Get API key
63
- # api_key = get_api_key()
64
- # if not api_key:
65
- # return
66
-
67
- # full_response = ""
68
- # # Prepare messages for OpenAI:
69
- # openai_messages = st.session_state.messages
70
- # for model in models:
71
- # stream = generate_response(openai_messages, model, api_key) # Pass the messages
72
- # if stream:
73
- # with st.chat_message("assistant"):
74
- # message_placeholder = st.empty()
75
- # for chunk in stream:
76
- # if chunk.choices and chunk.choices[0].delta and chunk.choices[0].delta.content:
77
- # full_response += chunk.choices[0].delta.content
78
- # message_placeholder.markdown(full_response + "▌")
79
- # message_placeholder.markdown(full_response)
80
- # break # Break after successful response
81
- # full_response = "" # Reset for the next model attempt
82
-
83
- # if full_response:
84
- # # Add bot message to state
85
- # st.session_state.messages.append({"role": "assistant", "content": full_response})
86
-
87
- # if __name__ == "__main__":
88
- # main()
89
-
90
  import openai
91
  import os
92
 
93
- def get_available_models(api_key):
94
- """
95
- Retrieves and prints the names of all available models from the OpenAI API.
96
-
97
- Args:
98
- api_key (str): Your OpenAI API key.
99
- """
100
-
101
  try:
102
- client = openai.OpenAI(api_key=api_key) # Instantiate OpenAI client with the API key
103
-
104
- models = client.models.list()
105
-
106
- print("Available models:")
107
- for model in models.data:
108
- print(model.id) # Print the model ID (name)
109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  except openai.AuthenticationError as e:
111
- print(f"Authentication error: {e}")
 
112
  except Exception as e:
113
- print(f"An error occurred: {e}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
  if __name__ == "__main__":
116
- # Replace "YOUR_API_KEY" with your actual OpenAI API key, or get it from environment variables
117
- api_key = os.environ.get("API_KEY")
118
- if not api_key:
119
- print("Please set the OPENAI_API_KEY environment variable or replace 'YOUR_API_KEY' with your key.")
120
- else:
121
- get_available_models(api_key)
 
1
+ import streamlit as st
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  import openai
3
  import os
4
 
5
+ # Function to get the API key from Streamlit secrets
6
+ def get_api_key():
 
 
 
 
 
 
7
  try:
8
+ return st.secrets["API_KEY"]
9
+ except KeyError:
10
+ st.error("API_KEY not found in Streamlit secrets. Please add it.")
11
+ return None
 
 
 
12
 
13
+ # Function to interact with the OpenAI API with streaming
14
+ def generate_response(messages, model_name, api_key): # Modified to accept 'messages'
15
+ try:
16
+ client = openai.OpenAI(api_key=api_key) # Instantiate OpenAI client with api_key
17
+
18
+ stream = client.chat.completions.create(
19
+ model=model_name,
20
+ messages=messages, # Use the entire conversation history
21
+ stream=True,
22
+ )
23
+ return stream
24
+ except openai.APIError as e:
25
+ st.error(f"OpenAI API Error with {model_name}: {e}")
26
+ return None
27
+ except openai.RateLimitError as e:
28
+ st.error(f"OpenAI Rate Limit Error with {model_name}: {e}")
29
+ return None
30
  except openai.AuthenticationError as e:
31
+ st.error(f"OpenAI Authentication Error with {model_name}: {e}")
32
+ return None
33
  except Exception as e:
34
+ st.error(f"An unexpected error occurred with {model_name}: {e}")
35
+ return None
36
+
37
+ # Main Streamlit app
38
+ def main():
39
+ st.title("Chatbot with Model Switching and Streaming")
40
+
41
+ # Initialize conversation history in session state
42
+ if "messages" not in st.session_state:
43
+ st.session_state.messages = []
44
+
45
+ # Display previous messages
46
+ for message in st.session_state.messages:
47
+ with st.chat_message(message["role"]):
48
+ st.markdown(message["content"])
49
+
50
+ # Get user input
51
+ prompt = st.chat_input("Say something")
52
+
53
+ if prompt:
54
+ # Add user message to the state
55
+ st.session_state.messages.append({"role": "user", "content": prompt})
56
+ with st.chat_message("user"):
57
+ st.markdown(prompt)
58
+
59
+ # Define model priority
60
+ models = ["o1-preview", "o1-preview-2024-09-12","o1-mini","gpt-4o-mini","gpt-3.5-turbo"] # Add more models as needed
61
+
62
+ # Get API key
63
+ api_key = get_api_key()
64
+ if not api_key:
65
+ return
66
+
67
+ full_response = ""
68
+ # Prepare messages for OpenAI:
69
+ openai_messages = st.session_state.messages
70
+ for model in models:
71
+ stream = generate_response(openai_messages, model, api_key) # Pass the messages
72
+ if stream:
73
+ with st.chat_message("assistant"):
74
+ message_placeholder = st.empty()
75
+ for chunk in stream:
76
+ if chunk.choices and chunk.choices[0].delta and chunk.choices[0].delta.content:
77
+ full_response += chunk.choices[0].delta.content
78
+ message_placeholder.markdown(full_response + "▌")
79
+ message_placeholder.markdown(full_response)
80
+ break # Break after successful response
81
+ full_response = "" # Reset for the next model attempt
82
+
83
+ if full_response:
84
+ # Add bot message to state
85
+ st.session_state.messages.append({"role": "assistant", "content": full_response})
86
 
87
  if __name__ == "__main__":
88
+ main()