Skip to main content

DataKnobs FSM

Finite State Machine framework with data modes, resource management, and streaming support.

Features

  • Multiple APIs: SimpleFSM, AsyncSimpleFSM, and AdvancedFSM for different use cases
  • Data Handling Modes: COPY, REFERENCE, and DIRECT modes for flexible data management
  • Resource Management: Built-in support for databases, files, HTTP services, and vector stores
  • Streaming Support: Process large datasets with chunking and backpressure handling
  • Advanced Debugging: Step-by-step execution, breakpoints, and execution hooks
  • Flexible Configuration: YAML/JSON configuration with schema validation
  • Built-in Functions: Library of common validation and transformation functions

Installation

pip install dataknobs-fsm

Quick Start

Simple FSM

from dataknobs_fsm import SimpleFSM
from dataknobs_fsm.core.data_modes import DataHandlingMode

# Define configuration
config = {
    "name": "data_pipeline",
    "states": [
        {"name": "start", "is_start": True},
        {"name": "process"},
        {"name": "end", "is_end": True}
    ],
    "arcs": [
        {
            "from": "start",
            "to": "process",
            "transform": {
                "type": "inline",
                "code": "lambda data, ctx: {**data, 'processed': True}"
            }
        },
        {"from": "process", "to": "end"}
    ]
}

# Create and run FSM
fsm = SimpleFSM(config, data_mode=DataHandlingMode.COPY)
result = fsm.process({"input": "data"})
print(f"Result: {result['data']}")

Advanced FSM with Debugging

from dataknobs_fsm import AdvancedFSM, ExecutionMode
import asyncio

async def debug_example():
    # Create FSM with debug mode
    fsm = AdvancedFSM(
        "config.yaml",
        execution_mode=ExecutionMode.DEBUG
    )

    # Add breakpoint
    fsm.add_breakpoint("process")

    # Create context and run
    context = fsm.create_context({"input": "data"})
    await fsm.run_until_breakpoint(context)
    print(f"Stopped at: {context.current_state}")

    # Continue execution
    await fsm.step(context)

asyncio.run(debug_example())

Examples

The examples/ directory contains comprehensive examples:

Data Processing Examples

  • data_pipeline_example.py - Data validation and transformation pipeline
  • data_validation_pipeline.py - Data quality validation workflow
  • database_etl.py - Complete ETL pipeline with transaction management
  • large_file_processor.py - Memory-efficient large file processing
  • end_to_end_streaming.py - Streaming pipeline demonstration

Advanced Features

  • advanced_debugging.py - Full debugging features demonstration
  • advanced_debugging_simple.py - Simplified debugging example

Text Processing

  • normalize_file_example.py - Text file normalization with streaming
  • normalize_file_with_regex.py - Advanced regex transformations
  • test_regex_yaml.py - Testing script for YAML regex configurations

Configuration Examples

  • regex_transforms.yaml - Field transformation workflows
  • regex_workflow.yaml - Pattern extraction and masking configurations

Running Examples

# Navigate to the FSM package
cd packages/fsm

# Run the database ETL example
uv run python examples/database_etl.py

# Run the data processing pipeline
uv run python examples/data_pipeline_example.py

# Run streaming example
uv run python examples/end_to_end_streaming.py

# Run with custom parameters
uv run python examples/database_etl.py --batch-size 500

Data Handling Modes

The FSM framework provides three data handling modes:

  • COPY Mode: Creates deep copies of data for each state, ensuring isolation
  • REFERENCE Mode: Uses lazy loading with optimistic locking for memory efficiency
  • DIRECT Mode: In-place modifications for maximum performance (single-threaded only)
from dataknobs_fsm import SimpleFSM
from dataknobs_fsm.core.data_modes import DataHandlingMode

# Use COPY mode for safety
fsm = SimpleFSM(config, data_mode=DataHandlingMode.COPY)

# Use REFERENCE mode for large datasets
fsm = SimpleFSM(config, data_mode=DataHandlingMode.REFERENCE)

# Use DIRECT mode for performance
fsm = SimpleFSM(config, data_mode=DataHandlingMode.DIRECT)

LLM Integration

For LLM-specific integrations, workflows, and examples, please see the dataknobs-llm package:

  • FSM Integration Module: dataknobs_llm.fsm_integration
  • LLM Workflow Patterns: RAG pipelines, chain-of-thought, multi-agent systems
  • Conversation Examples: FSM-based conversational AI systems
  • Documentation: See packages/llm/README.md for FSM integration guide

The LLM package provides comprehensive LLM abstractions, providers, and FSM integration capabilities.

Documentation

For detailed documentation, see:

Testing

Run the tests with:

cd packages/fsm
uv run pytest tests/ -v

Development

This package is part of the DataKnobs ecosystem. For development setup and guidelines, see the main repository README.

License

Licensed under the same terms as the DataKnobs project.

Download files

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

Source Distribution

dataknobs_fsm-0.4.0.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

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

dataknobs_fsm-0.4.0-py3-none-any.whl (328.0 kB view details)

Uploaded Python 3

File details

Details for the file dataknobs_fsm-0.4.0.tar.gz.

File metadata

  • Download URL: dataknobs_fsm-0.4.0.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for dataknobs_fsm-0.4.0.tar.gz
Algorithm Hash digest
SHA256 2a0317c8cfb409098e9742e90e4bfe29ce7e2ad22fc2b30cc83a898b18c4e27e
MD5 5a5ceff1e95ebc7b0397c1571e7bd0f1
BLAKE2b-256 636c4488f3607ecb9a4ed15759f194d1b199cabe1288aad56fe59f8642d77db5

See more details on using hashes here.

File details

Details for the file dataknobs_fsm-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: dataknobs_fsm-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 328.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for dataknobs_fsm-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d24c02f098205e823d72844ba9cc54a1036aa6b23855cef54b0e9ac804e1e32a
MD5 94de1ce243a6af0ba3062de3e95e7fcc
BLAKE2b-256 7d09ea5801b8481206734c263752218a89eefc4825b38f850f3bf449b2576dcf

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.2

2 files

0.4.1

2 files

This release

0.4.0 This release

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.21

2 files

0.1.20

2 files

0.1.19

2 files

0.1.18

2 files

0.1.17

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page