{"id":24278627,"url":"https://github.com/promptmixerdev/mix-tools-sdk","last_synced_at":"2025-10-07T00:17:13.861Z","repository":{"id":271950318,"uuid":"915049274","full_name":"PromptMixerDev/mix-tools-sdk","owner":"PromptMixerDev","description":"Python SDK for interacting with the Mix Tools API","archived":false,"fork":false,"pushed_at":"2025-01-11T22:41:36.000Z","size":54,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-01T03:52:45.958Z","etag":null,"topics":["agent","llm","tool"],"latest_commit_sha":null,"homepage":"https://mix.tools","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PromptMixerDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-10T21:20:09.000Z","updated_at":"2025-01-11T22:41:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"23cc7a38-567a-46f9-aa13-e11c44a6897e","html_url":"https://github.com/PromptMixerDev/mix-tools-sdk","commit_stats":null,"previous_names":["promptmixerdev/mix-tools-sdk"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PromptMixerDev/mix-tools-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PromptMixerDev%2Fmix-tools-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PromptMixerDev%2Fmix-tools-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PromptMixerDev%2Fmix-tools-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PromptMixerDev%2Fmix-tools-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PromptMixerDev","download_url":"https://codeload.github.com/PromptMixerDev/mix-tools-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PromptMixerDev%2Fmix-tools-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278700046,"owners_count":26030640,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","llm","tool"],"created_at":"2025-01-16T00:54:23.489Z","updated_at":"2025-10-07T00:17:13.839Z","avatar_url":"https://github.com/PromptMixerDev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mix Tools SDK\n\nA Python SDK for interacting with the Mix Tools API. This SDK provides a simple interface to list and execute tools in various formats including OpenAI, Anthropic, and Ollama.\n\nVisit [mix.tools](https://mix.tools) for the main website and [api.mix.tools](https://api.mix.tools) for API documentation.\n\n## Installation\n\n```bash\npip install mix-tools-sdk\n```\n\nOr with Poetry:\n\n```bash\npoetry add mix-tools-sdk\n```\n\n## Features\n\n- Async-first design using `httpx`\n- Support for multiple tool formats (default, OpenAI, Anthropic, Ollama)\n- Context manager support for proper resource cleanup\n- Comprehensive error handling\n- Logging support\n\n## Usage\n\n```python\nimport asyncio\nimport logging\nfrom mix_tools_sdk import MixToolsClient\n\n# Configure logging\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\nasync def main():\n    # Initialize client with custom base URL (optional)\n    async with MixToolsClient() as client:\n        # Check API health\n        health = await client.health_check()\n        logger.info(\"API health status: %s\", health[\"status\"])\n\n        # List tools with various filters\n        # Get all search-related tools\n        search_tools = await client.list_tools(tags=\"search\")\n        logger.info(\"Search tools: %s\", search_tools)\n\n        # Get academic search tools\n        academic_tools = await client.list_tools(tags=[\"search\", \"academic\"])\n        logger.info(\"Academic search tools: %s\", academic_tools)\n\n        # Get all tools from the ArXiv toolkit\n        arxiv_tools = await client.list_tools(toolkit=\"arxiv\")\n        logger.info(\"ArXiv toolkit tools: %s\", arxiv_tools)\n\n        # Combine filters with format\n        openai_search_tools = await client.list_tools(\n            format=\"openai\",\n            tags=\"search\"\n        )\n        logger.info(\"OpenAI format search tools: %s\", openai_search_tools)\n\n        # Execute a tool\n        result = await client.execute_tool(\n            \"text_transform\",\n            {\n                \"text\": \"hello world\",\n                \"operation\": \"upper\"\n            }\n        )\n        logger.info(\"Tool execution result: %s\", result)\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n## API Reference\n\n### MixToolsClient\n\nThe main client class for interacting with the Mix Tools API.\n\n#### Methods\n\n- `async health_check() -\u003e Dict[str, str]`\n  - Check the API health status\n  - Returns: `{\"status\": \"healthy\"}`\n\n- `async list_tools(format: Optional[ToolFormat] = None, tags: Optional[Union[str, List[str]]] = None, toolkit: Optional[str] = None) -\u003e Dict[str, Any]`\n  - List available tools with optional filtering\n  - Args:\n    - `format`: Optional format to return tools in (\"default\", \"openai\", \"anthropic\", \"ollama\")\n    - `tags`: Optional tag or list of tags to filter tools by. Tools must have all specified tags.\n    - `toolkit`: Optional toolkit name to filter tools by\n  - Returns: Dictionary containing list of tools in specified format\n\n- `async execute_tool(tool_name: str, properties: Dict[str, Any]) -\u003e Dict[str, Any]`\n  - Execute a tool with given properties\n  - Args:\n    - `tool_name`: Name of the tool to execute\n    - `properties`: Dictionary of property names and values\n  - Returns: Dictionary containing the tool execution result\n\n## Error Handling\n\nThe SDK uses `httpx.HTTPStatusError` for HTTP-related errors. All methods will raise appropriate exceptions when errors occur:\n\n- 404: Tool not found\n- 400: Invalid tool properties\n- 500: Server error\n\nExample error handling:\n\n```python\nfrom httpx import HTTPStatusError\n\nasync with MixToolsClient() as client:\n    try:\n        result = await client.execute_tool(\"nonexistent_tool\", {})\n    except HTTPStatusError as e:\n        if e.response.status_code == 404:\n            logger.error(\"Tool not found\")\n        else:\n            logger.error(\"HTTP error occurred: %s\", str(e))\n```\n\n## Development\n\n1. Clone the repository\n2. Install dependencies with Poetry:\n   ```bash\n   poetry install\n   ```\n3. Run tests:\n   ```bash\n   poetry run pytest\n   ```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpromptmixerdev%2Fmix-tools-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpromptmixerdev%2Fmix-tools-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpromptmixerdev%2Fmix-tools-sdk/lists"}