Nolist commited on
Commit
20b0397
·
verified ·
1 Parent(s): def5355

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -5
app.py CHANGED
@@ -96,14 +96,69 @@ def write_next_step(wound_type: str):
96
  # -----------------------
97
  DEFAULT_MODEL = os.environ.get("OPENAI_MODEL", "gpt-4o-mini")
98
 
99
- # Prefer secure sources for API key:
100
- # 1) Environment variable OPENAI_API_KEY
101
- # 2) Streamlit secrets (if deployed to Streamlit sharing / Hugging Face etc)
102
- # 3) Temporary UI key stored in session_state (not persisted to disk)
103
-
104
  if "ui_api_key" not in st.session_state:
105
  st.session_state.ui_api_key = None
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
 
108
  def get_effective_api_key():
109
  env_key = os.environ.get("OPENAI_API_KEY")
 
96
  # -----------------------
97
  DEFAULT_MODEL = os.environ.get("OPENAI_MODEL", "gpt-4o-mini")
98
 
99
+ # Initialize session state for temporary UI key
 
 
 
 
100
  if "ui_api_key" not in st.session_state:
101
  st.session_state.ui_api_key = None
102
 
103
+ def get_effective_api_key():
104
+ # Prefer env var
105
+ env_key = os.environ.get("OPENAI_API_KEY")
106
+ if env_key:
107
+ return env_key
108
+
109
+ # Try Streamlit secrets (handle nested or flat)
110
+ secret_key = None
111
+ if hasattr(st, "secrets"):
112
+ try:
113
+ # Nested under [openai]
114
+ secret_key = st.secrets["openai"]["OPENAI_API_KEY"]
115
+ except KeyError:
116
+ # Flat key
117
+ secret_key = st.secrets.get("OPENAI_API_KEY")
118
+
119
+ # Fallback to UI temp key
120
+ return secret_key or st.session_state.ui_api_key
121
+
122
+ def get_effective_model():
123
+ # Prefer env var
124
+ env_model = os.environ.get("OPENAI_MODEL")
125
+ if env_model:
126
+ return env_model
127
+
128
+ # Try Streamlit secrets (handle nested or flat)
129
+ secret_model = None
130
+ if hasattr(st, "secrets"):
131
+ try:
132
+ # Nested under [openai]
133
+ secret_model = st.secrets["openai"]["OPENAI_MODEL"]
134
+ except KeyError:
135
+ # Flat key
136
+ secret_model = st.secrets.get("OPENAI_MODEL")
137
+
138
+ # Fallback to default
139
+ return secret_model or DEFAULT_MODEL
140
+
141
+ def make_openai_client(api_key):
142
+ if not api_key:
143
+ return None, "OpenAI API key not set. Provide OPENAI_API_KEY env var, set in secrets, or paste a temporary key in the UI (not recommended for production)."
144
+
145
+ try:
146
+ # Prefer modern OpenAI client
147
+ from openai import OpenAI
148
+ client = OpenAI(api_key=api_key)
149
+ return client, None
150
+ except ImportError:
151
+ try:
152
+ # Fallback to legacy openai
153
+ import openai
154
+ openai.api_key = api_key
155
+ # Return the module as 'client' (downstream code must adapt calls)
156
+ return openai, None
157
+ except ImportError:
158
+ return None, "openai package not installed. Add 'openai' to requirements.txt and rebuild/deploy."
159
+ except Exception as e:
160
+ return None, f"Failed to create OpenAI client: {str(e)}"
161
+
162
 
163
  def get_effective_api_key():
164
  env_key = os.environ.get("OPENAI_API_KEY")