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.3.tar.gz (19.4 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.3-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bridgic_asl-0.1.3.tar.gz
  • Upload date:
  • Size: 19.4 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.3.tar.gz
Algorithm Hash digest
SHA256 acc067e1c0e0bac716b43ed1971711f0b46bdb09390b39e6e98337bc52a6d200
MD5 4b4c9717b4f10b5508c23a89d59d8cf3
BLAKE2b-256 bed219fd89b6cbc89efa14af4016a69c64edef0d3016e7f2c2da523e3a78bdad

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bridgic_asl-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 21.5 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ce96db09336d06191f3326e8e545376538179c4622a8dcb5d8bcd687727132af
MD5 c313293d66976de0dbfad20ac0f4a6e0
BLAKE2b-256 ec399871a2b4da92cfbb297252dc7301f132bab7d4de71dafae849b7899b7331

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