The chat responses are generated using Generative AI technology for intuitive search and may not be entirely accurate. They are not intended as professional advice. For full details, including our use rights, privacy practices and potential export control restrictions, please refer to our Generative AI Service Privacy Information. As this is a test version, please let us know if something irritating comes up. Like you get recommended a chocolate fudge ice cream instead of an energy managing application. If that occurs, please use the feedback button in our contact form!
Skip to content

Revolutionize your AI operations across locations with seamless cloud integration. Our Industrial AI Suite runs on a new line of Industrial PCs powered by NVIDIA's GPUs accelerating AI execution. This makes complex AI tasks in advanced automation broadly available and boosts efficiency.

common

Resource management module for SimaticAI SDK.

This module provides functionality to manage and copy built-in SimaticAI SDK resources (such as ImageSet utilities) to user component directories. It handles source code copying, dependency management, and automatic requirements.txt updates.

The module maintains a registry of available resources with their file paths and dependencies, allowing users to easily integrate common SDK utilities into their pipeline components.

Key Features:

  • Resource registry management
  • Automatic dependency resolution
  • Resource file copying to target directories
  • Automatic update of requirements.txt file
  • Built-in support for ImageSet resource

Available Resources:

  • ImageSet: Provides image dataset handling utilities with OpenCV dependencies

Example Usage:

from simaticai.common.resources import copy_resource_to
copy_resource_to("ImageSet", "my_component_source_dir")
# This copies imageset.py and updates requirements.txt with necessary dependencies

Functions:

  • get_resource: Retrieves information about a specific SDK resource
  • copy_resource_to: Copies a resource file to a component directory with dependencies

Constants:

  • SIMATICAI_RESOURCE_KEYS: List of available resource names
  • SIMATICAI_RESOURCES: Registry dictionary of all built-in resources

resources

get_resource(resource_name)

Checks the availability of a SimaticAI SDK resource and retrieves information.

Parameters:

NameTypeDescriptionDefault
resource_namestr

Name of the SimaticAI SDK resource to be retrieved.

required
Source code in docs/industrial-ai-suite/sdk/simaticai/common/resources.py
def get_resource(resource_name: str):
    """
    Checks the availability of a SimaticAI SDK resource and retrieves information.

    Args:
        resource_name (str): Name of the SimaticAI SDK resource to be retrieved.
    Returns:
        dict: Information about the resource including 'path', 'dependencies', and 'source' file location.
    Raises:
        AssertionError: If the resource_name is not supported.
    """
    if resource_name not in SIMATICAI_RESOURCES:
        raise AssertionError(f"SimaticAI SDK resource '{resource_name}' is not supported.")

    resource_info = SIMATICAI_RESOURCES[resource_name]

    return {
        'path': resource_info['path'],
        'name': Path(resource_info['path']).name,
        'dependencies': resource_info['dependencies'],
        'source': module_resources.files("simaticai") / resource_info['path']
    }

copy_resource_to(resource_name, component_directory)

Copies a SimaticAI SDK resource file to the component directory.

This method allows adding common SimaticAI SDK resource files such as imageset.py to a component. The method automatically adds the required dependencies for the resource file too.

Parameters:

NameTypeDescriptionDefault
resource_namestr

Name of the SimaticAI SDK resource to be copied. Currently supported only: 'ImageSet'

required
component_directorypath - like

Root folder of your component's source code.

required
Source code in docs/industrial-ai-suite/sdk/simaticai/common/resources.py
def copy_resource_to(resource_name: str, component_directory: os.PathLike | str):
    """
    Copies a SimaticAI SDK resource file to the component directory.

    This method allows adding common SimaticAI SDK resource files such as `imageset.py` to a component.
    The method automatically adds the required dependencies for the resource file too.

    Args:
        resource_name (str): Name of the SimaticAI SDK resource to be copied. Currently supported only: 'ImageSet'
        component_directory (path-like): Root folder of your component's source code.
    Raises:
        AssertionError: If the resource_name is not supported.
    """
    resource = get_resource(resource_name)

    target_path = Path(component_directory) / resource['name']
    if target_path.exists():
        _logger.warning(f"Resource '{resource['name']}' is already added to target directory '{target_path}'.")
    else:
        _logger.warning(f"Adding SimaticAI SDK resource '{resource['name']}' to component directory '{component_directory}'. Creating file at '{target_path}'.")
        target_path.parent.mkdir(parents=True, exist_ok=True)
        shutil.copy(resource['source'], target_path)

    resource_dependencies = resource['dependencies']
    not_required = set()
    requirements_path = Path(component_directory, 'requirements.txt')
    if requirements_path.is_file():
        requirements = requirements_path.read_text(encoding='utf8').splitlines()
        requirements = [line.strip() for line in requirements if not line.strip().startswith('#')]
        for dependency in resource_dependencies:
            spec = pep508.parse_line(f"{dependency}")
            if any(spec.name in line for line in requirements):
                not_required.add(dependency)
    if len(not_required) < len(resource_dependencies):
        with requirements_path.open("a+", encoding="utf8") as req_file:
            req_file.write(f"\n# Additional dependencies required for '{resource_name}':")
            for dependency in set(resource_dependencies) - not_required:
                req_file.write(f"\n{dependency}")
    _logger.warning(f"Dependencies were added to {requirements_path}.")
    _logger.warning('Please make sure that every dependency version is compatible with your existing dependencies!')