1
1
import os
2
2
import openai
3
- import random
4
3
import streamlit as st
5
4
from datetime import datetime
5
+ from langchain_openai import ChatOpenAI
6
+ from langchain_community .chat_models import ChatOllama
6
7
7
8
#decorator
8
9
def enable_chat_history (func ):
@@ -40,39 +41,56 @@ def display_msg(msg, author):
40
41
st .session_state .messages .append ({"role" : author , "content" : msg })
41
42
st .chat_message (author ).write (msg )
42
43
43
- def configure_openai ():
44
+ def choose_custom_openai_key ():
44
45
openai_api_key = st .sidebar .text_input (
45
46
label = "OpenAI API Key" ,
46
47
type = "password" ,
47
- value = st . session_state [ 'OPENAI_API_KEY' ] if 'OPENAI_API_KEY' in st . session_state else '' ,
48
- placeholder = "sk-... "
48
+ placeholder = "sk-..." ,
49
+ key = "SELECTED_OPENAI_API_KEY "
49
50
)
50
- if openai_api_key :
51
- st .session_state ['OPENAI_API_KEY' ] = openai_api_key
52
- os .environ ['OPENAI_API_KEY' ] = openai_api_key
53
- else :
51
+ if not openai_api_key :
54
52
st .error ("Please add your OpenAI API key to continue." )
55
53
st .info ("Obtain your key from this link: https://platform.openai.com/account/api-keys" )
56
54
st .stop ()
57
55
58
- model = "gpt-3.5-turbo "
56
+ model = "gpt-4o-mini "
59
57
try :
60
- client = openai .OpenAI ()
58
+ client = openai .OpenAI (api_key = openai_api_key )
61
59
available_models = [{"id" : i .id , "created" :datetime .fromtimestamp (i .created )} for i in client .models .list () if str (i .id ).startswith ("gpt" )]
62
60
available_models = sorted (available_models , key = lambda x : x ["created" ])
63
61
available_models = [i ["id" ] for i in available_models ]
64
62
65
63
model = st .sidebar .selectbox (
66
64
label = "Model" ,
67
65
options = available_models ,
68
- index = available_models . index ( st . session_state [ 'OPENAI_MODEL' ]) if 'OPENAI_MODEL' in st . session_state else 0
66
+ key = "SELECTED_OPENAI_MODEL"
69
67
)
70
- st .session_state ['OPENAI_MODEL' ] = model
71
68
except openai .AuthenticationError as e :
72
69
st .error (e .body ["message" ])
73
70
st .stop ()
74
71
except Exception as e :
75
72
print (e )
76
73
st .error ("Something went wrong. Please try again later." )
77
74
st .stop ()
78
- return model
75
+ return model , openai_api_key
76
+
77
+ def configure_llm ():
78
+ available_llms = ["gpt-4o-mini" ,"llama3:8b" ,"use your openai api key" ]
79
+ llm_opt = st .sidebar .radio (
80
+ label = "LLM" ,
81
+ options = available_llms ,
82
+ key = "SELECTED_LLM"
83
+ )
84
+
85
+ if llm_opt == "llama3:8b" :
86
+ llm = ChatOllama (model = "llama3" , base_url = st .secrets ["OLLAMA_ENDPOINT" ])
87
+ elif llm_opt == "gpt-4o-mini" :
88
+ llm = ChatOpenAI (model_name = llm_opt , temperature = 0 , streaming = True , api_key = st .secrets ["OPENAI_API_KEY" ])
89
+ else :
90
+ model , openai_api_key = choose_custom_openai_key ()
91
+ llm = ChatOpenAI (model_name = model , temperature = 0 , streaming = True , api_key = openai_api_key )
92
+ return llm
93
+
94
+ def sync_st_session ():
95
+ for k , v in st .session_state .items ():
96
+ st .session_state [k ] = v
0 commit comments