Cloudmesh AI Common
cloudmesh-ai-common provides a set of shared utilities for the Cloudmesh AI ecosystem, focusing on system introspection, structured telemetry, standardized logging, and unified remote execution.
Quick Links:
- API Reference - Full technical documentation of all modules.
Installation
Using pip
pip install cloudmesh-ai-common
Using pipx (for isolated environment)
pipx install cloudmesh-ai-common
Features
1. Unified Remote Execution (cloudmesh.ai.common.remote)
A robust wrapper around paramiko for standardized SSH and SFTP operations across different host environments.
- Command Execution: Execute shell commands with timeout support and capture exit status, stdout, and stderr.
- File Transfers: Simplified
uploadanddownloadmethods using SFTP. - Direct Remote Writing:
write_remote_fileallows writing strings directly to remote paths, ideal for deploying scripts or configuration files without local temporary files. - Session Management: Implemented as a context manager to ensure connections are always closed properly.
2. Enhanced Console & I/O (cloudmesh.ai.common.io)
A set of utilities to standardize user interaction and file handling.
- Rich Console: A custom
Consoleclass extendingrich.console.Consolewith semantic helpers:ok(): Success messages in green.error(): Error messages in red.warning(): Warning messages in yellow.msg(): General messages in blue.note(): Informational notes in cyan.ynchoice(): Standardized yes/no interactive prompts.
- Path Expansion:
path_expand()resolves~, environment variables, and relative paths into absolute POSIX paths. - YAML Helpers: Safe
load_yamlanddump_yamlutilities that handle directory creation automatically. - Visual Banners:
banner()utility to create structured, styled panels for high-level information.
3. Enhanced System Introspection (cloudmesh.ai.common.sys)
The system utility provides deep insights into the host hardware and environment.
- Hardware Detection:
- GPU: Automatic detection for NVIDIA, AMD, Apple Silicon, and Intel GPUs.
- Topology: Detection of NUMA nodes and high-speed network interfaces (InfiniBand/RoCE).
- CPU: Detailed processor descriptions across macOS, Windows, and Linux.
- Thermal Monitoring: Standardized CPU temperature retrieval across Linux and macOS to detect thermal throttling.
- Container Awareness: Automatic detection of Docker and Kubernetes environments, including extraction of K8s namespace metadata.
- Real-time Metrics:
- Live CPU utilization (overall and per-core).
- Detailed memory and swap usage.
- Disk I/O statistics and usage.
- System Info: The
systeminfo()function collects a comprehensive snapshot of the environment. Userealtime=Trueto include live performance metrics.
4. Advanced Telemetry System (cloudmesh.ai.common.telemetry)
A pluggable telemetry framework for emitting structured performance and status data from AI commands.
- Pluggable Backends:
JSONFileBackend: Emits records in JSONL format for easy ingestion by log aggregators.SQLiteBackend: Stores telemetry in a structured SQLite database for complex querying.TextBackend: Provides human-readable summaries for developers and operators.
- Automatic Tracking: The
track()context manager automatically handles start/complete/fail events and calculates task duration. - Async Support: The
AsyncTelemetryclass allows non-blocking telemetry emission usingasyncio, ensuring that I/O operations do not interfere with compute-intensive AI tasks. - Standardized Events: Built-in helpers for
start(),complete(), andfail()events.
5. Telemetry Aggregation (cloudmesh.ai.common.aggregation)
The TelemetryAggregator utility allows for the analysis of emitted telemetry data.
- Multi-source Loading: Load data from either JSONL files or SQLite databases.
- Statistical Summaries: Calculate success rates, status distributions, and command frequency.
- Metric Analysis: Aggregate specific KPIs to find average, minimum, and maximum values across multiple runs.
6. Standardized Logging (cloudmesh.ai.common.logging)
Provides a consistent logging interface across all AI components to ensure uniform log formatting and traceability.
7. DotDict - Enhanced Dictionary (cloudmesh.ai.common.dotdict)
A powerful dictionary subclass that supports both attribute-style access and dot-notation for working with nested configuration data.
- Dual Access: Access values via
config.key(attribute) orconfig["key"](bracket). - Deep Nesting: Navigate nested structures with dot notation like
config["level1.level2.key"]. - Auto-Conversion: Standard dictionaries are automatically converted to DotDict recursively.
- Placeholder Expansion: Replace
{variable}placeholders with values from the dict. - Deep Merging: Merge configurations with recursive dictionary merging.
- Smart Lookup:
smart_get()searches recursively for keys when not found directly. - Serialization: Built-in YAML and JSON output with support for multi-line strings.
- Ordered: Maintains insertion order via OrderedDict base class.
Usage Examples
DotDict - Enhanced Dictionary
from cloudmesh.ai.common.dotdict import DotDict
# Create from dict or kwargs
config = DotDict({"cloudmesh": {"ai": {"server": "uva"}}})
# Attribute access (chaining)
print(config.cloudmesh.ai.server) # 'uva'
# Dot-notation bracket access
print(config["cloudmesh.ai.server"]) # 'uva'
# Safe access with defaults (supports dot-notation)
print(config.get("cloudmesh.ai.server")) # 'uva'
print(config.get("missing.key", "default")) # 'default'
# Smart get - searches recursively for keys
print(config.smart_get("server")) # 'uva'
# Assignment with auto-creation of nested structures
config["cloudmesh.ai.port"] = 8000
config.version = "2.0"
# Deep merging
config.merge({"training": {"epochs": 100, "lr": 0.001}})
print(config.training.epochs) # 100
# Placeholder expansion
config = DotDict({"name": "gemma", "path": "/models/{name}"})
expanded = config.expand()
print(expanded.path) # '/models/gemma'
# Recursive expansion
config = DotDict({
"base": "/home",
"user": "{base}/user",
"path": "{user}/models"
})
expanded = config.expand()
print(expanded.path) # '/home/user/models'
# Serialization
config = DotDict({"a": {"b": 1}})
print(config.to_json(indent=2))
print(config.yaml) # YAML output with literal blocks for multi-line strings
Remote Execution
from cloudmesh.ai.common.remote import RemoteExecutor
host = "dgx-node-1"
with RemoteExecutor(host) as executor:
# Execute a command
status, stdout, stderr = executor.execute("nvidia-smi")
if status == 0:
print(f"GPU Status: {stdout}")
# Write a script directly to the remote host
script_content = "#!/bin/bash\necho 'Hello from remote'"
executor.write_remote_file(script_content, "/tmp/hello.sh")
executor.execute("chmod +x /tmp/hello.sh")
executor.execute("/tmp/hello.sh")
Enhanced Console & I/O
from cloudmesh.ai.common.io import console, banner, path_expand
# Use semantic console methods
console.ok("Operation completed successfully!")
console.error("Failed to connect to server")
# Interactive yes/no choice
if console.ynchoice("Do you want to proceed?", default=True):
console.msg("Proceeding...")
# Path expansion
abs_path = path_expand("~/$PROJECT/data.csv")
print(f"Absolute path: {abs_path}")
# Visual banners
console.print(banner("System Status", "All systems operational\nLatency: 12ms"))
System Info
from cloudmesh.ai.common import sys as ai_sys
# Get static and real-time system info
info = ai_sys.systeminfo(realtime=True)
print(f"CPU: {info['cpu']}")
print(f"GPU Present: {info['gpu.present']}")
print(f"CPU Temp: {info.get('cpu.temp')}")
print(f"Container: {info.get('container.type', 'none')}")
Synchronous Telemetry with Context Manager
from cloudmesh.ai.common.telemetry import Telemetry, SQLiteBackend, TextBackend
telemetry = Telemetry(
"my-ai-command",
backends=[SQLiteBackend("metrics.db"), TextBackend()]
)
# Use the track context manager for automatic timing and error handling
with telemetry.track(message="Running inference", metrics={"model": "llama-3"}):
# ... perform work ...
# If an exception occurs here, it is automatically logged as a 'failed' event
pass
Asynchronous Telemetry
import asyncio
from cloudmesh.ai.common.telemetry import AsyncTelemetry, JSONFileBackend
async def run_command():
telemetry = AsyncTelemetry(
"async-ai-task",
backends=[JSONFileBackend("async_metrics.jsonl")]
)
async with telemetry.track(message="Processing async request"):
# ... perform async work ...
await asyncio.sleep(0.1)
asyncio.run(run_command())
Telemetry Aggregation
from cloudmesh.ai.common.aggregation import TelemetryAggregator
# Analyze data from a SQLite database
agg = TelemetryAggregator("metrics.db")
# Get high-level summary
summary = agg.get_summary()
print(f"Success Rate: {summary['success_rate']}")
# Aggregate a specific metric across all runs
latency_stats = agg.aggregate_metric("duration_sec")
print(f"Average Duration: {latency_stats['avg']}s")
Metadata
Release files for cloudmesh-ai-common 7.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| cloudmesh_ai_common-7.1.5-py3-none-any.whl | Python 3 | none | any | Details for cloudmesh_ai_common-7.1.5-py3-none-any.whl |
Release files / cloudmesh_ai_common-7.1.5-py3-none-any.whl
| Download URL | cloudmesh_ai_common-7.1.5-py3-none-any.whl |
|---|---|
| Size | 69.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9b2415bc7ea76f156399806d25f247a63a1c97aa025b361e141e8f7a66bfee6c
|
|
BLAKE2b-256 checksum How to use checksums |
7a682f21e1cef58e9c18d04b4af0a534919a3816844807a365608e904733e43b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Security for cloudmesh-ai-common 7.1.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.