File size: 3,374 Bytes
7bd4e6e
8e0b6ea
 
7bd4e6e
 
 
8e0b6ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7bd4e6e
8e0b6ea
 
 
7bd4e6e
8e0b6ea
 
 
7bd4e6e
8e0b6ea
7bd4e6e
8e0b6ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7bd4e6e
8e0b6ea
 
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import os
import logging
from gradio_client import Client, GradioClientError

logger = logging.getLogger(__name__)

client = None

def _initialize_client():
    global client
    if client is None:
        try:
            logger.info("Initializing Gradio client for broadfield-dev/build-space...")
            client = Client("broadfield-dev/build-space")
            logger.info("Gradio client initialized successfully.")
        except Exception as e:
            logger.error(f"Failed to initialize Gradio client: {e}")
            client = None
    return client

def create_huggingface_space(owner: str, space_name: str, sdk: str, markdown_content: str):
    if not _initialize_client():
        return {"error": "Space builder client could not be initialized."}

    hf_token = os.getenv("HF_TOKEN")
    if not hf_token:
        return {"error": "Hugging Face token (HF_TOKEN) is not set in environment variables."}

    logger.info(f"SPACE_BUILDER: Calling /create_space for {owner}/{space_name}")
    try:
        result = client.predict(
            ui_api_token_from_textbox=hf_token,
            space_name_ui=space_name,
            owner_ui=owner,
            sdk_ui=sdk,
            markdown_input=markdown_content,
            api_name="/create_space"
        )
        logger.info(f"SPACE_BUILDER: API response for creation: {result}")
        return {"result": result}
    except GradioClientError as e:
        logger.error(f"SPACE_BUILDER: API Client Error during space creation: {e}")
        return {"error": f"API Client Error: {e}"}
    except Exception as e:
        logger.error(f"SPACE_BUILDER: An unexpected error occurred during space creation: {e}", exc_info=True)
        return {"error": f"An unexpected error occurred: {e}"}

def update_huggingface_space_file(owner: str, space_name: str, file_path: str, new_content: str, commit_message: str):
    if not _initialize_client():
        return {"error": "Space builder client could not be initialized."}

    hf_token = os.getenv("HF_TOKEN")
    if not hf_token:
        return {"error": "Hugging Face token (HF_TOKEN) is not set in environment variables."}

    logger.info(f"SPACE_BUILDER: Calling /update_space_file for {owner}/{space_name}/{file_path}")
    try:
        result = client.predict(
            ui_api_token_from_textbox=hf_token,
            space_name_ui=space_name,
            owner_ui=owner,
            file_path_in_repo=file_path,
            file_content=new_content,
            commit_message_ui=commit_message or f"Update {file_path}",
            api_name="/update_space_file"
        )
        logger.info(f"SPACE_BUILDER: API response for file update: {result}")
        return {"result": result}
    except GradioClientError as e:
        if "is not in the list of choices" in str(e):
             logger.error(f"SPACE_BUILDER: The file '{file_path}' may not exist or is not selectable in the target space.")
             return {"error": f"The file '{file_path}' could not be selected for update. It may not exist in the space."}
        logger.error(f"SPACE_BUILDER: API Client Error during file update: {e}")
        return {"error": f"API Client Error: {e}"}
    except Exception as e:
        logger.error(f"SPACE_BUILDER: An unexpected error occurred during file update: {e}", exc_info=True)
        return {"error": f"An unexpected error occurred: {e}"}