Data Tracking
Track data for runs and tasks
Beyond tracking execution, Strikes provides a powerful data flow system that allows you to log, store, and analyze data generated during your runs. Data can serve as parameters to your tasks and runs as well as input and output objects.
One of Strikes’ most powerful features is its ability to store and organize different types of data within your runs and tasks. Understanding these capabilities helps you capture the right information to evaluate and improve your agents and systems.
Parameters
Parameters are lightweight key-value pairs typically used for configuration values, settings, or hyperparameters:
Parameters are ideal for:
- Tracking experiment configurations
- Recording hyperparameters
- Setting environment variables
- Storing metadata about your run
Parameters are stored efficiently, making it easy to filter and compare runs quickly. They’re primarily intended for scalar values (strings, numbers, booleans) that define your experiment’s setup.
Parameters do not store multiple values over time. If you need to track changes to a parameter over the lifetime of a run, consider using the parameter inside a task and call it multiple times.
Inputs and Outputs
For rich data that you have available during execution, Strikes provides input and output storage:
Strikes maintains a rich serialization layer to support many different kinds of Python objects:
- Dictionaries, lists, and other JSON-serializable objects
- NumPy arrays and Pandas DataFrames
- Custom objects (serialized with pickle)
- Large datasets (automatically stored efficiently)
This capability allows you to capture the complete data flow through your system, creating a comprehensive record of what went in and what came out.
Task Input and Output Tracking
Tasks automatically track their function arguments as inputs and return values as an output:
You can control this behavior with task options:
Artifacts
For files and directories, Strikes provides artifact storage:
Artifacts are ideal for:
- Model checkpoints
- Generated images or media
- Log files
- Datasets
- Source code snapshots
When you log an artifact, Strikes:
- Preserves the directory structure
- Handles large files efficiently
- Deduplicates identical files
- Makes everything available for download later
Content-Based Storage
Strikes uses content-based storage for objects and artifacts:
This approach:
- Eliminates redundant storage of identical data
- Makes it efficient to store the same object multiple times
- Enables linking between identical objects across runs
Object Linking
You can create explicit relationships between objects:
This creates a graph of relationships between your data, enabling powerful analyses such as:
- Tracing data lineage (Where did this output come from?)
- Understanding dependencies (What inputs affected this result?)
- Building complex data flow graphs
Associating Metrics with Objects
You can connect metrics directly to specific objects using the origin
parameter:
This allows you to:
- Track metrics for specific objects
- Compare different objects based on their metrics
- Build datasets of inputs, outputs, and measurements
Best Practices
To make the most of Strikes’ data storage capabilities:
-
Be deliberate about what you store:
- Log inputs that define your experiment
- Log outputs that represent results
- Use parameters for configuration
- Use metrics for measurements
-
Use consistent naming:
- Adopt naming conventions for inputs, outputs, and parameters
- Keep names consistent across different runs for easier comparison
-
Create meaningful relationships:
- Link related objects to create data lineage
- Associate metrics with their origin objects
- Build hierarchical task structures that reflect your workflow
-
Consider storage efficiency:
- For very large data, consider storing summaries or references
- Use artifacts for large files rather than inputs/outputs
- Leverage content-based deduplication for repeated data
-
Integrate with your workflow:
- Log data at natural points in your code
- Use tasks to structure data collection
- Leverage the automatic input/output tracking for functions