JackRabbit
commited on
Commit
·
253cf58
1
Parent(s):
b644be2
api updates
Browse files
app.py
CHANGED
|
@@ -98,19 +98,14 @@ def run_api(predictor):
|
|
| 98 |
'API mode' for this Streamlit app.
|
| 99 |
Expects a query param ?api=1&image_url=<PUBLIC_IMAGE_URL>
|
| 100 |
|
| 101 |
-
Example usage
|
| 102 |
-
curl
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
>>> import requests
|
| 106 |
-
>>> response = requests.get("https://your-username-your-app.hf.space/?api=1&image_url=...")
|
| 107 |
-
>>> print(response.text) # prints the entire HTML with JSON
|
| 108 |
-
# or sometimes:
|
| 109 |
-
>>> data = response.json() # may work depending on how the client interprets the response
|
| 110 |
-
>>> print(data)
|
| 111 |
"""
|
| 112 |
-
|
| 113 |
-
|
|
|
|
| 114 |
|
| 115 |
if not image_url:
|
| 116 |
st.json({"error": "No 'image_url' provided. Usage: ?api=1&image_url=<URL>"})
|
|
@@ -128,7 +123,7 @@ def run_api(predictor):
|
|
| 128 |
|
| 129 |
image_bytes = response.content
|
| 130 |
# Check file size (limit 10MB)
|
| 131 |
-
image_size_mb = len(image_bytes)/(1024*1024)
|
| 132 |
if image_size_mb > 10:
|
| 133 |
st.json({"error": f"Image size {image_size_mb:.2f}MB exceeds 10MB limit."})
|
| 134 |
st.stop()
|
|
@@ -165,13 +160,14 @@ def run_api(predictor):
|
|
| 165 |
else:
|
| 166 |
prediction_label = "Vespidae (wasp/hornet)"
|
| 167 |
|
| 168 |
-
# Return results as JSON
|
| 169 |
st.json({
|
| 170 |
"honeybee_score": honeybee_score,
|
| 171 |
"bumblebee_score": bumblebee_score,
|
| 172 |
"vespidae_score": vespidae_score,
|
| 173 |
"prediction_label": prediction_label
|
| 174 |
})
|
|
|
|
| 175 |
st.stop()
|
| 176 |
|
| 177 |
def run_ui(predictor):
|
|
@@ -231,7 +227,7 @@ def main():
|
|
| 231 |
predictor = load_model()
|
| 232 |
|
| 233 |
# Decide whether we are in 'API mode' or normal UI mode
|
| 234 |
-
query_params = st.experimental_get_query_params
|
| 235 |
if "api" in query_params:
|
| 236 |
run_api(predictor)
|
| 237 |
else:
|
|
|
|
| 98 |
'API mode' for this Streamlit app.
|
| 99 |
Expects a query param ?api=1&image_url=<PUBLIC_IMAGE_URL>
|
| 100 |
|
| 101 |
+
Example usage:
|
| 102 |
+
curl "https://YOUR-SPACE.hf.space/?api=1&image_url=<some_image_url>"
|
| 103 |
+
|
| 104 |
+
WARNING: You will still get HTML with embedded JSON. That's a Streamlit limitation.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
"""
|
| 106 |
+
# Use st.query_params (not st.experimental_get_query_params)
|
| 107 |
+
params = st.query_params
|
| 108 |
+
image_url = params.get("image_url", [None])[0] # `query_params` returns dict of lists
|
| 109 |
|
| 110 |
if not image_url:
|
| 111 |
st.json({"error": "No 'image_url' provided. Usage: ?api=1&image_url=<URL>"})
|
|
|
|
| 123 |
|
| 124 |
image_bytes = response.content
|
| 125 |
# Check file size (limit 10MB)
|
| 126 |
+
image_size_mb = len(image_bytes) / (1024 * 1024)
|
| 127 |
if image_size_mb > 10:
|
| 128 |
st.json({"error": f"Image size {image_size_mb:.2f}MB exceeds 10MB limit."})
|
| 129 |
st.stop()
|
|
|
|
| 160 |
else:
|
| 161 |
prediction_label = "Vespidae (wasp/hornet)"
|
| 162 |
|
| 163 |
+
# Return results as JSON, but note that Streamlit wraps this in HTML
|
| 164 |
st.json({
|
| 165 |
"honeybee_score": honeybee_score,
|
| 166 |
"bumblebee_score": bumblebee_score,
|
| 167 |
"vespidae_score": vespidae_score,
|
| 168 |
"prediction_label": prediction_label
|
| 169 |
})
|
| 170 |
+
# Stop execution so the normal UI won't render
|
| 171 |
st.stop()
|
| 172 |
|
| 173 |
def run_ui(predictor):
|
|
|
|
| 227 |
predictor = load_model()
|
| 228 |
|
| 229 |
# Decide whether we are in 'API mode' or normal UI mode
|
| 230 |
+
query_params = st.query_params # Replaces st.experimental_get_query_params
|
| 231 |
if "api" in query_params:
|
| 232 |
run_api(predictor)
|
| 233 |
else:
|