Skip to main content

A framework for chaining AWS services using the chain of responsibility pattern

Project description

awschain

awschain is a Python package that provides a flexible and extensible implementation of the Chain of Responsibility design pattern. It allows users to chain together multiple processing steps in a sequence of handlers, making it easier to create dynamic and modular processing pipelines. This package is ideal for scenarios where various operations need to be applied in sequence, such as file processing, API interactions, and data transformations.

Features

  • Chain of Responsibility Pattern: Easily define processing chains with different handlers performing specialized tasks.
  • Modular and Extensible: Customize the chain by adding or removing handlers as needed.
  • Predefined Handlers: A set of built-in handlers is provided for common tasks.
  • Dynamic Handler Discovery: Automatically identify and instantiate handlers using the Factory pattern.
  • Seamless Integration: Designed to integrate with larger applications, particularly when task delegation and flexible processing pipelines are required.

Installation

You can install awschain directly from PyPI:

pip install awschain

Configuration

Create a config.yaml file in your project root:

# config.yaml
DEBUG: False

# Custom handlers location
custom_handlers_path: "handlers"

# AWS Specific configuration
BEDROCK_ASSUME_ROLE: "None"
AWS_DEFAULT_REGION: "us-east-1"

# Amazon Transcribe Settings
# Amazon S3 bucket used for Amazon Transcribe
BUCKET_NAME: "your-s3-bucket-name"
S3_FOLDER: "uploads/"
OUTPUT_FOLDER: "transcriptions/"

# Local download folder
DIR_STORAGE: "./downloads"

# Amazon Bedrock Settings
AMAZON_BEDROCK_MODEL_ID: "anthropic.claude-3-5-sonnet-20240620-v1:0"
AMAZON_BEDROCK_MODEL_PROPS: '{"max_tokens":4096, "anthropic_version": "bedrock-2023-05-31", "messages": [{"role": "user", "content": ""}]}'
AMAZON_BEDROCK_PROMPT_TEMPLATE: "{prompt_text}"
AMAZON_BEDROCK_PROMPT_INPUT_VAR: "$.messages[0].content"
AMAZON_BEDROCK_OUTPUT_JSONPATH: "$.content[0].text"

Load the configuration before using handlers:

from awschain import ConfigLoader

ConfigLoader.load_config("/path/to/config.yaml")

Usage

Example Use Case

Let’s say you want to process files by first reading their content, performing a summarization using Generative AI, and then writing the results to another location. You can achieve this by defining a chain with three handlers: LocalFileReaderHandler, PromptHandler, AmazonBedrockHandler, and LocalFileWriterHandler.

from awschain import HandlerFactory, ConfigLoader

# Load your configuration
ConfigLoader.load_config("/path/to/config.yaml")

# Create the handlers
reader = HandlerFactory.get_handler("LocalFileReaderHandler")
prompt_handler = HandlerFactory.get_handler("PromptHandler")
transformer = HandlerFactory.get_handler("AmazonBedrockHandler")
writer = HandlerFactory.get_handler("LocalFileWriterHandler")

# Set up the chain
reader.set_next(prompt_handler).set_next(transformer).set_next(writer)

# Please store your prompt in your root of your project in prompts folder. Example: prompts/default_prompt.txt

# Define the request
request = {"file_path": "example.txt", "write_file_path": "output.txt", "prompt": "default_prompt"}

# Execute the chain
reader.handle(request)

Built-in Handlers

awschain comes with several predefined handlers that can be used right out of the box. Examples include:

Readers:

  • LocalFileReaderHandler: Handles local audio, video, and text files for processing.

  • S3ReaderHandler: Manages the reading and downloading of S3 objects (files) from Amazon S3. = HTTPHandler: Generic HTTP handler that allows you to fetch HTML data from http(s) endpoints. It uses BeautifulSoup to clean HTML tags.

  • PDFReaderHandler: Extracts text from PDF documents for summarization.

  • MicrosoftExcelReaderHandler: Extract text from Microsoft Excel documents.

  • MicrosoftWordReaderHandler: Extract text from Microsoft Word documents.

  • QuipReaderHandler: Extract text from Quip document.

  • YouTubeReaderHandler: Downloads videos from YouTube URLs and extracts audio.

Processors:

  • AmazonBedrockHandler: Summarizes text content using Amazon Bedrock.
  • AmazonBedrockChatHandler: Used to perform interactive chat with Amazon Bedrock using the messages API.
  • AmazonComprehendInsightsHandler: Extract valuable insights from your data using Amazon Comprehend NLP capabilities.
  • AmazonComprehendPIIHandler, AmazonComprehendPIITokenizeHandler and AmazonComprehendPIIUntokenizeHandler: Used to detect, tokenize and untokenize PII data in your text retaining the context and allowing downstream services such as Bedrock to process the data without PII.
  • AmazonTranscriptionHandler: Transcribes audio files into text using Amazon Transcribe.
  • AmazonTextractHandler: Extracts text from images such as .jpg, .png, .tiff
  • HTMLCleanerHandler: Used to clean HTML tags when consuming web page / HTML documents.
  • PromptHandler: Uses a minimalistic prompt framework - all your prompts can be stored in the prompts/ folder and you can select which prompt to use when invoking the main.py.

Writers:

  • S3WriterHandler: Manages the uploading of of S3 objects (files) to Amazon S3.
  • LocalFileWriterHandler: Writes output into a local file.
  • ClipboardWriterHandler: Writes output into clipboard.

You can also create your own custom handlers by extending the base Handler class.

Extending awschain

If you need to add custom functionality, you can extend the framework by writing custom handlers and integrating them into the chain.

To create a custom handler, simply subclass the AbstractHandler class and implement the handle method:

from awschain.handlers import AbstractHandler

class CustomHandler(AbstractHandler):
    def handle(self, request):
        # Process the request
        if request.get("custom"):
            print("Handling custom request.")
        # Pass to the next handler in the chain if applicable
        return super().handle(request)

Store the custom handler in a folder and update your config.yaml to point to the custom handlers folder. The framewokr wiill automatically detect the new handler, then you can use it through the HandlerFacotry.get_hanlder method.

my_hanlder = HandlerFactory.get_handler("CustomHandler")

You can also force update the HandlerFacotry local cache if you are dynamically generating handlers. In this case just invoke:

HandlerFacotry.discover_handlers()

Contributing

Contributions are welcome! Feel free to open an issue or submit a pull request if you have ideas to improve awschain.

License

awschain is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

awschain-0.1.1.4.tar.gz (37.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

awschain-0.1.1.4-py3-none-any.whl (50.5 kB view details)

Uploaded Python 3

File details

Details for the file awschain-0.1.1.4.tar.gz.

File metadata

  • Download URL: awschain-0.1.1.4.tar.gz
  • Upload date:
  • Size: 37.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for awschain-0.1.1.4.tar.gz
Algorithm Hash digest
SHA256 988fb60ea4bf7427a8c823e54f26440ba30a7c20b16742b1fee0849c1b99ea91
MD5 232def47e6ce0461322338a01e683af2
BLAKE2b-256 d76d95231d7500b0fa0bad4c9e3b71464ea741ad8f595370a400de7c5541ac7f

See more details on using hashes here.

File details

Details for the file awschain-0.1.1.4-py3-none-any.whl.

File metadata

  • Download URL: awschain-0.1.1.4-py3-none-any.whl
  • Upload date:
  • Size: 50.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for awschain-0.1.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0b264e6b9f311e3f5aaa2c100212fe399bc8965481274b64ec497383e0d11d2f
MD5 7c288b3d93b4f86c3c02ac0dc6ed2cfb
BLAKE2b-256 b770809381a27bf93875af22c36412630e1e81634d6a197a015e1cf5a4482ccd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page