aif-workflow-helper


Nameaif-workflow-helper JSON
Version 0.1.1 PyPI version JSON
download
home_pageNone
SummaryAzure AI Foundry dev workflow helpers
upload_time2025-09-11 23:41:15
maintainerNone
docs_urlNone
authorPete Roden
requires_python>=3.10
licenseMIT
keywords azure ai agents workflow automation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Azure AI Foundry Workflow Helpers

Utilities for exporting (downloading) and importing (creating/updating) Azure AI Foundry Agents along with dependency awareness, normalization, and consistent logging.

## 🚀 Quick Start

### 1. Set Environment Variables

```bash
export AZURE_TENANT_ID='your-tenant-id-here'
export PROJECT_ENDPOINT='your-ai-foundry-endpoint-here'
```

**Example:**

```bash
export AZURE_TENANT_ID='aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
export PROJECT_ENDPOINT='https://your-resource.services.ai.azure.com/api/projects/your-project'
```

> **Note:** You can also provide these values via CLI parameters (`--azure-tenant-id` and `--project-endpoint`) which will take precedence over environment variables.

### 2. Install the Package

For development (editable install):

```bash
pip install -e .
```

Or for production:

```bash
pip install .
```

This will install all required dependencies automatically.

### 3. Using the CLI (Recommended)

The CLI is available as a console script after installation.

```bash
aif-workflow-helper --download-all-agents --agents-dir agents
```

Common examples:

```bash
# Download all agents with optional prefix/suffix filtering
aif-workflow-helper --download-all-agents --prefix dev- --suffix -v1

# Download a single agent
aif-workflow-helper --download-agent my_agent

# Upload all agents from JSON definitions in a directory
aif-workflow-helper --upload-all-agents --agents-dir agents

# Upload a single agent definition file
aif-workflow-helper --upload-agent my_agent --agents-dir agents

# Download agents in different formats
aif-workflow-helper --download-all-agents --format json     # Default
aif-workflow-helper --download-all-agents --format yaml     # YAML format
aif-workflow-helper --download-all-agents --format md       # Markdown with frontmatter

# Upload agents from different formats
aif-workflow-helper --upload-all-agents --format yaml
aif-workflow-helper --upload-agent my_agent --format md

# Change log level
aif-workflow-helper --download-all-agents --log-level DEBUG

# Override environment variables with CLI parameters
aif-workflow-helper --download-all-agents \
  --azure-tenant-id "your-tenant-id" \
  --project-endpoint "https://your-endpoint.services.ai.azure.com/api/projects/your-project"

# Mix CLI parameters with environment variables (CLI takes precedence)
export AZURE_TENANT_ID="env-tenant-id"
aif-workflow-helper --download-all-agents --azure-tenant-id "cli-tenant-id"  # Uses CLI value
```

### 4. Direct Library Usage

You can import and compose the underlying functions directly:

```python
from aif_workflow_helpers import (
    configure_logging,
    download_agents,
    download_agent,
    create_or_update_agents,
    create_or_update_agent,
    create_or_update_agent_from_file,
    create_or_update_agents_from_files,
)
from azure.ai.agents import AgentsClient
from azure.identity import DefaultAzureCredential

configure_logging()

client = AgentsClient(
    credential=DefaultAzureCredential(
        exclude_interactive_browser_credential=False,
        interactive_tenant_id="your-tenant-id"
    ),
    endpoint="your-endpoint"
)

# Bulk download
download_agents(client, file_path="./agents", prefix="", suffix="", format="json")

# Create/update from a directory (dependency ordered)
create_or_update_agents_from_files(path="./agents", agent_client=client, prefix="", suffix="", format="json")
```

## 📁 What the Tooling Does

1. Downloads existing agents to normalized files (JSON, YAML, or Markdown with frontmatter)
2. Normalizes (generalizes) definitions for portability (removes resource-specific fields)
3. Infers and resolves inter-agent dependencies (connected agent tools)
4. Creates or updates agents in dependency-safe order
5. Applies optional prefix/suffix for environment namespacing
6. Supports multiple file formats for flexible workflow integration

## 🔧 Core Functions

### Download Functions

- `download_agents(agent_client, file_path, prefix, suffix, format)` – Download and generalize all agents (optional prefix/suffix filters, format selection)
- `download_agent(agent_name, agent_client, file_path, prefix, suffix, format)` – Download and generalize a single agent
- `generalize_agent_dict(data, agent_client, prefix, suffix)` – Normalize agent JSON for portability

### Upload Functions

- `create_or_update_agent(agent_data, agent_client, existing_agents, prefix, suffix)` – Upsert a single agent object
- `create_or_update_agents(agents_data, agent_client, prefix, suffix)` – Upsert multiple agents with dependency ordering
- `create_or_update_agent_from_file(agent_name, path, agent_client, prefix, suffix, format)` – Upsert from a specific file
- `create_or_update_agents_from_files(path, agent_client, prefix, suffix, format)` – Bulk load and upsert directory

### Internal Helpers (Not all re-exported)

- `read_agent_file(path)` / `read_agent_files(path, format)` – Load definitions in any supported format (used internally by *from_files* wrappers)
- `extract_dependencies(agents_data)` – Build dependency graph
- `dependency_sort(agents_data)` – Topological sort of agents
- `get_agent_by_name(name, client)` – Lookup agent object
- `get_agent_name(agent_id, client)` – Reverse lookup by ID

## 🎯 CLI Reference

`aif-workflow-helper` arguments:

```text
--agents-dir DIR                Directory for agent definition files (default: agents)
--download-all-agents           Download all existing agents
--download-agent NAME           Download a single agent by name
--upload-all-agents             Create/update all agents from definition files
--upload-agent NAME             Create/update a single agent from definition file
--prefix TEXT                   Optional prefix applied during download/upload
--suffix TEXT                   Optional suffix applied during download/upload
--format FORMAT                 File format: json, yaml, or md (default: json)
--log-level LEVEL               Logging level (CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET)
--azure-tenant-id TENANT_ID     Azure tenant ID (overrides AZURE_TENANT_ID environment variable)
--project-endpoint ENDPOINT     AI Foundry project endpoint URL (overrides PROJECT_ENDPOINT environment variable)
```

### Authentication Priority

1. **CLI Parameters** (highest priority): `--azure-tenant-id` and `--project-endpoint`
2. **Environment Variables** (fallback): `AZURE_TENANT_ID` and `PROJECT_ENDPOINT`

## 📄 Supported File Formats

The tool supports three file formats for agent definitions:

### JSON Format (Default)

Standard JSON format with all agent properties in a single object:

```json
{
  "name": "my-agent",
  "model": "gpt-4",
  "instructions": "You are a helpful AI assistant...",
  "tools": [],
  "temperature": 0.7,
  "top_p": 1.0
}
```

### YAML Format

Clean YAML format for better readability:

```yaml
name: my-agent
model: gpt-4
instructions: |
  You are a helpful AI assistant.
  Please provide clear and concise responses.
tools: []
temperature: 0.7
top_p: 1.0
```

### Markdown with Frontmatter

Markdown format where the `instructions` field becomes the content and all other properties go into YAML frontmatter:

```markdown
---
name: my-agent
model: gpt-4
tools: []
temperature: 0.7
top_p: 1.0
---
You are a helpful AI assistant.

Please provide clear and concise responses to user questions.
```

**File Extensions:**

- JSON: `.json`
- YAML: `.yaml` or `.yml`
- Markdown: `.md`

## 📋 File Structure

```text
├── pyproject.toml               # Package configuration and dependencies
├── requirements.txt             # Core runtime dependencies
├── README.md                    # Project documentation
├── agents/                      # Agent definition files
├── tests/                       # Test files
└── src/aif_workflow_helpers/    # Main package source code
    ├── __init__.py              # Public exports
    ├── cli/
    │   └── main.py              # CLI entrypoint
    ├── core/
    │   ├── upload.py            # Upload + dependency logic
    │   ├── download.py          # Download + generalization logic
    │   └── formats.py           # Format handling utilities
    └── utils/
        ├── logging.py           # Shared logging configuration
        └── validation.py        # Agent name validation
```

## ⚠️ Important Notes

1. **Authentication**: Uses `DefaultAzureCredential` (interactive fallback enabled)
2. **Dependency Ordering**: Creates/updates in safe order via topological sort
3. **Name Safety**: Validation ensures only alphanumerics + hyphens (prefix/suffix applied consistently)
4. **Logging**: Centralized configurable logger (`configure_logging`)
5. **Efficiency**: Minimizes duplicate lookups by caching existing agents during batch operations
6. **Format Flexibility**: Supports JSON, YAML, and Markdown with frontmatter for different workflow preferences

## 🔍 Troubleshooting

### Installation Issues

```bash
# Install in development mode for local changes
pip install -e .

# Or install for production use
pip install .
```

### Authentication Errors

```bash
# Check environment variables
echo $AZURE_TENANT_ID
echo $PROJECT_ENDPOINT

# Or use CLI parameters (recommended for CI/CD or when environment variables conflict)
aif-workflow-helper --download-all-agents \
  --azure-tenant-id "your-tenant-id" \
  --project-endpoint "your-endpoint"

# Try interactive login
az login --tenant $AZURE_TENANT_ID
```

### Command Not Found Error

If `aif-workflow-helper` is not found after installation:

```bash
# Make sure you installed the package
pip install -e .

# Check if it's in your PATH
which aif-workflow-helper

# Or run directly with Python
python -m aif_workflow_helpers.cli.main --help
```

## 🎉 Success Output

Typical successful run output (truncated example):

```text
🔌 Testing connection...
✅ Connected! Found X existing agents

📥 Downloading agents...
Saved agent 'agent-name' to agent-name.json

📂 Reading agent files...
Found X agents

🚀 Creating/updating agents...
Processing 1/X: agent-name
✅ Successfully processed agent-name
```

## 🔄 CI/CD Pipeline

This project includes a comprehensive CI/CD pipeline using GitHub Actions that ensures code quality and functionality.

### Pipeline Features

- **Multi-Python Version Testing**: Tests on Python 3.10, 3.11, and 3.12
- **Automated Testing**: Runs all pytest tests with coverage reporting
- **Code Quality**: Includes linting with flake8
- **Package Testing**: Verifies the package can be built and installed correctly
- **CLI Testing**: Ensures the command-line interface works after installation

### Branch Protection

The main branch is protected with the following requirements:

- ✅ **Pull Request Required**: Direct pushes to main are not allowed
- ✅ **Tests Must Pass**: All CI checks must pass before merging
- ✅ **Code Review**: At least 1 approval required
- ✅ **Up-to-date Branch**: Branches must be current with main

### Running Tests Locally

Before submitting a PR, run tests locally to ensure they pass:

```bash
# Activate virtual environment
source .venv/bin/activate

# Install with dev dependencies
pip install -e .[dev]

# Run tests
pytest tests/ -v --tb=short

# Run with coverage
pytest tests/ -v --cov=src --cov-report=term-missing

# Check CLI functionality
aif-workflow-helper --help
```

### Contributing

1. Create a feature branch from `main`
2. Make your changes
3. Ensure all tests pass locally
4. Submit a pull request
5. Wait for CI to pass and get code review approval
6. Merge when approved

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "aif-workflow-helper",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "azure, ai, agents, workflow, automation",
    "author": "Pete Roden",
    "author_email": "Pete Roden <pete.roden@live.com>",
    "download_url": "https://files.pythonhosted.org/packages/cb/75/c131ba7610d653ada0448fd3d2fc5de7a48b02da25270b9290e90d8db855/aif_workflow_helper-0.1.1.tar.gz",
    "platform": null,
    "description": "# Azure AI Foundry Workflow Helpers\n\nUtilities for exporting (downloading) and importing (creating/updating) Azure AI Foundry Agents along with dependency awareness, normalization, and consistent logging.\n\n## \ud83d\ude80 Quick Start\n\n### 1. Set Environment Variables\n\n```bash\nexport AZURE_TENANT_ID='your-tenant-id-here'\nexport PROJECT_ENDPOINT='your-ai-foundry-endpoint-here'\n```\n\n**Example:**\n\n```bash\nexport AZURE_TENANT_ID='aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'\nexport PROJECT_ENDPOINT='https://your-resource.services.ai.azure.com/api/projects/your-project'\n```\n\n> **Note:** You can also provide these values via CLI parameters (`--azure-tenant-id` and `--project-endpoint`) which will take precedence over environment variables.\n\n### 2. Install the Package\n\nFor development (editable install):\n\n```bash\npip install -e .\n```\n\nOr for production:\n\n```bash\npip install .\n```\n\nThis will install all required dependencies automatically.\n\n### 3. Using the CLI (Recommended)\n\nThe CLI is available as a console script after installation.\n\n```bash\naif-workflow-helper --download-all-agents --agents-dir agents\n```\n\nCommon examples:\n\n```bash\n# Download all agents with optional prefix/suffix filtering\naif-workflow-helper --download-all-agents --prefix dev- --suffix -v1\n\n# Download a single agent\naif-workflow-helper --download-agent my_agent\n\n# Upload all agents from JSON definitions in a directory\naif-workflow-helper --upload-all-agents --agents-dir agents\n\n# Upload a single agent definition file\naif-workflow-helper --upload-agent my_agent --agents-dir agents\n\n# Download agents in different formats\naif-workflow-helper --download-all-agents --format json     # Default\naif-workflow-helper --download-all-agents --format yaml     # YAML format\naif-workflow-helper --download-all-agents --format md       # Markdown with frontmatter\n\n# Upload agents from different formats\naif-workflow-helper --upload-all-agents --format yaml\naif-workflow-helper --upload-agent my_agent --format md\n\n# Change log level\naif-workflow-helper --download-all-agents --log-level DEBUG\n\n# Override environment variables with CLI parameters\naif-workflow-helper --download-all-agents \\\n  --azure-tenant-id \"your-tenant-id\" \\\n  --project-endpoint \"https://your-endpoint.services.ai.azure.com/api/projects/your-project\"\n\n# Mix CLI parameters with environment variables (CLI takes precedence)\nexport AZURE_TENANT_ID=\"env-tenant-id\"\naif-workflow-helper --download-all-agents --azure-tenant-id \"cli-tenant-id\"  # Uses CLI value\n```\n\n### 4. Direct Library Usage\n\nYou can import and compose the underlying functions directly:\n\n```python\nfrom aif_workflow_helpers import (\n    configure_logging,\n    download_agents,\n    download_agent,\n    create_or_update_agents,\n    create_or_update_agent,\n    create_or_update_agent_from_file,\n    create_or_update_agents_from_files,\n)\nfrom azure.ai.agents import AgentsClient\nfrom azure.identity import DefaultAzureCredential\n\nconfigure_logging()\n\nclient = AgentsClient(\n    credential=DefaultAzureCredential(\n        exclude_interactive_browser_credential=False,\n        interactive_tenant_id=\"your-tenant-id\"\n    ),\n    endpoint=\"your-endpoint\"\n)\n\n# Bulk download\ndownload_agents(client, file_path=\"./agents\", prefix=\"\", suffix=\"\", format=\"json\")\n\n# Create/update from a directory (dependency ordered)\ncreate_or_update_agents_from_files(path=\"./agents\", agent_client=client, prefix=\"\", suffix=\"\", format=\"json\")\n```\n\n## \ud83d\udcc1 What the Tooling Does\n\n1. Downloads existing agents to normalized files (JSON, YAML, or Markdown with frontmatter)\n2. Normalizes (generalizes) definitions for portability (removes resource-specific fields)\n3. Infers and resolves inter-agent dependencies (connected agent tools)\n4. Creates or updates agents in dependency-safe order\n5. Applies optional prefix/suffix for environment namespacing\n6. Supports multiple file formats for flexible workflow integration\n\n## \ud83d\udd27 Core Functions\n\n### Download Functions\n\n- `download_agents(agent_client, file_path, prefix, suffix, format)` \u2013 Download and generalize all agents (optional prefix/suffix filters, format selection)\n- `download_agent(agent_name, agent_client, file_path, prefix, suffix, format)` \u2013 Download and generalize a single agent\n- `generalize_agent_dict(data, agent_client, prefix, suffix)` \u2013 Normalize agent JSON for portability\n\n### Upload Functions\n\n- `create_or_update_agent(agent_data, agent_client, existing_agents, prefix, suffix)` \u2013 Upsert a single agent object\n- `create_or_update_agents(agents_data, agent_client, prefix, suffix)` \u2013 Upsert multiple agents with dependency ordering\n- `create_or_update_agent_from_file(agent_name, path, agent_client, prefix, suffix, format)` \u2013 Upsert from a specific file\n- `create_or_update_agents_from_files(path, agent_client, prefix, suffix, format)` \u2013 Bulk load and upsert directory\n\n### Internal Helpers (Not all re-exported)\n\n- `read_agent_file(path)` / `read_agent_files(path, format)` \u2013 Load definitions in any supported format (used internally by *from_files* wrappers)\n- `extract_dependencies(agents_data)` \u2013 Build dependency graph\n- `dependency_sort(agents_data)` \u2013 Topological sort of agents\n- `get_agent_by_name(name, client)` \u2013 Lookup agent object\n- `get_agent_name(agent_id, client)` \u2013 Reverse lookup by ID\n\n## \ud83c\udfaf CLI Reference\n\n`aif-workflow-helper` arguments:\n\n```text\n--agents-dir DIR                Directory for agent definition files (default: agents)\n--download-all-agents           Download all existing agents\n--download-agent NAME           Download a single agent by name\n--upload-all-agents             Create/update all agents from definition files\n--upload-agent NAME             Create/update a single agent from definition file\n--prefix TEXT                   Optional prefix applied during download/upload\n--suffix TEXT                   Optional suffix applied during download/upload\n--format FORMAT                 File format: json, yaml, or md (default: json)\n--log-level LEVEL               Logging level (CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET)\n--azure-tenant-id TENANT_ID     Azure tenant ID (overrides AZURE_TENANT_ID environment variable)\n--project-endpoint ENDPOINT     AI Foundry project endpoint URL (overrides PROJECT_ENDPOINT environment variable)\n```\n\n### Authentication Priority\n\n1. **CLI Parameters** (highest priority): `--azure-tenant-id` and `--project-endpoint`\n2. **Environment Variables** (fallback): `AZURE_TENANT_ID` and `PROJECT_ENDPOINT`\n\n## \ud83d\udcc4 Supported File Formats\n\nThe tool supports three file formats for agent definitions:\n\n### JSON Format (Default)\n\nStandard JSON format with all agent properties in a single object:\n\n```json\n{\n  \"name\": \"my-agent\",\n  \"model\": \"gpt-4\",\n  \"instructions\": \"You are a helpful AI assistant...\",\n  \"tools\": [],\n  \"temperature\": 0.7,\n  \"top_p\": 1.0\n}\n```\n\n### YAML Format\n\nClean YAML format for better readability:\n\n```yaml\nname: my-agent\nmodel: gpt-4\ninstructions: |\n  You are a helpful AI assistant.\n  Please provide clear and concise responses.\ntools: []\ntemperature: 0.7\ntop_p: 1.0\n```\n\n### Markdown with Frontmatter\n\nMarkdown format where the `instructions` field becomes the content and all other properties go into YAML frontmatter:\n\n```markdown\n---\nname: my-agent\nmodel: gpt-4\ntools: []\ntemperature: 0.7\ntop_p: 1.0\n---\nYou are a helpful AI assistant.\n\nPlease provide clear and concise responses to user questions.\n```\n\n**File Extensions:**\n\n- JSON: `.json`\n- YAML: `.yaml` or `.yml`\n- Markdown: `.md`\n\n## \ud83d\udccb File Structure\n\n```text\n\u251c\u2500\u2500 pyproject.toml               # Package configuration and dependencies\n\u251c\u2500\u2500 requirements.txt             # Core runtime dependencies\n\u251c\u2500\u2500 README.md                    # Project documentation\n\u251c\u2500\u2500 agents/                      # Agent definition files\n\u251c\u2500\u2500 tests/                       # Test files\n\u2514\u2500\u2500 src/aif_workflow_helpers/    # Main package source code\n    \u251c\u2500\u2500 __init__.py              # Public exports\n    \u251c\u2500\u2500 cli/\n    \u2502   \u2514\u2500\u2500 main.py              # CLI entrypoint\n    \u251c\u2500\u2500 core/\n    \u2502   \u251c\u2500\u2500 upload.py            # Upload + dependency logic\n    \u2502   \u251c\u2500\u2500 download.py          # Download + generalization logic\n    \u2502   \u2514\u2500\u2500 formats.py           # Format handling utilities\n    \u2514\u2500\u2500 utils/\n        \u251c\u2500\u2500 logging.py           # Shared logging configuration\n        \u2514\u2500\u2500 validation.py        # Agent name validation\n```\n\n## \u26a0\ufe0f Important Notes\n\n1. **Authentication**: Uses `DefaultAzureCredential` (interactive fallback enabled)\n2. **Dependency Ordering**: Creates/updates in safe order via topological sort\n3. **Name Safety**: Validation ensures only alphanumerics + hyphens (prefix/suffix applied consistently)\n4. **Logging**: Centralized configurable logger (`configure_logging`)\n5. **Efficiency**: Minimizes duplicate lookups by caching existing agents during batch operations\n6. **Format Flexibility**: Supports JSON, YAML, and Markdown with frontmatter for different workflow preferences\n\n## \ud83d\udd0d Troubleshooting\n\n### Installation Issues\n\n```bash\n# Install in development mode for local changes\npip install -e .\n\n# Or install for production use\npip install .\n```\n\n### Authentication Errors\n\n```bash\n# Check environment variables\necho $AZURE_TENANT_ID\necho $PROJECT_ENDPOINT\n\n# Or use CLI parameters (recommended for CI/CD or when environment variables conflict)\naif-workflow-helper --download-all-agents \\\n  --azure-tenant-id \"your-tenant-id\" \\\n  --project-endpoint \"your-endpoint\"\n\n# Try interactive login\naz login --tenant $AZURE_TENANT_ID\n```\n\n### Command Not Found Error\n\nIf `aif-workflow-helper` is not found after installation:\n\n```bash\n# Make sure you installed the package\npip install -e .\n\n# Check if it's in your PATH\nwhich aif-workflow-helper\n\n# Or run directly with Python\npython -m aif_workflow_helpers.cli.main --help\n```\n\n## \ud83c\udf89 Success Output\n\nTypical successful run output (truncated example):\n\n```text\n\ud83d\udd0c Testing connection...\n\u2705 Connected! Found X existing agents\n\n\ud83d\udce5 Downloading agents...\nSaved agent 'agent-name' to agent-name.json\n\n\ud83d\udcc2 Reading agent files...\nFound X agents\n\n\ud83d\ude80 Creating/updating agents...\nProcessing 1/X: agent-name\n\u2705 Successfully processed agent-name\n```\n\n## \ud83d\udd04 CI/CD Pipeline\n\nThis project includes a comprehensive CI/CD pipeline using GitHub Actions that ensures code quality and functionality.\n\n### Pipeline Features\n\n- **Multi-Python Version Testing**: Tests on Python 3.10, 3.11, and 3.12\n- **Automated Testing**: Runs all pytest tests with coverage reporting\n- **Code Quality**: Includes linting with flake8\n- **Package Testing**: Verifies the package can be built and installed correctly\n- **CLI Testing**: Ensures the command-line interface works after installation\n\n### Branch Protection\n\nThe main branch is protected with the following requirements:\n\n- \u2705 **Pull Request Required**: Direct pushes to main are not allowed\n- \u2705 **Tests Must Pass**: All CI checks must pass before merging\n- \u2705 **Code Review**: At least 1 approval required\n- \u2705 **Up-to-date Branch**: Branches must be current with main\n\n### Running Tests Locally\n\nBefore submitting a PR, run tests locally to ensure they pass:\n\n```bash\n# Activate virtual environment\nsource .venv/bin/activate\n\n# Install with dev dependencies\npip install -e .[dev]\n\n# Run tests\npytest tests/ -v --tb=short\n\n# Run with coverage\npytest tests/ -v --cov=src --cov-report=term-missing\n\n# Check CLI functionality\naif-workflow-helper --help\n```\n\n### Contributing\n\n1. Create a feature branch from `main`\n2. Make your changes\n3. Ensure all tests pass locally\n4. Submit a pull request\n5. Wait for CI to pass and get code review approval\n6. Merge when approved\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Azure AI Foundry dev workflow helpers",
    "version": "0.1.1",
    "project_urls": {
        "Homepage": "https://github.com/peteroden/aif-workflow-helper",
        "Source": "https://github.com/peteroden/aif-workflow-helper"
    },
    "split_keywords": [
        "azure",
        " ai",
        " agents",
        " workflow",
        " automation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4c75832065879a92735997cb17ca03e203be6bf67968648d8f391f67cc7c84ac",
                "md5": "5ae60df3006c08c74e7708daeb1ff0a1",
                "sha256": "c6898bc152c7666ff4f07ee3d9cfde9bf978a6d9d6d9e160347aa849124258eb"
            },
            "downloads": -1,
            "filename": "aif_workflow_helper-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5ae60df3006c08c74e7708daeb1ff0a1",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 18985,
            "upload_time": "2025-09-11T23:41:13",
            "upload_time_iso_8601": "2025-09-11T23:41:13.679973Z",
            "url": "https://files.pythonhosted.org/packages/4c/75/832065879a92735997cb17ca03e203be6bf67968648d8f391f67cc7c84ac/aif_workflow_helper-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cb75c131ba7610d653ada0448fd3d2fc5de7a48b02da25270b9290e90d8db855",
                "md5": "52ec2625080cbfe856e48a5c8879c959",
                "sha256": "6f030ebe8967b53e6e4a8ba39fc6417222a069ac980e23afae14dc8ed1192280"
            },
            "downloads": -1,
            "filename": "aif_workflow_helper-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "52ec2625080cbfe856e48a5c8879c959",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 14189,
            "upload_time": "2025-09-11T23:41:15",
            "upload_time_iso_8601": "2025-09-11T23:41:15.186846Z",
            "url": "https://files.pythonhosted.org/packages/cb/75/c131ba7610d653ada0448fd3d2fc5de7a48b02da25270b9290e90d8db855/aif_workflow_helper-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-11 23:41:15",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "peteroden",
    "github_project": "aif-workflow-helper",
    "github_not_found": true,
    "lcname": "aif-workflow-helper"
}
        
Elapsed time: 1.52903s