| from huggingface_hub import HfApi, InferenceClient |
| from smolagents import Tool |
|
|
| class SearchHfSpacesTool(Tool): |
| name = "search_hf_spaces" |
| description = "Searches for Hugging Face Spaces that match the given query." |
| inputs = { |
| "query": { |
| "type": "string", |
| "description": "The search query.", |
| } |
| } |
| output_type = "string" |
|
|
| def forward(self, query: str) -> str: |
| """ |
| Searches for Hugging Face Spaces that match the given query. |
| |
| Args: |
| query: The search query. |
| |
| Returns: |
| A string containing a list of matching Spaces, including their ID and description. |
| """ |
| api = HfApi() |
| spaces = api.list_spaces(search=query) |
| return "\n".join([f"- {space.id}: {space.card_data.get('title', '')}" for space in spaces]) |
|
|
| class CallHfSpaceApiTool(Tool): |
| name = "call_hf_space_api" |
| description = "Calls the API of a Hugging Face Space." |
| inputs = { |
| "space_id": { |
| "type": "string", |
| "description": "The ID of the Space to call.", |
| }, |
| "args": { |
| "type": "array", |
| "description": "Positional arguments to pass to the Space's API.", |
| }, |
| "kwargs": { |
| "type": "object", |
| "description": "Keyword arguments to pass to the Space's API.", |
| }, |
| } |
| output_type = "string" |
|
|
| def forward(self, space_id: str, *args, **kwargs) -> str: |
| """ |
| Calls the API of a Hugging Face Space. |
| |
| Args: |
| space_id: The ID of the Space to call. |
| *args: Positional arguments to pass to the Space's API. |
| **kwargs: Keyword arguments to pass to the Space's API. |
| |
| Returns: |
| The result of the API call. |
| """ |
| client = InferenceClient() |
| try: |
| |
| |
| result = client.predict(repo_id=space_id, *args, **kwargs) |
| return str(result) |
| except Exception as e: |
| return f"Error calling Space API: {e}" |