simpletool
Project description
Simpletool
SimpleTool is a lightweight, async-first Python framework designed for creating simple, strict, and explicit type-safe tools with minimal complexity. It embodies some of the Python design Zen principles, such as "Simple is better than complex" and "Explicit is better than implicit".
Overview
Simpletool is a powerful SDK that provides a structured approach to building tools with:
- Standardized input and output content types
- Automatic JSON schema generation
- Async support
- Environment variable handling
- Timeout management (def. 60s)
Example
Check out the tool_example.py to see how to use Simpletool to create a simple, type-safe tool.
Architecture Overview
classDiagram
class Content {
<<abstract>>
+type: Literal["text", "image", "file", "error"]
AutoValidation
}
class TextContent {
+text: str
}
class ImageContent {
+data: str
+description: str
+mime_type: str
}
class FileContent {
+data: str
+file_name: str
+mime_type: str
AutoValidation
}
class ErrorContent {
+code: int
+message: str
+data: Any
}
class SimpleTool {
<<abstract>>
+name: str
+description: str
+input_model: Type[SimpleInputModel]
+input_schema: Dict (auto generated)
+output_schema: Dict (auto generated)
+get_env(arguments: dict, prefix: str)
+run(arguments: dict) Sequence[Content]
}
class SimpleInputModel {
<<interface>>
AutoValidation
}
SimpleTool <-- SimpleInputModel: arguments (Dict[str, Any])
SimpleTool <-- SimpleInputModel: input_model (Type[SimpleInputModel])_
Content --|> TextContent
Content --|> ImageContent
Content --|> FileContent
Content --|> ErrorContent
SimpleTool --> Content: returns Sequence[Content]
Core Components
SimpleTool Base Class and Key Features
The SimpleTool class provides a robust framework for building tools with the following key features:
-
Input Validation:
- Uses Pydantic models for strict input validation (SimpleInputModel)
- Automatic type checking and conversion based on Pydantic models
- SimpleInputModel have own model_json_schema (removes
titlesanddescriptionsfrom the schema) for easy dump to text schema
-
Output Type Management:
- Supports multiple content types (text, image, file, resource, error) for flexible output representation
- Strict output type checking allow List or Seqence of Content Types Objects
-
Dynamic Schema Generation:
- Input model needs to be defined as child of
SimpleInputModelType and assign toinput_modelattribute insideSimpleTool- them magic begins and automaticly:- Automatically creates output JSON schemas (
output_schema/output_model) based on the definedrunmethod typing - Automatically creates input JSON schemas (
input_schema) based on the input model
- Automatically creates output JSON schemas (
- Input model needs to be defined as child of
-
Async Execution:
- Native async/await support
- Configurable timeout management
- Contex manager for easy resource management release
-
Environment Integration:
- Easy retrieval of environment variables (
get_env) - Support for random API key selection from provided list (
get_env)
- Easy retrieval of environment variables (
Content Types
Simpletool defines several content types to standardize tool inputs and outputs:
TextContent: Represents text-based contentImageContent: Handles base64 encoded images with optional metadataFileContent: Represents files with base64 encoded dataResourceContent: Manages external resource referencesErrorContent: Provides structured error reportingBoolContents: Simple boolean content type
Installation
Install the package using pip:
pip install simpletool
Quick Start
Creating a Tool
from simpletool import SimpleTool, SimpleInputModel, Sequence, Field
from simpletool.types import TextContent
class InputModel(SimpleInputModel):
name: str = Field(description="Name to greet")
class MyTool(SimpleTool):
name = "greeting_tool"
description = "A simple greeting tool"
input_model = InputModel
async def run(self, arguments: dict) -> Sequence[TextContent]:
# Validation and parsing of input arguments
arg: InputModel = InputModel(**arguments)
return [TextContent(text=f"Hello, {arg.name}!")]
Development Guidelines
- Inherit Tool model from
SimpleTool - Define an
input_modelusing Pydantic (SimpleInputModel) - Implement the
runmethod - Return a list/sequence of content types
- Use async/await for asynchronous operations
Contributing
Contributions are welcome! Please follow Python best practices and maintain the existing code style.
License
This project is licensed under the MIT License.
Contact
Contributions are welcome! Please submit a pull request with your changes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file simpletool-0.0.12.tar.gz.
File metadata
- Download URL: simpletool-0.0.12.tar.gz
- Upload date:
- Size: 17.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68707a7014b17c02f651e5f2a0b68d7c384a20b93887f08f945c2e213df878a7
|
|
| MD5 |
8337a3d58961a52fc5f9e7acdbe00c38
|
|
| BLAKE2b-256 |
09cd47824bd7d80b74f5a57aafa0a3086058db516365af964f93d42ceaf2c479
|
Provenance
The following attestation bundles were made for simpletool-0.0.12.tar.gz:
Publisher:
publish.yml on nchekwa/simpletool-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
simpletool-0.0.12.tar.gz -
Subject digest:
68707a7014b17c02f651e5f2a0b68d7c384a20b93887f08f945c2e213df878a7 - Sigstore transparency entry: 160822970
- Sigstore integration time:
-
Permalink:
nchekwa/simpletool-python@7f8e251c6d49aa900ecf5c7fa80540af7e6d7edf -
Branch / Tag:
refs/tags/v0.0.12 - Owner: https://github.com/nchekwa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7f8e251c6d49aa900ecf5c7fa80540af7e6d7edf -
Trigger Event:
release
-
Statement type:
File details
Details for the file simpletool-0.0.12-py2.py3-none-any.whl.
File metadata
- Download URL: simpletool-0.0.12-py2.py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21ad8994b2114ffed82dc322e9c4d2bb8982b5c091d7f3496392e7ae36ef5d46
|
|
| MD5 |
40de492bbac70b0fc45c0d4f56441a25
|
|
| BLAKE2b-256 |
2b24195ce63ef935a40108d775fafa3c29d93262dd34c6a14a2021522cf699b6
|
Provenance
The following attestation bundles were made for simpletool-0.0.12-py2.py3-none-any.whl:
Publisher:
publish.yml on nchekwa/simpletool-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
simpletool-0.0.12-py2.py3-none-any.whl -
Subject digest:
21ad8994b2114ffed82dc322e9c4d2bb8982b5c091d7f3496392e7ae36ef5d46 - Sigstore transparency entry: 160822974
- Sigstore integration time:
-
Permalink:
nchekwa/simpletool-python@7f8e251c6d49aa900ecf5c7fa80540af7e6d7edf -
Branch / Tag:
refs/tags/v0.0.12 - Owner: https://github.com/nchekwa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7f8e251c6d49aa900ecf5c7fa80540af7e6d7edf -
Trigger Event:
release
-
Statement type: