CHARM: A Foundation Model for Time-Series Embeddings

Turn complex time-series data into scalable, reusable embeddings built for real-world AI systems

Get Started

CHARM (Channel-Aware Representation Model)

A purpose-built foundation embedding model designed to generalize across domains, accelerate development, and power forecasting, anomaly detection, optimization, and other mission-critical time-series applications — without rebuilding models from scratch.

Anomaly detection: Identify unusual patterns in time series data

Clustering: Group similar time series together

Classification: Categorize time series into predefined classes

Forecasting: Improve time series predictions

Similarity search: Find similar patterns across large datasets

Getting Started

CHARM is currently available in private preview.

Interested in early access? Request Now

Once your access is approved, follow the instructions below to install the Python SDK and get started. The SDK enables you to interact directly with the CHARM time-series embedding model and generate scalable embeddings from multivariate time series data.

Creating and Exporting API Key

Please contact us using the form below to receive a CHARM API key. Be sure to store your key securely, such as in your .zshrc file or another protected environment configuration.

Create an .env File

Create an .env file in your project directory and export it as an environment variable:

This allows you to keep your credentials separate from your code and avoid hardcoding sensitive information.

CHARM_API_KEY=your-api-key CHARM_BASE_URL=https://ftse.c3ci.cloud/ftse

Install CHARM SDK

In order to use CHARM API using Python, you can install CHARM SDK for Python using pip:

pip install c3_charm

Using CHARM

from c3_charm import CharmClient from dotenv import load_dotenv import os # Load environment variables from .env file load_dotenv() # Get API key and base URL from environment variables api_key = os.getenv("CHARM_API_KEY", "your-api-key") base_url = os.getenv("CHARM_BASE_URL", "https://ftse.c3ci.cloud/ftse") # Create a client client = CharmClient( base_url=base_url, api_key=api_key, timeout=30, # Increased timeout for potentially large requests max_retries=3 # Automatically retry failed requests ) # Generate embeddings for time series data response = client.embeddings.create( descriptions=[["engine", "temperature"], ["fan", "speed"]], ts_array=[ # First time series (10 timesteps, 2 channels) [ [0.1, 0.2], [0.3, 0.4], [0.5, 0.6], [0.7, 0.8], [0.9, 1.0], [1.1, 1.2], [1.3, 1.4], [1.5, 1.6], [1.7, 1.8], [1.9, 2.0] ], # Second time series (10 timesteps, 2 channels) [ [2.1, 2.2], [2.3, 2.4], [2.5, 2.6], [2.7, 2.8], [2.9, 3.0], [3.1, 3.2], [3.3, 3.4], [3.5, 3.6], [3.7, 3.8], [3.9, 4.0] ] ], return_tensors="np", # Options: "list", "np", "torch" ) # Access the embeddings embeddings = response.embeds print(f"Model: {response.model}") print(f"Embeddings shape: {embeddings.shape}")

Using the API

Synchronous Method

(client.embeddings.create): Suitable for smaller datasets or when simplicity is preferred. Processes batches sequentially, which can be slow for large datasets. Now includes progress tracking with tqdm. Avoid sending very large batches (>100 samples) in a single request to prevent timeouts.

Asynchronous Method

(client.embeddings..async_create): Recommended for large datasets. Significantly faster due to concurrent processing with features like:

  • Parallel batch processing
  • Bounded concurrency to avoid overwhelming the server
  • Progress tracking for long-running operations
  • HTTP/2 support for efficient connections

Get Early Access

Initial Production Deployment. In Weeks.

Cut through complexity and deliver results fast with C3 AI.

Our expert-led C3 AI Initial Production deployment gets your agentic AI application into production in just twelve weeks.