Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
#
|
| 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")
|