agentdatashuttle-adspy


Nameagentdatashuttle-adspy JSON
Version 1.0.9 PyPI version JSON
download
home_pageNone
SummaryAgent Data Shuttle - Python SDK
upload_time2025-07-22 12:48:39
maintainerNone
docs_urlNone
authorNone
requires_python>=3.7
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements langchain langchain-core langchain-community langgraph langgraph-prebuilt python-dotenv requests pydantic pika python-socketio markdown yagmail slackify-markdown slack-sdk
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Agent Data Shuttle (ADS) - Python SDK

#### Agent Data Shuttle (ADS) — _The framework that makes your AI agents autonomously react to external events._

> **ADS Python SDK** enables you to build ADS Publishers and Subscribers in Python, allowing your AI agents to react to external events in real time.

> It is interoperable with other ADS SDKs (NodeJS/TypeScript, n8n) and supports all publisher-subscriber combinations.

---

## Installation

```sh
pip install agentdatashuttle_adspy
```

---

## Table of Contents

- [Overview](#overview)
- [Features](#features)
- [Architecture](#architecture)
- [Prerequisites](#prerequisites)
- [Usage](#usage)
  - [ADS Publisher](#1-ads-publisher)
  - [ADS Subscriber](#2-ads-subscriber)
- [Notification Channels](#notification-channels)
- [Types](#types)
- [Logging](#logging)
- [Contributing](#contributing)
- [License](#license)
- [Contact](#contact)

---

## Overview

Agent Data Shuttle (ADS) is a framework for connecting event sources (publishers) and AI agents (subscribers) across platforms and languages.

This SDK lets you build Python publishers and subscribers that can interoperate with NodeJS/TypeScript SDKs and n8n.

- **Publishers** send events (e.g., file uploads, system alerts, support tickets, CRM events, payment processor events, etc.).
- **Subscribers** (AI agents or workflows) receive and react to those events to take appropriate actions.

All combinations are possible:

- Python Publisher → Python Subscriber
- Python Publisher → NodeJS Subscriber
- Python Publisher → n8n Subscriber
- NodeJS Publisher → Python Subscriber
- NodeJS Publisher → n8n Subscriber
- NodeJS Publisher → NodeJS Subscriber
- n8n Publisher → Python Subscriber
- n8n Publisher → NodeJS Subscriber
- n8n Publisher → n8n Subscriber

---

## Features

- **Event-Driven Architecture:** Publish and subscribe to events between systems and agents.
- **Publisher & Subscriber SDKs:** Build both event sources (publishers) and event consumers (subscribers) in Python.
- **n8n Integration:** Out-of-the-box support for n8n workflows as subscribers or publishers.
- **Notification Channels:** Send notifications via Email or Slack when agents process events.
  > More channels coming soon.
- **Pluggable Connectors:** Connect an ADS Subscriber to multiple ADS Publishers via data connectors.
- **Prompt Generation:** Automatically generate contextual prompts for AI agents based on event payloads and agent capabilities.
- **Type Hints:** Strong typing for safer and more maintainable code.

---

## Architecture

- **ADS Publisher:** Sends events to subscribers via ADS Bridge.
- **ADS Bridge:** (see [ADS Bridge repository](https://github.com/agentdatashuttle/ads-bridge)) Broadcasts events to connected subscribers.
- **ADS Subscriber:** Receives ADS events and invokes AI agents or workflows.
- **Notification Channels:** Email/Slack notifications on event processing.
- **Interoperability:** Mix Python, NodeJS, and n8n publishers/subscribers.

> ![Before and After ADS](https://agentdatashuttle.knowyours.co/before-after-illustration.png)
>
> ![Architecture Diagram](https://agentdatashuttle.knowyours.co/architecture-diagram.png)

---

## Prerequisites

### Prerequisites for ADS Publisher

- **Python 3.8+**

- **RabbitMQ** instance

  > For event queueing and secure event publishing

- **ADS Bridge**

  > For real-time event delivery via Socket.io
  >
  > You must run the ADS Bridge service which would be the point of connection for subscribers.
  >
  > More info at: [https://github.com/agentdatashuttle/ads-bridge](https://github.com/agentdatashuttle/ads-bridge)

- **Redis**

  > For handling ADS event delivery to a large number of ADS Subscribers from ADS Bridge

### Prerequisites for ADS Subscriber

- **Python 3.8+**

- **Email/Slack credentials** (Optional)

  > For using notification channels upon each autonomous agent invocation

- **AI Agent or LLM** (for integrating with an AI model and trigger agentic workflows)

---

## Usage

### 1. ADS Publisher

Publish events to ADS subscribers.

```python
import os
import time
from agentdatashuttle_adspy.core.client import ADSRabbitMQClientParams
from agentdatashuttle_adspy.core.publisher import ADSPublisher
from agentdatashuttle_adspy.models.models import ADSDataPayload

# Step 1: Create ADSRabbitMQClientParams
client_params = ADSRabbitMQClientParams(
                    host=os.getenv("RABBITMQ_HOST", "localhost"),
                    username=os.getenv("RABBITMQ_USERNAME", "ads_user"),
                    password=os.getenv("RABBITMQ_PASSWORD", "ads_password"),
                    port=int(os.getenv("RABBITMQ_PORT", 5672))
                )


# Step 2: Create a ADSPublisher instance
# Example: ADSPublisher for Kubernetes Health monitoring system
publisher = ADSPublisher("KubernetesMonitoring", client_params)

# Step 3: Create a sample ADSDataPayload
payload = ADSDataPayload(
    event_name="pod_killed",
    event_description="Pod 'payment-service-233ch3' just got killed due to OOMKilled error",
    event_data={
        "pod": "payment-service-233ch3",
        "recorded_memory_usage": "2042Mi",
        "limits": "2000Mi"
    }
)

time.sleep(2)  # Simulate some delay before publishing

# Publish the payload
publisher.publish_event(payload)

print("Event published successfully.")
```

**Tip:** Customize the event payload to match your use case, and provide a detailed `event_description` and as much detail as required in the `event_data` dictionary for the subscriber AI Agent to take remediation actions with greater confidence and accuracy.

---

### 2. ADS Subscriber

Subscribe to events and invoke your AI agent.

```python
import os
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.messages import HumanMessage
from langgraph.prebuilt import create_react_agent

# Import ADS Subscriber and add ADS Data Connectors
from agentdatashuttle_adspy.core.subscriber import ADSSubscriber
from agentdatashuttle_adspy.core.dataconnector import ADSDataConnector
from agentdatashuttle_adspy.core.client import ADSBridgeClientParams
from agentdatashuttle_adspy.models.models import ADSDataPayload
from agentdatashuttle_adspy.core.notifications import EmailNotificationChannel, SlackNotificationChannel

# Define the tools for the agent to use
agent_tools = [toolA, toolB, see_k8s_logs_tool]
llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash")

agent = create_react_agent(llm, agent_tools, debug=True)

# Step 1: Define callback function for ADS Subscriber to invoke agent
def invoke_agent(prompt: str, payload: ADSDataPayload) -> str:
    print("The ADS payload was:", payload)

    # Filter specific events in/out as you desire
    if payload.event_name == "container_up":
        return "NO AGENT INVOCATION FOR THIS EVENT - CONTAINER UP"

    # Invoke your agent with the context enriched prompt generated by Agent Data Shuttle
    response = agent.invoke({"messages": [HumanMessage(prompt)]})

    # Return final agent response - will be sent to all notification channels for later review
    return response["messages"][-1].content

# Step 2: Define ADSBridgeClientParams and corresponding ADSDataConnector
ads_bridge_client_params = ADSBridgeClientParams(
    connection_string="http://localhost:9999",
    path_prefix="/ads_bridge",
    ads_subscribers_pool_id="<a_random_uuid>"  # Replace with your actual pool ID to group horizontally scaled replicas of ADS Subscribers - use https://agentdatashuttle.knowyours.co/pool-id-generator to make one if needed
)

data_connector_one = ADSDataConnector(
    connector_name="K8sMonitoringConnector",
    bridge_client_params=ads_bridge_client_params
)

# Step 3: Optionally, add notification channels
email_channel = EmailNotificationChannel(
    "<agent_description>",
    "<smtp_host>",
    "<smtp_port>",
    "<smtp_username>",
    "<smtp_password>",
    "from@example.com",
    "to@example.com"
)

slack_channel = SlackNotificationChannel(
    "<agent_description>",
    "<slack_bot_token>",
    "#<your-channel>"
)

# Step 4: Create the ADSSubscriber with the callback function, LLM, and Data Connectors.
# The ADSSubscriber will listen for events from all the data connectors and invoke the agent.
ads_subscriber = ADSSubscriber(
    agent_callback_function=invoke_agent,
    llm=llm,
    agent_description="<agent_description>",
    data_connectors=[data_connector_one],
    notification_channels=[email_channel, slack_channel]
)

# Step 5: Start the ADSSubscriber to listen for events and invoke the agent.
ads_subscriber.start()
```

---

## Notification Channels

Send notifications via Email or Slack when events are processed:

```python
from agentdatashuttle_adspy.core.notifications import EmailNotificationChannel, SlackNotificationChannel

email_channel = EmailNotificationChannel(
    "<agent_description>",
    "<smtp_host>",
    "<smtp_port>",
    "<smtp_username>",
    "<smtp_password>",
    "from@example.com",
    "to@example.com"
)

slack_channel = SlackNotificationChannel(
    "<agent_description>",
    "<slack_bot_token>",
    "#<your-channel>"
)
```

Pass these channels to the `ADSSubscriber` to enable notifications.

---

## Types

All core types are defined in [`agentdatashuttle_adspy/models/models.py`](agentdatashuttle_adspy/models/models.py):

- [`ADSDataPayload`](agentdatashuttle_adspy/models/models.py)
- [`ADSClientParams`](agentdatashuttle_adspy/core/client.py)
- [`ADSBridgeClientParams`](agentdatashuttle_adspy/core/client.py)

---

## Logging

Logging level can be configured via the `LOG_LEVEL` environment variable with the following values:

| Level | Description                                     |
| ----- | ----------------------------------------------- |
| error | Critical errors that may cause the app to crash |
| warn  | Warnings about potentially harmful situations   |
| info  | General operational information                 |
| debug | Debug-level logs for development                |

---

## Contributing

Contributions are welcome!

If you have ideas for improvements, bug fixes, or new features, please open a [GitHub Issue](https://github.com/agentdatashuttle/python-sdk/issues) to discuss or submit a Pull Request (PR).

**How to contribute:**

1. Fork this repository and create your branch from `main`.
2. Make your changes with clear commit messages.
3. Ensure your code passes tests.
4. Open a Pull Request describing your changes.

If you encounter any bugs or have feature requests, please [raise an issue](https://github.com/agentdatashuttle/python-sdk/issues) on GitHub.

Thank you for helping improve the Agent Data Shuttle initiative!

---

## License

This project is licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).

---

## Contact

For questions or support, please contact  
[agentdatashuttle@knowyours.co](mailto:agentdatashuttle@knowyours.co) or [sudhay2001@gmail.com](mailto:sudhay2001@gmail.com)

For more information about Agent Data Shuttle - https://agentdatashuttle.knowyours.co

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "agentdatashuttle-adspy",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "Knowyours <agentdatashuttle@knowyours.co>",
    "download_url": "https://files.pythonhosted.org/packages/e9/a4/30d0093f4bed20cc8b0c87452e532c884d66e9a8f321cda5e0201a59a071/agentdatashuttle_adspy-1.0.9.tar.gz",
    "platform": null,
    "description": "# Agent Data Shuttle (ADS) - Python SDK\n\n#### Agent Data Shuttle (ADS) \u2014 _The framework that makes your AI agents autonomously react to external events._\n\n> **ADS Python SDK** enables you to build ADS Publishers and Subscribers in Python, allowing your AI agents to react to external events in real time.\n\n> It is interoperable with other ADS SDKs (NodeJS/TypeScript, n8n) and supports all publisher-subscriber combinations.\n\n---\n\n## Installation\n\n```sh\npip install agentdatashuttle_adspy\n```\n\n---\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Architecture](#architecture)\n- [Prerequisites](#prerequisites)\n- [Usage](#usage)\n  - [ADS Publisher](#1-ads-publisher)\n  - [ADS Subscriber](#2-ads-subscriber)\n- [Notification Channels](#notification-channels)\n- [Types](#types)\n- [Logging](#logging)\n- [Contributing](#contributing)\n- [License](#license)\n- [Contact](#contact)\n\n---\n\n## Overview\n\nAgent Data Shuttle (ADS) is a framework for connecting event sources (publishers) and AI agents (subscribers) across platforms and languages.\n\nThis SDK lets you build Python publishers and subscribers that can interoperate with NodeJS/TypeScript SDKs and n8n.\n\n- **Publishers** send events (e.g., file uploads, system alerts, support tickets, CRM events, payment processor events, etc.).\n- **Subscribers** (AI agents or workflows) receive and react to those events to take appropriate actions.\n\nAll combinations are possible:\n\n- Python Publisher \u2192 Python Subscriber\n- Python Publisher \u2192 NodeJS Subscriber\n- Python Publisher \u2192 n8n Subscriber\n- NodeJS Publisher \u2192 Python Subscriber\n- NodeJS Publisher \u2192 n8n Subscriber\n- NodeJS Publisher \u2192 NodeJS Subscriber\n- n8n Publisher \u2192 Python Subscriber\n- n8n Publisher \u2192 NodeJS Subscriber\n- n8n Publisher \u2192 n8n Subscriber\n\n---\n\n## Features\n\n- **Event-Driven Architecture:** Publish and subscribe to events between systems and agents.\n- **Publisher & Subscriber SDKs:** Build both event sources (publishers) and event consumers (subscribers) in Python.\n- **n8n Integration:** Out-of-the-box support for n8n workflows as subscribers or publishers.\n- **Notification Channels:** Send notifications via Email or Slack when agents process events.\n  > More channels coming soon.\n- **Pluggable Connectors:** Connect an ADS Subscriber to multiple ADS Publishers via data connectors.\n- **Prompt Generation:** Automatically generate contextual prompts for AI agents based on event payloads and agent capabilities.\n- **Type Hints:** Strong typing for safer and more maintainable code.\n\n---\n\n## Architecture\n\n- **ADS Publisher:** Sends events to subscribers via ADS Bridge.\n- **ADS Bridge:** (see [ADS Bridge repository](https://github.com/agentdatashuttle/ads-bridge)) Broadcasts events to connected subscribers.\n- **ADS Subscriber:** Receives ADS events and invokes AI agents or workflows.\n- **Notification Channels:** Email/Slack notifications on event processing.\n- **Interoperability:** Mix Python, NodeJS, and n8n publishers/subscribers.\n\n> ![Before and After ADS](https://agentdatashuttle.knowyours.co/before-after-illustration.png)\n>\n> ![Architecture Diagram](https://agentdatashuttle.knowyours.co/architecture-diagram.png)\n\n---\n\n## Prerequisites\n\n### Prerequisites for ADS Publisher\n\n- **Python 3.8+**\n\n- **RabbitMQ** instance\n\n  > For event queueing and secure event publishing\n\n- **ADS Bridge**\n\n  > For real-time event delivery via Socket.io\n  >\n  > You must run the ADS Bridge service which would be the point of connection for subscribers.\n  >\n  > More info at: [https://github.com/agentdatashuttle/ads-bridge](https://github.com/agentdatashuttle/ads-bridge)\n\n- **Redis**\n\n  > For handling ADS event delivery to a large number of ADS Subscribers from ADS Bridge\n\n### Prerequisites for ADS Subscriber\n\n- **Python 3.8+**\n\n- **Email/Slack credentials** (Optional)\n\n  > For using notification channels upon each autonomous agent invocation\n\n- **AI Agent or LLM** (for integrating with an AI model and trigger agentic workflows)\n\n---\n\n## Usage\n\n### 1. ADS Publisher\n\nPublish events to ADS subscribers.\n\n```python\nimport os\nimport time\nfrom agentdatashuttle_adspy.core.client import ADSRabbitMQClientParams\nfrom agentdatashuttle_adspy.core.publisher import ADSPublisher\nfrom agentdatashuttle_adspy.models.models import ADSDataPayload\n\n# Step 1: Create ADSRabbitMQClientParams\nclient_params = ADSRabbitMQClientParams(\n                    host=os.getenv(\"RABBITMQ_HOST\", \"localhost\"),\n                    username=os.getenv(\"RABBITMQ_USERNAME\", \"ads_user\"),\n                    password=os.getenv(\"RABBITMQ_PASSWORD\", \"ads_password\"),\n                    port=int(os.getenv(\"RABBITMQ_PORT\", 5672))\n                )\n\n\n# Step 2: Create a ADSPublisher instance\n# Example: ADSPublisher for Kubernetes Health monitoring system\npublisher = ADSPublisher(\"KubernetesMonitoring\", client_params)\n\n# Step 3: Create a sample ADSDataPayload\npayload = ADSDataPayload(\n    event_name=\"pod_killed\",\n    event_description=\"Pod 'payment-service-233ch3' just got killed due to OOMKilled error\",\n    event_data={\n        \"pod\": \"payment-service-233ch3\",\n        \"recorded_memory_usage\": \"2042Mi\",\n        \"limits\": \"2000Mi\"\n    }\n)\n\ntime.sleep(2)  # Simulate some delay before publishing\n\n# Publish the payload\npublisher.publish_event(payload)\n\nprint(\"Event published successfully.\")\n```\n\n**Tip:** Customize the event payload to match your use case, and provide a detailed `event_description` and as much detail as required in the `event_data` dictionary for the subscriber AI Agent to take remediation actions with greater confidence and accuracy.\n\n---\n\n### 2. ADS Subscriber\n\nSubscribe to events and invoke your AI agent.\n\n```python\nimport os\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_core.messages import HumanMessage\nfrom langgraph.prebuilt import create_react_agent\n\n# Import ADS Subscriber and add ADS Data Connectors\nfrom agentdatashuttle_adspy.core.subscriber import ADSSubscriber\nfrom agentdatashuttle_adspy.core.dataconnector import ADSDataConnector\nfrom agentdatashuttle_adspy.core.client import ADSBridgeClientParams\nfrom agentdatashuttle_adspy.models.models import ADSDataPayload\nfrom agentdatashuttle_adspy.core.notifications import EmailNotificationChannel, SlackNotificationChannel\n\n# Define the tools for the agent to use\nagent_tools = [toolA, toolB, see_k8s_logs_tool]\nllm = ChatGoogleGenerativeAI(model=\"gemini-2.0-flash\")\n\nagent = create_react_agent(llm, agent_tools, debug=True)\n\n# Step 1: Define callback function for ADS Subscriber to invoke agent\ndef invoke_agent(prompt: str, payload: ADSDataPayload) -> str:\n    print(\"The ADS payload was:\", payload)\n\n    # Filter specific events in/out as you desire\n    if payload.event_name == \"container_up\":\n        return \"NO AGENT INVOCATION FOR THIS EVENT - CONTAINER UP\"\n\n    # Invoke your agent with the context enriched prompt generated by Agent Data Shuttle\n    response = agent.invoke({\"messages\": [HumanMessage(prompt)]})\n\n    # Return final agent response - will be sent to all notification channels for later review\n    return response[\"messages\"][-1].content\n\n# Step 2: Define ADSBridgeClientParams and corresponding ADSDataConnector\nads_bridge_client_params = ADSBridgeClientParams(\n    connection_string=\"http://localhost:9999\",\n    path_prefix=\"/ads_bridge\",\n    ads_subscribers_pool_id=\"<a_random_uuid>\"  # Replace with your actual pool ID to group horizontally scaled replicas of ADS Subscribers - use https://agentdatashuttle.knowyours.co/pool-id-generator to make one if needed\n)\n\ndata_connector_one = ADSDataConnector(\n    connector_name=\"K8sMonitoringConnector\",\n    bridge_client_params=ads_bridge_client_params\n)\n\n# Step 3: Optionally, add notification channels\nemail_channel = EmailNotificationChannel(\n    \"<agent_description>\",\n    \"<smtp_host>\",\n    \"<smtp_port>\",\n    \"<smtp_username>\",\n    \"<smtp_password>\",\n    \"from@example.com\",\n    \"to@example.com\"\n)\n\nslack_channel = SlackNotificationChannel(\n    \"<agent_description>\",\n    \"<slack_bot_token>\",\n    \"#<your-channel>\"\n)\n\n# Step 4: Create the ADSSubscriber with the callback function, LLM, and Data Connectors.\n# The ADSSubscriber will listen for events from all the data connectors and invoke the agent.\nads_subscriber = ADSSubscriber(\n    agent_callback_function=invoke_agent,\n    llm=llm,\n    agent_description=\"<agent_description>\",\n    data_connectors=[data_connector_one],\n    notification_channels=[email_channel, slack_channel]\n)\n\n# Step 5: Start the ADSSubscriber to listen for events and invoke the agent.\nads_subscriber.start()\n```\n\n---\n\n## Notification Channels\n\nSend notifications via Email or Slack when events are processed:\n\n```python\nfrom agentdatashuttle_adspy.core.notifications import EmailNotificationChannel, SlackNotificationChannel\n\nemail_channel = EmailNotificationChannel(\n    \"<agent_description>\",\n    \"<smtp_host>\",\n    \"<smtp_port>\",\n    \"<smtp_username>\",\n    \"<smtp_password>\",\n    \"from@example.com\",\n    \"to@example.com\"\n)\n\nslack_channel = SlackNotificationChannel(\n    \"<agent_description>\",\n    \"<slack_bot_token>\",\n    \"#<your-channel>\"\n)\n```\n\nPass these channels to the `ADSSubscriber` to enable notifications.\n\n---\n\n## Types\n\nAll core types are defined in [`agentdatashuttle_adspy/models/models.py`](agentdatashuttle_adspy/models/models.py):\n\n- [`ADSDataPayload`](agentdatashuttle_adspy/models/models.py)\n- [`ADSClientParams`](agentdatashuttle_adspy/core/client.py)\n- [`ADSBridgeClientParams`](agentdatashuttle_adspy/core/client.py)\n\n---\n\n## Logging\n\nLogging level can be configured via the `LOG_LEVEL` environment variable with the following values:\n\n| Level | Description                                     |\n| ----- | ----------------------------------------------- |\n| error | Critical errors that may cause the app to crash |\n| warn  | Warnings about potentially harmful situations   |\n| info  | General operational information                 |\n| debug | Debug-level logs for development                |\n\n---\n\n## Contributing\n\nContributions are welcome!\n\nIf you have ideas for improvements, bug fixes, or new features, please open a [GitHub Issue](https://github.com/agentdatashuttle/python-sdk/issues) to discuss or submit a Pull Request (PR).\n\n**How to contribute:**\n\n1. Fork this repository and create your branch from `main`.\n2. Make your changes with clear commit messages.\n3. Ensure your code passes tests.\n4. Open a Pull Request describing your changes.\n\nIf you encounter any bugs or have feature requests, please [raise an issue](https://github.com/agentdatashuttle/python-sdk/issues) on GitHub.\n\nThank you for helping improve the Agent Data Shuttle initiative!\n\n---\n\n## License\n\nThis project is licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).\n\n---\n\n## Contact\n\nFor questions or support, please contact  \n[agentdatashuttle@knowyours.co](mailto:agentdatashuttle@knowyours.co) or [sudhay2001@gmail.com](mailto:sudhay2001@gmail.com)\n\nFor more information about Agent Data Shuttle - https://agentdatashuttle.knowyours.co\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Agent Data Shuttle - Python SDK",
    "version": "1.0.9",
    "project_urls": {
        "Homepage": "https://agentdatashuttle.knowyours.co",
        "Issues": "https://github.com/agentdatashuttle/python-sdk/issues",
        "Repository": "https://github.com/agentdatashuttle/python-sdk"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c9e4d23f16a2ba9d91191ff3010d47479bd4ddc02c54d14e443c92b03cb3dfa4",
                "md5": "25843f59f2978d72592681ad03307914",
                "sha256": "7ba96cfb67b1cbefade7327c61d488f342250da89dcd261381a95552e210372d"
            },
            "downloads": -1,
            "filename": "agentdatashuttle_adspy-1.0.9-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "25843f59f2978d72592681ad03307914",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 22206,
            "upload_time": "2025-07-22T12:48:37",
            "upload_time_iso_8601": "2025-07-22T12:48:37.993702Z",
            "url": "https://files.pythonhosted.org/packages/c9/e4/d23f16a2ba9d91191ff3010d47479bd4ddc02c54d14e443c92b03cb3dfa4/agentdatashuttle_adspy-1.0.9-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e9a430d0093f4bed20cc8b0c87452e532c884d66e9a8f321cda5e0201a59a071",
                "md5": "646ed196fbf750d8be2d8c214eae52c3",
                "sha256": "9e32f89d56f46e6a67c072e47e2e382346610f2e6d16ec00b0d998d504567324"
            },
            "downloads": -1,
            "filename": "agentdatashuttle_adspy-1.0.9.tar.gz",
            "has_sig": false,
            "md5_digest": "646ed196fbf750d8be2d8c214eae52c3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 22667,
            "upload_time": "2025-07-22T12:48:39",
            "upload_time_iso_8601": "2025-07-22T12:48:39.532192Z",
            "url": "https://files.pythonhosted.org/packages/e9/a4/30d0093f4bed20cc8b0c87452e532c884d66e9a8f321cda5e0201a59a071/agentdatashuttle_adspy-1.0.9.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-22 12:48:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "agentdatashuttle",
    "github_project": "python-sdk",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "langchain",
            "specs": []
        },
        {
            "name": "langchain-core",
            "specs": []
        },
        {
            "name": "langchain-community",
            "specs": []
        },
        {
            "name": "langgraph",
            "specs": []
        },
        {
            "name": "langgraph-prebuilt",
            "specs": []
        },
        {
            "name": "python-dotenv",
            "specs": []
        },
        {
            "name": "requests",
            "specs": []
        },
        {
            "name": "pydantic",
            "specs": []
        },
        {
            "name": "pika",
            "specs": []
        },
        {
            "name": "python-socketio",
            "specs": []
        },
        {
            "name": "markdown",
            "specs": []
        },
        {
            "name": "yagmail",
            "specs": []
        },
        {
            "name": "slackify-markdown",
            "specs": []
        },
        {
            "name": "slack-sdk",
            "specs": []
        }
    ],
    "lcname": "agentdatashuttle-adspy"
}
        
Elapsed time: 0.45796s