Skip to main content

Lightweight coordination library for AI agents to prevent concurrency issues

Project description

AgentDiff Coordination

AgentDiff is a lightweight coordination library that prevents common concurrency issues in multi-agent systems - such as agents starting before dependencies complete, multiple agents writing to shared resources, or concurrent API calls exceeding rate limits.

Simply add @coordinate decorators for resource locks and @when for event-driven chaining. AgentDiff integrates with existing agent frameworks like LangChain, CrewAI, or pure Python implementations.

Provides coordination primitives without requiring framework migration or architectural changes.

PyPI version Python Support License: MIT

What AgentDiff Coordination Solves

  • Race conditions between agents accessing shared resources.
  • Corrupted state when multiple agents write to the same keys.
  • API rate limit chaos from concurrent LLM calls.
  • "Two nodes writing to same key" bugs that require extensive debugging.
  • Framework complexity that gets in the way of actually building agents.

Core Features

  • @coordinate - Resource locks + automatic lifecycle events.
  • @when - Event-driven agent chaining (no manual orchestration).
  • emit() - Custom events for complex workflows.
  • Zero Configuration - Works immediately, configure only what you need.
  • Framework Agnostic - Works with any agent framework or pure Python.

Use Cases: Concurrency Issues and Race Conditions

Concurrent State Updates

# Before: Race conditions in shared state
def process_customer_data():
    customer_state["status"] = "processing"  # Race condition
    result = process_data()
    customer_state["result"] = result       # Overwrites other agent

def update_customer_profile():
    customer_state["status"] = "updating"   # Conflicts with processor
    customer_state["profile"] = new_profile # State corruption

# After: Resource locks prevent conflicts
@coordinate("data_processor", lock_name="customer_123")
def process_customer_data():
    customer_state["status"] = "processing"  # Exclusive access
    result = process_data()
    customer_state["result"] = result        # Safe update

@coordinate("profile_updater", lock_name="customer_123")
def update_customer_profile():
    customer_state["status"] = "updating"    # Waits for processor
    customer_state["profile"] = new_profile  # No conflicts

API Rate Limit Management

# Before: Multiple agents hitting APIs simultaneously
def research_agent():
    response = openai.chat.completions.create(...)  #  Rate limited

def analysis_agent():
    response = openai.chat.completions.create(...)  #  Rate limited

def summary_agent():
    response = openai.chat.completions.create(...)  #  Rate limited

# Running in parallel creates debugging challenges
threading.Thread(target=research_agent).start()
threading.Thread(target=analysis_agent).start()
threading.Thread(target=summary_agent).start()

# After: Resource locks queue API calls safely
@coordinate("researcher", lock_name="openai_api")
def research_agent():
    response = openai.chat.completions.create(...)  #  Queued safely

@coordinate("analyzer", lock_name="openai_api")
def analysis_agent():
    response = openai.chat.completions.create(...)  #  Waits for researcher

@coordinate("summarizer", lock_name="openai_api")
def summary_agent():
    response = openai.chat.completions.create(...)  #  Waits for analyzer

Manual Orchestration Complexity

# Before: Complex manual coordination
def run_workflow():
    research_result = research_agent()
    if research_result:
        analysis_result = analysis_agent(research_result)
        if analysis_result:
            summary_result = summary_agent(analysis_result)
            if summary_result:
                final_report = editor_agent(summary_result)
    # Error handling, retries, parallel flows increase complexity

# After: Event-driven coordination
@coordinate("researcher")
def research_agent():
    return research_data

@when("researcher_complete")
def start_analysis(event_data):
    analysis_agent(event_data['result'])  #  Auto-triggered

@when("analyzer_complete")
def start_summary(event_data):
    summary_agent(event_data['result'])   #  Auto-chained

# Just start the workflow - coordination happens automatically
research_agent()  # Everything else flows automatically

Installation & Requirements

Python Support: 3.9+ (tested on 3.9, 3.10, 3.11, 3.12)

pip install agentdiff-coordination

Documentation

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT License - see LICENSE file for details.

About AgentDiff

AgentDiff provides practical tools for AI developers working with multi-agent systems. This coordination library addresses common concurrency challenges encountered in production agent workflows.

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

agentdiff_coordination-0.1.1.tar.gz (330.2 kB view details)

Uploaded Source

Built Distribution

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

agentdiff_coordination-0.1.1-py3-none-any.whl (30.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: agentdiff_coordination-0.1.1.tar.gz
  • Upload date:
  • Size: 330.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for agentdiff_coordination-0.1.1.tar.gz
Algorithm Hash digest
SHA256 bd2de39482197865cd3563b8f68632c19ceb467e922fc36b456e91e8c54eb8cf
MD5 f425b95cc2feb6213ac3c45358a8b9e4
BLAKE2b-256 3f3957833a0177b3b46c1a412017c820fa61ff6bf3fdd97341fbddbc2f2f4b4a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for agentdiff_coordination-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 26023af0a5dc3f2da9454f77478efae32ba87cc2d97c24cfb0e8d313be5c5a39
MD5 c149308fac1dbb25552c9a7f36d3a570
BLAKE2b-256 fbc8d9d38bf5355ddf91c768cf7565c1500e065b80bf00b85da11514559f8efb

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