broadfield-dev commited on
Commit
7bd4e6e
·
verified ·
1 Parent(s): e14e06f

Create space_builder.py

Browse files
Files changed (1) hide show
  1. 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}"}