File size: 2,211 Bytes
7bd4e6e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import requests
import logging
import os

logger = logging.getLogger(__name__)

SPACE_BUILDER_API_URL = os.getenv("SPACE_BUILDER_API_URL", "https://broadfield-dev-build-space.hf.space/run/predict")

def build_huggingface_space(build_prompt: str):
    """
    Calls the build-space API to generate a Hugging Face Space.

    Args:
        build_prompt: A string describing the space to be built.

    Returns:
        A dictionary containing the result or an error message.
    """
    logger.info(f"SPACE_BUILDER: Calling API with prompt: '{build_prompt[:100]}...'")
    payload = {"data": [build_prompt]}
    
    try:
        # A long timeout is set as space building can take time.
        response = requests.post(SPACE_BUILDER_API_URL, json=payload, timeout=300) 
        response.raise_for_status()
        
        response_data = response.json()
        
        if "data" in response_data and isinstance(response_data["data"], list) and len(response_data["data"]) > 0:
            result_text = response_data["data"][0]
            logger.info(f"SPACE_BUILDER: Successfully received response: {result_text}")
            return {"prompt": build_prompt, "result": result_text}
        else:
            logger.error(f"SPACE_BUILDER: API response in unexpected format: {response_data}")
            return {"prompt": build_prompt, "error": "API response format is invalid."}
            
    except requests.exceptions.HTTPError as e:
        error_message = f"HTTP error {e.response.status_code}: {e.response.text[:200]}"
        logger.error(f"SPACE_BUILDER: {error_message}")
        return {"prompt": build_prompt, "error": error_message}
    except requests.exceptions.Timeout:
        logger.error("SPACE_BUILDER: API call timed out.")
        return {"prompt": build_prompt, "error": "The request timed out."}
    except requests.exceptions.RequestException as e:
        logger.error(f"SPACE_BUILDER: Request failed: {e}")
        return {"prompt": build_prompt, "error": f"Request failed: {e}"}
    except Exception as e:
        logger.error(f"SPACE_BUILDER: An unexpected error occurred: {e}", exc_info=True)
        return {"prompt": build_prompt, "error": f"An internal error occurred: {e}"}