create-ailab 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- create_ailab-0.1.0/.gitignore +27 -0
- create_ailab-0.1.0/CHANGELOG.md +40 -0
- create_ailab-0.1.0/LICENSE +21 -0
- create_ailab-0.1.0/PKG-INFO +299 -0
- create_ailab-0.1.0/README.md +262 -0
- create_ailab-0.1.0/docs/README.md +8 -0
- create_ailab-0.1.0/examples/README.md +41 -0
- create_ailab-0.1.0/pyproject.toml +94 -0
- create_ailab-0.1.0/src/create_ai/__init__.py +13 -0
- create_ailab-0.1.0/src/create_ai/__main__.py +8 -0
- create_ailab-0.1.0/src/create_ai/cli/__init__.py +1 -0
- create_ailab-0.1.0/src/create_ai/cli/app.py +82 -0
- create_ailab-0.1.0/src/create_ai/cli/commands/__init__.py +1 -0
- create_ailab-0.1.0/src/create_ai/cli/commands/add.py +28 -0
- create_ailab-0.1.0/src/create_ai/cli/commands/doctor.py +62 -0
- create_ailab-0.1.0/src/create_ai/cli/commands/list_types.py +28 -0
- create_ailab-0.1.0/src/create_ai/cli/commands/new.py +346 -0
- create_ailab-0.1.0/src/create_ai/cli/console.py +36 -0
- create_ailab-0.1.0/src/create_ai/cli/prompts.py +184 -0
- create_ailab-0.1.0/src/create_ai/cli/reporters.py +31 -0
- create_ailab-0.1.0/src/create_ai/core/__init__.py +6 -0
- create_ailab-0.1.0/src/create_ai/core/configuration.py +166 -0
- create_ailab-0.1.0/src/create_ai/core/dependencies.py +128 -0
- create_ailab-0.1.0/src/create_ai/core/generator.py +195 -0
- create_ailab-0.1.0/src/create_ai/core/project.py +100 -0
- create_ailab-0.1.0/src/create_ai/core/registry.py +98 -0
- create_ailab-0.1.0/src/create_ai/core/templating.py +130 -0
- create_ailab-0.1.0/src/create_ai/core/validation.py +22 -0
- create_ailab-0.1.0/src/create_ai/errors.py +46 -0
- create_ailab-0.1.0/src/create_ai/generators/__init__.py +18 -0
- create_ailab-0.1.0/src/create_ai/generators/base.py +94 -0
- create_ailab-0.1.0/src/create_ai/generators/computer_vision.py +34 -0
- create_ailab-0.1.0/src/create_ai/generators/deep_learning.py +31 -0
- create_ailab-0.1.0/src/create_ai/generators/llm.py +37 -0
- create_ailab-0.1.0/src/create_ai/generators/ml.py +33 -0
- create_ailab-0.1.0/src/create_ai/integrations/__init__.py +20 -0
- create_ailab-0.1.0/src/create_ai/integrations/base.py +58 -0
- create_ailab-0.1.0/src/create_ai/integrations/docker.py +18 -0
- create_ailab-0.1.0/src/create_ai/integrations/git.py +55 -0
- create_ailab-0.1.0/src/create_ai/integrations/jupyter.py +11 -0
- create_ailab-0.1.0/src/create_ai/integrations/package_manager.py +88 -0
- create_ailab-0.1.0/src/create_ai/integrations/python.py +33 -0
- create_ailab-0.1.0/src/create_ai/integrations/uv.py +44 -0
- create_ailab-0.1.0/src/create_ai/py.typed +0 -0
- create_ailab-0.1.0/src/create_ai/templates/common/.dockerignore.j2 +22 -0
- create_ailab-0.1.0/src/create_ai/templates/common/.env.example.j2 +14 -0
- create_ailab-0.1.0/src/create_ai/templates/common/.github/workflows/ci.yml.j2 +38 -0
- create_ailab-0.1.0/src/create_ai/templates/common/.gitignore.j2 +47 -0
- create_ailab-0.1.0/src/create_ai/templates/common/.pre-commit-config.yaml.j2 +15 -0
- create_ailab-0.1.0/src/create_ai/templates/common/Dockerfile.j2 +27 -0
- create_ailab-0.1.0/src/create_ai/templates/common/LICENSE.j2 +21 -0
- create_ailab-0.1.0/src/create_ai/templates/common/Makefile.j2 +29 -0
- create_ailab-0.1.0/src/create_ai/templates/common/README.md.j2 +84 -0
- create_ailab-0.1.0/src/create_ai/templates/common/configs/config.yaml.j2 +9 -0
- create_ailab-0.1.0/src/create_ai/templates/common/notebooks/01-exploration.ipynb.j2 +29 -0
- create_ailab-0.1.0/src/create_ai/templates/common/pyproject.toml.j2 +58 -0
- create_ailab-0.1.0/src/create_ai/templates/common/src/{{package_name}}/__init__.py.j2 +5 -0
- create_ailab-0.1.0/src/create_ai/templates/common/src/{{package_name}}/config.py.j2 +35 -0
- create_ailab-0.1.0/src/create_ai/templates/common/src/{{package_name}}/tracking.py.j2 +63 -0
- create_ailab-0.1.0/src/create_ai/templates/common/tests/conftest.py.j2 +13 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/configs/model.yaml.j2 +5 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/configs/training.yaml.j2 +10 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/evaluate.py.j2 +31 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/inference.py.j2 +32 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/datasets/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/datasets/folder.py.j2 +27 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/datasets/synthetic.py.j2 +58 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/evaluation/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/evaluation/evaluate.py.j2 +22 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/inference/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/inference/predict.py.j2 +27 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/models/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/models/cnn.py.j2 +49 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/training/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/training/trainer.py.j2 +81 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/transforms/__init__.py.j2 +5 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/src/{{package_name}}/transforms/pipelines.py.j2 +31 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/tests/test_model.py.j2 +15 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/tests/test_trainer.py.j2 +23 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/tests/test_transforms.py.j2 +14 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/pytorch/train.py.j2 +53 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/configs/model.yaml.j2 +5 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/configs/training.yaml.j2 +9 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/evaluate.py.j2 +30 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/inference.py.j2 +33 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/datasets/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/datasets/synthetic.py.j2 +43 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/evaluation/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/evaluation/evaluate.py.j2 +11 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/inference/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/inference/predict.py.j2 +12 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/models/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/models/cnn.py.j2 +36 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/training/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/training/trainer.py.j2 +28 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/src/{{package_name}}/transforms/__init__.py.j2 +18 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/tests/test_model.py.j2 +16 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/tests/test_trainer.py.j2 +24 -0
- create_ailab-0.1.0/src/create_ai/templates/computer_vision/tensorflow/train.py.j2 +48 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/configs/model.yaml.j2 +6 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/configs/training.yaml.j2 +10 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/evaluate.py.j2 +31 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/inference.py.j2 +30 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/datasets/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/datasets/synthetic.py.j2 +58 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/evaluation/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/evaluation/evaluate.py.j2 +22 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/inference/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/inference/predict.py.j2 +27 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/losses/__init__.py.j2 +17 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/models/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/models/mlp.py.j2 +39 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/training/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/src/{{package_name}}/training/trainer.py.j2 +84 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/tests/test_inference.py.j2 +16 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/tests/test_model.py.j2 +15 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/tests/test_trainer.py.j2 +27 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/pytorch/train.py.j2 +55 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/configs/model.yaml.j2 +6 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/configs/training.yaml.j2 +9 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/evaluate.py.j2 +30 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/inference.py.j2 +31 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/datasets/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/datasets/synthetic.py.j2 +41 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/evaluation/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/evaluation/evaluate.py.j2 +11 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/inference/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/inference/predict.py.j2 +12 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/models/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/models/mlp.py.j2 +31 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/training/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/src/{{package_name}}/training/trainer.py.j2 +28 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/tests/test_model.py.j2 +16 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/tests/test_trainer.py.j2 +24 -0
- create_ailab-0.1.0/src/create_ai/templates/deep_learning/tensorflow/train.py.j2 +48 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/configs/evaluation.yaml.j2 +5 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/configs/model.yaml.j2 +4 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/configs/training.yaml.j2 +8 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/data/sample.jsonl +8 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/evaluate.py.j2 +40 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/inference.py.j2 +34 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/datasets/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/datasets/jsonl.py.j2 +34 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/evaluation/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/evaluation/perplexity.py.j2 +26 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/inference/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/inference/generate.py.j2 +27 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/models/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/models/loader.py.j2 +22 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/prompts/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/prompts/templates.py.j2 +29 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/training/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/training/finetune.py.j2 +42 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/utils/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/src/{{package_name}}/utils/seeding.py.j2 +25 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/tests/test_config.py.j2 +10 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/tests/test_datasets.py.j2 +20 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/tests/test_prompts.py.j2 +17 -0
- create_ailab-0.1.0/src/create_ai/templates/llm/train.py.j2 +60 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/configs/config.yaml.j2 +18 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/evaluate.py.j2 +33 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/predict.py.j2 +33 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/data/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/data/dataset.py.j2 +56 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/evaluation/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/evaluation/metrics.py.j2 +22 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/features/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/features/preprocessing.py.j2 +12 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/inference/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/inference/predict.py.j2 +21 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/models/__init__.py.j2 +1 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/models/model.py.j2 +36 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/src/{{package_name}}/pipeline.py.j2 +56 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/tests/test_data.py.j2 +21 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/tests/test_model.py.j2 +24 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/tests/test_pipeline.py.j2 +19 -0
- create_ailab-0.1.0/src/create_ai/templates/ml/train.py.j2 +23 -0
- create_ailab-0.1.0/src/create_ai/utils/__init__.py +1 -0
- create_ailab-0.1.0/src/create_ai/utils/filesystem.py +68 -0
- create_ailab-0.1.0/src/create_ai/utils/shell.py +111 -0
- create_ailab-0.1.0/src/create_ai/utils/validation.py +95 -0
- create_ailab-0.1.0/tests/conftest.py +36 -0
- create_ailab-0.1.0/tests/integration/test_cli.py +63 -0
- create_ailab-0.1.0/tests/integration/test_generate.py +101 -0
- create_ailab-0.1.0/tests/integration/test_generated_ml_runs.py +57 -0
- create_ailab-0.1.0/tests/integration/test_options.py +85 -0
- create_ailab-0.1.0/tests/unit/test_configuration.py +60 -0
- create_ailab-0.1.0/tests/unit/test_dependencies.py +63 -0
- create_ailab-0.1.0/tests/unit/test_generators.py +51 -0
- create_ailab-0.1.0/tests/unit/test_registry.py +46 -0
- create_ailab-0.1.0/tests/unit/test_templating.py +60 -0
- create_ailab-0.1.0/tests/unit/test_validation.py +61 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
*.egg-info/
|
|
7
|
+
.eggs/
|
|
8
|
+
|
|
9
|
+
# Environments
|
|
10
|
+
.venv/
|
|
11
|
+
venv/
|
|
12
|
+
env/
|
|
13
|
+
|
|
14
|
+
# Tooling caches
|
|
15
|
+
.pytest_cache/
|
|
16
|
+
.ruff_cache/
|
|
17
|
+
.mypy_cache/
|
|
18
|
+
.coverage
|
|
19
|
+
htmlcov/
|
|
20
|
+
|
|
21
|
+
# Editors / OS
|
|
22
|
+
.idea/
|
|
23
|
+
.vscode/
|
|
24
|
+
.DS_Store
|
|
25
|
+
|
|
26
|
+
# Example output
|
|
27
|
+
examples/out/
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented here. The format is based on
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres
|
|
5
|
+
to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.1.0] - 2026-08-31
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `create-ai` CLI with interactive prompts and a fully equivalent flag-driven
|
|
14
|
+
(CI) mode — both produce the same `ProjectConfig`.
|
|
15
|
+
- Commands: `new` (also the bare `create-ai <name>` form), `list`, `doctor`,
|
|
16
|
+
and an `add` placeholder for v0.2.
|
|
17
|
+
- Four project types, each generating real, runnable example code:
|
|
18
|
+
- **Machine Learning** — scikit-learn load/split/train/evaluate/save pipeline.
|
|
19
|
+
- **Deep Learning** — PyTorch or TensorFlow: dataset, model, trainer,
|
|
20
|
+
checkpoints, evaluation, inference.
|
|
21
|
+
- **LLM / GenAI** — Hugging Face causal-LM fine-tuning, prompt templates,
|
|
22
|
+
perplexity evaluation, text generation, bundled sample dataset.
|
|
23
|
+
- **Computer Vision** — PyTorch or TensorFlow image-classification scaffold
|
|
24
|
+
with datasets, transforms, CNN, trainer and inference.
|
|
25
|
+
- Environment managers: `uv` (default) and `venv`, behind an `EnvironmentManager`
|
|
26
|
+
abstraction ready for Poetry/Conda.
|
|
27
|
+
- Integrations: Git init, Dockerfile/`.dockerignore` generation, Jupyter
|
|
28
|
+
notebook scaffold, MLflow / Weights & Biases tracking module (import-guarded).
|
|
29
|
+
- Tooling in generated projects: `pyproject.toml`, `pytest` suite that exercises
|
|
30
|
+
a real training step, Ruff (optionally + Black), pre-commit config, CI
|
|
31
|
+
workflow, README that reflects the chosen configuration.
|
|
32
|
+
- Composable architecture: a generic `Registry`, one declarative
|
|
33
|
+
`ProjectGenerator` per domain, an isolated dependency-resolution layer, and a
|
|
34
|
+
layered Jinja2 template system (`common/` + `<domain>/`).
|
|
35
|
+
- Safety: never overwrites a non-empty directory (without `--force`), never
|
|
36
|
+
deletes user files, degrades gracefully when optional tools are missing,
|
|
37
|
+
`--dry-run` and `--debug` flags.
|
|
38
|
+
|
|
39
|
+
[Unreleased]: https://github.com/rizatalebi/create-ai/compare/v0.1.0...HEAD
|
|
40
|
+
[0.1.0]: https://github.com/rizatalebi/create-ai/releases/tag/v0.1.0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Riza Talebi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: create-ailab
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: The Vite-style project scaffolder for AI/ML engineering.
|
|
5
|
+
Project-URL: Homepage, https://github.com/rizatalebi/create-ai
|
|
6
|
+
Project-URL: Repository, https://github.com/rizatalebi/create-ai
|
|
7
|
+
Project-URL: Documentation, https://github.com/rizatalebi/create-ai/tree/main/docs
|
|
8
|
+
Project-URL: Changelog, https://github.com/rizatalebi/create-ai/blob/main/CHANGELOG.md
|
|
9
|
+
Project-URL: Issues, https://github.com/rizatalebi/create-ai/issues
|
|
10
|
+
Author-email: Riza Talebi <rizatalebi@eoailab.com>
|
|
11
|
+
License: MIT
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: ai,cli,generator,llm,ml,pytorch,scaffold,template
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
24
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
25
|
+
Requires-Python: >=3.10
|
|
26
|
+
Requires-Dist: jinja2>=3.1.3
|
|
27
|
+
Requires-Dist: pydantic>=2.6.0
|
|
28
|
+
Requires-Dist: questionary>=2.0.1
|
|
29
|
+
Requires-Dist: rich>=13.7.0
|
|
30
|
+
Requires-Dist: typer>=0.12.0
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
33
|
+
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: ruff>=0.5.0; extra == 'dev'
|
|
36
|
+
Description-Content-Type: text/markdown
|
|
37
|
+
|
|
38
|
+
# create-ai
|
|
39
|
+
|
|
40
|
+
[](https://github.com/rizatalebi/create-ai/actions/workflows/ci.yml)
|
|
41
|
+
[](https://pypi.org/project/create-ailab/)
|
|
42
|
+
[](https://pypi.org/project/create-ailab/)
|
|
43
|
+
[](LICENSE)
|
|
44
|
+
|
|
45
|
+
**The Vite experience for AI/ML engineering.** Run one command, answer a few
|
|
46
|
+
questions, and get a clean, modern, production-ready AI project — structure,
|
|
47
|
+
dependencies, config, tooling, tests, docs and *runnable* example code.
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
create-ai my-project
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
🚀 Create AI Project
|
|
55
|
+
|
|
56
|
+
? Project name: my-project
|
|
57
|
+
? What type of AI project? › Machine Learning
|
|
58
|
+
? Python version? › 3.12
|
|
59
|
+
? Framework? › scikit-learn
|
|
60
|
+
? Environment manager? › uv
|
|
61
|
+
? Testing? › pytest
|
|
62
|
+
? Code quality? › Ruff
|
|
63
|
+
? Experiment tracking? › None
|
|
64
|
+
? Docker? › No
|
|
65
|
+
? Jupyter? › No
|
|
66
|
+
? Initialize Git? › Yes
|
|
67
|
+
|
|
68
|
+
✔ Created my-project/
|
|
69
|
+
✔ Created 5 scaffold directories
|
|
70
|
+
✔ Rendered 27 files
|
|
71
|
+
✔ Created .venv with uv
|
|
72
|
+
✔ Installed dependencies with uv sync
|
|
73
|
+
✔ Initialised Git repository with an initial commit
|
|
74
|
+
|
|
75
|
+
🎉 Project created successfully!
|
|
76
|
+
|
|
77
|
+
Next steps:
|
|
78
|
+
cd my-project
|
|
79
|
+
source .venv/bin/activate
|
|
80
|
+
uv run python train.py
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 1. What is create-ai?
|
|
86
|
+
|
|
87
|
+
`create-ai` is an **orchestrator / scaffolder**, not another ML framework. It
|
|
88
|
+
composes the tools you already use — `uv`, PyTorch, scikit-learn, Hugging Face,
|
|
89
|
+
`pytest`, Ruff, Docker, MLflow — into a coherent project you can run immediately.
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
create-ai
|
|
93
|
+
│
|
|
94
|
+
┌───────────────┼───────────────┐
|
|
95
|
+
Domain Framework Tooling
|
|
96
|
+
ML PyTorch uv / venv
|
|
97
|
+
Deep Learning TensorFlow pytest
|
|
98
|
+
LLM / GenAI scikit-learn Ruff / Black
|
|
99
|
+
Computer Vision Hugging Face Docker · MLflow · W&B
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## 2. Why it exists
|
|
103
|
+
|
|
104
|
+
Starting an AI project means re-deciding the same twenty things every time:
|
|
105
|
+
`src/` layout, config strategy, where checkpoints go, how to wire an experiment
|
|
106
|
+
tracker, a Dockerfile that isn't 2 GB, tests that actually exercise a training
|
|
107
|
+
step. `create-ai` encodes sensible, modern defaults so you start from a working
|
|
108
|
+
baseline instead of a blank directory.
|
|
109
|
+
|
|
110
|
+
## 3. Installation
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
uv tool install create-ailab # recommended
|
|
114
|
+
# or
|
|
115
|
+
pipx install create-ailab
|
|
116
|
+
# or
|
|
117
|
+
pip install create-ailab
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
> The PyPI package is **`create-ailab`**; the command it installs is **`create-ai`**.
|
|
121
|
+
|
|
122
|
+
From source:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
git clone https://github.com/rizatalebi/create-ai
|
|
126
|
+
cd create-ai
|
|
127
|
+
uv sync
|
|
128
|
+
uv run create-ai --help
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## 4. Quick start
|
|
132
|
+
|
|
133
|
+
Interactive:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
create-ai my-project
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Non-interactive (CI-friendly — flags and prompts build the *same* config):
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
create-ai my-project \
|
|
143
|
+
--type deep-learning \
|
|
144
|
+
--framework pytorch \
|
|
145
|
+
--python 3.12 \
|
|
146
|
+
--manager uv \
|
|
147
|
+
--testing pytest \
|
|
148
|
+
--linting ruff \
|
|
149
|
+
--yes
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Scaffold files only, no environment:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
create-ai my-project --type ml --no-install --yes
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## 5. Supported project types
|
|
159
|
+
|
|
160
|
+
| key | domain | frameworks |
|
|
161
|
+
| ----------------- | ----------------- | ----------------------------------- |
|
|
162
|
+
| `ml` | Machine Learning | scikit-learn (default), none, +torch/tf |
|
|
163
|
+
| `deep-learning` | Deep Learning | PyTorch (default), TensorFlow |
|
|
164
|
+
| `llm` | LLM / GenAI | PyTorch + Hugging Face |
|
|
165
|
+
| `computer-vision` | Computer Vision | PyTorch (default), TensorFlow |
|
|
166
|
+
|
|
167
|
+
The architecture is built so NLP, Reinforcement Learning, Robotics, ROS 2,
|
|
168
|
+
MLOps, Multimodal and Agentic types drop in as **new files, not new `if`
|
|
169
|
+
branches** (see §8).
|
|
170
|
+
|
|
171
|
+
## 6. CLI reference
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
create-ai # interactive
|
|
175
|
+
create-ai <name> # alias for `create-ai new <name>`
|
|
176
|
+
create-ai new <name> [flags]
|
|
177
|
+
create-ai list # show registered project types
|
|
178
|
+
create-ai doctor # check Python / Git / uv / Docker
|
|
179
|
+
create-ai add <component> # v0.2 — extend an existing project
|
|
180
|
+
create-ai --version
|
|
181
|
+
create-ai --help
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Key `new` flags: `--type/-t`, `--framework/-f`, `--python`, `--manager/-m`,
|
|
185
|
+
`--testing`, `--linting`, `--tracking`, `--docker/--no-docker`,
|
|
186
|
+
`--jupyter/--no-jupyter`, `--git/--no-git`, `--yes/-y`, `--no-install`,
|
|
187
|
+
`--dry-run`, `--force`, `--output-dir/-o`, `--debug`.
|
|
188
|
+
|
|
189
|
+
## 7. Generated structure (Machine Learning)
|
|
190
|
+
|
|
191
|
+
```text
|
|
192
|
+
my-project/
|
|
193
|
+
├── data/{raw,processed,external}/
|
|
194
|
+
├── notebooks/ # only with --jupyter
|
|
195
|
+
├── src/my_project/
|
|
196
|
+
│ ├── data/ dataset.py load + split
|
|
197
|
+
│ ├── features/ preprocessing.py scaling pipeline
|
|
198
|
+
│ ├── models/ model.py build / save / load
|
|
199
|
+
│ ├── evaluation/ metrics.py accuracy, f1, report
|
|
200
|
+
│ ├── inference/ predict.py
|
|
201
|
+
│ └── pipeline.py load → split → train → evaluate → save
|
|
202
|
+
├── configs/config.yaml
|
|
203
|
+
├── tests/ # exercises a real end-to-end run on tiny data
|
|
204
|
+
├── train.py evaluate.py predict.py
|
|
205
|
+
├── pyproject.toml README.md .gitignore .env.example
|
|
206
|
+
└── Dockerfile .dockerignore # only with --docker
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Deep Learning / Computer Vision add `datasets/ models/ training/ evaluation/
|
|
210
|
+
inference/` (plus `transforms/` for CV), `configs/{model,training}.yaml`, and
|
|
211
|
+
`checkpoints/ experiments/`. LLM adds `prompts/`, `data/sample.jsonl`, and
|
|
212
|
+
`configs/{model,training,evaluation}.yaml`.
|
|
213
|
+
|
|
214
|
+
Every generated project runs out of the box:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
cd my-project && uv sync && uv run python train.py
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## 8. Architecture
|
|
221
|
+
|
|
222
|
+
```text
|
|
223
|
+
CLI flags ─┐
|
|
224
|
+
├─▶ ProjectConfig ─▶ Project ─▶ GenerationEngine ─▶ TemplateEngine
|
|
225
|
+
prompts ──┘ (pydantic) (+context) (pipeline of (Jinja2, layered
|
|
226
|
+
named steps) template roots)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
* **`core/configuration.py`** — one immutable `ProjectConfig`. Prompts and flags
|
|
230
|
+
both do nothing but fill it in.
|
|
231
|
+
* **`core/registry.py`** — a generic `Registry`. Project types, environment
|
|
232
|
+
managers and (later) plugins register themselves; the core never enumerates
|
|
233
|
+
them.
|
|
234
|
+
* **`generators/`** — one declarative `ProjectGenerator` per domain: which
|
|
235
|
+
template roots, which extra dirs, which logical dependencies, which extra
|
|
236
|
+
context, is-this-config-valid. No side effects.
|
|
237
|
+
* **`core/dependencies.py`** — the *only* place that maps a logical name
|
|
238
|
+
(`"torch"`) to a pinned requirement, and folds in framework / tracking /
|
|
239
|
+
testing / linting / Jupyter choices. Isolated from generators.
|
|
240
|
+
* **`core/templating.py`** — Jinja2 only. Template roots layer
|
|
241
|
+
(`["common", "ml"]`); later roots win; a template that renders to whitespace
|
|
242
|
+
is skipped (how files opt out).
|
|
243
|
+
* **`integrations/`** — one wrapper per external tool, each degrading gracefully
|
|
244
|
+
when the tool is missing. `EnvironmentManager` is an ABC with `uv` and `venv`
|
|
245
|
+
implementations; Poetry / Conda slot in the same way.
|
|
246
|
+
* **`core/generator.py`** — the single side-effecting pipeline.
|
|
247
|
+
|
|
248
|
+
Adding a project type = add `generators/nlp.py` with an `@generator_registry.register("nlp")`
|
|
249
|
+
class and a `templates/nlp/` folder. Nothing else changes.
|
|
250
|
+
|
|
251
|
+
## 9. Development
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
uv sync
|
|
255
|
+
uv run pytest # unit + integration
|
|
256
|
+
uv run ruff check .
|
|
257
|
+
uv run ruff format --check .
|
|
258
|
+
uv run create-ai --help
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Layout: `src/create_ai/{cli,core,generators,integrations,templates,utils}`,
|
|
262
|
+
tests in `tests/{unit,integration}`.
|
|
263
|
+
|
|
264
|
+
## 10. Contributing
|
|
265
|
+
|
|
266
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) and
|
|
267
|
+
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Good first contributions: a new
|
|
268
|
+
framework backend, a new integration, or a new project type.
|
|
269
|
+
|
|
270
|
+
## 11. Roadmap
|
|
271
|
+
|
|
272
|
+
### v0.1 (this release)
|
|
273
|
+
|
|
274
|
+
- [x] Interactive + non-interactive project creation
|
|
275
|
+
- [x] Machine Learning, Deep Learning, LLM, Computer Vision
|
|
276
|
+
- [x] PyTorch, TensorFlow, scikit-learn
|
|
277
|
+
- [x] `uv` and `venv`
|
|
278
|
+
- [x] `pytest`, Ruff (+ Black), Docker, Jupyter, Git
|
|
279
|
+
- [x] `create-ai list` / `doctor`
|
|
280
|
+
|
|
281
|
+
### v0.2
|
|
282
|
+
|
|
283
|
+
- [ ] `create-ai add` (layer integrations / domains onto an existing project)
|
|
284
|
+
- [ ] Poetry and Conda environment managers
|
|
285
|
+
- [ ] MLflow / W&B wired into generated training loops by default
|
|
286
|
+
- [ ] Configurable / user-overridable templates
|
|
287
|
+
|
|
288
|
+
### v0.3
|
|
289
|
+
|
|
290
|
+
- [ ] NLP, Reinforcement Learning, MLOps templates
|
|
291
|
+
- [ ] Robotics, ROS 2
|
|
292
|
+
|
|
293
|
+
### Future
|
|
294
|
+
|
|
295
|
+
- [ ] Plugin system, community + remote templates
|
|
296
|
+
|
|
297
|
+
## License
|
|
298
|
+
|
|
299
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# create-ai
|
|
2
|
+
|
|
3
|
+
[](https://github.com/rizatalebi/create-ai/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/create-ailab/)
|
|
5
|
+
[](https://pypi.org/project/create-ailab/)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
**The Vite experience for AI/ML engineering.** Run one command, answer a few
|
|
9
|
+
questions, and get a clean, modern, production-ready AI project — structure,
|
|
10
|
+
dependencies, config, tooling, tests, docs and *runnable* example code.
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
create-ai my-project
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
🚀 Create AI Project
|
|
18
|
+
|
|
19
|
+
? Project name: my-project
|
|
20
|
+
? What type of AI project? › Machine Learning
|
|
21
|
+
? Python version? › 3.12
|
|
22
|
+
? Framework? › scikit-learn
|
|
23
|
+
? Environment manager? › uv
|
|
24
|
+
? Testing? › pytest
|
|
25
|
+
? Code quality? › Ruff
|
|
26
|
+
? Experiment tracking? › None
|
|
27
|
+
? Docker? › No
|
|
28
|
+
? Jupyter? › No
|
|
29
|
+
? Initialize Git? › Yes
|
|
30
|
+
|
|
31
|
+
✔ Created my-project/
|
|
32
|
+
✔ Created 5 scaffold directories
|
|
33
|
+
✔ Rendered 27 files
|
|
34
|
+
✔ Created .venv with uv
|
|
35
|
+
✔ Installed dependencies with uv sync
|
|
36
|
+
✔ Initialised Git repository with an initial commit
|
|
37
|
+
|
|
38
|
+
🎉 Project created successfully!
|
|
39
|
+
|
|
40
|
+
Next steps:
|
|
41
|
+
cd my-project
|
|
42
|
+
source .venv/bin/activate
|
|
43
|
+
uv run python train.py
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 1. What is create-ai?
|
|
49
|
+
|
|
50
|
+
`create-ai` is an **orchestrator / scaffolder**, not another ML framework. It
|
|
51
|
+
composes the tools you already use — `uv`, PyTorch, scikit-learn, Hugging Face,
|
|
52
|
+
`pytest`, Ruff, Docker, MLflow — into a coherent project you can run immediately.
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
create-ai
|
|
56
|
+
│
|
|
57
|
+
┌───────────────┼───────────────┐
|
|
58
|
+
Domain Framework Tooling
|
|
59
|
+
ML PyTorch uv / venv
|
|
60
|
+
Deep Learning TensorFlow pytest
|
|
61
|
+
LLM / GenAI scikit-learn Ruff / Black
|
|
62
|
+
Computer Vision Hugging Face Docker · MLflow · W&B
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 2. Why it exists
|
|
66
|
+
|
|
67
|
+
Starting an AI project means re-deciding the same twenty things every time:
|
|
68
|
+
`src/` layout, config strategy, where checkpoints go, how to wire an experiment
|
|
69
|
+
tracker, a Dockerfile that isn't 2 GB, tests that actually exercise a training
|
|
70
|
+
step. `create-ai` encodes sensible, modern defaults so you start from a working
|
|
71
|
+
baseline instead of a blank directory.
|
|
72
|
+
|
|
73
|
+
## 3. Installation
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
uv tool install create-ailab # recommended
|
|
77
|
+
# or
|
|
78
|
+
pipx install create-ailab
|
|
79
|
+
# or
|
|
80
|
+
pip install create-ailab
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
> The PyPI package is **`create-ailab`**; the command it installs is **`create-ai`**.
|
|
84
|
+
|
|
85
|
+
From source:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
git clone https://github.com/rizatalebi/create-ai
|
|
89
|
+
cd create-ai
|
|
90
|
+
uv sync
|
|
91
|
+
uv run create-ai --help
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 4. Quick start
|
|
95
|
+
|
|
96
|
+
Interactive:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
create-ai my-project
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Non-interactive (CI-friendly — flags and prompts build the *same* config):
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
create-ai my-project \
|
|
106
|
+
--type deep-learning \
|
|
107
|
+
--framework pytorch \
|
|
108
|
+
--python 3.12 \
|
|
109
|
+
--manager uv \
|
|
110
|
+
--testing pytest \
|
|
111
|
+
--linting ruff \
|
|
112
|
+
--yes
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Scaffold files only, no environment:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
create-ai my-project --type ml --no-install --yes
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## 5. Supported project types
|
|
122
|
+
|
|
123
|
+
| key | domain | frameworks |
|
|
124
|
+
| ----------------- | ----------------- | ----------------------------------- |
|
|
125
|
+
| `ml` | Machine Learning | scikit-learn (default), none, +torch/tf |
|
|
126
|
+
| `deep-learning` | Deep Learning | PyTorch (default), TensorFlow |
|
|
127
|
+
| `llm` | LLM / GenAI | PyTorch + Hugging Face |
|
|
128
|
+
| `computer-vision` | Computer Vision | PyTorch (default), TensorFlow |
|
|
129
|
+
|
|
130
|
+
The architecture is built so NLP, Reinforcement Learning, Robotics, ROS 2,
|
|
131
|
+
MLOps, Multimodal and Agentic types drop in as **new files, not new `if`
|
|
132
|
+
branches** (see §8).
|
|
133
|
+
|
|
134
|
+
## 6. CLI reference
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
create-ai # interactive
|
|
138
|
+
create-ai <name> # alias for `create-ai new <name>`
|
|
139
|
+
create-ai new <name> [flags]
|
|
140
|
+
create-ai list # show registered project types
|
|
141
|
+
create-ai doctor # check Python / Git / uv / Docker
|
|
142
|
+
create-ai add <component> # v0.2 — extend an existing project
|
|
143
|
+
create-ai --version
|
|
144
|
+
create-ai --help
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Key `new` flags: `--type/-t`, `--framework/-f`, `--python`, `--manager/-m`,
|
|
148
|
+
`--testing`, `--linting`, `--tracking`, `--docker/--no-docker`,
|
|
149
|
+
`--jupyter/--no-jupyter`, `--git/--no-git`, `--yes/-y`, `--no-install`,
|
|
150
|
+
`--dry-run`, `--force`, `--output-dir/-o`, `--debug`.
|
|
151
|
+
|
|
152
|
+
## 7. Generated structure (Machine Learning)
|
|
153
|
+
|
|
154
|
+
```text
|
|
155
|
+
my-project/
|
|
156
|
+
├── data/{raw,processed,external}/
|
|
157
|
+
├── notebooks/ # only with --jupyter
|
|
158
|
+
├── src/my_project/
|
|
159
|
+
│ ├── data/ dataset.py load + split
|
|
160
|
+
│ ├── features/ preprocessing.py scaling pipeline
|
|
161
|
+
│ ├── models/ model.py build / save / load
|
|
162
|
+
│ ├── evaluation/ metrics.py accuracy, f1, report
|
|
163
|
+
│ ├── inference/ predict.py
|
|
164
|
+
│ └── pipeline.py load → split → train → evaluate → save
|
|
165
|
+
├── configs/config.yaml
|
|
166
|
+
├── tests/ # exercises a real end-to-end run on tiny data
|
|
167
|
+
├── train.py evaluate.py predict.py
|
|
168
|
+
├── pyproject.toml README.md .gitignore .env.example
|
|
169
|
+
└── Dockerfile .dockerignore # only with --docker
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Deep Learning / Computer Vision add `datasets/ models/ training/ evaluation/
|
|
173
|
+
inference/` (plus `transforms/` for CV), `configs/{model,training}.yaml`, and
|
|
174
|
+
`checkpoints/ experiments/`. LLM adds `prompts/`, `data/sample.jsonl`, and
|
|
175
|
+
`configs/{model,training,evaluation}.yaml`.
|
|
176
|
+
|
|
177
|
+
Every generated project runs out of the box:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
cd my-project && uv sync && uv run python train.py
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## 8. Architecture
|
|
184
|
+
|
|
185
|
+
```text
|
|
186
|
+
CLI flags ─┐
|
|
187
|
+
├─▶ ProjectConfig ─▶ Project ─▶ GenerationEngine ─▶ TemplateEngine
|
|
188
|
+
prompts ──┘ (pydantic) (+context) (pipeline of (Jinja2, layered
|
|
189
|
+
named steps) template roots)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
* **`core/configuration.py`** — one immutable `ProjectConfig`. Prompts and flags
|
|
193
|
+
both do nothing but fill it in.
|
|
194
|
+
* **`core/registry.py`** — a generic `Registry`. Project types, environment
|
|
195
|
+
managers and (later) plugins register themselves; the core never enumerates
|
|
196
|
+
them.
|
|
197
|
+
* **`generators/`** — one declarative `ProjectGenerator` per domain: which
|
|
198
|
+
template roots, which extra dirs, which logical dependencies, which extra
|
|
199
|
+
context, is-this-config-valid. No side effects.
|
|
200
|
+
* **`core/dependencies.py`** — the *only* place that maps a logical name
|
|
201
|
+
(`"torch"`) to a pinned requirement, and folds in framework / tracking /
|
|
202
|
+
testing / linting / Jupyter choices. Isolated from generators.
|
|
203
|
+
* **`core/templating.py`** — Jinja2 only. Template roots layer
|
|
204
|
+
(`["common", "ml"]`); later roots win; a template that renders to whitespace
|
|
205
|
+
is skipped (how files opt out).
|
|
206
|
+
* **`integrations/`** — one wrapper per external tool, each degrading gracefully
|
|
207
|
+
when the tool is missing. `EnvironmentManager` is an ABC with `uv` and `venv`
|
|
208
|
+
implementations; Poetry / Conda slot in the same way.
|
|
209
|
+
* **`core/generator.py`** — the single side-effecting pipeline.
|
|
210
|
+
|
|
211
|
+
Adding a project type = add `generators/nlp.py` with an `@generator_registry.register("nlp")`
|
|
212
|
+
class and a `templates/nlp/` folder. Nothing else changes.
|
|
213
|
+
|
|
214
|
+
## 9. Development
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
uv sync
|
|
218
|
+
uv run pytest # unit + integration
|
|
219
|
+
uv run ruff check .
|
|
220
|
+
uv run ruff format --check .
|
|
221
|
+
uv run create-ai --help
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Layout: `src/create_ai/{cli,core,generators,integrations,templates,utils}`,
|
|
225
|
+
tests in `tests/{unit,integration}`.
|
|
226
|
+
|
|
227
|
+
## 10. Contributing
|
|
228
|
+
|
|
229
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) and
|
|
230
|
+
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Good first contributions: a new
|
|
231
|
+
framework backend, a new integration, or a new project type.
|
|
232
|
+
|
|
233
|
+
## 11. Roadmap
|
|
234
|
+
|
|
235
|
+
### v0.1 (this release)
|
|
236
|
+
|
|
237
|
+
- [x] Interactive + non-interactive project creation
|
|
238
|
+
- [x] Machine Learning, Deep Learning, LLM, Computer Vision
|
|
239
|
+
- [x] PyTorch, TensorFlow, scikit-learn
|
|
240
|
+
- [x] `uv` and `venv`
|
|
241
|
+
- [x] `pytest`, Ruff (+ Black), Docker, Jupyter, Git
|
|
242
|
+
- [x] `create-ai list` / `doctor`
|
|
243
|
+
|
|
244
|
+
### v0.2
|
|
245
|
+
|
|
246
|
+
- [ ] `create-ai add` (layer integrations / domains onto an existing project)
|
|
247
|
+
- [ ] Poetry and Conda environment managers
|
|
248
|
+
- [ ] MLflow / W&B wired into generated training loops by default
|
|
249
|
+
- [ ] Configurable / user-overridable templates
|
|
250
|
+
|
|
251
|
+
### v0.3
|
|
252
|
+
|
|
253
|
+
- [ ] NLP, Reinforcement Learning, MLOps templates
|
|
254
|
+
- [ ] Robotics, ROS 2
|
|
255
|
+
|
|
256
|
+
### Future
|
|
257
|
+
|
|
258
|
+
- [ ] Plugin system, community + remote templates
|
|
259
|
+
|
|
260
|
+
## License
|
|
261
|
+
|
|
262
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# create-ai documentation
|
|
2
|
+
|
|
3
|
+
- [architecture.md](architecture.md) — how the pieces fit together and why.
|
|
4
|
+
- [adding-a-project-type.md](adding-a-project-type.md) — the extension
|
|
5
|
+
walkthrough (new domain, framework, integration).
|
|
6
|
+
|
|
7
|
+
For usage, installation and the CLI reference, see the
|
|
8
|
+
[top-level README](../README.md).
|