Quick Start Guide

This guide demonstrates basic usage of the Time Series RAG system.

Basic Example

Quick Start Example
"""Quick Start Guide for Time Series RAG.

This script demonstrates basic usage of the Time Series RAG system.
"""

import numpy as np
from timeseries_rag.models import TimeSeriesEmbedder

The following example shows how to create and search time series data:

def basic_example():
    """Basic example of using Time Series RAG.
    
    This example shows how to:
    1. Create sample time series data
    2. Initialize the RAG system
    3. Add documents to the system
    4. Search for similar patterns
    """
    # Create sample data
    t = np.linspace(0, 10, 100)
    sine_wave = np.sin(t)
    noisy_sine = sine_wave + np.random.normal(0, 0.1, size=len(sine_wave))

    # Initialize components
    embedder = TimeSeriesEmbedder()
    rag = TimeSeriesRAG()

    # Add original sine wave to RAG system
    embedding = embedder.embed(sine_wave)
    doc = TimeSeriesDocument(
        id="sine_1",
        data=sine_wave,
        metadata={"type": "sine", "frequency": 1.0},
        embedding=embedding
    )
    rag.add_document(doc)

    # Search using noisy sine wave
    query_embedding = embedder.embed(noisy_sine)
    results = rag.search(query_embedding, k=5)

    # Print results
    for result in results:
        print(f"Document ID: {result['id']}")
        print(f"Distance: {result['distance']:.4f}")
        print(f"Metadata: {result['metadata']}")
        print()

Visualization Example

For a more visual example that includes plotting:

def visualization_example():
    """Example showing how to visualize results.
    
    This example demonstrates:
    1. Creating multiple time series
    2. Adding them to the RAG system
    3. Visualizing search results
    """
    import matplotlib.pyplot as plt

    # Create sample data
    t = np.linspace(0, 10, 100)
    patterns = {
        'sine': np.sin(t),
        'cosine': np.cos(t),
        'square': np.sign(np.sin(t)),
        'trend': 0.1 * t + np.sin(t)
    }

    # Initialize components
    embedder = TimeSeriesEmbedder()
    rag = TimeSeriesRAG()

    # Add patterns to RAG system
    for name, data in patterns.items():
        embedding = embedder.embed(data)
        doc = TimeSeriesDocument(
            id=name,
            data=data,
            metadata={"type": name},
            embedding=embedding
        )
        rag.add_document(doc)

    # Create a query pattern (noisy sine)
    query = patterns['sine'] + np.random.normal(0, 0.1, size=len(t))
    query_embedding = embedder.embed(query)
    results = rag.search(query_embedding, k=3)

    # Visualize results
    plt.figure(figsize=(12, 4))
    
    # Plot query
    plt.subplot(1, 2, 1)
    plt.plot(t, query)
    plt.title('Query Pattern')
    plt.xlabel('Time')
    plt.ylabel('Value')

    # Plot results
    plt.subplot(1, 2, 2)
    for result in results:
        plt.plot(t, result['data'], 
                label=f"{result['id']} (dist: {result['distance']:.2f})")
    plt.title('Similar Patterns')
    plt.xlabel('Time')
    plt.ylabel('Value')
    plt.legend()
    plt.tight_layout()
    plt.show()

Running the Examples

You can run these examples by executing the script:

python quickstart.py

This will run both examples and display the results.