ingenious


Nameingenious JSON
Version 0.2.2 PyPI version JSON
download
home_pageNone
SummaryAn enterprise-grade Python library for quickly setting up APIs to interact with AI Agents
upload_time2025-08-04 04:36:55
maintainerNone
docs_urlNone
authorNone
requires_python>=3.13
licenseMIT
keywords agent autogen azure fastapi
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Insight Ingenious

[![Version](https://img.shields.io/badge/version-0.2.2-blue.svg)](https://github.com/Insight-Services-APAC/ingenious)
[![Python](https://img.shields.io/badge/python-3.13+-green.svg)](https://www.python.org/downloads/)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Insight-Services-APAC/ingenious)
[![License](https://img.shields.io/badge/license-MIT-purple.svg)](LICENSE)

An enterprise-grade Python library for quickly setting up APIs to interact with AI Agents. Features multi-agent conversation flows using Microsoft's AutoGen, JWT authentication, and comprehensive Azure service integrations with support for both cloud and local implementations.

## Quick Start

Get up and running in 5 minutes with Azure OpenAI!

### Prerequisites
- Python 3.13 or higher (required - earlier versions are not supported)
- Azure OpenAI API credentials
- [uv package manager](https://docs.astral.sh/uv/)

### 5-Minute Setup

1. **Install and Initialize**:
    ```bash
    # Navigate to your desired project directory first
    cd /path/to/your/project

    # Set up the uv project
    uv init

    # Choose installation based on features needed
    uv add ingenious[standard] # Most common: includes SQL agent support (core, auth, ai, database)
    # OR
    uv add ingenious[azure-full] # Full Azure integration (core, auth, azure, ai, database, ui)
    # OR
    uv add ingenious # Minimal installation (base dependencies only)

    # Initialize project in the current directory
    uv run ingen init
    ```

2. **Configure Credentials**:
    Create a `.env` file with your Azure OpenAI credentials:
    ```bash
    # Create .env file in current directory
    touch .env

    # Edit .env file with your actual credentials
    ```

    **Required configuration (add to .env file)**:
    ```bash
    # Model Configuration (only INGENIOUS_* variables are used by the system)
    INGENIOUS_MODELS__0__MODEL=gpt-4.1-nano
    INGENIOUS_MODELS__0__API_TYPE=rest
    INGENIOUS_MODELS__0__API_VERSION=2024-12-01-preview
    INGENIOUS_MODELS__0__DEPLOYMENT=your-gpt4-deployment-name
    INGENIOUS_MODELS__0__API_KEY=your-actual-api-key-here
    INGENIOUS_MODELS__0__BASE_URL=https://your-resource.openai.azure.com/

    # Basic required settings
    INGENIOUS_CHAT_SERVICE__TYPE=multi_agent
    INGENIOUS_CHAT_HISTORY__DATABASE_TYPE=sqlite
    INGENIOUS_CHAT_HISTORY__DATABASE_PATH=./.tmp/chat_history.db
    INGENIOUS_CHAT_HISTORY__MEMORY_PATH=./.tmp

    # Optional: Authentication settings (enabled by default)
    # INGENIOUS_WEB_CONFIGURATION__ENABLE_AUTHENTICATION=false  # To disable auth
    ```

3. **Validate Configuration**:
    ```bash
    uv run ingen validate  # Check configuration before starting
    ```

    **If validation fails with port conflicts**:
    ```bash
    # Check if validation passes with different port
    INGENIOUS_WEB_CONFIGURATION__PORT=8001 uv run ingen validate

    # Or update your .env file before validating:
    echo "INGENIOUS_WEB_CONFIGURATION__PORT=8001" >> .env
    uv run ingen validate
    ```

    > **⚠️ BREAKING CHANGE**: Ingenious now uses **pydantic-settings** for configuration via environment variables. Legacy YAML configuration files (`config.yml`, `profiles.yml`) are **no longer supported** and must be migrated to environment variables with `INGENIOUS_` prefixes. Use the migration script:
    > ```bash
    > uv run python scripts/migrate_config.py --yaml-file config.yml --output .env
    > uv run python scripts/migrate_config.py --yaml-file profiles.yml --output .env.profiles
    > ```

4. **Start the Server**:
    ```bash
    # Start server on port 8000 (recommended for development)
    uv run ingen serve --port 8000

    # Additional options:
    # --host 0.0.0.0         # Bind host (default: 0.0.0.0)
    # --port                 # Port to bind (default: 80 or $WEB_PORT env var)
    # --config config.yml    # Legacy config file (deprecated - use environment variables)
    # --profile production   # Legacy profile (deprecated - use environment variables)
    ```

5. **Verify Health**:
    ```bash
    # Check server health
    curl http://localhost:8000/api/v1/health
    ```

### Common Issues

#### Port Conflicts
If you encounter "Address already in use" or validation fails with port conflicts:

1. **Check what's using the port**:
   ```bash
   lsof -i :8000  # Check if port 8000 is in use
   ```

2. **Use a different port**:
   ```bash
   uv run ingen serve --port 8001  # Try port 8001 instead
   ```

3. **Set port via environment variable** (recommended):
   ```bash
   # Add to your .env file
   INGENIOUS_WEB_CONFIGURATION__PORT=8001
   ```

4. **Update your test commands accordingly**:
   ```bash
   # Update health check
   curl http://localhost:8001/api/v1/health

   # Update workflow tests (use the new port in all examples below)
   ```

6. **Test with Core Workflows**:

    Create test files to avoid JSON escaping issues:
    ```bash
    # Create test files for each workflow
    echo '{"user_prompt": "Analyze this customer feedback: Great product", "conversation_flow": "classification-agent"}' > test_classification.json
    echo '{"user_prompt": "Search for documentation about setup", "conversation_flow": "knowledge-base-agent"}' > test_knowledge.json
    echo '{"user_prompt": "Show me all tables in the database", "conversation_flow": "sql-manipulation-agent"}' > test_sql.json

    # Test each workflow
    curl -X POST http://localhost:8000/api/v1/chat -H "Content-Type: application/json" -d @test_classification.json
    curl -X POST http://localhost:8000/api/v1/chat -H "Content-Type: application/json" -d @test_knowledge.json
    curl -X POST http://localhost:8000/api/v1/chat -H "Content-Type: application/json" -d @test_sql.json
    ```

**Expected Responses**:
- **Successful classification-agent response**: JSON with message analysis and categories
- **Successful knowledge-base-agent response**: JSON with relevant information retrieved (may indicate empty knowledge base initially)
- **Successful sql-manipulation-agent response**: JSON with query results or confirmation

**If you see error responses**, check the troubleshooting section above or the detailed [troubleshooting guide](docs/getting-started/troubleshooting.md).

That's it! You should see a JSON response with AI analysis of the input.

**Next Steps - Test Additional Workflows**:

7. **Test bike-insights Workflow (Requires `ingen init` first)**:

    The `bike-insights` workflow is part of the project template and must be initialized first:
    ```bash
    # First initialize project to get bike-insights workflow
    uv run ingen init

    # Create bike-insights test data file
    # IMPORTANT: bike-insights requires JSON data in the user_prompt field (double-encoded JSON)
    # Method 1: Use printf for precise formatting (recommended)
    printf '%s\n' '{
      "user_prompt": "{\"revision_id\": \"test-v1\", \"identifier\": \"test-001\", \"stores\": [{\"name\": \"Test Store\", \"location\": \"NSW\", \"bike_sales\": [{\"product_code\": \"MB-TREK-2021-XC\", \"quantity_sold\": 2, \"sale_date\": \"2023-04-01\", \"year\": 2023, \"month\": \"April\", \"customer_review\": {\"rating\": 4.5, \"comment\": \"Great bike\"}}], \"bike_stock\": []}]}",
      "conversation_flow": "bike-insights"
    }' > test_bike_insights.json

    # Method 2: Alternative using echo (simpler but watch for shell differences)
    echo '{
      "user_prompt": "{\"revision_id\": \"test-v1\", \"identifier\": \"test-001\", \"stores\": [{\"name\": \"Test Store\", \"location\": \"NSW\", \"bike_sales\": [{\"product_code\": \"MB-TREK-2021-XC\", \"quantity_sold\": 2, \"sale_date\": \"2023-04-01\", \"year\": 2023, \"month\": \"April\", \"customer_review\": {\"rating\": 4.5, \"comment\": \"Great bike\"}}], \"bike_stock\": []}]}",
      "conversation_flow": "bike-insights"
    }' > test_bike_insights.json

    # Method 3: If heredoc is preferred, ensure proper EOF placement
    cat > test_bike_insights.json << 'EOF'
    {
    "user_prompt": "{\"revision_id\": \"test-v1\", \"identifier\": \"test-001\", \"stores\": [{\"name\": \"Test Store\", \"location\": \"NSW\", \"bike_sales\": [{\"product_code\": \"MB-TREK-2021-XC\", \"quantity_sold\": 2, \"sale_date\": \"2023-04-01\", \"year\": 2023, \"month\": \"April\", \"customer_review\": {\"rating\": 4.5, \"comment\": \"Great bike\"}}], \"bike_stock\": []}]}",
    "conversation_flow": "bike-insights"
    }
    EOF

    # Test bike-insights workflow
    curl -X POST http://localhost:8000/api/v1/chat -H "Content-Type: application/json" -d @test_bike_insights.json
    ```

    **Expected bike-insights response**: JSON with comprehensive bike sales analysis from multiple agents (fiscal analysis, customer sentiment, summary, and bike lookup).

**Important Notes**:
- **Core Library Workflows** (`classification-agent`, `knowledge-base-agent`, `sql-manipulation-agent`) are always available and accept simple text prompts
- **Template Workflows** like `bike-insights` require JSON-formatted data with specific fields and are only available after running `ingen init`
- The `bike-insights` workflow is the recommended "Hello World" example for new users

## Workflow Categories

Insight Ingenious provides multiple conversation workflows with different configuration requirements:

### Core Library Workflows (Always Available)
These workflows are built into the Ingenious library and available immediately:

- `classification-agent` - Simple text classification and routing to categories (minimal config required)
- `knowledge-base-agent` - Search and retrieve information from knowledge bases (requires Azure Search or uses local ChromaDB by default)
- `sql-manipulation-agent` - Execute SQL queries based on natural language (requires Azure SQL or uses local SQLite by default)

> **Note**: Core workflows support both hyphenated (`classification-agent`) and underscored (`classification_agent`) naming formats for backward compatibility.

### Template Workflows (Created by `ingen init`)
These workflows are provided as examples in the project template when you run `ingen init`:

- `bike-insights` - Comprehensive bike sales analysis showcasing multi-agent coordination (**ONLY available after `ingen init`** - not included in the core library)

> **Important**: The `bike-insights` workflow is NOT part of the core library. It's a template example that's created when you initialize a new project with `ingen init`. This is the recommended "Hello World" example for learning how to build custom workflows.

### Configuration Requirements by Workflow
- **Minimal setup** (Azure OpenAI only): `classification-agent`, `bike-insights` (after `ingen init`)
- **Local implementations**: `knowledge-base-agent` (ChromaDB), `sql-manipulation-agent` (SQLite) - stable and work out-of-the-box
- **Azure integrations**: Azure Search for knowledge base, Azure SQL for database queries - fully supported with proper configuration

> **Note**: Both local (ChromaDB, SQLite) and Azure (Azure Search, Azure SQL) implementations are production-ready. Choose based on your infrastructure requirements. Use `uv run ingen workflows` to check configuration requirements for each workflow.

## Troubleshooting

For common issues like port conflicts, configuration errors, or workflow problems, see the [detailed troubleshooting guide](docs/getting-started/troubleshooting.md).

**Quick fixes for common issues**:
- **Port conflicts**: Use `--port 8001` or set `INGENIOUS_WEB_CONFIGURATION__PORT=8001` in .env
- **JSON escaping errors**: Use file-based approach with heredoc as shown in bike-insights example above
- **Validation failures**: Check the troubleshooting guide for specific error solutions
- **Workflow not found**: Ensure you've run `uv run ingen init` for template workflows like bike-insights
- **Azure OpenAI connection issues**: Verify your API key, endpoint, and deployment name in .env file

## Documentation

For detailed documentation, see the [docs](https://insight-services-apac.github.io/ingenious/).

## Contributing

Contributions are welcome! Please see [CONTRIBUTING.md](https://github.com/Insight-Services-APAC/ingenious/blob/main/CONTRIBUTING.md) for guidelines.

## License

This project is licensed under the terms specified in the [LICENSE](https://github.com/Insight-Services-APAC/ingenious/blob/main/LICENSE) file.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ingenious",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.13",
    "maintainer_email": null,
    "keywords": "agent, autogen, azure, fastapi",
    "author": null,
    "author_email": "John Rampono <john.rampono@insight.com>, Kokko Ng <kokko.ng@insight.com>, Elliot Zhu <elliot.zhu@insight.com>",
    "download_url": "https://files.pythonhosted.org/packages/fb/25/db5d67a1b6677cd0d765e916ae53e429b571cadf19f0189e1776fcb25294/ingenious-0.2.2.tar.gz",
    "platform": null,
    "description": "# Insight Ingenious\n\n[![Version](https://img.shields.io/badge/version-0.2.2-blue.svg)](https://github.com/Insight-Services-APAC/ingenious)\n[![Python](https://img.shields.io/badge/python-3.13+-green.svg)](https://www.python.org/downloads/)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Insight-Services-APAC/ingenious)\n[![License](https://img.shields.io/badge/license-MIT-purple.svg)](LICENSE)\n\nAn enterprise-grade Python library for quickly setting up APIs to interact with AI Agents. Features multi-agent conversation flows using Microsoft's AutoGen, JWT authentication, and comprehensive Azure service integrations with support for both cloud and local implementations.\n\n## Quick Start\n\nGet up and running in 5 minutes with Azure OpenAI!\n\n### Prerequisites\n- Python 3.13 or higher (required - earlier versions are not supported)\n- Azure OpenAI API credentials\n- [uv package manager](https://docs.astral.sh/uv/)\n\n### 5-Minute Setup\n\n1. **Install and Initialize**:\n    ```bash\n    # Navigate to your desired project directory first\n    cd /path/to/your/project\n\n    # Set up the uv project\n    uv init\n\n    # Choose installation based on features needed\n    uv add ingenious[standard] # Most common: includes SQL agent support (core, auth, ai, database)\n    # OR\n    uv add ingenious[azure-full] # Full Azure integration (core, auth, azure, ai, database, ui)\n    # OR\n    uv add ingenious # Minimal installation (base dependencies only)\n\n    # Initialize project in the current directory\n    uv run ingen init\n    ```\n\n2. **Configure Credentials**:\n    Create a `.env` file with your Azure OpenAI credentials:\n    ```bash\n    # Create .env file in current directory\n    touch .env\n\n    # Edit .env file with your actual credentials\n    ```\n\n    **Required configuration (add to .env file)**:\n    ```bash\n    # Model Configuration (only INGENIOUS_* variables are used by the system)\n    INGENIOUS_MODELS__0__MODEL=gpt-4.1-nano\n    INGENIOUS_MODELS__0__API_TYPE=rest\n    INGENIOUS_MODELS__0__API_VERSION=2024-12-01-preview\n    INGENIOUS_MODELS__0__DEPLOYMENT=your-gpt4-deployment-name\n    INGENIOUS_MODELS__0__API_KEY=your-actual-api-key-here\n    INGENIOUS_MODELS__0__BASE_URL=https://your-resource.openai.azure.com/\n\n    # Basic required settings\n    INGENIOUS_CHAT_SERVICE__TYPE=multi_agent\n    INGENIOUS_CHAT_HISTORY__DATABASE_TYPE=sqlite\n    INGENIOUS_CHAT_HISTORY__DATABASE_PATH=./.tmp/chat_history.db\n    INGENIOUS_CHAT_HISTORY__MEMORY_PATH=./.tmp\n\n    # Optional: Authentication settings (enabled by default)\n    # INGENIOUS_WEB_CONFIGURATION__ENABLE_AUTHENTICATION=false  # To disable auth\n    ```\n\n3. **Validate Configuration**:\n    ```bash\n    uv run ingen validate  # Check configuration before starting\n    ```\n\n    **If validation fails with port conflicts**:\n    ```bash\n    # Check if validation passes with different port\n    INGENIOUS_WEB_CONFIGURATION__PORT=8001 uv run ingen validate\n\n    # Or update your .env file before validating:\n    echo \"INGENIOUS_WEB_CONFIGURATION__PORT=8001\" >> .env\n    uv run ingen validate\n    ```\n\n    > **\u26a0\ufe0f BREAKING CHANGE**: Ingenious now uses **pydantic-settings** for configuration via environment variables. Legacy YAML configuration files (`config.yml`, `profiles.yml`) are **no longer supported** and must be migrated to environment variables with `INGENIOUS_` prefixes. Use the migration script:\n    > ```bash\n    > uv run python scripts/migrate_config.py --yaml-file config.yml --output .env\n    > uv run python scripts/migrate_config.py --yaml-file profiles.yml --output .env.profiles\n    > ```\n\n4. **Start the Server**:\n    ```bash\n    # Start server on port 8000 (recommended for development)\n    uv run ingen serve --port 8000\n\n    # Additional options:\n    # --host 0.0.0.0         # Bind host (default: 0.0.0.0)\n    # --port                 # Port to bind (default: 80 or $WEB_PORT env var)\n    # --config config.yml    # Legacy config file (deprecated - use environment variables)\n    # --profile production   # Legacy profile (deprecated - use environment variables)\n    ```\n\n5. **Verify Health**:\n    ```bash\n    # Check server health\n    curl http://localhost:8000/api/v1/health\n    ```\n\n### Common Issues\n\n#### Port Conflicts\nIf you encounter \"Address already in use\" or validation fails with port conflicts:\n\n1. **Check what's using the port**:\n   ```bash\n   lsof -i :8000  # Check if port 8000 is in use\n   ```\n\n2. **Use a different port**:\n   ```bash\n   uv run ingen serve --port 8001  # Try port 8001 instead\n   ```\n\n3. **Set port via environment variable** (recommended):\n   ```bash\n   # Add to your .env file\n   INGENIOUS_WEB_CONFIGURATION__PORT=8001\n   ```\n\n4. **Update your test commands accordingly**:\n   ```bash\n   # Update health check\n   curl http://localhost:8001/api/v1/health\n\n   # Update workflow tests (use the new port in all examples below)\n   ```\n\n6. **Test with Core Workflows**:\n\n    Create test files to avoid JSON escaping issues:\n    ```bash\n    # Create test files for each workflow\n    echo '{\"user_prompt\": \"Analyze this customer feedback: Great product\", \"conversation_flow\": \"classification-agent\"}' > test_classification.json\n    echo '{\"user_prompt\": \"Search for documentation about setup\", \"conversation_flow\": \"knowledge-base-agent\"}' > test_knowledge.json\n    echo '{\"user_prompt\": \"Show me all tables in the database\", \"conversation_flow\": \"sql-manipulation-agent\"}' > test_sql.json\n\n    # Test each workflow\n    curl -X POST http://localhost:8000/api/v1/chat -H \"Content-Type: application/json\" -d @test_classification.json\n    curl -X POST http://localhost:8000/api/v1/chat -H \"Content-Type: application/json\" -d @test_knowledge.json\n    curl -X POST http://localhost:8000/api/v1/chat -H \"Content-Type: application/json\" -d @test_sql.json\n    ```\n\n**Expected Responses**:\n- **Successful classification-agent response**: JSON with message analysis and categories\n- **Successful knowledge-base-agent response**: JSON with relevant information retrieved (may indicate empty knowledge base initially)\n- **Successful sql-manipulation-agent response**: JSON with query results or confirmation\n\n**If you see error responses**, check the troubleshooting section above or the detailed [troubleshooting guide](docs/getting-started/troubleshooting.md).\n\nThat's it! You should see a JSON response with AI analysis of the input.\n\n**Next Steps - Test Additional Workflows**:\n\n7. **Test bike-insights Workflow (Requires `ingen init` first)**:\n\n    The `bike-insights` workflow is part of the project template and must be initialized first:\n    ```bash\n    # First initialize project to get bike-insights workflow\n    uv run ingen init\n\n    # Create bike-insights test data file\n    # IMPORTANT: bike-insights requires JSON data in the user_prompt field (double-encoded JSON)\n    # Method 1: Use printf for precise formatting (recommended)\n    printf '%s\\n' '{\n      \"user_prompt\": \"{\\\"revision_id\\\": \\\"test-v1\\\", \\\"identifier\\\": \\\"test-001\\\", \\\"stores\\\": [{\\\"name\\\": \\\"Test Store\\\", \\\"location\\\": \\\"NSW\\\", \\\"bike_sales\\\": [{\\\"product_code\\\": \\\"MB-TREK-2021-XC\\\", \\\"quantity_sold\\\": 2, \\\"sale_date\\\": \\\"2023-04-01\\\", \\\"year\\\": 2023, \\\"month\\\": \\\"April\\\", \\\"customer_review\\\": {\\\"rating\\\": 4.5, \\\"comment\\\": \\\"Great bike\\\"}}], \\\"bike_stock\\\": []}]}\",\n      \"conversation_flow\": \"bike-insights\"\n    }' > test_bike_insights.json\n\n    # Method 2: Alternative using echo (simpler but watch for shell differences)\n    echo '{\n      \"user_prompt\": \"{\\\"revision_id\\\": \\\"test-v1\\\", \\\"identifier\\\": \\\"test-001\\\", \\\"stores\\\": [{\\\"name\\\": \\\"Test Store\\\", \\\"location\\\": \\\"NSW\\\", \\\"bike_sales\\\": [{\\\"product_code\\\": \\\"MB-TREK-2021-XC\\\", \\\"quantity_sold\\\": 2, \\\"sale_date\\\": \\\"2023-04-01\\\", \\\"year\\\": 2023, \\\"month\\\": \\\"April\\\", \\\"customer_review\\\": {\\\"rating\\\": 4.5, \\\"comment\\\": \\\"Great bike\\\"}}], \\\"bike_stock\\\": []}]}\",\n      \"conversation_flow\": \"bike-insights\"\n    }' > test_bike_insights.json\n\n    # Method 3: If heredoc is preferred, ensure proper EOF placement\n    cat > test_bike_insights.json << 'EOF'\n    {\n    \"user_prompt\": \"{\\\"revision_id\\\": \\\"test-v1\\\", \\\"identifier\\\": \\\"test-001\\\", \\\"stores\\\": [{\\\"name\\\": \\\"Test Store\\\", \\\"location\\\": \\\"NSW\\\", \\\"bike_sales\\\": [{\\\"product_code\\\": \\\"MB-TREK-2021-XC\\\", \\\"quantity_sold\\\": 2, \\\"sale_date\\\": \\\"2023-04-01\\\", \\\"year\\\": 2023, \\\"month\\\": \\\"April\\\", \\\"customer_review\\\": {\\\"rating\\\": 4.5, \\\"comment\\\": \\\"Great bike\\\"}}], \\\"bike_stock\\\": []}]}\",\n    \"conversation_flow\": \"bike-insights\"\n    }\n    EOF\n\n    # Test bike-insights workflow\n    curl -X POST http://localhost:8000/api/v1/chat -H \"Content-Type: application/json\" -d @test_bike_insights.json\n    ```\n\n    **Expected bike-insights response**: JSON with comprehensive bike sales analysis from multiple agents (fiscal analysis, customer sentiment, summary, and bike lookup).\n\n**Important Notes**:\n- **Core Library Workflows** (`classification-agent`, `knowledge-base-agent`, `sql-manipulation-agent`) are always available and accept simple text prompts\n- **Template Workflows** like `bike-insights` require JSON-formatted data with specific fields and are only available after running `ingen init`\n- The `bike-insights` workflow is the recommended \"Hello World\" example for new users\n\n## Workflow Categories\n\nInsight Ingenious provides multiple conversation workflows with different configuration requirements:\n\n### Core Library Workflows (Always Available)\nThese workflows are built into the Ingenious library and available immediately:\n\n- `classification-agent` - Simple text classification and routing to categories (minimal config required)\n- `knowledge-base-agent` - Search and retrieve information from knowledge bases (requires Azure Search or uses local ChromaDB by default)\n- `sql-manipulation-agent` - Execute SQL queries based on natural language (requires Azure SQL or uses local SQLite by default)\n\n> **Note**: Core workflows support both hyphenated (`classification-agent`) and underscored (`classification_agent`) naming formats for backward compatibility.\n\n### Template Workflows (Created by `ingen init`)\nThese workflows are provided as examples in the project template when you run `ingen init`:\n\n- `bike-insights` - Comprehensive bike sales analysis showcasing multi-agent coordination (**ONLY available after `ingen init`** - not included in the core library)\n\n> **Important**: The `bike-insights` workflow is NOT part of the core library. It's a template example that's created when you initialize a new project with `ingen init`. This is the recommended \"Hello World\" example for learning how to build custom workflows.\n\n### Configuration Requirements by Workflow\n- **Minimal setup** (Azure OpenAI only): `classification-agent`, `bike-insights` (after `ingen init`)\n- **Local implementations**: `knowledge-base-agent` (ChromaDB), `sql-manipulation-agent` (SQLite) - stable and work out-of-the-box\n- **Azure integrations**: Azure Search for knowledge base, Azure SQL for database queries - fully supported with proper configuration\n\n> **Note**: Both local (ChromaDB, SQLite) and Azure (Azure Search, Azure SQL) implementations are production-ready. Choose based on your infrastructure requirements. Use `uv run ingen workflows` to check configuration requirements for each workflow.\n\n## Troubleshooting\n\nFor common issues like port conflicts, configuration errors, or workflow problems, see the [detailed troubleshooting guide](docs/getting-started/troubleshooting.md).\n\n**Quick fixes for common issues**:\n- **Port conflicts**: Use `--port 8001` or set `INGENIOUS_WEB_CONFIGURATION__PORT=8001` in .env\n- **JSON escaping errors**: Use file-based approach with heredoc as shown in bike-insights example above\n- **Validation failures**: Check the troubleshooting guide for specific error solutions\n- **Workflow not found**: Ensure you've run `uv run ingen init` for template workflows like bike-insights\n- **Azure OpenAI connection issues**: Verify your API key, endpoint, and deployment name in .env file\n\n## Documentation\n\nFor detailed documentation, see the [docs](https://insight-services-apac.github.io/ingenious/).\n\n## Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](https://github.com/Insight-Services-APAC/ingenious/blob/main/CONTRIBUTING.md) for guidelines.\n\n## License\n\nThis project is licensed under the terms specified in the [LICENSE](https://github.com/Insight-Services-APAC/ingenious/blob/main/LICENSE) file.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "An enterprise-grade Python library for quickly setting up APIs to interact with AI Agents",
    "version": "0.2.2",
    "project_urls": {
        "Documentation": "https://insight-services-apac.github.io/ingenious/",
        "Homepage": "https://github.com/Insight-Services-APAC/ingenious",
        "Issues": "https://github.com/Insight-Services-APAC/ingenious/issues",
        "Repository": "https://github.com/Insight-Services-APAC/ingenious"
    },
    "split_keywords": [
        "agent",
        " autogen",
        " azure",
        " fastapi"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3ca891bb5b9e9931fc1f7c3378a3cfccf7b85438bafb35c528fb071e03a14807",
                "md5": "9645c548a66d0424dc6e62bc648ec5ef",
                "sha256": "2b0dc88f7c28f0ec04f8b4c3a56fd2ed6510203c7d1c40794d1ac2d284549c37"
            },
            "downloads": -1,
            "filename": "ingenious-0.2.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9645c548a66d0424dc6e62bc648ec5ef",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.13",
            "size": 386970,
            "upload_time": "2025-08-04T04:36:54",
            "upload_time_iso_8601": "2025-08-04T04:36:54.018319Z",
            "url": "https://files.pythonhosted.org/packages/3c/a8/91bb5b9e9931fc1f7c3378a3cfccf7b85438bafb35c528fb071e03a14807/ingenious-0.2.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fb25db5d67a1b6677cd0d765e916ae53e429b571cadf19f0189e1776fcb25294",
                "md5": "3365d3dca22ecf4885ac93208dcdd232",
                "sha256": "beb5d24422cfea980107edf48f42d31c2590e2fc04721915e3d2a74d33c41488"
            },
            "downloads": -1,
            "filename": "ingenious-0.2.2.tar.gz",
            "has_sig": false,
            "md5_digest": "3365d3dca22ecf4885ac93208dcdd232",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.13",
            "size": 314400,
            "upload_time": "2025-08-04T04:36:55",
            "upload_time_iso_8601": "2025-08-04T04:36:55.965504Z",
            "url": "https://files.pythonhosted.org/packages/fb/25/db5d67a1b6677cd0d765e916ae53e429b571cadf19f0189e1776fcb25294/ingenious-0.2.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-04 04:36:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Insight-Services-APAC",
    "github_project": "ingenious",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ingenious"
}
        
Elapsed time: 2.78312s