Spaces:
Runtime error
Runtime error
Create space_builder.py
Browse files- tools/space_builder.py +49 -0
tools/space_builder.py
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import requests
|
2 |
+
import logging
|
3 |
+
import os
|
4 |
+
|
5 |
+
logger = logging.getLogger(__name__)
|
6 |
+
|
7 |
+
SPACE_BUILDER_API_URL = os.getenv("SPACE_BUILDER_API_URL", "https://broadfield-dev-build-space.hf.space/run/predict")
|
8 |
+
|
9 |
+
def build_huggingface_space(build_prompt: str):
|
10 |
+
"""
|
11 |
+
Calls the build-space API to generate a Hugging Face Space.
|
12 |
+
|
13 |
+
Args:
|
14 |
+
build_prompt: A string describing the space to be built.
|
15 |
+
|
16 |
+
Returns:
|
17 |
+
A dictionary containing the result or an error message.
|
18 |
+
"""
|
19 |
+
logger.info(f"SPACE_BUILDER: Calling API with prompt: '{build_prompt[:100]}...'")
|
20 |
+
payload = {"data": [build_prompt]}
|
21 |
+
|
22 |
+
try:
|
23 |
+
# A long timeout is set as space building can take time.
|
24 |
+
response = requests.post(SPACE_BUILDER_API_URL, json=payload, timeout=300)
|
25 |
+
response.raise_for_status()
|
26 |
+
|
27 |
+
response_data = response.json()
|
28 |
+
|
29 |
+
if "data" in response_data and isinstance(response_data["data"], list) and len(response_data["data"]) > 0:
|
30 |
+
result_text = response_data["data"][0]
|
31 |
+
logger.info(f"SPACE_BUILDER: Successfully received response: {result_text}")
|
32 |
+
return {"prompt": build_prompt, "result": result_text}
|
33 |
+
else:
|
34 |
+
logger.error(f"SPACE_BUILDER: API response in unexpected format: {response_data}")
|
35 |
+
return {"prompt": build_prompt, "error": "API response format is invalid."}
|
36 |
+
|
37 |
+
except requests.exceptions.HTTPError as e:
|
38 |
+
error_message = f"HTTP error {e.response.status_code}: {e.response.text[:200]}"
|
39 |
+
logger.error(f"SPACE_BUILDER: {error_message}")
|
40 |
+
return {"prompt": build_prompt, "error": error_message}
|
41 |
+
except requests.exceptions.Timeout:
|
42 |
+
logger.error("SPACE_BUILDER: API call timed out.")
|
43 |
+
return {"prompt": build_prompt, "error": "The request timed out."}
|
44 |
+
except requests.exceptions.RequestException as e:
|
45 |
+
logger.error(f"SPACE_BUILDER: Request failed: {e}")
|
46 |
+
return {"prompt": build_prompt, "error": f"Request failed: {e}"}
|
47 |
+
except Exception as e:
|
48 |
+
logger.error(f"SPACE_BUILDER: An unexpected error occurred: {e}", exc_info=True)
|
49 |
+
return {"prompt": build_prompt, "error": f"An internal error occurred: {e}"}
|