Skip to main content

ASL(Agent Structure Language) -- a powerful declarative DSL that embodies a component-oriented paradigm and is even capable of supporting dynamic topologies

Project description

ASL (Agent Structure Language)

ASL (Agent Structure Language) — an internal DSL(Domain Specific Language) in Python for building agents based on bridgic-core. It provides a declarative, intuitive syntax for defining complex workflow graphs and concurrent automata, making it easier to build and maintain agent-based applications.

Features

  • Declarative Syntax: Define workflows using intuitive Python syntax with context managers
  • Rich Operators: Use +, ~, >>, and & operators to express complex dependencies
  • Fragment Support: Group workers into reusable logical fragments
  • Nested Graphs: Support for hierarchical graph structures
  • Component Reuse: Reuse existing automata as sub-graphs
  • Dynamic Workers: Lambda-based dynamic worker generation for concurrent automata

Installation

pip install bridgic-asl

Quick Start

Basic Example

from bridgic.asl import ASLAutoma, graph

def add_one(x: int):
    return x + 1

def add_two(x: int):
    return x + 2

class MyGraph(ASLAutoma):
    with graph as g:
        a = add_one
        b = add_two
        
        +a >> ~b  # a is the start worker, b depends on a and is the output

# Run the graph
graph = MyGraph()
result = await graph.arun(x=1)  # result: 3 (1+1+2)

Operators Explained

  • + marks a worker as a start worker (entry point)
  • ~ marks a worker as an output worker (exit point)
  • >> defines a dependency (left must complete before right executes)
  • & groups multiple workers together

Fragment Example

from bridgic.asl import ASLAutoma, graph

class MyGraph(ASLAutoma):
    with graph as g:
        a = worker1
        b = worker11
        c = worker12
        d = worker5
        e = worker6
        
        # Create fragments
        fragment_1 = +(a & b & c)  # Fragment with start workers
        fragment_2 = (d & e)       # Regular fragment
        
        # Chain fragments together
        fragment_1 >> fragment_2 >> ~merge

Nested Graphs

class MyGraph(ASLAutoma):
    with graph as g:
        a = SubGraph2()
        b = worker2
        
        +a >> b
        
        # Nested graph
        with graph as sub_graph:
            x = worker1
            y = worker2
            +x >> ~y

Configuration and Parameter Injection

from bridgic.asl import ASLAutoma, graph, Settings, Data
from bridgic.core.automa.args import ArgsMappingRule, From

class MyGraph(ASLAutoma):
    with graph as g:
        a = worker1
        b = worker2 *Settings(args_mapping_rule=ArgsMappingRule.AS_IS)
        c = merge *Data(y=From("a"))  # Inject parameter from worker 'a'
        
        +a >> b >> ~c

Concurrent Automa with Dynamic Workers

from bridgic.asl import ASLAutoma, concurrent, ASLField, Settings
from bridgic.core.automa.args import ResultDispatchingRule

class MyConcurrent(ASLAutoma):
    with concurrent(subtasks=ASLField(list, dispatching_rule=ResultDispatchingRule.IN_ORDER)) as sub_concurrent:
        dynamic_logic = lambda subtasks: (
            tasks_done *Settings(key=f"tasks_done_{i}")
            for i, subtask in enumerate(subtasks)
        )

Core Concepts

ASLAutoma

The main class that extends GraphAutoma from bridgic-core. Define your agent by inheriting from ASLAutoma and using the graph or concurrent context managers.

Graph vs Concurrent

  • graph: Creates a GraphAutoma for workflow execution
  • concurrent: Creates a ConcurrentAutoma for parallel task execution

Settings

Configure worker behavior:

worker *Settings(
    key="custom_key",
    args_mapping_rule=ArgsMappingRule.AS_IS,
    result_dispatching_rule=ResultDispatchingRule.IN_ORDER
)

Data

Inject default parameter values and modify function signatures:

worker *Data(param1=value1, param2=From("other_worker"))

Requirements

  • Python >= 3.9
  • bridgic-core >= 0.1.5.dev1

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

bridgic_asl-0.1.1.tar.gz (18.7 kB view details)

Uploaded Source

Built Distribution

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

bridgic_asl-0.1.1-py3-none-any.whl (20.7 kB view details)

Uploaded Python 3

File details

Details for the file bridgic_asl-0.1.1.tar.gz.

File metadata

  • Download URL: bridgic_asl-0.1.1.tar.gz
  • Upload date:
  • Size: 18.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","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 bridgic_asl-0.1.1.tar.gz
Algorithm Hash digest
SHA256 63c26937ac278605b2ca13dfa9543b0ec2247fc28a5d2e5e84be9e975541da28
MD5 0d948383ae1503fab12d57a3e25152c5
BLAKE2b-256 a3ddf8ce137ad051cffd398122235f9717e889eb739b3840fe47baebbed3f326

See more details on using hashes here.

File details

Details for the file bridgic_asl-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: bridgic_asl-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 20.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","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 bridgic_asl-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6c08e24557dbda62d86bdea9ecc6964197dc260da54154c3968fddd6fd7943c4
MD5 6f00a13966b98b4ae6bc9fa598186074
BLAKE2b-256 deba92343a0cdf70ce41b55a1803864e94d08e0e099b9a9421e5d51cb955d109

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