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 aGraphAutomafor workflow executionconcurrent: Creates aConcurrentAutomafor 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
acc067e1c0e0bac716b43ed1971711f0b46bdb09390b39e6e98337bc52a6d200
|
|
| MD5 |
4b4c9717b4f10b5508c23a89d59d8cf3
|
|
| BLAKE2b-256 |
bed219fd89b6cbc89efa14af4016a69c64edef0d3016e7f2c2da523e3a78bdad
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce96db09336d06191f3326e8e545376538179c4622a8dcb5d8bcd687727132af
|
|
| MD5 |
c313293d66976de0dbfad20ac0f4a6e0
|
|
| BLAKE2b-256 |
ec399871a2b4da92cfbb297252dc7301f132bab7d4de71dafae849b7899b7331
|