kosh
Use Kosh to persist results and files, query them later, and build custom loaders, transformers, and operators for data extraction and slice-aware processing.
معلومات المصدر
- المستودع
- llnl/kosh
- آخر نشاط في المصدر
- ٢٤ يوليو ٢٠٢٦ في ٢٠:٥٨
- لغة SKILL.md المكتشفة
- الإنجليزية
- النجوم
- ٩
- التفرعات
- ٠
خيارات التثبيت
يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.
مراجعة ملفات المصدر
اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.
مستكشف الملفات
2 ملفاتعرض SKILL.md
SKILL.md
تعليمات المصدر · معاينة للقراءة فقط- name
- kosh
- description
- Use Kosh to persist results and files, query them later, and build custom loaders, transformers, and operators for data extraction and slice-aware processing.
# Kosh Skill
Use this skill when an agent needs to store results, attach files, query them
later, or build lightweight data-processing hooks around files and datasets.
## Common Patterns
- Create or open a store with `kosh.connect(...)` or `kosh.utils.create_new_db(...)`.
- Create a dataset with `store.create(...)`, then store metadata and attach
files with `dataset.associate(uri, mime_type, metadata=...)`.
- Create an ensemble with `store.create_ensemble(...)` when a group of datasets should be searched together.
- Query later with `store.find(...)` for datasets, `store.find_ensembles(...)`
for ensembles, `dataset.find(...)` for associated sources,
`ensemble.find_datasets(...)` for member datasets, plus
`dataset.list_features()` and `dataset.describe_feature(...)`.
- Read results with `dataset.get(feature, transformers=[...])` or
`dataset.get_execution_graph(feature, transformers=[...])`.
## Storing Results
- Use datasets to hold metadata about a run, a job, or a generated artifact.
- Associate output files directly to the dataset so they can be rediscovered by feature name or metadata.
- Use ensembles to collect related runs and add ensemble-level metadata for the group.
- Keep a given attribute in one place: put dataset-specific values on the dataset and group-level values on the ensemble.
- Use `ensemble_tags` for labels that belong to an ensemble membership, not the dataset itself. These tags are searchable with `ensemble.find_datasets(ensemble_tags=...)` and can be inspected with `dataset.list_ensemble_tags(...)`.
- Example: `ensemble_tags={"even_or_odd": "even", "data_type": "test data"}`.
## Workflow Tracking
- Use the workflow CLI (`kosh_workflow`) when you want to create or update datasets from a step plus parameter set.
- Use `kosh.parameter_store.StepRequest` and `kosh.parameter_store.apply_step(...)` from Python when scripting workflow updates.
- Treat `workflow_step` as the default step field unless a different field name is configured with `--step-field`.
- Use `--ensemble` to scope workflow operations to one ensemble, `--param key=value` or implicit `--key=value` filters to match init parameters, and `--upsert-init` when the init step should reuse an existing dataset instead of creating a duplicate.
- Use `--meta` for dataset metadata updates and `--associate` for files that belong on the dataset; use `--emeta`/`--ensemble-meta` and `--associate-ensemble` for ensemble-level updates.
## Parsing Output Files
- Add a custom loader when Kosh needs to parse a file format that is not
already supported or when the file should expose custom features.
- Implement `list_features()` and `extract()` on a `KoshLoader`.
- A loader can expose multiple features and return data in different formats,
so use it when the raw file needs parsing or format-specific access.
- Register the loader with `store.add_loader(MyLoader)` before querying
associated files that depend on it.
- For loaders that support direct indexing, implement `__getitem__` so slices
can be served efficiently.
## Feature Aliases
- Use `alias_feature` when different sources expose the same data under
different names, such as uppercase CSV headers versus lowercase HDF5
datasets.
- Map aliases both ways when needed, for example `{"col_a": "COL_A"}` on one
dataset and `{"COL_A": "col_a"}` on the other.
- Aliases let `dataset["col_a"]` or `dataset["COL_A"]` resolve to the same
underlying feature when the exact name is not present.
## Transformers and Operators
- Use `KoshTransformer` or `@kosh.numpy_transformer` /
`@kosh.typed_transformer` to reshape, switch formats, or post-process one
input stream.
- Use `KoshOperator` or `@kosh.numpy_operator` / `@kosh.typed_operator` to
combine multiple inputs, including data loaded from different sources or
formats.
- Keep transforms small and composable; use them to normalize or convert
results after loading, not to replace the loader’s parsing job.
## Slicing and Propagation
- Kosh uses `__getitem__` for indexing.
- Implement `__getitem_propagate__(self, key, input_index)` in transformers or
operators when a slice should be pushed back toward the loader.
- If propagation is not possible, return `None` and let Kosh apply the slice after the upstream step runs.
## Notebook References
- Store creation and metadata:
`examples/Example_00_Open_Store_And_Add_Datasets.ipynb`,
`Example_03_Working_with_Datasets.ipynb`
- Reading data and feature access: `examples/Example_02_Read_Data.ipynb`, `Example_column_based_text_files.ipynb`
- Ensembles and workflow tracking:
`examples/Example_Ensembles.ipynb`, `Example_Simulation_Workflow.ipynb`,
`Example_Workflow_Manager.ipynb`
- Custom loaders: `examples/Example_Custom_Loader.ipynb`, `Example_MNIST.ipynb`, `Example_Sidre.ipynb`
- Transformers and operators:
`examples/Example_05a_Transformers.ipynb`,
`Example_05b_Transformers-SKL.ipynb`, `Example_06_Operators.ipynb`
- Advanced slicing and propagation: `examples/Example_Advanced_Data_Slicing.ipynb`
- Data movement and interoperability:
`examples/Example_07_Transferring_Datasets.ipynb`,
`Example_Moving_Datasets.ipynb`, `Kosh_and_Sina_Interoperability.ipynb`
## Practical Notes
- Prefer attaching metadata to the dataset or ensemble instead of inventing a separate bookkeeping layer.
- Use existing file-backed loaders when possible; add a custom loader only
when the built-ins do not expose the data cleanly.
- Keep notebook-style examples aligned with the existing `Example_*.ipynb` naming pattern.
عرض على GitHub