Skip to main content

ASL(Agent Structure Language) -- A python DSL(Domain Special Language) for descriping agent applications based on bridgic-core

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.0.tar.gz (18.6 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.0-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bridgic_asl-0.1.0.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.6

File hashes

Hashes for bridgic_asl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 75d93a34747a0fd18afa7efa386c88c5decfe9c1e062f361b016fe52683a7fcc
MD5 7ca21967ab3b8134f41c01f399e62888
BLAKE2b-256 b9514e5523d7ba4e51a032d58ccfe7a3ace6bbaf398455d571960ff190ac239c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bridgic_asl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cd239d3eb8b9101b05f52c68516665206dfcf1bf0f6b22b794a26c1216a5dd02
MD5 f1d4944ffc493afb8a60fcd91dc5bc45
BLAKE2b-256 cecb5af10239366e903dd1d84f428523e1905d13e83220cef96af8f8329e6230

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