From fcbe0242aee5840f959e730faa27012cb633fde5 Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 15:42:42 -0500 Subject: [PATCH 01/21] reorg everything --- .devcontainer/docker-compose.override.yaml | 14 +- .github/labeler.yml | 10 +- .github/workflows/lumigator_pipeline.yaml | 20 +- .vscode/settings.json | 4 +- CONTRIBUTING.md | 4 +- Dockerfile | 4 +- Makefile | 12 +- docker-compose.yaml | 16 +- docs/Makefile | 1 + docs/source/conceptual-guides/endpoints.md | 36 +- docs/source/conceptual-guides/new-endpoint.md | 10 +- docs/source/conceptual-guides/quickstart.md | 285 ++++ docs/source/conceptual-guides/ui-guide.md | 55 + docs/source/conf.py | 4 + docs/source/get-started/installation.md | 2 +- docs/source/get-started/quickstart.md | 2 +- docs/source/get-started/ui-guide.md | 2 +- docs/source/operations-guide/alembic.md | 46 +- docs/source/operations-guide/dev.md | 20 +- docs/source/operations-guide/kubernetes.md | 2 +- docs/source/user-guides/inference.md | 4 +- {lumigator/frontend => frontend}/.gitignore | 0 {lumigator/frontend => frontend}/.prettierrc | 0 .../.vscode/extensions.json | 0 {lumigator/frontend => frontend}/Dockerfile | 8 +- {lumigator/frontend => frontend}/README.md | 0 .../frontend => frontend}/eslint.config.js | 0 {lumigator/frontend => frontend}/index.html | 0 .../nginx/default.conf.template | 0 .../frontend => frontend}/package-lock.json | 0 {lumigator/frontend => frontend}/package.json | 0 .../public/lumigator.svg | 0 .../frontend => frontend}/src/.editorconfig | 0 {lumigator/frontend => frontend}/src/App.vue | 0 .../src/assets/LogoText.svg | 0 .../src/assets/icons/BinIcon.svg | 0 .../src/assets/icons/DatasetsIcon.svg | 0 .../src/assets/icons/DownloadIcon.svg | 0 .../src/assets/icons/ExperimentIcon.svg | 0 .../src/assets/lumigator.svg | 0 .../components/molecules/LDatasetEmpty.vue | 0 .../components/molecules/LDatasetTable.vue | 0 .../molecules/LExperimentDetails.vue | 0 .../components/molecules/LExperimentForm.vue | 0 .../components/molecules/LExperimentLogs.vue | 0 .../components/molecules/LExperimentTable.vue | 0 .../components/molecules/LExperimentTabs.vue | 0 .../molecules/LExperimentsDrawer.vue | 0 .../molecules/LExperimentsEmpty.vue | 0 .../src/components/molecules/LFileUpload.vue | 0 .../components/molecules/LHealthStatus.vue | 2 +- .../src/components/molecules/LJobResults.vue | 0 .../src/components/molecules/LJobsTable.vue | 0 .../src/components/molecules/LModelCards.vue | 0 .../src/components/molecules/LPageHeader.vue | 0 .../components/organisms/LDatasetDetails.vue | 0 .../organisms/LExperimentResults.vue | 0 .../src/components/organisms/LMenu.vue | 0 .../src/components/pages/LDatasets.vue | 0 .../src/components/pages/LExperiments.vue | 0 .../src/composables/SlidingPanel.js | 0 .../src/helpers/index.js | 2 +- .../src/libs/primevue.config.js | 0 {lumigator/frontend => frontend}/src/main.js | 0 .../frontend => frontend}/src/router/index.js | 0 .../src/services/datasets/api.js | 0 .../src/services/datasets/datasetsService.js | 0 .../src/services/experiments/api.js | 0 .../services/experiments/experimentService.js | 0 .../src/services/health/api.js | 0 .../src/services/health/healthService.js | 0 .../src/services/http/index.js | 0 .../src/services/models/api.js | 0 .../src/services/models/modelsService.js | 0 .../src/stores/datasets/store.js | 0 .../src/stores/experiments/store.js | 0 .../src/stores/health/store.js | 0 .../src/stores/models/store.js | 0 .../src/styles/_components.scss | 0 .../src/styles/_icons.scss | 0 .../src/styles/_lumigator-theme.scss | 0 .../src/styles/_resetcss.scss | 0 .../src/styles/_transitions.scss | 0 .../src/styles/_typography.scss | 0 .../src/styles/_variables.scss | 0 .../frontend => frontend}/src/styles/app.scss | 0 .../frontend => frontend}/vite.config.js | 0 .../mzai => infra}/helm/lumigator/.helmignore | 0 .../mzai => infra}/helm/lumigator/Chart.yaml | 0 .../helm/lumigator/charts/backend/.helmignore | 0 .../helm/lumigator/charts/backend/Chart.lock | 0 .../helm/lumigator/charts/backend/Chart.yaml | 0 .../helm/lumigator/charts/backend/README.md | 0 .../backend/charts/postgresql-15.5.20.tgz | Bin .../charts/backend/templates/NOTES.txt | 0 .../charts/backend/templates/_helpers.tpl | 0 .../charts/backend/templates/deployment.yaml | 0 .../backend/templates/mistral-secret.yaml | 0 .../backend/templates/openai-secret.yaml | 0 .../charts/backend/templates/service.yaml | 0 .../helm/lumigator/charts/backend/values.yaml | 4 +- .../lumigator/charts/frontend/.helmignore | 0 .../helm/lumigator/charts/frontend/Chart.yaml | 0 .../charts/frontend/templates/NOTES.txt | 0 .../charts/frontend/templates/_helpers.tpl | 0 .../charts/frontend/templates/deployment.yaml | 0 .../charts/frontend/templates/nginx-cm.yaml | 0 .../charts/frontend/templates/service.yaml | 0 .../lumigator/charts/frontend/values.yaml | 0 .../mzai => infra}/helm/lumigator/values.yaml | 0 .../mzai => infra}/helm/ray/ray-cluster.yaml | 0 lumigator/README.md | 23 - .../mzai => lumigator}/backend/.dockerignore | 2 +- .../backend/.python-version | 0 .../mzai => lumigator}/backend/README.md | 2 +- .../mzai => lumigator}/backend/alembic.ini | 0 .../backend/backend/__init__.py | 0 .../backend/backend/alembic/env.py | 0 .../backend/backend/alembic/script.py.mako | 0 .../4c0345b3d525_introduce_experiments.py | 0 .../versions/e75fa022c781_create_db.py | 0 .../e9679cbc3c36_generated_datasets.py | 0 .../backend/backend/api/__init__.py | 0 .../backend/backend/api/deps.py | 0 .../backend/backend/api/http_headers.py | 1 + .../backend/backend/api/router.py | 0 .../backend/backend/api/routes/__init__.py | 0 .../backend/backend/api/routes/completions.py | 0 .../backend/backend/api/routes/datasets.py | 0 .../backend/backend/api/routes/experiments.py | 0 .../backend/api/routes/experiments_new.py | 0 .../backend/backend/api/routes/health.py | 0 .../backend/backend/api/routes/jobs.py | 0 .../backend/backend/api/routes/models.py | 0 .../backend/backend/api/tags.py | 0 .../backend/backend/config_templates.py | 0 .../mzai => lumigator}/backend/backend/db.py | 0 .../backend/backend/main.py | 0 .../backend/backend/models.yaml | 0 .../backend/backend/ray_submit/submission.py | 0 .../backend/backend/records/__init__.py | 0 .../backend/backend/records/base.py | 0 .../backend/backend/records/datasets.py | 0 .../backend/backend/records/experiments.py | 0 .../backend/backend/records/jobs.py | 0 .../backend/backend/records/mixins.py | 0 .../backend/backend/repositories/__init__.py | 0 .../backend/backend/repositories/base.py | 0 .../backend/backend/repositories/datasets.py | 0 .../backend/repositories/experiments.py | 0 .../backend/backend/repositories/jobs.py | 0 .../backend/backend/services/__init__.py | 0 .../backend/backend/services/completions.py | 0 .../backend/backend/services/datasets.py | 0 .../backend/backend/services/experiments.py | 0 .../backend/backend/services/jobs.py | 0 .../backend/backend/settings.py | 0 .../backend/backend/tests/README.md | 0 .../backend/backend/tests/__init__.py | 0 .../backend/backend/tests/conftest.py | 0 .../tests/data/dialogsum_converted.csv | 1196 ++++++++--------- .../tests/data/health_job_metadata.json | 0 .../tests/data/health_job_metadata_ray.json | 0 .../backend/backend/tests/data/models.json | 0 .../backend/tests/data/ray_version.json | 0 .../backend/backend/tests/fakes/__init__.py | 0 .../backend/backend/tests/fakes/fake_s3.py | 0 .../backend/tests/integration/__init__.py | 0 .../backend/tests/integration/api/__init__.py | 0 .../tests/integration/api/routes/__init__.py | 0 .../api/routes/test_api_workflows.py | 0 .../tests/integration/services/__init__.py | 0 .../backend/tests/test_responses.dockerfile | 0 .../backend/backend/tests/unit/__init__.py | 0 .../backend/tests/unit/api/__init__.py | 0 .../backend/tests/unit/api/routes/__init__.py | 0 .../tests/unit/api/routes/test_datasets.py | 0 .../tests/unit/api/routes/test_health.py | 0 .../tests/unit/api/routes/test_jobs.py | 5 +- .../tests/unit/api/routes/test_main.py | 0 .../tests/unit/api/routes/test_models.py | 0 .../tests/unit/repositories/__init__.py | 0 .../unit/repositories/test_experiments.py | 0 .../tests/unit/repositories/test_jobs.py | 0 .../backend/tests/unit/services/__init__.py | 0 .../unit/services/test_dataset_service.py | 0 .../tests/unit/services/test_job_service.py | 0 .../backend/tests/unit/test_ray_submit.py | 0 .../backend/tests/unit/test_settings.py | 0 .../mzai => lumigator}/backend/pyproject.toml | 0 .../mzai => lumigator}/backend/uv.lock | 0 .../jobs/evaluator/README.md | 0 .../jobs/evaluator/evaluator}/__init__.py | 0 .../jobs/evaluator/evaluator/__main__.py | 5 + .../evaluator/evaluator/configs}/__init__.py | 0 .../evaluator/evaluator/configs/common.py | 0 .../evaluator/configs/huggingface.py | 0 .../evaluator/configs/jobs/__init__.py | 0 .../evaluator/configs/jobs/common.py | 0 .../evaluator/configs/jobs/hf_evaluate.py | 0 .../evaluator/configs/jobs/lm_harness.py | 0 .../jobs/evaluator/evaluator/configs/vllm.py | 0 .../jobs/evaluator/evaluator/configs/wandb.py | 0 .../jobs/evaluator/evaluator/constants.py | 0 .../jobs/evaluator/evaluator/entrypoint.py | 0 .../evaluator/evaluator/jobs}/__init__.py | 0 .../evaluator/evaluator/jobs/asset_loader.py | 0 .../jobs/evaluator/evaluator/jobs/common.py | 0 .../evaluator/jobs/evaluation}/__init__.py | 0 .../evaluator/jobs/evaluation/conversation.py | 2 +- .../evaluator/jobs/evaluation/hf_evaluate.py | 0 .../evaluator/jobs/evaluation/lm_harness.py | 0 .../evaluator/jobs/evaluation/metrics.py | 0 .../evaluator/evaluator/jobs/model_clients.py | 0 .../jobs/evaluator/evaluator/jobs/utils.py | 0 .../jobs/evaluator/evaluator/paths.py | 0 .../jobs/evaluator/evaluator/preprocessing.py | 0 .../evaluator/evaluator/tests}/__init__.py | 0 .../evaluator/evaluator/tests/conftest.py | 0 .../evaluator/tests/integration/README.md | 0 .../evaluator/tests/integration}/__init__.py | 0 .../evaluator/tests/integration/conftest.py | 4 +- .../integration/test_integration_setup.py | 0 .../tests/integration/test_lm_harness.py | 0 .../evaluator/tests/resources/README.md | 0 .../evaluator/tests/resources}/__init__.py | 0 .../tests/resources/datasets}/__init__.py | 0 .../datasets/tiny_shakespeare}/__init__.py | 0 .../create_tiny_shakespeare.py | 0 .../data-00000-of-00001.arrow | Bin .../tiny_shakespeare/dataset_info.json | 2 +- .../datasets/tiny_shakespeare/state.json | 2 +- .../tests/resources/datasets/xyz}/__init__.py | 0 .../resources/datasets/xyz/create_xyz.py | 0 .../datasets/xyz/data-00000-of-00001.arrow | Bin .../resources/datasets/xyz/dataset_info.json | 2 +- .../tests/resources/datasets/xyz/state.json | 2 +- .../tests/resources/models}/__init__.py | 0 .../resources/models/tiny_gpt2}/__init__.py | 0 .../resources/models/tiny_gpt2/config.json | 0 .../models/tiny_gpt2/create_tiny_gpt2.py | 0 .../resources/models/tiny_gpt2/merges.txt | 0 .../models/tiny_gpt2/model.safetensors | Bin .../models/tiny_gpt2/special_tokens_map.json | 0 .../models/tiny_gpt2/tokenizer_config.json | 0 .../resources/models/tiny_gpt2/vocab.json | 0 .../evaluator/evaluator/tests/test_utils.py | 0 .../evaluator/tests/unit}/__init__.py | 0 .../evaluator/tests/unit/configs}/__init__.py | 0 .../tests/unit/configs}/jobs/__init__.py | 0 .../tests/unit/configs/jobs/conftest.py | 0 .../configs/jobs/test_lm_harness_config.py | 0 .../tests/unit/configs/test_adapter_config.py | 0 .../tests/unit/configs/test_common.py | 0 .../tests/unit/configs/test_dataset_config.py | 0 .../unit/configs/test_quantization_config.py | 0 .../tests/unit/configs/test_run_config.py | 0 .../evaluator/tests/unit/jobs}/__init__.py | 0 .../tests/unit/jobs/test_asset_loader.py | 0 .../evaluator/tests/unit/test_paths.py | 0 .../tests/unit/test_preprocessing.py | 0 .../evaluator/evaluator/tracking}/__init__.py | 0 .../evaluator/tracking/artifact_utils.py | 0 .../evaluator/evaluator/tracking/run_utils.py | 0 .../evaluation/hf_evaluate_config.yaml | 0 .../hf_evaluate_inference_server_config.yaml | 0 .../evaluation/hf_evaluate_openai_config.yaml | 0 .../evaluation/lm_harness_hf_config.yaml | 0 .../lm_harness_inference_server_config.yaml | 0 .../jobs/evaluator/requirements.txt | 0 .../jobs/evaluator_lite/README.md | 0 .../jobs/evaluator_lite/eval_lite.py | 0 .../jobs/evaluator_lite/eval_metrics.py | 0 .../jobs/evaluator_lite/requirements.txt | 0 .../jobs/evaluator_lite/schemas.py | 0 .../jobs/evaluator_lite}/tests/__init__.py | 0 .../jobs/evaluator_lite/tests/conftest.py | 0 .../tests/data/config_full_hf.json | 0 .../tests/data/config_minimal.json | 0 .../jobs/evaluator_lite/tests/test_configs.py | 0 .../jobs/inference/README.md | 0 .../jobs/inference/inference.py | 0 .../jobs/inference/inference_config.py | 0 .../jobs/inference/model_clients.py | 0 .../jobs/inference/paths.py | 0 .../jobs/inference/requirements.txt | 0 .../jobs/inference/requirements_cpu.txt | 0 .../jobs/inference/schemas.py | 0 .../jobs/inference/tests}/__init__.py | 0 .../jobs/inference/tests/conftest.py | 0 .../inference/tests/data/config_full_api.json | 0 .../inference/tests/data/config_full_hf.json | 0 .../inference/tests/data/config_minimal.json | 0 .../jobs/inference/tests/test_configs.py | 0 .../jobs/inference/utils.py | 0 .../sample_data/dialogsum_exc.csv | 0 .../dialogsum_mini_all_gt_is_whitespace.csv | 8 +- .../sample_data/dialogsum_mini_empty_gt.csv | 0 .../sample_data/dialogsum_mini_no_gt.csv | 0 ...m_mini_some_missing_some_whitespace_gt.csv | 6 +- .../schemas/.python-version | 0 .../mzai => lumigator}/schemas/README.md | 2 +- .../schemas/lumigator_schemas}/__init__.py | 0 .../schemas/lumigator_schemas/completions.py | 1 - .../schemas/lumigator_schemas/datasets.py | 0 .../schemas/lumigator_schemas/experiments.py | 0 .../schemas/lumigator_schemas/extras.py | 0 .../schemas/lumigator_schemas/jobs.py | 0 .../schemas/lumigator_schemas/models.py | 0 .../mzai => lumigator}/schemas/pyproject.toml | 0 .../mzai => lumigator}/schemas/uv.lock | 0 .../mzai => lumigator}/sdk/.python-version | 0 .../{python/mzai => lumigator}/sdk/README.md | 4 +- .../sdk/lumigator_sdk}/__init__.py | 0 .../sdk/lumigator_sdk/client.py | 0 .../sdk/lumigator_sdk/completions.py | 0 .../sdk/lumigator_sdk/experiments.py | 0 .../sdk/lumigator_sdk/health.py | 0 .../sdk/lumigator_sdk/jobs.py | 0 .../sdk/lumigator_sdk/lm_datasets.py | 0 .../sdk/lumigator_sdk/lumigator.py | 0 .../sdk/lumigator_sdk/models.py | 0 .../sdk/lumigator_sdk/strict_schemas.py | 0 .../mzai => lumigator}/sdk/pyproject.toml | 0 lumigator/lumigator/sdk/tests/__init__.py | 0 .../mzai => lumigator}/sdk/tests/conftest.py | 0 .../sdk/tests/data/dataset.json | 2 +- .../sdk/tests/data/datasets.json | 2 +- .../experiment-download-no-experiment.json | 2 +- .../sdk/tests/data/experiment-download.json | 2 +- .../sdk/tests/data/experiment-missing.json | 2 +- .../sdk/tests/data/experiment-post-all.json | 2 +- .../tests/data/experiment-post-response.json | 2 +- .../tests/data/experiment-post-simple.json | 2 +- .../data/experiment-result-no-experiment.json | 2 +- .../sdk/tests/data/experiment-result.json | 2 +- .../sdk/tests/data/experiment.json | 2 +- .../sdk/tests/data/experiments.json | 2 +- .../sdk/tests/data/job-all.json | 0 .../sdk/tests/data/job-extra.json | 2 +- .../sdk/tests/data/job-minimal.json | 2 +- .../sdk/tests/data/job-resp.json | 2 +- .../sdk/tests/data/job-submit-resp.json | 0 .../sdk/tests/data/job.json | 0 .../sdk/tests/data/jobs-submit.json | 2 +- .../sdk/tests/data/jobs.json | 0 .../sdk/tests/data/models.json | 0 .../mzai => lumigator}/sdk/tests/helpers.py | 0 .../sdk/tests/integration/test_scenarios.py | 0 .../sdk/tests/unit/test_completions.py | 0 .../sdk/tests/unit/test_datasets.py | 4 +- .../sdk/tests/unit/test_health.py | 5 +- .../sdk/tests/unit/test_jobs.py | 0 .../sdk/tests/unit/test_models.py | 9 +- .../{python/mzai => lumigator}/sdk/uv.lock | 0 .../mzai/jobs/evaluator/evaluator/__init__.py | 1 - notebooks/requirements.txt | 4 +- 357 files changed, 1105 insertions(+), 788 deletions(-) create mode 100644 docs/source/conceptual-guides/quickstart.md create mode 100644 docs/source/conceptual-guides/ui-guide.md rename {lumigator/frontend => frontend}/.gitignore (100%) rename {lumigator/frontend => frontend}/.prettierrc (100%) rename {lumigator/frontend => frontend}/.vscode/extensions.json (100%) rename {lumigator/frontend => frontend}/Dockerfile (57%) rename {lumigator/frontend => frontend}/README.md (100%) rename {lumigator/frontend => frontend}/eslint.config.js (100%) rename {lumigator/frontend => frontend}/index.html (100%) rename {lumigator/frontend => frontend}/nginx/default.conf.template (100%) rename {lumigator/frontend => frontend}/package-lock.json (100%) rename {lumigator/frontend => frontend}/package.json (100%) rename {lumigator/frontend => frontend}/public/lumigator.svg (100%) rename {lumigator/frontend => frontend}/src/.editorconfig (100%) rename {lumigator/frontend => frontend}/src/App.vue (100%) rename {lumigator/frontend => frontend}/src/assets/LogoText.svg (100%) rename {lumigator/frontend => frontend}/src/assets/icons/BinIcon.svg (100%) rename {lumigator/frontend => frontend}/src/assets/icons/DatasetsIcon.svg (100%) rename {lumigator/frontend => frontend}/src/assets/icons/DownloadIcon.svg (100%) rename {lumigator/frontend => frontend}/src/assets/icons/ExperimentIcon.svg (100%) rename {lumigator/frontend => frontend}/src/assets/lumigator.svg (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LDatasetEmpty.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LDatasetTable.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LExperimentDetails.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LExperimentForm.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LExperimentLogs.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LExperimentTable.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LExperimentTabs.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LExperimentsDrawer.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LExperimentsEmpty.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LFileUpload.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LHealthStatus.vue (98%) rename {lumigator/frontend => frontend}/src/components/molecules/LJobResults.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LJobsTable.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LModelCards.vue (100%) rename {lumigator/frontend => frontend}/src/components/molecules/LPageHeader.vue (100%) rename {lumigator/frontend => frontend}/src/components/organisms/LDatasetDetails.vue (100%) rename {lumigator/frontend => frontend}/src/components/organisms/LExperimentResults.vue (100%) rename {lumigator/frontend => frontend}/src/components/organisms/LMenu.vue (100%) rename {lumigator/frontend => frontend}/src/components/pages/LDatasets.vue (100%) rename {lumigator/frontend => frontend}/src/components/pages/LExperiments.vue (100%) rename {lumigator/frontend => frontend}/src/composables/SlidingPanel.js (100%) rename {lumigator/frontend => frontend}/src/helpers/index.js (98%) rename {lumigator/frontend => frontend}/src/libs/primevue.config.js (100%) rename {lumigator/frontend => frontend}/src/main.js (100%) rename {lumigator/frontend => frontend}/src/router/index.js (100%) rename {lumigator/frontend => frontend}/src/services/datasets/api.js (100%) rename {lumigator/frontend => frontend}/src/services/datasets/datasetsService.js (100%) rename {lumigator/frontend => frontend}/src/services/experiments/api.js (100%) rename {lumigator/frontend => frontend}/src/services/experiments/experimentService.js (100%) rename {lumigator/frontend => frontend}/src/services/health/api.js (100%) rename {lumigator/frontend => frontend}/src/services/health/healthService.js (100%) rename {lumigator/frontend => frontend}/src/services/http/index.js (100%) rename {lumigator/frontend => frontend}/src/services/models/api.js (100%) rename {lumigator/frontend => frontend}/src/services/models/modelsService.js (100%) rename {lumigator/frontend => frontend}/src/stores/datasets/store.js (100%) rename {lumigator/frontend => frontend}/src/stores/experiments/store.js (100%) rename {lumigator/frontend => frontend}/src/stores/health/store.js (100%) rename {lumigator/frontend => frontend}/src/stores/models/store.js (100%) rename {lumigator/frontend => frontend}/src/styles/_components.scss (100%) rename {lumigator/frontend => frontend}/src/styles/_icons.scss (100%) rename {lumigator/frontend => frontend}/src/styles/_lumigator-theme.scss (100%) rename {lumigator/frontend => frontend}/src/styles/_resetcss.scss (100%) rename {lumigator/frontend => frontend}/src/styles/_transitions.scss (100%) rename {lumigator/frontend => frontend}/src/styles/_typography.scss (100%) rename {lumigator/frontend => frontend}/src/styles/_variables.scss (100%) rename {lumigator/frontend => frontend}/src/styles/app.scss (100%) rename {lumigator/frontend => frontend}/vite.config.js (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/.helmignore (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/Chart.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/.helmignore (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/Chart.lock (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/Chart.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/README.md (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/charts/postgresql-15.5.20.tgz (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/templates/NOTES.txt (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/templates/_helpers.tpl (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/templates/deployment.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/templates/mistral-secret.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/templates/openai-secret.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/templates/service.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/backend/values.yaml (91%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/frontend/.helmignore (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/frontend/Chart.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/frontend/templates/NOTES.txt (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/frontend/templates/_helpers.tpl (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/frontend/templates/deployment.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/frontend/templates/nginx-cm.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/frontend/templates/service.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/charts/frontend/values.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/lumigator/values.yaml (100%) rename {lumigator/infra/mzai => infra}/helm/ray/ray-cluster.yaml (100%) delete mode 100644 lumigator/README.md rename lumigator/{python/mzai => lumigator}/backend/.dockerignore (98%) rename lumigator/{python/mzai => lumigator}/backend/.python-version (100%) rename lumigator/{python/mzai => lumigator}/backend/README.md (98%) rename lumigator/{python/mzai => lumigator}/backend/alembic.ini (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/alembic/env.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/alembic/script.py.mako (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/alembic/versions/e75fa022c781_create_db.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/deps.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/http_headers.py (99%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/router.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/routes/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/routes/completions.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/routes/datasets.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/routes/experiments.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/routes/experiments_new.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/routes/health.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/routes/jobs.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/routes/models.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/api/tags.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/config_templates.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/db.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/main.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/models.yaml (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/ray_submit/submission.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/records/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/records/base.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/records/datasets.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/records/experiments.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/records/jobs.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/records/mixins.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/repositories/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/repositories/base.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/repositories/datasets.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/repositories/experiments.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/repositories/jobs.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/services/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/services/completions.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/services/datasets.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/services/experiments.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/services/jobs.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/settings.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/README.md (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/conftest.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/data/dialogsum_converted.csv (95%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/data/health_job_metadata.json (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/data/health_job_metadata_ray.json (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/data/models.json (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/data/ray_version.json (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/fakes/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/fakes/fake_s3.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/integration/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/integration/api/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/integration/api/routes/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/integration/api/routes/test_api_workflows.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/integration/services/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/test_responses.dockerfile (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/api/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/api/routes/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/api/routes/test_datasets.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/api/routes/test_health.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/api/routes/test_jobs.py (98%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/api/routes/test_main.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/api/routes/test_models.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/repositories/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/repositories/test_experiments.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/repositories/test_jobs.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/services/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/services/test_dataset_service.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/services/test_job_service.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/test_ray_submit.py (100%) rename lumigator/{python/mzai => lumigator}/backend/backend/tests/unit/test_settings.py (100%) rename lumigator/{python/mzai => lumigator}/backend/pyproject.toml (100%) rename lumigator/{python/mzai => lumigator}/backend/uv.lock (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/README.md (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/configs => lumigator/jobs/evaluator/evaluator}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/__main__.py (99%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/jobs => lumigator/jobs/evaluator/evaluator/configs}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/configs/common.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/configs/huggingface.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/configs/jobs/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/configs/jobs/common.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/configs/jobs/lm_harness.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/configs/vllm.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/configs/wandb.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/constants.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/entrypoint.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/jobs/evaluation => lumigator/jobs/evaluator/evaluator/jobs}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/jobs/asset_loader.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/jobs/common.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests => lumigator/jobs/evaluator/evaluator/jobs/evaluation}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/jobs/evaluation/conversation.py (99%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/jobs/evaluation/metrics.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/jobs/model_clients.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/jobs/utils.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/paths.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/preprocessing.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/integration => lumigator/jobs/evaluator/evaluator/tests}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/conftest.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/integration/README.md (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/resources => lumigator/jobs/evaluator/evaluator/tests/integration}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/integration/conftest.py (93%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/README.md (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/resources/datasets => lumigator/jobs/evaluator/evaluator/tests/resources}/__init__.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare => lumigator/jobs/evaluator/evaluator/tests/resources/datasets}/__init__.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz => lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json (99%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json (99%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/resources/models => lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json (99%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json (99%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2 => lumigator/jobs/evaluator/evaluator/tests/resources/models}/__init__.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/unit => lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/test_utils.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/unit/configs => lumigator/jobs/evaluator/evaluator/tests/unit}/__init__.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/unit/configs/jobs => lumigator/jobs/evaluator/evaluator/tests/unit/configs}/__init__.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tests/unit => lumigator/jobs/evaluator/evaluator/tests/unit/configs}/jobs/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/configs/test_common.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py (100%) rename lumigator/{python/mzai/jobs/evaluator/evaluator/tracking => lumigator/jobs/evaluator/evaluator/tests/unit/jobs}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/test_paths.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py (100%) rename lumigator/{python/mzai/jobs/evaluator_lite/tests => lumigator/jobs/evaluator/evaluator/tracking}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tracking/artifact_utils.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/evaluator/tracking/run_utils.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator/requirements.txt (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator_lite/README.md (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator_lite/eval_lite.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator_lite/eval_metrics.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator_lite/requirements.txt (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator_lite/schemas.py (100%) rename lumigator/{python/mzai/jobs/inference => lumigator/jobs/evaluator_lite}/tests/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator_lite/tests/conftest.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator_lite/tests/data/config_full_hf.json (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator_lite/tests/data/config_minimal.json (100%) rename lumigator/{python/mzai => lumigator}/jobs/evaluator_lite/tests/test_configs.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/README.md (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/inference.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/inference_config.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/model_clients.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/paths.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/requirements.txt (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/requirements_cpu.txt (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/schemas.py (100%) rename lumigator/{python/mzai/schemas/lumigator_schemas => lumigator/jobs/inference/tests}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/tests/conftest.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/tests/data/config_full_api.json (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/tests/data/config_full_hf.json (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/tests/data/config_minimal.json (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/tests/test_configs.py (100%) rename lumigator/{python/mzai => lumigator}/jobs/inference/utils.py (100%) rename lumigator/{python/mzai => lumigator}/sample_data/dialogsum_exc.csv (100%) rename lumigator/{python/mzai => lumigator}/sample_data/dialogsum_mini_all_gt_is_whitespace.csv (80%) rename lumigator/{python/mzai => lumigator}/sample_data/dialogsum_mini_empty_gt.csv (100%) rename lumigator/{python/mzai => lumigator}/sample_data/dialogsum_mini_no_gt.csv (100%) rename lumigator/{python/mzai => lumigator}/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv (86%) rename lumigator/{python/mzai => lumigator}/schemas/.python-version (100%) rename lumigator/{python/mzai => lumigator}/schemas/README.md (85%) rename lumigator/{python/mzai/sdk/lumigator_sdk => lumigator/schemas/lumigator_schemas}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/schemas/lumigator_schemas/completions.py (99%) rename lumigator/{python/mzai => lumigator}/schemas/lumigator_schemas/datasets.py (100%) rename lumigator/{python/mzai => lumigator}/schemas/lumigator_schemas/experiments.py (100%) rename lumigator/{python/mzai => lumigator}/schemas/lumigator_schemas/extras.py (100%) rename lumigator/{python/mzai => lumigator}/schemas/lumigator_schemas/jobs.py (100%) rename lumigator/{python/mzai => lumigator}/schemas/lumigator_schemas/models.py (100%) rename lumigator/{python/mzai => lumigator}/schemas/pyproject.toml (100%) rename lumigator/{python/mzai => lumigator}/schemas/uv.lock (100%) rename lumigator/{python/mzai => lumigator}/sdk/.python-version (100%) rename lumigator/{python/mzai => lumigator}/sdk/README.md (95%) rename lumigator/{python/mzai/sdk/tests => lumigator/sdk/lumigator_sdk}/__init__.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/lumigator_sdk/client.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/lumigator_sdk/completions.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/lumigator_sdk/experiments.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/lumigator_sdk/health.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/lumigator_sdk/jobs.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/lumigator_sdk/lm_datasets.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/lumigator_sdk/lumigator.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/lumigator_sdk/models.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/lumigator_sdk/strict_schemas.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/pyproject.toml (100%) create mode 100644 lumigator/lumigator/sdk/tests/__init__.py rename lumigator/{python/mzai => lumigator}/sdk/tests/conftest.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/dataset.json (99%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/datasets.json (99%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiment-download-no-experiment.json (97%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiment-download.json (98%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiment-missing.json (97%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiment-post-all.json (99%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiment-post-response.json (99%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiment-post-simple.json (98%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiment-result-no-experiment.json (97%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiment-result.json (98%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiment.json (98%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/experiments.json (99%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/job-all.json (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/job-extra.json (97%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/job-minimal.json (97%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/job-resp.json (99%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/job-submit-resp.json (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/job.json (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/jobs-submit.json (99%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/jobs.json (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/data/models.json (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/helpers.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/integration/test_scenarios.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/unit/test_completions.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/unit/test_datasets.py (96%) rename lumigator/{python/mzai => lumigator}/sdk/tests/unit/test_health.py (91%) rename lumigator/{python/mzai => lumigator}/sdk/tests/unit/test_jobs.py (100%) rename lumigator/{python/mzai => lumigator}/sdk/tests/unit/test_models.py (80%) rename lumigator/{python/mzai => lumigator}/sdk/uv.lock (100%) delete mode 100644 lumigator/python/mzai/jobs/evaluator/evaluator/__init__.py diff --git a/.devcontainer/docker-compose.override.yaml b/.devcontainer/docker-compose.override.yaml index 494c375d..4e2bca35 100644 --- a/.devcontainer/docker-compose.override.yaml +++ b/.devcontainer/docker-compose.override.yaml @@ -13,20 +13,20 @@ services: - "5678:5678" develop: watch: - - path: lumigator/python/mzai/backend/ - target: /mzai/lumigator/python/mzai/backend + - path: lumigator/lumigator/backend/ + target: /mzai/lumigator/lumigator/backend action: sync ignore: - .venv/ - - path: lumigator/python/mzai/jobs/ - target: /mzai/lumigator/python/mzai/jobs + - path: lumigator/lumigator/jobs/ + target: /mzai/lumigator/lumigator/jobs action: sync ignore: - .venv/ - - path: lumigator/python/mzai/schemas/ - target: /mzai/lumigator/python/mzai/schemas + - path: lumigator/lumigator/schemas/ + target: /mzai/lumigator/lumigator/schemas action: sync ignore: - .venv/ - - path: lumigator/python/mzai/backend/pyproject.toml + - path: lumigator/lumigator/backend/pyproject.toml action: rebuild diff --git a/.github/labeler.yml b/.github/labeler.yml index 3de54b05..c82bdbf3 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,9 +1,9 @@ api: - changed-files: - - any-glob-to-any-file: 'lumigator/python/mzai/backend/backend/api/**' + - any-glob-to-any-file: 'lumigator/lumigator/backend/backend/api/**' backend: - changed-files: - - any-glob-to-any-file: 'lumigator/python/mzai/backend/**' + - any-glob-to-any-file: 'lumigator/lumigator/backend/**' dependencies: - changed-files: - any-glob-to-any-file: 'pyproject.toml' @@ -12,13 +12,13 @@ documentation: - any-glob-to-any-file: 'docs/**' frontend: - changed-files: - - any-glob-to-any-file: 'lumigator/frontend/**' + - any-glob-to-any-file: 'frontend/**' gha: - changed-files: - any-glob-to-any-file: '.github/workflows/**' schemas: - changed-files: - - any-glob-to-any-file: 'lumigator/python/mzai/schemas/**' + - any-glob-to-any-file: 'lumigator/lumigator/schemas/**' sdk: - changed-files: - - any-glob-to-any-file: 'lumigator/python/mzai/sdk/**' + - any-glob-to-any-file: 'lumigator/lumigator/sdk/**' diff --git a/.github/workflows/lumigator_pipeline.yaml b/.github/workflows/lumigator_pipeline.yaml index befe859b..779e690d 100644 --- a/.github/workflows/lumigator_pipeline.yaml +++ b/.github/workflows/lumigator_pipeline.yaml @@ -189,7 +189,7 @@ jobs: filters: | rebuild_fe: - '.github/workflows/**' - - 'lumigator/frontend/**' + - 'frontend/**' - name: Truncate commit SHA run: echo "GITHUB_SHA_SHORT=$(echo ${{ github.sha }} | cut -c1-7)" >> $GITHUB_ENV @@ -213,7 +213,7 @@ jobs: uses: docker/build-push-action@v6 if: steps.filter.outputs.rebuild_fe == 'true' || contains(github.ref, 'refs/tags/') with: - file: "lumigator/frontend/Dockerfile" + file: "frontend/Dockerfile" platforms: linux/amd64,linux/arm64 push: true target: "server" @@ -242,32 +242,32 @@ jobs: - name: Check tag consistency (SDK) run: check_version.sh - working-directory: lumigator/python/mzai/sdk + working-directory: lumigator/lumigator/sdk - name: Check tag consistency (schemas) run: check_version.sh - working-directory: lumigator/python/mzai/schemas + working-directory: lumigator/lumigator/schemas - name: Install python (SDK) run: uv python install - working-directory: lumigator/python/mzai/sdk + working-directory: lumigator/lumigator/sdk - name: Install python (schemas) run: uv python install - working-directory: lumigator/python/mzai/schemas + working-directory: lumigator/lumigator/schemas - name: Package SDK run: uv build - working-directory: lumigator/python/mzai/sdk + working-directory: lumigator/lumigator/sdk - name: Package schemas run: uv build - working-directory: lumigator/python/mzai/schemas + working-directory: lumigator/lumigator/schemas - name: Upload SDK packages to PyPI - working-directory: lumigator/python/mzai/sdk + working-directory: lumigator/lumigator/sdk run: uv publish --token ${{ secrets.PYPI_TOKEN }} --verbose - name: Upload schemas packages to PyPI - working-directory: lumigator/python/mzai/schemas + working-directory: lumigator/lumigator/schemas run: uv publish --token ${{ secrets.PYPI_TOKEN }} --verbose diff --git a/.vscode/settings.json b/.vscode/settings.json index 69570f58..a2da18b7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,7 +10,7 @@ }, "python.testing.pytestEnabled": true, "python.analysis.extraPaths": [ - "./lumigator/python/mzai/schemas", - "./lumigator/python/mzai/jobs" + "./lumigator/lumigator/schemas", + "./lumigator/lumigator/jobs" ] } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 876ee266..ac8ace60 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ large variance between even PATCH versions in terms of feature development. We want to encourage both suggestions and contributions from the community in the near future. Before submitting a PR, please open a discussion in a related issue. -The lumigator project contains several packages: the `lumigator/python/mzai/backend` package that powers the lumigator server functionality, the `lumigator/python/mzai/schemas` package containing the formal schemas for communication with the server through the REST API, and the `lumigator/python/mzai/sdk` package abstracting the REST API for Python applications. Each package holds its own `pyproject.toml` definition. +The lumigator project contains several packages: the `lumigator/lumigator/backend` package that powers the lumigator server functionality, the `lumigator/lumigator/schemas` package containing the formal schemas for communication with the server through the REST API, and the `lumigator/lumigator/sdk` package abstracting the REST API for Python applications. Each package holds its own `pyproject.toml` definition. Currently, we are able to accept: @@ -26,7 +26,7 @@ The process to prepare a release should be: * Ensure that the right version is selected. * This is kept as a manual step, since versions can be skipped for a number of reasons. -* Fill in this same version in the `lumigator/python/mzai/schemas/pyproject.toml` and `lumigator/python/mzai/sdk/pyproject.toml` files. +* Fill in this same version in the `lumigator/lumigator/schemas/pyproject.toml` and `lumigator/lumigator/sdk/pyproject.toml` files. * Make a local commit. * Tag the local commit: `git tag vX.Y.Z` * Push the local commit: `git push` diff --git a/Dockerfile b/Dockerfile index 0f1e14ff..50096ee8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,8 +4,8 @@ COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv # Copy the project into the image ADD . /mzai -WORKDIR /mzai/lumigator/python/mzai/backend -ENV PYTHONPATH=/mzai/lumigator/python/mzai/backend:/mzai/lumigator/python/mzai/jobs +WORKDIR /mzai/lumigator/lumigator/backend +ENV PYTHONPATH=/mzai/lumigator/lumigator/backend:/mzai/lumigator/lumigator/jobs FROM base AS main_image diff --git a/Makefile b/Makefile index db22d633..bf6fb81c 100644 --- a/Makefile +++ b/Makefile @@ -131,11 +131,11 @@ clean-all: clean-docker-buildcache clean-docker-containers # `test-sdk-integration-containers` is usually called and this will either # start them if they are not present or use the currently running ones. test-sdk-unit: - cd lumigator/python/mzai/sdk/tests; \ + cd lumigator/lumigator/sdk/tests; \ uv run pytest -o python_files="unit/*/test_*.py unit/test_*.py" test-sdk-integration: - cd lumigator/python/mzai/sdk/tests; \ + cd lumigator/lumigator/sdk/tests; \ uv run pytest -s -o python_files="integration/test_*.py integration/*/test_*.py" test-sdk-integration-containers: @@ -154,7 +154,7 @@ test-sdk: test-sdk-unit test-sdk-integration-containers # `test-sdk-integration-containers` is usually called and this will either # start them if they are not present or use the currently running ones. test-backend-unit: - cd lumigator/python/mzai/backend/; \ + cd lumigator/lumigator/backend/; \ S3_BUCKET=lumigator-storage \ RAY_HEAD_NODE_HOST=localhost \ RAY_DASHBOARD_PORT=8265 \ @@ -163,7 +163,7 @@ test-backend-unit: uv run pytest -s -o python_files="backend/tests/unit/*/test_*.py backend/tests/unit/test_*.py" test-backend-integration: - cd lumigator/python/mzai/backend/; \ + cd lumigator/lumigator/backend/; \ docker container list --all; \ S3_BUCKET=lumigator-storage \ RAY_HEAD_NODE_HOST=localhost \ @@ -195,11 +195,11 @@ test-backend: test-backend-unit test-backend-integration-containers # be running, but they will set up a different, volatile python environment # with all the deps specified in their respective `requirements.txt` files. test-jobs-evaluation-unit: - cd lumigator/python/mzai/jobs/evaluator_lite; \ + cd lumigator/lumigator/jobs/evaluator_lite; \ uv run --with pytest --with-requirements requirements.txt --isolated pytest test-jobs-inference-unit: - cd lumigator/python/mzai/jobs/inference; \ + cd lumigator/lumigator/jobs/inference; \ uv run --with pytest --with-requirements requirements.txt --isolated pytest test-jobs-unit: test-jobs-evaluation-unit test-jobs-inference-unit diff --git a/docker-compose.yaml b/docker-compose.yaml index 39cddf37..3c8a7939 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -107,14 +107,14 @@ services: - AWS_DEFAULT_REGION - AWS_ENDPOINT_URL - S3_BUCKET - - EVALUATOR_PIP_REQS=/mzai/lumigator/python/mzai/jobs/evaluator/requirements.txt - - EVALUATOR_WORK_DIR=/mzai/lumigator/python/mzai/jobs/evaluator + - EVALUATOR_PIP_REQS=/mzai/lumigator/lumigator/jobs/evaluator/requirements.txt + - EVALUATOR_WORK_DIR=/mzai/lumigator/lumigator/jobs/evaluator # TODO: the following two rows should be renamed to EVALUATOR_* # and the two above should be removed when we depreate evaluator - - EVALUATOR_LITE_PIP_REQS=/mzai/lumigator/python/mzai/jobs/evaluator_lite/requirements.txt - - EVALUATOR_LITE_WORK_DIR=/mzai/lumigator/python/mzai/jobs/evaluator_lite - - INFERENCE_PIP_REQS=/mzai/lumigator/python/mzai/jobs/inference/requirements.txt - - INFERENCE_WORK_DIR=/mzai/lumigator/python/mzai/jobs/inference + - EVALUATOR_LITE_PIP_REQS=/mzai/lumigator/lumigator/jobs/evaluator_lite/requirements.txt + - EVALUATOR_LITE_WORK_DIR=/mzai/lumigator/lumigator/jobs/evaluator_lite + - INFERENCE_PIP_REQS=/mzai/lumigator/lumigator/jobs/inference/requirements.txt + - INFERENCE_WORK_DIR=/mzai/lumigator/lumigator/jobs/inference - RAY_DASHBOARD_PORT - RAY_HEAD_NODE_HOST - MISTRAL_API_KEY=$MISTRAL_API_KEY @@ -134,7 +134,7 @@ services: image: mzdotai/lumigator-frontend:latest build: context: . - dockerfile: "./lumigator/frontend/Dockerfile" + dockerfile: "./frontend/Dockerfile" target: "server" args: VUE_APP_BASE_URL: http://localhost/api/v1/ @@ -142,7 +142,7 @@ services: LUMIGATOR_API_PORT: 8000 LUMIGATOR_API_HOST: backend volumes: - - ./lumigator/frontend/nginx/:/etc/nginx/templates/ + - ./frontend/nginx/:/etc/nginx/templates/ depends_on: backend: condition: "service_started" diff --git a/docs/Makefile b/docs/Makefile index d0c3cbf1..cde50284 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -7,6 +7,7 @@ SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = source BUILDDIR = build +GIT_COMMIT ?= $(shell git rev-parse HEAD) # Put it first so that "make" without argument is like "make help". help: diff --git a/docs/source/conceptual-guides/endpoints.md b/docs/source/conceptual-guides/endpoints.md index 6918f066..4ac6cf22 100644 --- a/docs/source/conceptual-guides/endpoints.md +++ b/docs/source/conceptual-guides/endpoints.md @@ -13,40 +13,40 @@ cluster, SQL database, and S3-compatible Storage) are the different services Lum The components inside the backend, shown in the image below, are the different abstraction layers the backend itself relies on: -* The **API** makes backend functionalities available to the UI through different **routes** (see: [schema code](https://github.com/mozilla-ai/lumigator/tree/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/api/routes)). - [**Schemas**](https://github.com/mozilla-ai/lumigator/tree/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/schemas/schemas) +* The **API** makes backend functionalities available to the UI through different **routes** (see: [schema code](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/routes)). + [**Schemas**](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/schemas/schemas) are used in the API which allows one to exactly know which kind of data has to be passed to it. * **Services** implement the actual functionalities and are called by the different methods exposed - in the API (see: [backend services](https://github.com/mozilla-ai/lumigator/tree/31d4cd3ecdafba6292a71e125b31f23498ddf9da/lumigator/python/mzai/backend/backend/services)). + in the API (see: [backend services](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/services)). * **Repositories** implement the [repository pattern](https://www.cosmicpython.com/book/chapter_02_repository.html) - as an abstraction over the SQL database (see: [code for repositories](https://github.com/mozilla-ai/lumigator/tree/31d4cd3ecdafba6292a71e125b31f23498ddf9da/lumigator/python/mzai/backend/backend/repositories)). - They make use of [record classes](https://github.com/mozilla-ai/lumigator/tree/31d4cd3ecdafba6292a71e125b31f23498ddf9da/lumigator/python/mzai/backend/backend/records) to refer to actual records in the database. + as an abstraction over the SQL database (see: [code for repositories](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/repositories)). + They make use of [record classes](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/records) to refer to actual records in the database. ![Lumigator Backend](../../assets/lumigator-backend.svg) ```{admonition} Notation In the following, we will refer to paths inside Lumigator's repo relative to the -`/lumigator/python/mzai/backend` folder, e.g. the relative path `backend/api/routes` (note the lack of a +`/lumigator/lumigator/backend` folder, e.g. the relative path `backend/api/routes` (note the lack of a trailing slash) will map to the absolute path from the root of the repo -`/lumigator/python/mzai/backend/backend/api/routes`. +`/lumigator/lumigator/backend/backend/api/routes`. ``` ## Lumigator endpoints All the endpoints you can access in Lumigator's API are defined in -[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/tree/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/api/routes) +[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/routes) and explicitly listed in -[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/api/router.py), -together with a [metadata tag](https://github.com/mozilla-ai/lumigator/blob/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/api/tags.py) +[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/router.py), +together with a [metadata tag](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/tags.py) which is used to provide a short description of the route. Let us now walk through a few examples to understand how Lumigator's endpoints work. ### The simplest endpoint: `/health` -The [`/health`](https://github.com/mozilla-ai/lumigator/blob/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/api/routes/health.py) +The [`/health`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/routes/health.py) route provides perhaps the simplest example as it allows you to get the current backend status which is a constant: @@ -59,12 +59,12 @@ def get_health() -> HealthResponse: Note that the returned type is a `HealthResponse`: this is a [pydantic model](https://docs.pydantic.dev/latest/api/base_model/) defining the schema of the returned data. The general rule is that all return values in our routes should match a predefined -schema. Schemas are defined under the `schemas` directory (see: [health response in our source code](https://github.com/mozilla-ai/lumigator/blob/d87dc33b4578d1fe89277ba2412ab53857c9cad8/lumigator/python/mzai/schemas/lumigator_schemas/extras.py#L16)), +schema. Schemas are defined under the `schemas` directory (see: [health response in our source code](https://github.com/mozilla-ai/lumigator/blob/d87dc33b4578d1fe89277ba2412ab53857c9cad8/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)), typically in files with the same name of the route, service, etc. All the code for `get_health()` appears in the route file. A `HealthResponse`, composed of a deployment type which is loaded from -[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/settings.py#L12) +[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/settings.py#L12) and the status (currently always ok), is returned. ### One step further: `/datasets` @@ -80,7 +80,7 @@ def get_dataset(service: DatasetServiceDep, dataset_id: UUID) -> DatasetResponse ``` * The core functionalities are provided by a *service* (in this case a `DatasetService`) defined in - [`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/services/datasets.py). + [`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/services/datasets.py). * Instead of directly passing a `DatasetService` to the `get_dataset` method, DatasetServiceDep is defined to perform a *dependency injection* (see: @@ -96,7 +96,7 @@ So, let us suppose you have already uploaded a dataset to Lumigator. What happen First thing, `DatasetServiceDep` will make sure that all the dependencies to run your `DatasetService` are met. If you look at -[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/api/deps.py) +[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/deps.py) you will see that a `DatasetServiceDep` is nothing more than a `DatasetService` that depends on a `DBSessionDep` and `S3ClientDep`: @@ -116,7 +116,7 @@ database session and on an S3 client. While the S3 dependency is a "simple" one (i.e., it just instantiates a boto3 client in place), the database one is a bit more advanced (i.e., it relies on a -[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/db.py) +[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/db.py) to return a session). Second, `DatasetService` provides a `get_dataset` method which gets the actual data from the @@ -137,10 +137,10 @@ def _get_dataset_record(self, dataset_id: UUID) -> DatasetRecord: We access the database using the `repository` abstraction `DatasetRepository` class. All repositories are defined in `backend/repositories` and inherit from -[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/repositories/base.py) +[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/repositories/base.py) which is a general class providing ORM access to SQL statements. In particular, the `DatasetRepository` is a `BaseRepository` working with items of type -[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/b1ea63ba3e1aae5907e46ffbe9bfd809253c6053/lumigator/python/mzai/backend/backend/records/datasets.py). +[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/records/datasets.py). Fields in records are defined as a mix of explicit type definitions and declarative mappings (see the picture below to see how the fields in the datasets table are defined). diff --git a/docs/source/conceptual-guides/new-endpoint.md b/docs/source/conceptual-guides/new-endpoint.md index 3ebbb1c2..a2b9da3c 100644 --- a/docs/source/conceptual-guides/new-endpoint.md +++ b/docs/source/conceptual-guides/new-endpoint.md @@ -48,7 +48,7 @@ Being this the code for a new route, you will save it in `backend/api/routes/tas ### 1.2. Add the route to `router.py` with the appropriate tags The following step is adding the new route to -[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/d29a9b290ecb2e13c32cc5a846499ed605c42882/lumigator/python/mzai/backend/backend/api/router.py). +[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/router.py). The code below shows the updated file with comments next to the two lines marked below as **NEW**: ```python @@ -75,7 +75,7 @@ api_router.include_router(tasks.router, prefix="/tasks", tags=[Tags.TASKS]) # N ``` Also note that we are specifying some `Tags.TASKS` which have not been defined yet! Open -[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/d29a9b290ecb2e13c32cc5a846499ed605c42882/lumigator/python/mzai/backend/backend/api/tags.py) +[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/tags.py) and add the sections marked below as **NEW**: ```python @@ -184,7 +184,7 @@ class TaskRepository(BaseRepository[TaskRecord]): ``` This does not usually change much as long as you are fine with the base methods provided by the -[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/d29a9b290ecb2e13c32cc5a846499ed605c42882/lumigator/python/mzai/backend/backend/repositories/base.py) +[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/repositories/base.py) class. The `TaskRepository` is a repository that allows to run the set of methods defined in the @@ -204,7 +204,7 @@ class TaskRecord(BaseRecord, NameDescriptionMixin, CreatedAtMixin): ``` Similarly to what you saw before for `DatasetRecord`, `TaskRecord` inherits from -[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/d29a9b290ecb2e13c32cc5a846499ed605c42882/lumigator/python/mzai/backend/backend/records/base.py) +[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/records/base.py) the property of having an `id` primary key. In addition to that, it inherits `name` and `description` from `NameDescriptionMixin` and `created_at` from `CreatedAtMixin`. The only field that we need to specify manually is `models`, a non-null column holding a list of strings. @@ -301,7 +301,7 @@ endpoints (e.g. those which involve running ray jobs), but we'll discuss that in As `TaskService` depends on the existence of a database, we should inject a dependency on a DB session. To do this, add the following code to -[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/d29a9b290ecb2e13c32cc5a846499ed605c42882/lumigator/python/mzai/backend/backend/api/deps.py): +[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/deps.py): ```python def get_task_service(session: DBSessionDep) -> TaskService: diff --git a/docs/source/conceptual-guides/quickstart.md b/docs/source/conceptual-guides/quickstart.md new file mode 100644 index 00000000..03410479 --- /dev/null +++ b/docs/source/conceptual-guides/quickstart.md @@ -0,0 +1,285 @@ +# Quickstart + +Now that you have a local deployment of Lumigator, you can start using it. In this quickstart guide, +we will show you how to upload a dataset and create a simple evaluation job. Finally, we'll show you +how to retrieve the results of the evaluation job. + +## Upload a Dataset + +The Lumigator backend provides an API endpoint for uploading datasets and running evaluation jobs. +To view the available endpoints, navigate to the API documentation page at +[`http://localhost:8000/docs`](http://localhost:8000/docs). + +There are a few ways to interact with the API; + +1. Test the endpoints via the OpenAPI documentation page at `http://localhost:8000/docs` +1. cURL commands. +1. The Lumigator Python SDK. + +We'll focus on the last two. + +To upload a dataset, you need to send a POST request to the `/datasets` endpoint. The request should +include the dataset file. Here is an example: + +::::{tab-set} + +:::{tab-item} cURL +:sync: tab1 +```console +user@host:~/lumigator$ curl -s http://localhost:8000/api/v1/datasets/ \ + -H 'Accept: application/json' \ + -H 'Content-Type: multipart/form-data' \ + -F 'dataset=@'"path/to/dataset.csv"';type=text/csv' \ + -F 'format=experiment' | jq +{ + "id": "dd15bbaa-8d6f-44ae-a995-b3b78f4ea6fb", + "filename": "dataset.csv", + "format": "experiment", + "size": 180528, + "ground_truth": true, + "created_at": "2024-10-30T12:10:18" +} +``` +::: + +:::{tab-item} Python SDK +:sync: tab2 +```python +from lumigator_sdk.lumigator import LumigatorClient +from lumigator_schemas.datasets import DatasetFormat + +dataset_path = 'path/to/dataset.csv' +lm_client = LumigatorClient('localhost:8000') + +response = lm_client.datasets.create_dataset( + open(dataset_path, 'rb'), + DatasetFormat.JOB +) +``` +::: + +:::: + +```{note} +The dataset file should be in CSV format and contain a header row with the following columns: +`examples`, `ground_truth`. The `ground_truth` column is optional since you can generate it using +Lumigator. See [here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/blob/{{ commit_hash }}/sample_data/dialogsum_exc.csv#L4) +for an example. +``` + +You can verify that the dataset was uploaded successfully by asking the API to list all datasets and +checking that the uploaded dataset is in the list: + +::::{tab-set} + +:::{tab-item} cURL +:sync: tab1 +```console +user@host:~/lumigator$ curl -s http://localhost:8000/api/v1/datasets/ | jq -r '.items | .[] | .filename' +dataset.csv +``` +::: + +:::{tab-item} Python SDK +:sync: tab2 +```python +datasets = lm_client.datasets.get_datasets() +print(datasets.items[-1].filename) +``` +::: + +:::: + +## Create an Evaluation Job + +Now that you have uploaded a dataset, you can create an evaluation job. To this end, you need to +send a POST request to the `/jobs/evaluate` endpoint. The request should include the following +required fields: + +- A name for the evaluation job. +- A short description for tracking purposes. +- The name of the model you want to evaluate. +- The ID of the dataset you want to use for evaluation. +- The maximum number of examples to use for evaluation. + +Here is an example of how to create an evaluation job: + +::::{tab-set} + +:::{tab-item} cURL +:sync: tab1 + +Set the following variables: +```console +user@host:~/lumigator$ export EVAL_NAME="test_run_hugging_face" \ + EVAL_DESC="Test run for Huggingface model" \ + EVAL_MODEL="hf://facebook/bart-large-cnn" \ + EVAL_DATASET="$(curl -s http://localhost:8000/api/v1/datasets/ | jq -r '.items | .[0].id')" \ + EVAL_MAX_SAMPLES="10" +``` + +Define the JSON string: +```console +user@host:~/lumigator$ export JSON_STRING=$(jq -n \ + --arg name "$EVAL_NAME" \ + --arg desc "$EVAL_DESC" \ + --arg model "$EVAL_MODEL" \ + --arg dataset_id "$EVAL_DATASET" \ + --arg max_samples "$EVAL_MAX_SAMPLES" \ + '{name: $name, description: $desc, model: $model, dataset: $dataset_id, max_samples: $max_samples}' +) +``` + +Create the evaluation job: +```console +user@host:~/lumigator$ curl -s http://localhost:8000/api/v1/jobs/evaluate/ \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -d "$JSON_STRING" | jq +{ + "id": "3f15667d-d2e7-459b-9c22-3da2d236b406", + "name": "test_run_hugging_face", + "description": "Test run for Huggingface model", + "status": "created", + "created_at": "2024-10-31T09:07:43", + "updated_at": null +} +``` + +::: + +:::{tab-item} Python SDK +:sync: tab2 +```python +from lumigator_schemas.jobs import JobType, JobEvalCreate + +dataset_id = datasets.items[-1].id + +models = ['hf://facebook/bart-large-cnn',] + +# set this value to limit the evaluation to the first max_samples items (0=all) +max_samples = 10 +# team_name is a way to group jobs together under the same namespace, feel free to customize it +team_name = "lumigator_enthusiasts" + +responses = [] +for model in models: + job_args = JobEvalCreate( + name=team_name, + description="Test", + model=model, + dataset=str(dataset_id), + max_samples=max_samples + ) + # descr = f"Testing {model} summarization model on {dataset_name}" + responses.append(lm_client.jobs.create_job(JobType.EVALUATION, job_args)) +``` +::: + +:::: + +## Track the Evaluation Job + +You can track the status of the evaluation job by sending a GET request to the `/jobs/{job_id}` +endpoint, or by using th Lumigator Python SDK. Here is an example of how to track the evaluation +job: + +::::{tab-set} + +:::{tab-item} cURL +:sync: tab1 + +Get the job's submission ID: + +```console +user@host:~/lumigator$ export SUBMISSION_ID=$(curl -s http://localhost:8000/api/v1/health/jobs/ | jq -r 'sort_by(.start_time) | reverse | .[0] | .submission_id') +``` + +Track the job: + +```console +user@host:~/lumigator$ curl -s "http://localhost:8000/api/v1/health/jobs/$SUBMISSION_ID" \ + -H 'Accept: application/json' | jq +{ + "type": "SUBMISSION", + "job_id": null, + "submission_id": "5195c9a5-938d-475e-b0fc-cf866492909d", + "driver_info": null, + "status": "SUCCEEDED", + ... +} +``` + +::: + +:::{tab-item} Python SDK +:sync: tab2 +```python +from pprint import pprint +job_id = responses[0].id + +job = lm_client.jobs.wait_for_job(job_id) # Create the coroutine object +pprint(job) +``` +::: + +:::: + +## Retrieve the Results + +Once the evaluation job is complete, you can retrieve the results by sending a GET request to the +`/jobs/{job_id}/result/download` endpoint, or by using the Lumigator Python SDK. This will return a +URI that you can use to download the results. Here is an example of how to retrieve the results: + +::::{tab-set} + +:::{tab-item} cURL +:sync: tab1 + +```console +user@host:~/lumigator$ curl -s http://localhost:8000/api/v1/jobs/$SUBMISSION_ID/result/download \ + -H 'accept: application/json' | jq +{ + "id": "5195c9a5-938d-475e-b0fc-cf866492909d", + "download_url": "http://localhost:9000/lumigator-storage/jobs/results/lumigator_enthusiasts/5195c9a5-938d-475e-b0fc-cf866492909d/results.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=test%2F20241031%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T104126Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=0309fe4825bc2358180c607a4a4ad4e8d36946133574d8b9416df228ce62944e" +} +``` + +::: + +:::{tab-item} Python SDK +:sync: tab2 +```python +import requests + +eval_result = lm_client.jobs.get_job_download(job_id) +response = requests.request(url=eval_result.download_url, method="GET") +``` +::: + +:::: + +The metrics we use to evaluate are ROUGE, METEOR, and BERT score. They all measure similarity +between predicted summaries and those provided with the ground truth, but each of them focuses on +different aspects: + +- [ROUGE](https://aclanthology.org/W04-1013.pdf) - (Recall-Oriented Understudy for Gisting + Evaluation), which compares an automatically-generated summary to one generated by a machine + learning model on a score of `0` to `1` in a range of metrics comparing statistical similarity of + two texts. +- [METEOR](https://aclanthology.org/W05-0909.pdf) - Looks at the harmonic mean of precision and + recall. +- [BERTScore](https://openreview.net/pdf?id=SkeHuCVFDr) - Generates embeddings of ground truth input + and model output and compares their cosine similarity + +## Terminate Session +In order to shut down Lumigator, you can stop the containers that were [started](../get-started/installation.md) using Docker Compose. This can be done by simply running the following command: +```console +user@host:~/lumigator$ make stop-lumigator +``` + +## Next Steps + +Congratulations! You have successfully uploaded a dataset, created an evaluation job, and retrieved +the results. In the next section, we will show you how to deploy Lumigator on a distributed +environment. diff --git a/docs/source/conceptual-guides/ui-guide.md b/docs/source/conceptual-guides/ui-guide.md new file mode 100644 index 00000000..bf22608f --- /dev/null +++ b/docs/source/conceptual-guides/ui-guide.md @@ -0,0 +1,55 @@ +# Using Lumigator UI +Lumigator comes with a web-based UI that allows you to interact with the Lumigator API. It is designed to be easy to use and to provide a quick way to get started with Lumigator. + +## Getting Started +Follow the [installation guide](installation.md#local-deployment) to get Lumigator up and running. The UI can then be accessed by visiting [localhost](http://localhost) on your web browser. You should be able to see a screen with the sections **Datasets** and **Experiments**. Lets go through each of them in detail. + +## Upload a Dataset +The main purpose of Lumigator is to help you select a model that works well for your particular data. It does this by evaluating multiple models on a sample of your data: your dataset. + +The first step is to upload your dataset. This can be done by clicking on the **Provide Dataset** button in the **Datasets** section. This will open a dialog box where you can select the dataset file to be uploaded from your local machine. The dataset file should be in `csv` format with columns examples and (optionally) ground_truth. + +You can get started by uploading the [sample dataset](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/blob/{{ commit_hash }}/sample_data/dialogsum_exc.csv) provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). + +![Datasets Page](../../assets/ui_guide_steps/datasets_page.png) + +Once the dataset is uploaded, it can be viewed as a row in the table in the **Datasets** section. + +![Datasets Table](../../assets/ui_guide_steps/datasets_table.png) + +## Create and Run an Experiment +Next we move on to the **Experiments** section. Start by clicking on the **Create Experiment** button. + +![Experiments Page](../../assets/ui_guide_steps/experiments_page.png) + +This will open a sidebar where you would specify which use case and dataset, and further experiment details. The maximum samples field defines the number of rows from the dataset to be used for the experiment, on which Lumigator would run inference and evaluation to produce as results the [relevent metrics](quickstart.md#retrieve-the-results). + +Below that, you have the option to select the models to be used for the experiment. Multiple models may be simultaneously selected. + +| ![Experiment Fields](../../assets/ui_guide_steps/experiment_fields.png) | ![Model Selection](../../assets/ui_guide_steps/model_select.png) | +| --- | --- | + +```{note} +Reminder: In order to be able to use API based models, you must have provided the respective API keys (`OPENAI_API_KEY` or `MISTRAL_API_KEY`) as environment variables before starting Lumigator. See more in the [installation guide](installation.md). +``` + +Finally click the **Run Experiment** button. + +![Experiments Running](../../assets/ui_guide_steps/experiments_running.png) + +The **Experiments** page gets populated with the experiment details and the status of the experiment, which would initially be `RUNNING` and changes to `SUCCEEDED` once the experiment is complete or `FAILED` if the experiment fails. + +![Experiments Completed](../../assets/ui_guide_steps/experiments_completed.png) + +## View Results +For each experiment, you can view the sidebar which contains a **View Results** button. On clicking this button, we would be able to see a table with evaluation metrics comparing the previously selected models. + +![Results Overall Comparison](../../assets/ui_guide_steps/results_overall_comparison.png) + +You can further view the row by row predictions for each individual model by expanding under a given model. This gives you a detailed view of how the model predictions compare to the ground truth for each instance in the dataset. + +![Results Row by Row Comparison](../../assets/ui_guide_steps/results_row_by_row.png) + +--- + +Congratulations! With that, you have successfully run your first experiment using the Lumigator UI! You can continue to run more experiments by uploading your custom datasets and selecting from among the different models available. diff --git a/docs/source/conf.py b/docs/source/conf.py index 30fa539d..dd295880 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -6,6 +6,7 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information +import os import sys from pathlib import Path @@ -24,6 +25,9 @@ # see: https://github.com/pydantic/pydantic/discussions/7763#discussioncomment-8417097 from lumigator_sdk import jobs, lm_datasets, models # noqa: F401, E402 +# Get the commit hash from the environment variable +commit_hash = os.environ.get("commit_hash", "main") + project = "Lumigator 🐊" copyright = "2024, Mozilla AI" author = "Mozilla AI Engineering" diff --git a/docs/source/get-started/installation.md b/docs/source/get-started/installation.md index 02cb1d18..3805ab8a 100644 --- a/docs/source/get-started/installation.md +++ b/docs/source/get-started/installation.md @@ -1,7 +1,7 @@ # Installation You can deploy Lumigator either locally or into a distributed environment using Kubernetes -[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/7be2518ec8c6bc59ab8463fc7c39aad078bbb386/lumigator/infra/mzai/helm/lumigator/README.md). +[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/infra/helm/lumigator/README.md). In this guide, we'll show you how to get started with a local deployment. ## Prerequisites diff --git a/docs/source/get-started/quickstart.md b/docs/source/get-started/quickstart.md index 12626461..7c8b80d0 100644 --- a/docs/source/get-started/quickstart.md +++ b/docs/source/get-started/quickstart.md @@ -63,7 +63,7 @@ response = lm_client.datasets.create_dataset( ```{note} The dataset file should be in CSV format and contain a header row with the following columns: `examples`, `ground_truth`. The `ground_truth` column is optional since you can generate it using -Lumigator. See [here](https://github.com/mozilla-ai/lumigator/blob/0bef1965c5180f39832e2932b59ef797b0853ff4/lumigator/python/mzai/sample_data/dialogsum_exc.csv#L4) +Lumigator. See [here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/sample_data/dialogsum_exc.csv#L4) for an example. ``` diff --git a/docs/source/get-started/ui-guide.md b/docs/source/get-started/ui-guide.md index a6420a80..112a9575 100644 --- a/docs/source/get-started/ui-guide.md +++ b/docs/source/get-started/ui-guide.md @@ -9,7 +9,7 @@ The main purpose of Lumigator is to help you select a model that works well for The first step is to upload your dataset. This can be done by clicking on the **Provide Dataset** button in the **Datasets** section. This will open a dialog box where you can select the dataset file to be uploaded from your local machine. The dataset file should be in `csv` format with columns examples and (optionally) ground_truth. -You can get started by uploading the [sample dataset](https://github.com/mozilla-ai/lumigator/blob/8acc92460937cb82bbef9f01a964a584d2469c3f/lumigator/python/mzai/sample_data/dialogsum_exc.csv) provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). +You can get started by uploading the [sample dataset](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/sample_data/dialogsum_exc.csv) provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). ![Datasets Page](../../assets/ui_guide_steps/datasets_page.png) diff --git a/docs/source/operations-guide/alembic.md b/docs/source/operations-guide/alembic.md index 671d2ce7..86ebc428 100644 --- a/docs/source/operations-guide/alembic.md +++ b/docs/source/operations-guide/alembic.md @@ -16,11 +16,11 @@ matching revision ID. ## Running commands -Please run `alembic` commands in this document within the backend (`lumigator/python/mzai/backend`) folder, using `uv`. For example, where the Lumigator repository is cloned to your `$HOME` directory: +Please run `alembic` commands in this document within the backend (`lumigator/lumigator/backend`) folder, using `uv`. For example, where the Lumigator repository is cloned to your `$HOME` directory: ```console -user@host:~/$ cd lumigator/lumigator/python/mzai/backend -user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic --version +user@host:~/$ cd lumigator/lumigator/lumigator/backend +user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic --version ``` ## Data model changes @@ -28,7 +28,7 @@ user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic --version When code changes are made to the data models, or when new models are added, a manual step is required in order to ensure that the models are visible to Alembic. -First, the imports at the top of [`env.py`](https://github.com/mozilla-ai/lumigator/blob/main/lumigator/python/mzai/backend/backend/alembic/env.py) +First, the imports at the top of [`env.py`](https://github.com/mozilla-ai/lumigator/blob/main/lumigator/lumigator/backend/backend/alembic/env.py) **MUST** import your package: `from backend.records.{package} import * # noqa: F403` @@ -49,25 +49,25 @@ In order to connect to a "real" database to compare its state against the codifi variable in your shell, or provide it on each invocation of `alembic`: ```console -user@host:~/lumigator/lumigator/python/mzai/backend$ export SQLALCHEMY_DATABASE_URL=sqlite:///local.db +user@host:~/lumigator/lumigator/lumigator/backend$ export SQLALCHEMY_DATABASE_URL=sqlite:///local.db ``` or ```console -user@host:~/lumigator/lumigator/python/mzai/backend$ SQLALCHEMY_DATABASE_URL=sqlite:///local.db uv run alembic history +user@host:~/lumigator/lumigator/lumigator/backend$ SQLALCHEMY_DATABASE_URL=sqlite:///local.db uv run alembic history ``` The rest of the document assumes `SQLALCHEMY_DATABASE_URL` is exported. If `SQLALCHEMY_DATABASE_URL` is not present then a default of `sqlite:///local.db` will be used (see: -[here](https://github.com/mozilla-ai/lumigator/blob/d29a9b290ecb2e13c32cc5a846499ed605c42882/lumigator/python/mzai/backend/alembic.ini#L65)). +[here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/alembic.ini#L65)). If you've followed the `README` for `backend`, you should have sourced the virtual environment. This means you can run the `alembic` command directly in the terminal. Alternatively, you can also run it using `uv`: ```console -user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic --version +user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic --version ``` ## Pre-existing databases (not currently managed by Alembic) @@ -84,13 +84,13 @@ manage going forward. If you believe your database already matches the most up-to-date models: ```console -user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic stamp head +user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic stamp head ``` ## My database is in a different state (from a prior release) This scenario requires manual review of the existing revisions stored in the -[versions folder](https://github.com/mozilla-ai/lumigator/tree/main/lumigator/python/mzai/backend/backend/alembic/versions), +[versions folder](https://github.com/mozilla-ai/lumigator/tree/main/lumigator/lumigator/backend/backend/alembic/versions), to determine which revision ID represents the current state of the database containing the data. Revisions are stored in a format resembling a linked-list, with each revision containing a @@ -103,7 +103,7 @@ To align your database with a specific revision (migration ID `e75fa022c781` ali state of our database): ```console -user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic stamp e75fa022c781 +user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic stamp e75fa022c781 ``` ## Other Alembic commands @@ -115,13 +115,13 @@ downgrading the database. - Viewing migration history ```console - user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic history + user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic history ``` - Show your current revision ```console - user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic current + user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic current ``` - Upgrading @@ -129,19 +129,19 @@ downgrading the database. - Manually upgrade your database to match the latest models: ```console - user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic upgrade head + user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic upgrade head ``` - You can also upgrade 'relative' to your current state, so to move forwards 1 revision: ```console - user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic upgrade +1 + user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic upgrade +1 ``` - If you know the version you want to migrate to, you can specify it: ```console - user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic upgrade cb3cf47d9259 + user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic upgrade cb3cf47d9259 ``` - Downgrading @@ -149,19 +149,19 @@ downgrading the database. - To downgrade to the original state (not recommended) use: ```console - user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic downgrade base + user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic downgrade base ``` - You can also downgrade 'relative' to your current state, so to move backwards 1 revision: ```console - user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic downgrade -1 + user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic downgrade -1 ``` - If you know the version you want to migrate to, you can specify it: ```console - user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic upgrade cb3cf47d9259 + user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic upgrade cb3cf47d9259 ```` ## Creating revisions @@ -173,15 +173,15 @@ when moving between migrations). To create an empty revision that you populate manually: ```console -user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic revision -m "{Explanatory commit-like message}" +user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision -m "{Explanatory commit-like message}" ``` -This will create a new Python file under `[versions/](https://github.com/mozilla-ai/lumigator/tree/main/lumigator/python/mzai/backend/backend/alembic/versions)`. +This will create a new Python file under `[versions/](https://github.com/mozilla-ai/lumigator/tree/main/lumigator/lumigator/backend/backend/alembic/versions)`. For example: ```console -user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic revision -m "added desc field to job" +user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision -m "added desc field to job" ``` should see a new Python file created with a commit/ID prepended to your message: @@ -193,7 +193,7 @@ create a revision using the `--autogenerate` flag when creating a revision. This way to create revisions in Lumigator. ```console -user@host:~/lumigator/lumigator/python/mzai/backend$ uv run alembic revision --autogenerate -m {Explanatory commit-like message} +user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision --autogenerate -m {Explanatory commit-like message} ``` Please note that "automatic" doesn't mean this can be completely automated, as manual steps are diff --git a/docs/source/operations-guide/dev.md b/docs/source/operations-guide/dev.md index a930cc3d..b3b487cd 100644 --- a/docs/source/operations-guide/dev.md +++ b/docs/source/operations-guide/dev.md @@ -85,10 +85,10 @@ Ensure you have the following installed on your system: user@host:~$ git@github.com:mozilla-ai/lumigator.git ``` -1. Navigate to the `lumigator/frontend` directory: +1. Navigate to the `frontend` directory: ```console - user@host:~$ cd lumigator/lumigator/frontend + user@host:~$ cd lumigator/frontend ``` 1. **Install dependencies**: @@ -96,13 +96,13 @@ Ensure you have the following installed on your system: Using npm: ```console - user@host:~/lumigator/lumigator/frontend$ npm install + user@host:~/lumigator/frontend$ npm install ``` Or using yarn: ```console - user@host:~/lumigator/lumigator/frontend$ yarn install + user@host:~/lumigator/frontend$ yarn install ``` ### Development @@ -110,13 +110,13 @@ Ensure you have the following installed on your system: To run the frontend locally for development purposes, use the following command to start the Vite development server. This will also enable hot-reloading, so changes you make in the code will be reflected instantly in the browser. ```console -user@host:~/lumigator/lumigator/frontend$ npm run dev +user@host:~/lumigator/frontend$ npm run dev ``` Or using yarn: ```console -user@host:~/lumigator/lumigator/frontend$ yarn dev +user@host:~/lumigator/frontend$ yarn dev ``` Visit `http://localhost` in your browser. The application runs at this address by default. @@ -126,21 +126,21 @@ Visit `http://localhost` in your browser. The application runs at this address b To build the frontend for production, run: ```console -user@host:~/lumigator/lumigator/frontend$ npm run build +user@host:~/lumigator/frontend$ npm run build ``` -This command will bundle the frontend code into a production-ready, optimized set of static assets located in the `dist` directory. By default `dist` is placed in project's root directory ( `./lumigator/frontend` in this case). +This command will bundle the frontend code into a production-ready, optimized set of static assets located in the `dist` directory. By default `dist` is placed in project's root directory ( `./frontend` in this case). ### Linting and Code Formatting For consistent code formatting and linting across multiple contributors, ESLint and Prettier are configured. To run linting: ```console -user@host:~/lumigator/lumigator/frontend$ npm run lint +user@host:~/lumigator/frontend$ npm run lint ``` To fix linting issues automatically: ```console -user@host:~/lumigator/lumigator/frontend$ npm run lint:fix +user@host:~/lumigator/frontend$ npm run lint:fix ``` diff --git a/docs/source/operations-guide/kubernetes.md b/docs/source/operations-guide/kubernetes.md index 512f702d..83651ddc 100644 --- a/docs/source/operations-guide/kubernetes.md +++ b/docs/source/operations-guide/kubernetes.md @@ -43,7 +43,7 @@ To install Lumigator on a Kubernetes cluster, follow these steps: 1. Install the Lumigator Helm chart: ```console - user@host:~/lumigator$ helm install lumigator ./lumigator/infra/mzai/helm/lumigator + user@host:~/lumigator$ helm install lumigator ./infra/helm/lumigator ``` ## Configuration diff --git a/docs/source/user-guides/inference.md b/docs/source/user-guides/inference.md index 99515d3b..a29044c5 100644 --- a/docs/source/user-guides/inference.md +++ b/docs/source/user-guides/inference.md @@ -19,7 +19,7 @@ Refer to the `.env.template` file in the repository for more details. 1. Install the Lumigator SDK: ```console - user@host:~/lumigator$ uv pip install -e lumigator/python/mzai/sdk + user@host:~/lumigator$ uv pip install -e lumigator/lumigator/sdk ``` 1. Create a new Python file: @@ -48,7 +48,7 @@ Refer to the `.env.template` file in the repository for more details. lm_client = LumigatorClient(f"{HOST}:{LUMIGATOR_PORT}") # Upload a dataset - dataset_path = "lumigator/python/mzai/sample_data/dialogsum_exc.csv" + dataset_path = "lumigator/lumigator/sample_data/dialogsum_exc.csv" dataset = lm_client.datasets.create_dataset( dataset=open(dataset_path, 'rb'), format=datasets.DatasetFormat.JOB diff --git a/lumigator/frontend/.gitignore b/frontend/.gitignore similarity index 100% rename from lumigator/frontend/.gitignore rename to frontend/.gitignore diff --git a/lumigator/frontend/.prettierrc b/frontend/.prettierrc similarity index 100% rename from lumigator/frontend/.prettierrc rename to frontend/.prettierrc diff --git a/lumigator/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json similarity index 100% rename from lumigator/frontend/.vscode/extensions.json rename to frontend/.vscode/extensions.json diff --git a/lumigator/frontend/Dockerfile b/frontend/Dockerfile similarity index 57% rename from lumigator/frontend/Dockerfile rename to frontend/Dockerfile index 2e7af9a9..703542b5 100644 --- a/lumigator/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -3,19 +3,19 @@ ARG NODE_VERSION=18.20.0 FROM node:${NODE_VERSION}-alpine AS base # Copy the project into the image -COPY ../../ /mzai +COPY ../ /mzai WORKDIR /mzai/ # Install dependencies -RUN npm --prefix /mzai/lumigator/frontend install +RUN npm --prefix /mzai/frontend install # Build static files -RUN npm --prefix /mzai/lumigator/frontend run build +RUN npm --prefix /mzai/frontend run build FROM nginx:1.27.2-alpine-slim AS server # Copy built files to the Nginx image -COPY --from=base /mzai/lumigator/frontend/dist /usr/share/nginx/html +COPY --from=base /mzai/frontend/dist /usr/share/nginx/html EXPOSE 80 diff --git a/lumigator/frontend/README.md b/frontend/README.md similarity index 100% rename from lumigator/frontend/README.md rename to frontend/README.md diff --git a/lumigator/frontend/eslint.config.js b/frontend/eslint.config.js similarity index 100% rename from lumigator/frontend/eslint.config.js rename to frontend/eslint.config.js diff --git a/lumigator/frontend/index.html b/frontend/index.html similarity index 100% rename from lumigator/frontend/index.html rename to frontend/index.html diff --git a/lumigator/frontend/nginx/default.conf.template b/frontend/nginx/default.conf.template similarity index 100% rename from lumigator/frontend/nginx/default.conf.template rename to frontend/nginx/default.conf.template diff --git a/lumigator/frontend/package-lock.json b/frontend/package-lock.json similarity index 100% rename from lumigator/frontend/package-lock.json rename to frontend/package-lock.json diff --git a/lumigator/frontend/package.json b/frontend/package.json similarity index 100% rename from lumigator/frontend/package.json rename to frontend/package.json diff --git a/lumigator/frontend/public/lumigator.svg b/frontend/public/lumigator.svg similarity index 100% rename from lumigator/frontend/public/lumigator.svg rename to frontend/public/lumigator.svg diff --git a/lumigator/frontend/src/.editorconfig b/frontend/src/.editorconfig similarity index 100% rename from lumigator/frontend/src/.editorconfig rename to frontend/src/.editorconfig diff --git a/lumigator/frontend/src/App.vue b/frontend/src/App.vue similarity index 100% rename from lumigator/frontend/src/App.vue rename to frontend/src/App.vue diff --git a/lumigator/frontend/src/assets/LogoText.svg b/frontend/src/assets/LogoText.svg similarity index 100% rename from lumigator/frontend/src/assets/LogoText.svg rename to frontend/src/assets/LogoText.svg diff --git a/lumigator/frontend/src/assets/icons/BinIcon.svg b/frontend/src/assets/icons/BinIcon.svg similarity index 100% rename from lumigator/frontend/src/assets/icons/BinIcon.svg rename to frontend/src/assets/icons/BinIcon.svg diff --git a/lumigator/frontend/src/assets/icons/DatasetsIcon.svg b/frontend/src/assets/icons/DatasetsIcon.svg similarity index 100% rename from lumigator/frontend/src/assets/icons/DatasetsIcon.svg rename to frontend/src/assets/icons/DatasetsIcon.svg diff --git a/lumigator/frontend/src/assets/icons/DownloadIcon.svg b/frontend/src/assets/icons/DownloadIcon.svg similarity index 100% rename from lumigator/frontend/src/assets/icons/DownloadIcon.svg rename to frontend/src/assets/icons/DownloadIcon.svg diff --git a/lumigator/frontend/src/assets/icons/ExperimentIcon.svg b/frontend/src/assets/icons/ExperimentIcon.svg similarity index 100% rename from lumigator/frontend/src/assets/icons/ExperimentIcon.svg rename to frontend/src/assets/icons/ExperimentIcon.svg diff --git a/lumigator/frontend/src/assets/lumigator.svg b/frontend/src/assets/lumigator.svg similarity index 100% rename from lumigator/frontend/src/assets/lumigator.svg rename to frontend/src/assets/lumigator.svg diff --git a/lumigator/frontend/src/components/molecules/LDatasetEmpty.vue b/frontend/src/components/molecules/LDatasetEmpty.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LDatasetEmpty.vue rename to frontend/src/components/molecules/LDatasetEmpty.vue diff --git a/lumigator/frontend/src/components/molecules/LDatasetTable.vue b/frontend/src/components/molecules/LDatasetTable.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LDatasetTable.vue rename to frontend/src/components/molecules/LDatasetTable.vue diff --git a/lumigator/frontend/src/components/molecules/LExperimentDetails.vue b/frontend/src/components/molecules/LExperimentDetails.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LExperimentDetails.vue rename to frontend/src/components/molecules/LExperimentDetails.vue diff --git a/lumigator/frontend/src/components/molecules/LExperimentForm.vue b/frontend/src/components/molecules/LExperimentForm.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LExperimentForm.vue rename to frontend/src/components/molecules/LExperimentForm.vue diff --git a/lumigator/frontend/src/components/molecules/LExperimentLogs.vue b/frontend/src/components/molecules/LExperimentLogs.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LExperimentLogs.vue rename to frontend/src/components/molecules/LExperimentLogs.vue diff --git a/lumigator/frontend/src/components/molecules/LExperimentTable.vue b/frontend/src/components/molecules/LExperimentTable.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LExperimentTable.vue rename to frontend/src/components/molecules/LExperimentTable.vue diff --git a/lumigator/frontend/src/components/molecules/LExperimentTabs.vue b/frontend/src/components/molecules/LExperimentTabs.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LExperimentTabs.vue rename to frontend/src/components/molecules/LExperimentTabs.vue diff --git a/lumigator/frontend/src/components/molecules/LExperimentsDrawer.vue b/frontend/src/components/molecules/LExperimentsDrawer.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LExperimentsDrawer.vue rename to frontend/src/components/molecules/LExperimentsDrawer.vue diff --git a/lumigator/frontend/src/components/molecules/LExperimentsEmpty.vue b/frontend/src/components/molecules/LExperimentsEmpty.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LExperimentsEmpty.vue rename to frontend/src/components/molecules/LExperimentsEmpty.vue diff --git a/lumigator/frontend/src/components/molecules/LFileUpload.vue b/frontend/src/components/molecules/LFileUpload.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LFileUpload.vue rename to frontend/src/components/molecules/LFileUpload.vue diff --git a/lumigator/frontend/src/components/molecules/LHealthStatus.vue b/frontend/src/components/molecules/LHealthStatus.vue similarity index 98% rename from lumigator/frontend/src/components/molecules/LHealthStatus.vue rename to frontend/src/components/molecules/LHealthStatus.vue index 77d28e95..b0e95fd6 100644 --- a/lumigator/frontend/src/components/molecules/LHealthStatus.vue +++ b/frontend/src/components/molecules/LHealthStatus.vue @@ -25,4 +25,4 @@ onMounted(async () => { padding: $l-spacing-1/2; color: $l-grey-100; } - \ No newline at end of file + diff --git a/lumigator/frontend/src/components/molecules/LJobResults.vue b/frontend/src/components/molecules/LJobResults.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LJobResults.vue rename to frontend/src/components/molecules/LJobResults.vue diff --git a/lumigator/frontend/src/components/molecules/LJobsTable.vue b/frontend/src/components/molecules/LJobsTable.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LJobsTable.vue rename to frontend/src/components/molecules/LJobsTable.vue diff --git a/lumigator/frontend/src/components/molecules/LModelCards.vue b/frontend/src/components/molecules/LModelCards.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LModelCards.vue rename to frontend/src/components/molecules/LModelCards.vue diff --git a/lumigator/frontend/src/components/molecules/LPageHeader.vue b/frontend/src/components/molecules/LPageHeader.vue similarity index 100% rename from lumigator/frontend/src/components/molecules/LPageHeader.vue rename to frontend/src/components/molecules/LPageHeader.vue diff --git a/lumigator/frontend/src/components/organisms/LDatasetDetails.vue b/frontend/src/components/organisms/LDatasetDetails.vue similarity index 100% rename from lumigator/frontend/src/components/organisms/LDatasetDetails.vue rename to frontend/src/components/organisms/LDatasetDetails.vue diff --git a/lumigator/frontend/src/components/organisms/LExperimentResults.vue b/frontend/src/components/organisms/LExperimentResults.vue similarity index 100% rename from lumigator/frontend/src/components/organisms/LExperimentResults.vue rename to frontend/src/components/organisms/LExperimentResults.vue diff --git a/lumigator/frontend/src/components/organisms/LMenu.vue b/frontend/src/components/organisms/LMenu.vue similarity index 100% rename from lumigator/frontend/src/components/organisms/LMenu.vue rename to frontend/src/components/organisms/LMenu.vue diff --git a/lumigator/frontend/src/components/pages/LDatasets.vue b/frontend/src/components/pages/LDatasets.vue similarity index 100% rename from lumigator/frontend/src/components/pages/LDatasets.vue rename to frontend/src/components/pages/LDatasets.vue diff --git a/lumigator/frontend/src/components/pages/LExperiments.vue b/frontend/src/components/pages/LExperiments.vue similarity index 100% rename from lumigator/frontend/src/components/pages/LExperiments.vue rename to frontend/src/components/pages/LExperiments.vue diff --git a/lumigator/frontend/src/composables/SlidingPanel.js b/frontend/src/composables/SlidingPanel.js similarity index 100% rename from lumigator/frontend/src/composables/SlidingPanel.js rename to frontend/src/composables/SlidingPanel.js diff --git a/lumigator/frontend/src/helpers/index.js b/frontend/src/helpers/index.js similarity index 98% rename from lumigator/frontend/src/helpers/index.js rename to frontend/src/helpers/index.js index cc2b5df4..446fa5cf 100644 --- a/lumigator/frontend/src/helpers/index.js +++ b/frontend/src/helpers/index.js @@ -36,7 +36,7 @@ export function retrieveEntrypoint(job) { // NOTE: Normalization is required because the config templates used per-model sometimes vary, // meaning that the location of the data we are trying to parse isn't always the same. - // See: lumigator/python/mzai/backend/backend/config_templates.py + // See: lumigator/lumigator/backend/backend/config_templates.py // Normalize the max_samples if (jsonObject?.job?.max_samples !== undefined) { diff --git a/lumigator/frontend/src/libs/primevue.config.js b/frontend/src/libs/primevue.config.js similarity index 100% rename from lumigator/frontend/src/libs/primevue.config.js rename to frontend/src/libs/primevue.config.js diff --git a/lumigator/frontend/src/main.js b/frontend/src/main.js similarity index 100% rename from lumigator/frontend/src/main.js rename to frontend/src/main.js diff --git a/lumigator/frontend/src/router/index.js b/frontend/src/router/index.js similarity index 100% rename from lumigator/frontend/src/router/index.js rename to frontend/src/router/index.js diff --git a/lumigator/frontend/src/services/datasets/api.js b/frontend/src/services/datasets/api.js similarity index 100% rename from lumigator/frontend/src/services/datasets/api.js rename to frontend/src/services/datasets/api.js diff --git a/lumigator/frontend/src/services/datasets/datasetsService.js b/frontend/src/services/datasets/datasetsService.js similarity index 100% rename from lumigator/frontend/src/services/datasets/datasetsService.js rename to frontend/src/services/datasets/datasetsService.js diff --git a/lumigator/frontend/src/services/experiments/api.js b/frontend/src/services/experiments/api.js similarity index 100% rename from lumigator/frontend/src/services/experiments/api.js rename to frontend/src/services/experiments/api.js diff --git a/lumigator/frontend/src/services/experiments/experimentService.js b/frontend/src/services/experiments/experimentService.js similarity index 100% rename from lumigator/frontend/src/services/experiments/experimentService.js rename to frontend/src/services/experiments/experimentService.js diff --git a/lumigator/frontend/src/services/health/api.js b/frontend/src/services/health/api.js similarity index 100% rename from lumigator/frontend/src/services/health/api.js rename to frontend/src/services/health/api.js diff --git a/lumigator/frontend/src/services/health/healthService.js b/frontend/src/services/health/healthService.js similarity index 100% rename from lumigator/frontend/src/services/health/healthService.js rename to frontend/src/services/health/healthService.js diff --git a/lumigator/frontend/src/services/http/index.js b/frontend/src/services/http/index.js similarity index 100% rename from lumigator/frontend/src/services/http/index.js rename to frontend/src/services/http/index.js diff --git a/lumigator/frontend/src/services/models/api.js b/frontend/src/services/models/api.js similarity index 100% rename from lumigator/frontend/src/services/models/api.js rename to frontend/src/services/models/api.js diff --git a/lumigator/frontend/src/services/models/modelsService.js b/frontend/src/services/models/modelsService.js similarity index 100% rename from lumigator/frontend/src/services/models/modelsService.js rename to frontend/src/services/models/modelsService.js diff --git a/lumigator/frontend/src/stores/datasets/store.js b/frontend/src/stores/datasets/store.js similarity index 100% rename from lumigator/frontend/src/stores/datasets/store.js rename to frontend/src/stores/datasets/store.js diff --git a/lumigator/frontend/src/stores/experiments/store.js b/frontend/src/stores/experiments/store.js similarity index 100% rename from lumigator/frontend/src/stores/experiments/store.js rename to frontend/src/stores/experiments/store.js diff --git a/lumigator/frontend/src/stores/health/store.js b/frontend/src/stores/health/store.js similarity index 100% rename from lumigator/frontend/src/stores/health/store.js rename to frontend/src/stores/health/store.js diff --git a/lumigator/frontend/src/stores/models/store.js b/frontend/src/stores/models/store.js similarity index 100% rename from lumigator/frontend/src/stores/models/store.js rename to frontend/src/stores/models/store.js diff --git a/lumigator/frontend/src/styles/_components.scss b/frontend/src/styles/_components.scss similarity index 100% rename from lumigator/frontend/src/styles/_components.scss rename to frontend/src/styles/_components.scss diff --git a/lumigator/frontend/src/styles/_icons.scss b/frontend/src/styles/_icons.scss similarity index 100% rename from lumigator/frontend/src/styles/_icons.scss rename to frontend/src/styles/_icons.scss diff --git a/lumigator/frontend/src/styles/_lumigator-theme.scss b/frontend/src/styles/_lumigator-theme.scss similarity index 100% rename from lumigator/frontend/src/styles/_lumigator-theme.scss rename to frontend/src/styles/_lumigator-theme.scss diff --git a/lumigator/frontend/src/styles/_resetcss.scss b/frontend/src/styles/_resetcss.scss similarity index 100% rename from lumigator/frontend/src/styles/_resetcss.scss rename to frontend/src/styles/_resetcss.scss diff --git a/lumigator/frontend/src/styles/_transitions.scss b/frontend/src/styles/_transitions.scss similarity index 100% rename from lumigator/frontend/src/styles/_transitions.scss rename to frontend/src/styles/_transitions.scss diff --git a/lumigator/frontend/src/styles/_typography.scss b/frontend/src/styles/_typography.scss similarity index 100% rename from lumigator/frontend/src/styles/_typography.scss rename to frontend/src/styles/_typography.scss diff --git a/lumigator/frontend/src/styles/_variables.scss b/frontend/src/styles/_variables.scss similarity index 100% rename from lumigator/frontend/src/styles/_variables.scss rename to frontend/src/styles/_variables.scss diff --git a/lumigator/frontend/src/styles/app.scss b/frontend/src/styles/app.scss similarity index 100% rename from lumigator/frontend/src/styles/app.scss rename to frontend/src/styles/app.scss diff --git a/lumigator/frontend/vite.config.js b/frontend/vite.config.js similarity index 100% rename from lumigator/frontend/vite.config.js rename to frontend/vite.config.js diff --git a/lumigator/infra/mzai/helm/lumigator/.helmignore b/infra/helm/lumigator/.helmignore similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/.helmignore rename to infra/helm/lumigator/.helmignore diff --git a/lumigator/infra/mzai/helm/lumigator/Chart.yaml b/infra/helm/lumigator/Chart.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/Chart.yaml rename to infra/helm/lumigator/Chart.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/.helmignore b/infra/helm/lumigator/charts/backend/.helmignore similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/.helmignore rename to infra/helm/lumigator/charts/backend/.helmignore diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/Chart.lock b/infra/helm/lumigator/charts/backend/Chart.lock similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/Chart.lock rename to infra/helm/lumigator/charts/backend/Chart.lock diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/Chart.yaml b/infra/helm/lumigator/charts/backend/Chart.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/Chart.yaml rename to infra/helm/lumigator/charts/backend/Chart.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/README.md b/infra/helm/lumigator/charts/backend/README.md similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/README.md rename to infra/helm/lumigator/charts/backend/README.md diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/charts/postgresql-15.5.20.tgz b/infra/helm/lumigator/charts/backend/charts/postgresql-15.5.20.tgz similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/charts/postgresql-15.5.20.tgz rename to infra/helm/lumigator/charts/backend/charts/postgresql-15.5.20.tgz diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/templates/NOTES.txt b/infra/helm/lumigator/charts/backend/templates/NOTES.txt similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/templates/NOTES.txt rename to infra/helm/lumigator/charts/backend/templates/NOTES.txt diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/templates/_helpers.tpl b/infra/helm/lumigator/charts/backend/templates/_helpers.tpl similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/templates/_helpers.tpl rename to infra/helm/lumigator/charts/backend/templates/_helpers.tpl diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/templates/deployment.yaml b/infra/helm/lumigator/charts/backend/templates/deployment.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/templates/deployment.yaml rename to infra/helm/lumigator/charts/backend/templates/deployment.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/templates/mistral-secret.yaml b/infra/helm/lumigator/charts/backend/templates/mistral-secret.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/templates/mistral-secret.yaml rename to infra/helm/lumigator/charts/backend/templates/mistral-secret.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/templates/openai-secret.yaml b/infra/helm/lumigator/charts/backend/templates/openai-secret.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/templates/openai-secret.yaml rename to infra/helm/lumigator/charts/backend/templates/openai-secret.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/templates/service.yaml b/infra/helm/lumigator/charts/backend/templates/service.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/templates/service.yaml rename to infra/helm/lumigator/charts/backend/templates/service.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/backend/values.yaml b/infra/helm/lumigator/charts/backend/values.yaml similarity index 91% rename from lumigator/infra/mzai/helm/lumigator/charts/backend/values.yaml rename to infra/helm/lumigator/charts/backend/values.yaml index 4bd59a30..ea75c742 100644 --- a/lumigator/infra/mzai/helm/lumigator/charts/backend/values.yaml +++ b/infra/helm/lumigator/charts/backend/values.yaml @@ -19,8 +19,8 @@ serviceAccountName: "" existingMistralAPISecret: "" mistralAPIKey: "" -evaluatorPipReqs: "/mzai/lumigator/python/mzai/jobs/evaluator/requirements.txt" -evaluatorWorkDir: "/mzai/lumigator/python/mzai/jobs/evaluator" +evaluatorPipReqs: "/mzai/lumigator/lumigator/jobs/evaluator/requirements.txt" +evaluatorWorkDir: "/mzai/lumigator/lumigator/jobs/evaluator" image: repository: "mzdotai/lumigator" diff --git a/lumigator/infra/mzai/helm/lumigator/charts/frontend/.helmignore b/infra/helm/lumigator/charts/frontend/.helmignore similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/frontend/.helmignore rename to infra/helm/lumigator/charts/frontend/.helmignore diff --git a/lumigator/infra/mzai/helm/lumigator/charts/frontend/Chart.yaml b/infra/helm/lumigator/charts/frontend/Chart.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/frontend/Chart.yaml rename to infra/helm/lumigator/charts/frontend/Chart.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/NOTES.txt b/infra/helm/lumigator/charts/frontend/templates/NOTES.txt similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/NOTES.txt rename to infra/helm/lumigator/charts/frontend/templates/NOTES.txt diff --git a/lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/_helpers.tpl b/infra/helm/lumigator/charts/frontend/templates/_helpers.tpl similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/_helpers.tpl rename to infra/helm/lumigator/charts/frontend/templates/_helpers.tpl diff --git a/lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/deployment.yaml b/infra/helm/lumigator/charts/frontend/templates/deployment.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/deployment.yaml rename to infra/helm/lumigator/charts/frontend/templates/deployment.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/nginx-cm.yaml b/infra/helm/lumigator/charts/frontend/templates/nginx-cm.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/nginx-cm.yaml rename to infra/helm/lumigator/charts/frontend/templates/nginx-cm.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/service.yaml b/infra/helm/lumigator/charts/frontend/templates/service.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/frontend/templates/service.yaml rename to infra/helm/lumigator/charts/frontend/templates/service.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/charts/frontend/values.yaml b/infra/helm/lumigator/charts/frontend/values.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/charts/frontend/values.yaml rename to infra/helm/lumigator/charts/frontend/values.yaml diff --git a/lumigator/infra/mzai/helm/lumigator/values.yaml b/infra/helm/lumigator/values.yaml similarity index 100% rename from lumigator/infra/mzai/helm/lumigator/values.yaml rename to infra/helm/lumigator/values.yaml diff --git a/lumigator/infra/mzai/helm/ray/ray-cluster.yaml b/infra/helm/ray/ray-cluster.yaml similarity index 100% rename from lumigator/infra/mzai/helm/ray/ray-cluster.yaml rename to infra/helm/ray/ray-cluster.yaml diff --git a/lumigator/README.md b/lumigator/README.md deleted file mode 100644 index 85e8332a..00000000 --- a/lumigator/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Lumigator - -Lumigator is an open-source platform developed by [Mozilla.ai](https://www.mozilla.ai/) designed to -help users select the most appropriate language model for their needs. It supports tasks such as -evaluating summarization using sequence-to-sequence models (like BART and BERT) and causal models -(like GPT and Mistral), with plans to expand to other machine learning tasks and use cases in the -future. - -## `infra` Directory - -The `infra` directory contains all necessary infrastructure files for deploying Lumigator, -including: - -- **HELM charts**: For deploying Lumigator on Kubernetes. -- **YAML configuration files**: For deploying Ray clusters. - -## `python` Directory - -The `python` directory contains the source code for the core functionality of Lumigator, -including: - -- **SDK**: A Python SDK for interacting with Lumigator services. -- **Backend API**: The backend API that mkes the platform's features available. diff --git a/lumigator/python/mzai/backend/.dockerignore b/lumigator/lumigator/backend/.dockerignore similarity index 98% rename from lumigator/python/mzai/backend/.dockerignore rename to lumigator/lumigator/backend/.dockerignore index a1771a69..f6eff200 100644 --- a/lumigator/python/mzai/backend/.dockerignore +++ b/lumigator/lumigator/backend/.dockerignore @@ -81,4 +81,4 @@ venv/ **/*.swp # System -.DS_Store \ No newline at end of file +.DS_Store diff --git a/lumigator/python/mzai/backend/.python-version b/lumigator/lumigator/backend/.python-version similarity index 100% rename from lumigator/python/mzai/backend/.python-version rename to lumigator/lumigator/backend/.python-version diff --git a/lumigator/python/mzai/backend/README.md b/lumigator/lumigator/backend/README.md similarity index 98% rename from lumigator/python/mzai/backend/README.md rename to lumigator/lumigator/backend/README.md index 9660cb0c..de772f59 100644 --- a/lumigator/python/mzai/backend/README.md +++ b/lumigator/lumigator/backend/README.md @@ -32,7 +32,7 @@ The backend needs to retrieve the location of the database used in tests via the SQLALCHEMY_DATABASE_URL=sqlite:///local.db uv run pytest ``` -Note that this will create an SQLite database file named `local.db` in the `backend` directory. Remove it before running another batch of tests. Also note that the tests as invoked in the Makefile will remove and recreate a file called `local.db` in the `lumigator/python/mzai/backend` directory. +Note that this will create an SQLite database file named `local.db` in the `backend` directory. Remove it before running another batch of tests. Also note that the tests as invoked in the Makefile will remove and recreate a file called `local.db` in the `lumigator/lumigator/backend` directory. The tests include a unit test suite and an integration test suite. There are make targets available at the root folder, as follows: diff --git a/lumigator/python/mzai/backend/alembic.ini b/lumigator/lumigator/backend/alembic.ini similarity index 100% rename from lumigator/python/mzai/backend/alembic.ini rename to lumigator/lumigator/backend/alembic.ini diff --git a/lumigator/python/mzai/backend/backend/__init__.py b/lumigator/lumigator/backend/backend/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/__init__.py rename to lumigator/lumigator/backend/backend/__init__.py diff --git a/lumigator/python/mzai/backend/backend/alembic/env.py b/lumigator/lumigator/backend/backend/alembic/env.py similarity index 100% rename from lumigator/python/mzai/backend/backend/alembic/env.py rename to lumigator/lumigator/backend/backend/alembic/env.py diff --git a/lumigator/python/mzai/backend/backend/alembic/script.py.mako b/lumigator/lumigator/backend/backend/alembic/script.py.mako similarity index 100% rename from lumigator/python/mzai/backend/backend/alembic/script.py.mako rename to lumigator/lumigator/backend/backend/alembic/script.py.mako diff --git a/lumigator/python/mzai/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py b/lumigator/lumigator/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py similarity index 100% rename from lumigator/python/mzai/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py rename to lumigator/lumigator/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py diff --git a/lumigator/python/mzai/backend/backend/alembic/versions/e75fa022c781_create_db.py b/lumigator/lumigator/backend/backend/alembic/versions/e75fa022c781_create_db.py similarity index 100% rename from lumigator/python/mzai/backend/backend/alembic/versions/e75fa022c781_create_db.py rename to lumigator/lumigator/backend/backend/alembic/versions/e75fa022c781_create_db.py diff --git a/lumigator/python/mzai/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py b/lumigator/lumigator/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py similarity index 100% rename from lumigator/python/mzai/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py rename to lumigator/lumigator/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py diff --git a/lumigator/python/mzai/backend/backend/api/__init__.py b/lumigator/lumigator/backend/backend/api/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/__init__.py rename to lumigator/lumigator/backend/backend/api/__init__.py diff --git a/lumigator/python/mzai/backend/backend/api/deps.py b/lumigator/lumigator/backend/backend/api/deps.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/deps.py rename to lumigator/lumigator/backend/backend/api/deps.py diff --git a/lumigator/python/mzai/backend/backend/api/http_headers.py b/lumigator/lumigator/backend/backend/api/http_headers.py similarity index 99% rename from lumigator/python/mzai/backend/backend/api/http_headers.py rename to lumigator/lumigator/backend/backend/api/http_headers.py index 5c4b6151..1d118486 100644 --- a/lumigator/python/mzai/backend/backend/api/http_headers.py +++ b/lumigator/lumigator/backend/backend/api/http_headers.py @@ -1,3 +1,4 @@ class HttpHeaders: """HttpHeaders represents constants used in HTTP headers""" + LOCATION = "Location" diff --git a/lumigator/python/mzai/backend/backend/api/router.py b/lumigator/lumigator/backend/backend/api/router.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/router.py rename to lumigator/lumigator/backend/backend/api/router.py diff --git a/lumigator/python/mzai/backend/backend/api/routes/__init__.py b/lumigator/lumigator/backend/backend/api/routes/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/routes/__init__.py rename to lumigator/lumigator/backend/backend/api/routes/__init__.py diff --git a/lumigator/python/mzai/backend/backend/api/routes/completions.py b/lumigator/lumigator/backend/backend/api/routes/completions.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/routes/completions.py rename to lumigator/lumigator/backend/backend/api/routes/completions.py diff --git a/lumigator/python/mzai/backend/backend/api/routes/datasets.py b/lumigator/lumigator/backend/backend/api/routes/datasets.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/routes/datasets.py rename to lumigator/lumigator/backend/backend/api/routes/datasets.py diff --git a/lumigator/python/mzai/backend/backend/api/routes/experiments.py b/lumigator/lumigator/backend/backend/api/routes/experiments.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/routes/experiments.py rename to lumigator/lumigator/backend/backend/api/routes/experiments.py diff --git a/lumigator/python/mzai/backend/backend/api/routes/experiments_new.py b/lumigator/lumigator/backend/backend/api/routes/experiments_new.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/routes/experiments_new.py rename to lumigator/lumigator/backend/backend/api/routes/experiments_new.py diff --git a/lumigator/python/mzai/backend/backend/api/routes/health.py b/lumigator/lumigator/backend/backend/api/routes/health.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/routes/health.py rename to lumigator/lumigator/backend/backend/api/routes/health.py diff --git a/lumigator/python/mzai/backend/backend/api/routes/jobs.py b/lumigator/lumigator/backend/backend/api/routes/jobs.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/routes/jobs.py rename to lumigator/lumigator/backend/backend/api/routes/jobs.py diff --git a/lumigator/python/mzai/backend/backend/api/routes/models.py b/lumigator/lumigator/backend/backend/api/routes/models.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/routes/models.py rename to lumigator/lumigator/backend/backend/api/routes/models.py diff --git a/lumigator/python/mzai/backend/backend/api/tags.py b/lumigator/lumigator/backend/backend/api/tags.py similarity index 100% rename from lumigator/python/mzai/backend/backend/api/tags.py rename to lumigator/lumigator/backend/backend/api/tags.py diff --git a/lumigator/python/mzai/backend/backend/config_templates.py b/lumigator/lumigator/backend/backend/config_templates.py similarity index 100% rename from lumigator/python/mzai/backend/backend/config_templates.py rename to lumigator/lumigator/backend/backend/config_templates.py diff --git a/lumigator/python/mzai/backend/backend/db.py b/lumigator/lumigator/backend/backend/db.py similarity index 100% rename from lumigator/python/mzai/backend/backend/db.py rename to lumigator/lumigator/backend/backend/db.py diff --git a/lumigator/python/mzai/backend/backend/main.py b/lumigator/lumigator/backend/backend/main.py similarity index 100% rename from lumigator/python/mzai/backend/backend/main.py rename to lumigator/lumigator/backend/backend/main.py diff --git a/lumigator/python/mzai/backend/backend/models.yaml b/lumigator/lumigator/backend/backend/models.yaml similarity index 100% rename from lumigator/python/mzai/backend/backend/models.yaml rename to lumigator/lumigator/backend/backend/models.yaml diff --git a/lumigator/python/mzai/backend/backend/ray_submit/submission.py b/lumigator/lumigator/backend/backend/ray_submit/submission.py similarity index 100% rename from lumigator/python/mzai/backend/backend/ray_submit/submission.py rename to lumigator/lumigator/backend/backend/ray_submit/submission.py diff --git a/lumigator/python/mzai/backend/backend/records/__init__.py b/lumigator/lumigator/backend/backend/records/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/records/__init__.py rename to lumigator/lumigator/backend/backend/records/__init__.py diff --git a/lumigator/python/mzai/backend/backend/records/base.py b/lumigator/lumigator/backend/backend/records/base.py similarity index 100% rename from lumigator/python/mzai/backend/backend/records/base.py rename to lumigator/lumigator/backend/backend/records/base.py diff --git a/lumigator/python/mzai/backend/backend/records/datasets.py b/lumigator/lumigator/backend/backend/records/datasets.py similarity index 100% rename from lumigator/python/mzai/backend/backend/records/datasets.py rename to lumigator/lumigator/backend/backend/records/datasets.py diff --git a/lumigator/python/mzai/backend/backend/records/experiments.py b/lumigator/lumigator/backend/backend/records/experiments.py similarity index 100% rename from lumigator/python/mzai/backend/backend/records/experiments.py rename to lumigator/lumigator/backend/backend/records/experiments.py diff --git a/lumigator/python/mzai/backend/backend/records/jobs.py b/lumigator/lumigator/backend/backend/records/jobs.py similarity index 100% rename from lumigator/python/mzai/backend/backend/records/jobs.py rename to lumigator/lumigator/backend/backend/records/jobs.py diff --git a/lumigator/python/mzai/backend/backend/records/mixins.py b/lumigator/lumigator/backend/backend/records/mixins.py similarity index 100% rename from lumigator/python/mzai/backend/backend/records/mixins.py rename to lumigator/lumigator/backend/backend/records/mixins.py diff --git a/lumigator/python/mzai/backend/backend/repositories/__init__.py b/lumigator/lumigator/backend/backend/repositories/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/repositories/__init__.py rename to lumigator/lumigator/backend/backend/repositories/__init__.py diff --git a/lumigator/python/mzai/backend/backend/repositories/base.py b/lumigator/lumigator/backend/backend/repositories/base.py similarity index 100% rename from lumigator/python/mzai/backend/backend/repositories/base.py rename to lumigator/lumigator/backend/backend/repositories/base.py diff --git a/lumigator/python/mzai/backend/backend/repositories/datasets.py b/lumigator/lumigator/backend/backend/repositories/datasets.py similarity index 100% rename from lumigator/python/mzai/backend/backend/repositories/datasets.py rename to lumigator/lumigator/backend/backend/repositories/datasets.py diff --git a/lumigator/python/mzai/backend/backend/repositories/experiments.py b/lumigator/lumigator/backend/backend/repositories/experiments.py similarity index 100% rename from lumigator/python/mzai/backend/backend/repositories/experiments.py rename to lumigator/lumigator/backend/backend/repositories/experiments.py diff --git a/lumigator/python/mzai/backend/backend/repositories/jobs.py b/lumigator/lumigator/backend/backend/repositories/jobs.py similarity index 100% rename from lumigator/python/mzai/backend/backend/repositories/jobs.py rename to lumigator/lumigator/backend/backend/repositories/jobs.py diff --git a/lumigator/python/mzai/backend/backend/services/__init__.py b/lumigator/lumigator/backend/backend/services/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/__init__.py rename to lumigator/lumigator/backend/backend/services/__init__.py diff --git a/lumigator/python/mzai/backend/backend/services/completions.py b/lumigator/lumigator/backend/backend/services/completions.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/completions.py rename to lumigator/lumigator/backend/backend/services/completions.py diff --git a/lumigator/python/mzai/backend/backend/services/datasets.py b/lumigator/lumigator/backend/backend/services/datasets.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/datasets.py rename to lumigator/lumigator/backend/backend/services/datasets.py diff --git a/lumigator/python/mzai/backend/backend/services/experiments.py b/lumigator/lumigator/backend/backend/services/experiments.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/experiments.py rename to lumigator/lumigator/backend/backend/services/experiments.py diff --git a/lumigator/python/mzai/backend/backend/services/jobs.py b/lumigator/lumigator/backend/backend/services/jobs.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/jobs.py rename to lumigator/lumigator/backend/backend/services/jobs.py diff --git a/lumigator/python/mzai/backend/backend/settings.py b/lumigator/lumigator/backend/backend/settings.py similarity index 100% rename from lumigator/python/mzai/backend/backend/settings.py rename to lumigator/lumigator/backend/backend/settings.py diff --git a/lumigator/python/mzai/backend/backend/tests/README.md b/lumigator/lumigator/backend/backend/tests/README.md similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/README.md rename to lumigator/lumigator/backend/backend/tests/README.md diff --git a/lumigator/python/mzai/backend/backend/tests/__init__.py b/lumigator/lumigator/backend/backend/tests/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/__init__.py rename to lumigator/lumigator/backend/backend/tests/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/conftest.py b/lumigator/lumigator/backend/backend/tests/conftest.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/conftest.py rename to lumigator/lumigator/backend/backend/tests/conftest.py diff --git a/lumigator/python/mzai/backend/backend/tests/data/dialogsum_converted.csv b/lumigator/lumigator/backend/backend/tests/data/dialogsum_converted.csv similarity index 95% rename from lumigator/python/mzai/backend/backend/tests/data/dialogsum_converted.csv rename to lumigator/lumigator/backend/backend/tests/data/dialogsum_converted.csv index 6e330902..e1149a2a 100644 --- a/lumigator/python/mzai/backend/backend/tests/data/dialogsum_converted.csv +++ b/lumigator/lumigator/backend/backend/tests/data/dialogsum_converted.csv @@ -334,61 +334,61 @@ examples,ground_truth #Person1#: Thank you very much. Goodbye.",John Cruise calls Eve to register a complaint about his video recorder and explains what the problem is. Eve promises to urge their legal consultant to call him back. "#Person1#: Excuse me, can you tell me how to get to the Rainbow Restaurant from here? #Person2#: Drive two blocks and turn left. Continue on until you reach Heath Street and turn right. Then turn left at the second stop light. You can't miss it.",#Person1# asks #Person2# the way to the Rainbow Restaurant. -"#Person1#: Adam, could you show me around the school? -#Person2#: No problem. -#Person1#: What's the tallest building? -#Person2#: You mean the white building near the playground? -#Person1#: Yes. -#Person2#: That is the library. And it has more than 1, 000, 000 books. -#Person1#: What's the building to the south of the library? -#Person2#: You know, our school is divided into two parts, the junior high school and the senior high school. That is the new classroom building for our senior high school. -#Person1#: Is there a swimming pool in your school? -#Person2#: Yes. There is a large swimming pool, but it is only available in summer. -#Person1#: I do envy you. And I hope I can enter your school one day. +"#Person1#: Adam, could you show me around the school? +#Person2#: No problem. +#Person1#: What's the tallest building? +#Person2#: You mean the white building near the playground? +#Person1#: Yes. +#Person2#: That is the library. And it has more than 1, 000, 000 books. +#Person1#: What's the building to the south of the library? +#Person2#: You know, our school is divided into two parts, the junior high school and the senior high school. That is the new classroom building for our senior high school. +#Person1#: Is there a swimming pool in your school? +#Person2#: Yes. There is a large swimming pool, but it is only available in summer. +#Person1#: I do envy you. And I hope I can enter your school one day. #Person2#: I believe that you can make your dream come true. ",#Person1# asks Adam to show #Person1# around the school. #Person1# envies Adam and hopes to enter Adam's school one day. -"#Person1#: Excuse me. I'm a stranger here and lost my way. -#Person2#: Can I help you? -#Person1#: Sure. Can I get to the central department stall this way? -#Person2#: uh... Yes. Turn right, then take the second turning on your left. -#Person1#: Is it far? -#Person2#: It's about fifteen minutes' walk. That's all. -#Person1#: And do you know where the national bank is? -#Person2#: Yes. It's on this street. Keep walking for two blocks and it's on the corner on the right. -#Person1#: Thanks very much. -#Person2#: You are welcome. Good luck. +"#Person1#: Excuse me. I'm a stranger here and lost my way. +#Person2#: Can I help you? +#Person1#: Sure. Can I get to the central department stall this way? +#Person2#: uh... Yes. Turn right, then take the second turning on your left. +#Person1#: Is it far? +#Person2#: It's about fifteen minutes' walk. That's all. +#Person1#: And do you know where the national bank is? +#Person2#: Yes. It's on this street. Keep walking for two blocks and it's on the corner on the right. +#Person1#: Thanks very much. +#Person2#: You are welcome. Good luck. #Person1#: Thank you. I won't miss it. ",#Person1# lost the way and asks #Person2# for the way to the central department stall and the national bank. -"#Person1#: Some people pile on their agonise and try to seek other's sympathy by telling them how miserable they are. -#Person2#: Yeah. They take the advantage of other people's hospitality and generosity. -#Person1#: I was fooled once. A lady told me she needed some money to keep the pot boiling. So I gave her some money and bailed her out of the situation. But later I learned that she had lied to me. -#Person2#: You are still wet behind the ears. You should have seen through her. +"#Person1#: Some people pile on their agonise and try to seek other's sympathy by telling them how miserable they are. +#Person2#: Yeah. They take the advantage of other people's hospitality and generosity. +#Person1#: I was fooled once. A lady told me she needed some money to keep the pot boiling. So I gave her some money and bailed her out of the situation. But later I learned that she had lied to me. +#Person2#: You are still wet behind the ears. You should have seen through her. #Person1#: Nothing rang a bell. ",#Person1# and #Person2# talk about people taking advantage of other's hospitality and generosity. #Person1# shares #Person1#'s own experience. -"#Person1#: I'm looking for a pan I can use in my kitchen. -#Person2#: What size pan were you thinking of? -#Person1#: I've already got a small pan. I need a big one. -#Person2#: Well, this one might work for you. -#Person1#: Oh, no, that's way too heavy a pan for me. -#Person2#: Here, lift this aluminum pan. It's the same size. -#Person1#: Yes, it's very lightweight. But I don't want this aluminum handle. -#Person2#: Here's a similar aluminum pan. But it has a heat-resistant handle. -#Person1#: Oh, this feels very nice. It's perfect. I'll take it. -#Person2#: I knew we'd find the right pan sooner or later. How would you like to pay? -#Person1#: Cash. But first, I need a lid for this pan. +"#Person1#: I'm looking for a pan I can use in my kitchen. +#Person2#: What size pan were you thinking of? +#Person1#: I've already got a small pan. I need a big one. +#Person2#: Well, this one might work for you. +#Person1#: Oh, no, that's way too heavy a pan for me. +#Person2#: Here, lift this aluminum pan. It's the same size. +#Person1#: Yes, it's very lightweight. But I don't want this aluminum handle. +#Person2#: Here's a similar aluminum pan. But it has a heat-resistant handle. +#Person1#: Oh, this feels very nice. It's perfect. I'll take it. +#Person2#: I knew we'd find the right pan sooner or later. How would you like to pay? +#Person1#: Cash. But first, I need a lid for this pan. #Person2#: Oh, no problem. Here's the lid that comes with the pan. ","#Person1# wants a pan, and #Person2# recommends a big aluminum pan with a heat-resistant handle and a lid. #Person1# pays for it by cash." -"#Person1#: Come in, come in! -#Person2#: Hi, Gary, what happened? I was waiting for you at the theater. Why didn't you meet me there? -#Person1#: I thought we were supposed to meet here. -#Person2#: Don't you know our movie starts at seven? And we were going to meet at the theater at five to seven. Then it doesn't make sense to meet at the apartment. -#Person1#: I'm sorry. We must have misunderstood each other. -#Person2#: Why don't you try to be clearer about your intentions? -#Person1#: You're right. I am sorry. Let's go and watch the movie. +"#Person1#: Come in, come in! +#Person2#: Hi, Gary, what happened? I was waiting for you at the theater. Why didn't you meet me there? +#Person1#: I thought we were supposed to meet here. +#Person2#: Don't you know our movie starts at seven? And we were going to meet at the theater at five to seven. Then it doesn't make sense to meet at the apartment. +#Person1#: I'm sorry. We must have misunderstood each other. +#Person2#: Why don't you try to be clearer about your intentions? +#Person1#: You're right. I am sorry. Let's go and watch the movie. #Person2#: It's okay. I don't want to go now. We've already missed ten minutes of the movie. I don't want to see a movie without watching the beginning. ","#Person2# and Gary misunderstood each other, so they missed the beginning of the movie. Gary apologizes, but #Person2# doesn't want to see the movie anymore." -"#Person1#: Good morning, I'm Daniel. I'm applying for the positon of manager. -#Person2#: Yes. Sit down, please. How did you learn about our company? -#Person1#: I got to know your company through such famous brands as LUX, LIPTON and WALLS. After making a customer survey, I was glad to find out how your products are appreciated by millions of Chinese. -#Person2#: Why would you like to work with us? -#Person1#: It's the job I'm interested in. And your company is the best-known. Although I don't have much experience as a manager, the job description you sent to me was very interesting. It's a job I've been dreaming of and I feel suited to fill it. -#Person2#: Oh, really? Would you transfer to another company if it is not what you expected? -#Person1#: I don't think so. As the saying goes, A great oak needs deep roots. I'm really interested in this job. +"#Person1#: Good morning, I'm Daniel. I'm applying for the positon of manager. +#Person2#: Yes. Sit down, please. How did you learn about our company? +#Person1#: I got to know your company through such famous brands as LUX, LIPTON and WALLS. After making a customer survey, I was glad to find out how your products are appreciated by millions of Chinese. +#Person2#: Why would you like to work with us? +#Person1#: It's the job I'm interested in. And your company is the best-known. Although I don't have much experience as a manager, the job description you sent to me was very interesting. It's a job I've been dreaming of and I feel suited to fill it. +#Person2#: Oh, really? Would you transfer to another company if it is not what you expected? +#Person1#: I don't think so. As the saying goes, A great oak needs deep roots. I'm really interested in this job. #Person2#: That's fine. Thanks for coming to see us. I hope to be able to let you know about the job within the week. ","Daniel applies for the position of manager, and #Person2# interviews Daniel. Daniel talks about how he learned about the company and why he'd like to work here." "#Person1#: What's wrong with you, Lucy? #Person2#: Our dog Rusty is lost. Someone left the backyard gate open and he got out. My daughter is so upset right now. @@ -730,99 +730,99 @@ examples,ground_truth #Person2#: We have several part-time jobs available here, Would you like to look through the list? #Person1#: Yes, thank you. I'd like to apply for the job at the computer center. #Person2#: Please fill out the form.",#Person1# wants to find a job at the computer center. -"#Person1#: What did the boss say to you? -#Person2#: He asked me to beef up in the work. -#Person1#: Yeah. You look so unhappy recently. What's the matter. +"#Person1#: What did the boss say to you? +#Person2#: He asked me to beef up in the work. +#Person1#: Yeah. You look so unhappy recently. What's the matter. #Person2#: Nothing, thanks. I am just not in the mood these days. ",The boss asks the unhappy #Person2# to beef up in the job. -"#Person1#: I'll always remember my college days. -#Person2#: Oh yeah? -#Person1#: It was one of the best times in my life. It was tough, but I made it. I became a college graduate. -#Person2#: How did you feel when you graduated? -#Person1#: It was a pround day for me. My family attend the graduation ceremony. I was so nervous. I couldn't find my cap and gown, but all worked out in the end. -#Person2#: What did you do after graduation? -#Person1#: I was planning to attend gradate school, but then I was offered a good job doing marketing, so I changed my mind. -#Person2#: Sounds like you're happy with your decision. -#Person1#: I sure am. So what about you? How did you feel when you graduated? -#Person2#: It was also a proud day for me, but I also felt like a kind of loss that day. -#Person1#: How could it be? -#Person2#: While seeing others going to work or continue their study, I didn't know what I would do. -#Person1#: You didn't have an offer? -#Person2#: I had one, but I didn't like the job very much. I wanted to attend graduate school, but I was afraid it would be too tough. +"#Person1#: I'll always remember my college days. +#Person2#: Oh yeah? +#Person1#: It was one of the best times in my life. It was tough, but I made it. I became a college graduate. +#Person2#: How did you feel when you graduated? +#Person1#: It was a pround day for me. My family attend the graduation ceremony. I was so nervous. I couldn't find my cap and gown, but all worked out in the end. +#Person2#: What did you do after graduation? +#Person1#: I was planning to attend gradate school, but then I was offered a good job doing marketing, so I changed my mind. +#Person2#: Sounds like you're happy with your decision. +#Person1#: I sure am. So what about you? How did you feel when you graduated? +#Person2#: It was also a proud day for me, but I also felt like a kind of loss that day. +#Person1#: How could it be? +#Person2#: While seeing others going to work or continue their study, I didn't know what I would do. +#Person1#: You didn't have an offer? +#Person2#: I had one, but I didn't like the job very much. I wanted to attend graduate school, but I was afraid it would be too tough. #Person1#: I think you lack in the power of decision. Once you make your decision, don't be overtaken by misgivings and fear. Just go full steam ahead! ",#Person1# and #Person2# share their feelings about the graduation day and different plans after graduation. #Person1# encourages #Person2# to have more power on a decision. -"#Person1#: hey Jayden, I was wondering if you could do me a favor. -#Person2#: that depends. What is it? -#Person1#: it's kind of a big favor. I'm absolutely flat broke, and I owe my landlady $200. she's given me until Friday to give it to her, but I don't get paid until next Monday. Do you think you could loanm -#Person2#: I'd love to help you out, but I'm a bit short on cash this month as well. I had to get a new engine put into my car, and that ate up my savings. -#Person1#: if you can't give me the full amount, a fraction of it would still help. I'll pay you back on Monday. I promise. -#Person2#: let's see, I've got about $50 to get me through the weekend. I can only spare about $20. I would give you more if I had it, I just don't have much money to my name right now. -#Person1#: thanks a lot Jayden. Every little bit will help. Tell you what, if you aren't doing anything tonight, why don't you come over and have dinner at my place. -#Person2#: that'd be great. Thanks! What time should I come over? -#Person1#: how about at 6 pm? +"#Person1#: hey Jayden, I was wondering if you could do me a favor. +#Person2#: that depends. What is it? +#Person1#: it's kind of a big favor. I'm absolutely flat broke, and I owe my landlady $200. she's given me until Friday to give it to her, but I don't get paid until next Monday. Do you think you could loanm +#Person2#: I'd love to help you out, but I'm a bit short on cash this month as well. I had to get a new engine put into my car, and that ate up my savings. +#Person1#: if you can't give me the full amount, a fraction of it would still help. I'll pay you back on Monday. I promise. +#Person2#: let's see, I've got about $50 to get me through the weekend. I can only spare about $20. I would give you more if I had it, I just don't have much money to my name right now. +#Person1#: thanks a lot Jayden. Every little bit will help. Tell you what, if you aren't doing anything tonight, why don't you come over and have dinner at my place. +#Person2#: that'd be great. Thanks! What time should I come over? +#Person1#: how about at 6 pm? #Person2#: see you then! ",#Person1# owes the landlord $200 and wants to borrow some from Jayden who is tight on cash as well. Jayden only lends #Person1# $20 and #Person1# will come over at 6 pm. -"#Person1#: How old are you? -#Person2#: Nine . . . but I'll be ten on May 1st. When is your birthday? -#Person1#: I'm older than you! I'll be ten on April 14th. -#Person2#: Are you going to have a birthday party? +"#Person1#: How old are you? +#Person2#: Nine . . . but I'll be ten on May 1st. When is your birthday? +#Person1#: I'm older than you! I'll be ten on April 14th. +#Person2#: Are you going to have a birthday party? #Person1#: Maybe. I'll have to ask my mother. ",#Person1# and #Person2# talk about their birthday. -"#Person1#: this party rocks! -#Person2#: you said it. Good beer, good music, and on top of that, there are so many hot girls here! -#Person1#: I'm with you on that. Check out that one over there. I think I'm in love! -#Person2#: well, she's alright, but not really my cup of tea. What about the blond with the red dress? -#Person1#: oh, that's Janice. She's just new in town. You have a thing for blonds, eh? -#Person2#: yeah! She could do anything she wants to me! -#Person1#: I bet. Why not go over and talk to her? She's really nice. -#Person2#: I don't think so. I get so nervous talking to girls. I always put my foot in my mouth, scare her off, and end up looking like a real fool. Besides, she is way out of my league. -#Person1#: come on! Man up! You'll never know until you try. -#Person2#: okay okay, just let me have another cup of beers to get my head in the game. -#Person1#: all right. But I think you ought to move soon. -#Person2#: why? -#Person1#: I can see five other guys eying her up. -#Person2#: okay, here I go! +"#Person1#: this party rocks! +#Person2#: you said it. Good beer, good music, and on top of that, there are so many hot girls here! +#Person1#: I'm with you on that. Check out that one over there. I think I'm in love! +#Person2#: well, she's alright, but not really my cup of tea. What about the blond with the red dress? +#Person1#: oh, that's Janice. She's just new in town. You have a thing for blonds, eh? +#Person2#: yeah! She could do anything she wants to me! +#Person1#: I bet. Why not go over and talk to her? She's really nice. +#Person2#: I don't think so. I get so nervous talking to girls. I always put my foot in my mouth, scare her off, and end up looking like a real fool. Besides, she is way out of my league. +#Person1#: come on! Man up! You'll never know until you try. +#Person2#: okay okay, just let me have another cup of beers to get my head in the game. +#Person1#: all right. But I think you ought to move soon. +#Person2#: why? +#Person1#: I can see five other guys eying her up. +#Person2#: okay, here I go! #Person1#: good luck! ","#Person1# and #Person2# see a blond, but #Person2# is nervous talking with girls. After #Person1#'s encouragement and another cup of beer, #Person2# decides to talk to the blond." -"#Person1#: Mary? Are you still there? -#Person2#: Yes. What do you want? -#Person1#: Did your bid win? -#Person2#: What do you care, dork? -#Person1#: Hey! I'm trying to be nice, and you still want to fight! Did you get the statue or not? -#Person2#: You mean fat boy? +"#Person1#: Mary? Are you still there? +#Person2#: Yes. What do you want? +#Person1#: Did your bid win? +#Person2#: What do you care, dork? +#Person1#: Hey! I'm trying to be nice, and you still want to fight! Did you get the statue or not? +#Person2#: You mean fat boy? #Person1#: Sorry. I take that back. I mean the copper Buddha you wanted. ",#Person1# asks Mary the result of the bid not very nicely so Mary doesn't want to answer. -"#Person1#: Good morning! -#Person2#: Good morning, Gav! Did you sleep well last night? -#Person1#: I slept like a baby. I fell asleep right away last night, didn't wake up once, and didn't have any nightmares! -#Person2#: That's great news! You look much more relaxed than you did yesterday. -#Person1#: I feel much better, but I'm still worried about something. -#Person2#: What's that? -#Person1#: Well, I have to drive to school for a meeting this morning, and I'm going to end up getting stuck in rush-hour traffic. -#Person2#: That's annoying, but nothing to worry about. -#Person1#: For me, traffic jams are quite stressful, because I'm pretty impatient. How can I prevent myself from getting stressed if I get stuck in a traffic jam? -#Person2#: Just breathe deeply when you feel yourself getting upset. -#Person1#: Ok, I'll try that. -#Person2#: Is there anything else bothering you? -#Person1#: Just one more thing. A school called me this morning to see if I could teach a few classes this weekend and I don't know what to do. -#Person2#: Do you have any other plans this weekend? -#Person1#: I'm supposed to work on a paper that'd due on Monday. -#Person2#: Try not to take on more than you can handle. +"#Person1#: Good morning! +#Person2#: Good morning, Gav! Did you sleep well last night? +#Person1#: I slept like a baby. I fell asleep right away last night, didn't wake up once, and didn't have any nightmares! +#Person2#: That's great news! You look much more relaxed than you did yesterday. +#Person1#: I feel much better, but I'm still worried about something. +#Person2#: What's that? +#Person1#: Well, I have to drive to school for a meeting this morning, and I'm going to end up getting stuck in rush-hour traffic. +#Person2#: That's annoying, but nothing to worry about. +#Person1#: For me, traffic jams are quite stressful, because I'm pretty impatient. How can I prevent myself from getting stressed if I get stuck in a traffic jam? +#Person2#: Just breathe deeply when you feel yourself getting upset. +#Person1#: Ok, I'll try that. +#Person2#: Is there anything else bothering you? +#Person1#: Just one more thing. A school called me this morning to see if I could teach a few classes this weekend and I don't know what to do. +#Person2#: Do you have any other plans this weekend? +#Person1#: I'm supposed to work on a paper that'd due on Monday. +#Person2#: Try not to take on more than you can handle. #Person1#: You're right. I probably should just work on my paper. Thanks! ",Gav had a good sleep last night but worries about the traffic jam and classes to teach. #Person2# asks Gav's plan for the weekend and #Person2# gives the suggestions when Gav feels upset. -"#Person1#: I don't think the teacher had a right to say that. The teacher was wrong to have accused her in front of the whole class. -#Person2#: You've got to be joking! It's the teacher's right to say anything wants, and if she saw Myra cheating, she certainly had the right to say so. -#Person1#: I agree she had the right to say something, but I feel she should have done it privately. +"#Person1#: I don't think the teacher had a right to say that. The teacher was wrong to have accused her in front of the whole class. +#Person2#: You've got to be joking! It's the teacher's right to say anything wants, and if she saw Myra cheating, she certainly had the right to say so. +#Person1#: I agree she had the right to say something, but I feel she should have done it privately. #Person2#: You're right. If I were the teacher, I wouldn't have done that. ",Both #Person1# and #Person2# think the teacher should say to Myra privately if she saw Myra cheating. -"#Person1#: Listen, Karen, I need your help. I don't know anyone here yet. -#Person2#: I'm glad to help you. What's wrong? -#Person1#: My mother-in-law just went into the hospital in L. A. Hank and I will be flying there tonight. -#Person2#: I'm sorry to hear it. What's wrong with her? -#Person1#: Doctors aren't sure yet. But the real problem is Suzy. She has a bad cold, and we don't want to take her with us. But we don't know who can stay with her. -#Person2#: You need a babysitter. -#Person1#: Yes, I'd ask Jill, the girl I've had before, but I need someone overnight. Maybe even for two nights. -#Person2#: I could have Suzy stay at my place. -#Person1#: I don't want to do that to you, Karen. -#Person2#: Why not? -#Person1#: Your own kids would get Suzy's cold. I think it would be better to have a good babysitter here. But I don't know who to ask. I need someone more mature than Jill. It might even be for two or three days. -#Person2#: I know who we can ask. There is a girl I know, Sara Ralston. She is 17, and she will usually take this kind of job. I know her from my church, and I trust her completely. -#Person1#: I'd like to talk with her. This is short notice, I know. But Hank and I are leaving tonight. -#Person2#: I'll get you her number. I hope she can do it. She is very responsible. -#Person1#: I'm glad you know someone. I knew you would be the best person to ask about this. I don't want to insult Jill or her mother. I think Jill maybe could do it. But I'd rather have someone a little older. -#Person2#: I'll go home and get Sara's number. I'll call her first myself. +"#Person1#: Listen, Karen, I need your help. I don't know anyone here yet. +#Person2#: I'm glad to help you. What's wrong? +#Person1#: My mother-in-law just went into the hospital in L. A. Hank and I will be flying there tonight. +#Person2#: I'm sorry to hear it. What's wrong with her? +#Person1#: Doctors aren't sure yet. But the real problem is Suzy. She has a bad cold, and we don't want to take her with us. But we don't know who can stay with her. +#Person2#: You need a babysitter. +#Person1#: Yes, I'd ask Jill, the girl I've had before, but I need someone overnight. Maybe even for two nights. +#Person2#: I could have Suzy stay at my place. +#Person1#: I don't want to do that to you, Karen. +#Person2#: Why not? +#Person1#: Your own kids would get Suzy's cold. I think it would be better to have a good babysitter here. But I don't know who to ask. I need someone more mature than Jill. It might even be for two or three days. +#Person2#: I know who we can ask. There is a girl I know, Sara Ralston. She is 17, and she will usually take this kind of job. I know her from my church, and I trust her completely. +#Person1#: I'd like to talk with her. This is short notice, I know. But Hank and I are leaving tonight. +#Person2#: I'll get you her number. I hope she can do it. She is very responsible. +#Person1#: I'm glad you know someone. I knew you would be the best person to ask about this. I don't want to insult Jill or her mother. I think Jill maybe could do it. But I'd rather have someone a little older. +#Person2#: I'll go home and get Sara's number. I'll call her first myself. #Person1#: Great. Then call me and let me know if she's free. ","#Person1# asks Karen for help to find a mature babysitter for two or three days because #Person1# will fly to L.A. to see #Person1#'s mother-in-law in the hospital and has to leave Suzy, who has a cold, at home. Karen recommends Sara who is mature and responsible, and she will contact her." "#Person1#: Anna just email to say that the managers meeting is put off till next Monday. Will you have everything ready by then, Sabrina? Hey Sabrina, what's wrong? #Person2#: I'm so worried. I haven't heard from my sister for 2 weeks. @@ -1223,7 +1223,7 @@ examples,ground_truth #Person1#: Right! A pretty important role, Peter. What sort of protest would you organize? #Person2#: Well, recently we've been involved in anti-nuclear campaigns. I've personally arranged for the demonstration against radioactive waste dumping in the Atlantic Ocean. We've got a few small Green Peace boats that we harass the dumping ship with. #Person1#: Say? Hold on, Peter. I thought you said your organization was non-violent. What do you mean by 'harass'? -#Person2#: Well, we circle round and round the ships and get in the way when they try to dump the drums of nuclear waste in the sea. We talk to the men and try to change, you know, yell at them to stop. We generally make ourselves as much of a nuisance as possible. +#Person2#: Well, we circle round and round the ships and get in the way when they try to dump the drums of nuclear waste in the sea. We talk to the men and try to change, you know, yell at them to stop. We generally make ourselves as much of a nuisance as possible. #Person1#: Well, people may think differently of your methods, but there's no doubt you're doing a great job. Keep it up and good luck. And thanks for talking with us.",#Person1# interviews Peter Wilson who is the action organizer of Green Peace organization. #Person1# asks Peter to introduce to the audience what Green Peace is and what work it does. Peter also introduces detailed anti-nuclear campaigns. "#Person1#: My hand still hurts from the fall on the ice yesterday. I wonder if I broke something. #Person2#: I'm no doctor, but it's not black and blue or anything. Maybe you just need to rest it for a few days.",#Person1#'s hand hurts and #Person2# advises #Person1# to rest. @@ -1297,46 +1297,46 @@ examples,ground_truth #Person1#: Well, nobody wants to be poor...ah, here's the drinks trolley. What would you like? #Person2#: A Coke, please,I'm sorry...I don't know your name... #Person1#: Oh, sorry. I forgot...Ali.",#Person1# sits next to #Person2# on the plane. They talk about why they are going to London. -"#Person1#: I'm sure it will be wet when we arrive. -#Person2#: Yes. I dare say it will be. -#Person1#: It will be Sunday so I expected everything will be closed. -#Person2#: No. I don't think that's possible. Some places are sure to be open. -#Person1#: But the bank should be closed so we shouldn't to be able to get any money. -#Person2#: Mmm, you may be right. -#Person1#: Do you think we'll need our overcoats? -#Person2#: No. We couldn't possibly. -#Person1#: Why not? -#Person2#: It will be summer. So it will be hot. -#Person1#: Is that very likely in England? +"#Person1#: I'm sure it will be wet when we arrive. +#Person2#: Yes. I dare say it will be. +#Person1#: It will be Sunday so I expected everything will be closed. +#Person2#: No. I don't think that's possible. Some places are sure to be open. +#Person1#: But the bank should be closed so we shouldn't to be able to get any money. +#Person2#: Mmm, you may be right. +#Person1#: Do you think we'll need our overcoats? +#Person2#: No. We couldn't possibly. +#Person1#: Why not? +#Person2#: It will be summer. So it will be hot. +#Person1#: Is that very likely in England? #Person2#: Yes. It could happen. ",#Person1# talks with #Person2# about what the situation will be when they arrive in England. -"#Person1#: Are you an art aficionado? -#Person2#: Not really. I like going to an art exhibition once or twice a year. I hardly know anything about art or sculpture. You are a true art lover, aren't you? -#Person1#: I love going to art galleries, particularly when one is holding an exhibition of abstract art. -#Person2#: I never understand the meaning of those painting. They are too abstract for me. I didn't pay much attention in art class at school. -#Person1#: Art isn't for everyone. I'm going to an exhibition tomorrow at the national gallery. It's an exhibition of greek and roman sculpture. -#Person2#: I like sculpture, especially that from ancient rome or Greece. What time are you thinking of going? I'd love to go with you. -#Person1#: I thought I'd have an early lunch and go immediately afterwards. Does that sound ok to you? Bus 51 goes directly there. -#Person2#: That sounds fine. What time shall we meet at the bus stop? +"#Person1#: Are you an art aficionado? +#Person2#: Not really. I like going to an art exhibition once or twice a year. I hardly know anything about art or sculpture. You are a true art lover, aren't you? +#Person1#: I love going to art galleries, particularly when one is holding an exhibition of abstract art. +#Person2#: I never understand the meaning of those painting. They are too abstract for me. I didn't pay much attention in art class at school. +#Person1#: Art isn't for everyone. I'm going to an exhibition tomorrow at the national gallery. It's an exhibition of greek and roman sculpture. +#Person2#: I like sculpture, especially that from ancient rome or Greece. What time are you thinking of going? I'd love to go with you. +#Person1#: I thought I'd have an early lunch and go immediately afterwards. Does that sound ok to you? Bus 51 goes directly there. +#Person2#: That sounds fine. What time shall we meet at the bus stop? #Person1#: Let's meet at 12 thirty. it will probably take us three or four hours to see all of the exhibits. ",#Person1# is an art aficionado. #Person2# doesn't appreciate paintings but enjoys sculptures. They decide to go to an exhibition of greek and roman sculpture together. -"#Person1#: Let's call it a day. -#Person2#: It's nice to go home earlier once in a while. But it's the evening rush. -#Person1#: It's hard to commute a long way. +"#Person1#: Let's call it a day. +#Person2#: It's nice to go home earlier once in a while. But it's the evening rush. +#Person1#: It's hard to commute a long way. #Person2#: Sure it is. I really hate to get caught in a traffic jam. ",Both #Person1# and #Person2# hate the evening rush. -"#Person1#: Can anyone tell me where I can buy the ingredients to make Chinese food? -#Person2#: There is a supermarket in Kensington High Street. I'll come and give you a hand. -#Person1#: That is good of you. Here, take one of these trolleys. What do you want exactly? -#Person2#: I'm after things to stuff dumplings with, like Chinese cabbage -#Person1#: The fruit and vegetables are over there. -#Person2#: Pork. Where's the meat counter? +"#Person1#: Can anyone tell me where I can buy the ingredients to make Chinese food? +#Person2#: There is a supermarket in Kensington High Street. I'll come and give you a hand. +#Person1#: That is good of you. Here, take one of these trolleys. What do you want exactly? +#Person2#: I'm after things to stuff dumplings with, like Chinese cabbage +#Person1#: The fruit and vegetables are over there. +#Person2#: Pork. Where's the meat counter? #Person1#: Over there. ",#Person2# helps #Person1# find the ingredients to make Chinese food. -"#Person1#: Excuse me. Do you think I can get there in time to catch the 11:30 train? -#Person2#: Well, let me see. Now it's 11:00 sharp. It's a long way to go. If I take the shortest route, we may come across a traffic jam. If I take a less heavy route, it will save us 10 or more minutes, but you'll have to pay more. Which do you prefer? -#Person1#: Are you sure that I can get there in time if we take the less heavy route? -#Person2#: Generally speaking, we can if we go at this speed and nothing unexpected happens. -#Person1#: How much more do I have to pay? -#Person2#: Compared to the shortest route, you may pay around 5 Euro more. -#Person1#: That's acceptable. No one wants to miss a train. -#Person2#: OK. . . Here we are. We'll turn left at this cross. To go straight ahead is the shortest route. +"#Person1#: Excuse me. Do you think I can get there in time to catch the 11:30 train? +#Person2#: Well, let me see. Now it's 11:00 sharp. It's a long way to go. If I take the shortest route, we may come across a traffic jam. If I take a less heavy route, it will save us 10 or more minutes, but you'll have to pay more. Which do you prefer? +#Person1#: Are you sure that I can get there in time if we take the less heavy route? +#Person2#: Generally speaking, we can if we go at this speed and nothing unexpected happens. +#Person1#: How much more do I have to pay? +#Person2#: Compared to the shortest route, you may pay around 5 Euro more. +#Person1#: That's acceptable. No one wants to miss a train. +#Person2#: OK. . . Here we are. We'll turn left at this cross. To go straight ahead is the shortest route. #Person1#: Thank you! ",#Person1# agrees with #Person2#'s suggestion to pay extra 5 euros to take a less heavy route to catch the train. "#Person1#: Nice to see you again, Mike. How was your trip to China? #Person2#: It was great. I flew to Beijing with my wife last month and I stayed there for 3 days. There were so many things to see and so many places of interest to visit in Beijing that we really couldn't decide whether to leave or stay. @@ -1735,50 +1735,50 @@ examples,ground_truth #Person2#: That's real pretty, but the price tag says $13.99, and I know I don't have that much money. #Person1#: Well, let's just say the tie went on sale. How about $5.00. What do you say? #Person2#: Oh, thanks. I'll take it.","#Person2# is looking for a Father's Day gift, but she only has $10 or so even though she has been helping with housework for the past week to earn money. #Person1# sells a tie worth $13.99 to her at the price of $5." -"#Person1#: Shall we share a taxi? -#Person2#: Where are you heading now? -#Person1#: I want to go back to my college on the Huanghe road. It is very close to your house. -#Person2#: Is that the university next to the Teachers' College? -#Person1#: That's the one. -#Person2#: You mean we'll share the taxi? -#Person1#: Yeah. If we share the cab, it'll be cheaper. Besides that your Chinese is better than mine. The drivers usually have difficulty understanding me even though I practice my pronunciation carefully. +"#Person1#: Shall we share a taxi? +#Person2#: Where are you heading now? +#Person1#: I want to go back to my college on the Huanghe road. It is very close to your house. +#Person2#: Is that the university next to the Teachers' College? +#Person1#: That's the one. +#Person2#: You mean we'll share the taxi? +#Person1#: Yeah. If we share the cab, it'll be cheaper. Besides that your Chinese is better than mine. The drivers usually have difficulty understanding me even though I practice my pronunciation carefully. #Person2#: Well. Don't worry about it, I will be happy to share the taxi with you. ",#Person1# wants to share a taxi with #Person2# because it's cheaper and #Person2#'s Chinese is better. #Person2# agrees. -"#Person1#: Um. . . where are my utensils? -#Person2#: You eat with your hands. Pick up the bread and use it like a spoon to scoop up the food. -#Person3#: This dish, Zilbo, has lamb and potatoes. -#Person1#: Mmm! This is really good! Can you pass the honey wine? So, Clyde, what do you study? -#Person2#: International law and business. My family runs its own firm. -#Person3#: Clyde wants to be the first black president. +"#Person1#: Um. . . where are my utensils? +#Person2#: You eat with your hands. Pick up the bread and use it like a spoon to scoop up the food. +#Person3#: This dish, Zilbo, has lamb and potatoes. +#Person1#: Mmm! This is really good! Can you pass the honey wine? So, Clyde, what do you study? +#Person2#: International law and business. My family runs its own firm. +#Person3#: Clyde wants to be the first black president. #Person2#: WILL be the first black president. I take Ronald Reagan as my role model. ","#Person1#, Clyde, and #Person3# have a meal together and Clyde mentions his wish to be the first black president." -"#Person1#: I would like to have a custom-made skirt. -#Person2#: May I take your size? -#Person1#: OK. I want it a bit close around the waist. -#Person2#: No problem. -#Person1#: How long will it take? -#Person2#: About a week. -#Person1#: What's the charge for the tailoring? +"#Person1#: I would like to have a custom-made skirt. +#Person2#: May I take your size? +#Person1#: OK. I want it a bit close around the waist. +#Person2#: No problem. +#Person1#: How long will it take? +#Person2#: About a week. +#Person1#: What's the charge for the tailoring? #Person2#: 20 yuan for a skirt. ",#Person1# wants a custom-made skirt from #Person2#. -"#Person1#: Isabelle, you know I'm not interested in fame. -#Person2#: Well, you don't seem to be interested in getting a real job, either. -#Person1#: You know I'm interested in teaching. I'm looking for jazz students. . . -#Person2#: Yeah, and every high school student in town is banging on your door, right? -#Person1#: I know they're out there. I'll find them. +"#Person1#: Isabelle, you know I'm not interested in fame. +#Person2#: Well, you don't seem to be interested in getting a real job, either. +#Person1#: You know I'm interested in teaching. I'm looking for jazz students. . . +#Person2#: Yeah, and every high school student in town is banging on your door, right? +#Person1#: I know they're out there. I'll find them. #Person2#: You're such a dreamer! You think that you can spread the word of jazz in an underpass? ",Isabelle thinks #Person1# is a dreamer because #Person1# doesn't do real things. -"#Person1#: Are you studying here? -#Person2#: Yes, I am studying in Eastern Asian language department. -#Person1#: What are you major in? -#Person2#: I major in Japanese. -#Person1#: What do you think of the literature course. +"#Person1#: Are you studying here? +#Person2#: Yes, I am studying in Eastern Asian language department. +#Person1#: What are you major in? +#Person2#: I major in Japanese. +#Person1#: What do you think of the literature course. #Person2#: Its very helpful. The course has let me into a world of literature. I read so many great literatures. ",#Person2# majors in Japanese and thinks the literature course is helpful. -"#Person1#: I came to this lab to have my blood drawn. -#Person2#: You are in the right place. Roll up your left sleeve and have a seat. -#Person1#: What am I being tested for? -#Person2#: Your doctor wants to know what your white blood cell count is. -#Person1#: What does my white blood cell count tell him? -#Person2#: Usually if your white count is off, the doctor suspects an infection. -#Person1#: How much will it hurt? -#Person2#: It is only a pin prick. I have to put this tourniquet on your arm to make the vein easier to find. -#Person1#: Is that my blood going into that tube? +"#Person1#: I came to this lab to have my blood drawn. +#Person2#: You are in the right place. Roll up your left sleeve and have a seat. +#Person1#: What am I being tested for? +#Person2#: Your doctor wants to know what your white blood cell count is. +#Person1#: What does my white blood cell count tell him? +#Person2#: Usually if your white count is off, the doctor suspects an infection. +#Person1#: How much will it hurt? +#Person2#: It is only a pin prick. I have to put this tourniquet on your arm to make the vein easier to find. +#Person1#: Is that my blood going into that tube? #Person2#: That blood that just filled the tube is all that I needed. Thanks for coming in! ",#Person2# is drawing #Person1#'s blood because the doctor wants to know #Person1#'s white blood cell count. "#Person1#: Do you know what is the most special event in Kentucky? #Person2#: The world class horses or the Hollywood stars? @@ -2177,92 +2177,92 @@ After seeing his right foot, Dr. Cardano decides to send him up to the lab on th #Person1#: Me, too. Tuition is sure high, isn't it? Well, I'd better get going. I've got to plant some trees for my neighbours this afternoon. #Person2#: Well, don't work too hard. Holding down a job, going to class, studying. Sometimes it can become too much for one person. Take it easy. #Person1#: You, too. It was great seeing you. Sally!","Sally and Tom talk about their job. Sally works part-time in a supermarket, while Tom does yard work for people. They both agree that every job has its shortcomings but they need to work to earn money for school." -"#Person1#: Susan, Did you know the four ugliest women in ancient China? -#Person2#: No, I only know four great beauties of China. -#Person1#: There were some famous ugly women in history. -#Person2#: Yeah? Were they famous because of the ugliness? -#Person1#: Though they were ugly, they had great virtue. -#Person2#: Then who were they? -#Person1#: Mo Mu, Zhong Lichun, Meng Guang and Ruan Nv. They were well respected. -#Person2#: It seems that the inner beauty is also important. +"#Person1#: Susan, Did you know the four ugliest women in ancient China? +#Person2#: No, I only know four great beauties of China. +#Person1#: There were some famous ugly women in history. +#Person2#: Yeah? Were they famous because of the ugliness? +#Person1#: Though they were ugly, they had great virtue. +#Person2#: Then who were they? +#Person1#: Mo Mu, Zhong Lichun, Meng Guang and Ruan Nv. They were well respected. +#Person2#: It seems that the inner beauty is also important. #Person1#: Sometimes the inner beauty is more beautiful. ",#Person1# introduced the four ugliest women who had great virtue in ancient China to Susan. -"#Person1#: Argh. . . I feel terrible, I keep sneezing and my eyes are all watery, what's wrong with me? -#Person2#: Wow, you're not dying are you, it looks like you have a cold, you should take some medicine. -#Person1#: I don't think it's a cold, I feel fine if I move a few feet away from my desk. -#Person2#: Maybe we should put you into quarantine, ha ha, jokes aside, I think you might have an allergy. -#Person1#: An allergy? I never thought about that, I don't think I'm allergic to pollen though and I'm desensitized to bee stings after being stung so many times, Hmm. . . -#Person2#: Ow! Why did you chuck that peanut at me? -#Person1#: Just checking if you're allergic to peanuts, I guess not. -#Person2#: Not funny! I could have gone into Anaphylactic Shock. -#Person1#: Okay, my bad, how about dust? This office is full of it. -#Person2#: Yes the whole is office is dusty yet I only feel affected near our desks! -#Person3#: Meow meow meow. -#Person1#: You brought your cat into the office? ! -#Person2#: Yes, it's Mr. Snuffle's birthday today, I didn't want him to be alone on his special day! -#Person1#: ACHOO! Argh, put it away, ACHOO! +"#Person1#: Argh. . . I feel terrible, I keep sneezing and my eyes are all watery, what's wrong with me? +#Person2#: Wow, you're not dying are you, it looks like you have a cold, you should take some medicine. +#Person1#: I don't think it's a cold, I feel fine if I move a few feet away from my desk. +#Person2#: Maybe we should put you into quarantine, ha ha, jokes aside, I think you might have an allergy. +#Person1#: An allergy? I never thought about that, I don't think I'm allergic to pollen though and I'm desensitized to bee stings after being stung so many times, Hmm. . . +#Person2#: Ow! Why did you chuck that peanut at me? +#Person1#: Just checking if you're allergic to peanuts, I guess not. +#Person2#: Not funny! I could have gone into Anaphylactic Shock. +#Person1#: Okay, my bad, how about dust? This office is full of it. +#Person2#: Yes the whole is office is dusty yet I only feel affected near our desks! +#Person3#: Meow meow meow. +#Person1#: You brought your cat into the office? ! +#Person2#: Yes, it's Mr. Snuffle's birthday today, I didn't want him to be alone on his special day! +#Person1#: ACHOO! Argh, put it away, ACHOO! #Person2#: I guess we found the problem, your allergic to cats! ","#Person1# feels terrible, and #Person2# thinks #Person1# might get an allergy. #Person2# tries to find out what triggers that, and it turns out that #Person1# is allergic to #Person2#'s cat." -"#Person1#: Ghost will be on at six thirty. It's already six fifteen now. Hurry up. -#Person2#: You'd been hanging around before left home. Well, now, you are urging me for the movie. This has been fun! -#Person1#: Don't be upset. I am just afraid of missing the movie. It is your favorite. -#Person2#: In short, you become more and more impatient with me after wedding. -#Person1#: Why do you think so?? -#Person2#: Every time I complain about the domestic chores with you, you just don't listen. -#Person1#: Nothing of the sort! -#Person2#: Don't interrupt me! In addition, every time I need your advice, you just say, it's up to you. -#Person1#: Maybe I was busy with my work at that time, so I felt a little bored. -#Person2#: You mean, I am not busy with my work? -#Person1#: Honey, don't get me wrong. I don't know how to explain. But I really have eyes only for you and our children. -#Person2#: Do you still love me? -#Person1#: Honey, maybe sometimes I seem careless, but I take great care to cooking breakfast every morning. That shows how much I love you. -#Person2#: Oh, honey, that's enough. Our love story is more touching than the Ghost. +"#Person1#: Ghost will be on at six thirty. It's already six fifteen now. Hurry up. +#Person2#: You'd been hanging around before left home. Well, now, you are urging me for the movie. This has been fun! +#Person1#: Don't be upset. I am just afraid of missing the movie. It is your favorite. +#Person2#: In short, you become more and more impatient with me after wedding. +#Person1#: Why do you think so?? +#Person2#: Every time I complain about the domestic chores with you, you just don't listen. +#Person1#: Nothing of the sort! +#Person2#: Don't interrupt me! In addition, every time I need your advice, you just say, it's up to you. +#Person1#: Maybe I was busy with my work at that time, so I felt a little bored. +#Person2#: You mean, I am not busy with my work? +#Person1#: Honey, don't get me wrong. I don't know how to explain. But I really have eyes only for you and our children. +#Person2#: Do you still love me? +#Person1#: Honey, maybe sometimes I seem careless, but I take great care to cooking breakfast every morning. That shows how much I love you. +#Person2#: Oh, honey, that's enough. Our love story is more touching than the Ghost. #Person1#: Let's go to see the movie. It's time to begin. ","#Person2# thinks #Person1# is impatient and might not love #Person2# anymore, but #Person1# reassures #Person2# and they will watch the movie together." -"#Person1#: I need a pan. -#Person2#: Okay. Do you have a particular size in mind? -#Person1#: Well, the bigger the better, I think. -#Person2#: Look at this one. It's our biggest pan. -#Person1#: Yes, that is big enough, but it's too heavy for me. -#Person2#: Okay, we have the same thing in aluminum. -#Person1#: Oh, this is nice and light. But it has an aluminum handle. -#Person2#: Try this one. Same aluminum pan, but with a heat-resistant bamboo handle. -#Person1#: Oh, yes. This is very nice. I'll take this one. -#Person2#: That's a good choice. How do you want to pay for it? -#Person1#: Cash. Oh, I almost forgot. I need a lid, too. +"#Person1#: I need a pan. +#Person2#: Okay. Do you have a particular size in mind? +#Person1#: Well, the bigger the better, I think. +#Person2#: Look at this one. It's our biggest pan. +#Person1#: Yes, that is big enough, but it's too heavy for me. +#Person2#: Okay, we have the same thing in aluminum. +#Person1#: Oh, this is nice and light. But it has an aluminum handle. +#Person2#: Try this one. Same aluminum pan, but with a heat-resistant bamboo handle. +#Person1#: Oh, yes. This is very nice. I'll take this one. +#Person2#: That's a good choice. How do you want to pay for it? +#Person1#: Cash. Oh, I almost forgot. I need a lid, too. #Person2#: I'm so sorry. A lid comes with the pan. Here it is. ",#Person2# helps #Person1# to choose a big aluminum pan with a heat-resistant bamboo handle and a lid. -"#Person1#: Lily, do you know Lizzy? -#Person2#: Lizzy who? -#Person1#: Lizzy smith. -#Person2#: Of course I do. -#Person1#: Then, Do you know her younger sister? -#Person2#: You mean Mary? -#Person1#: Yes. -#Person2#: Sure. I know her elder sister Sue and younger sister Mary. -#Person1#: Oh, not bad. Then do you know her mother? -#Person2#: Yes, certainly. I know her mother and father, and brother and sisters, too. -#Person1#: That sounds terrific. -#Person2#: Why do you ask me these questions? +"#Person1#: Lily, do you know Lizzy? +#Person2#: Lizzy who? +#Person1#: Lizzy smith. +#Person2#: Of course I do. +#Person1#: Then, Do you know her younger sister? +#Person2#: You mean Mary? +#Person1#: Yes. +#Person2#: Sure. I know her elder sister Sue and younger sister Mary. +#Person1#: Oh, not bad. Then do you know her mother? +#Person2#: Yes, certainly. I know her mother and father, and brother and sisters, too. +#Person1#: That sounds terrific. +#Person2#: Why do you ask me these questions? #Person1#: I just want to visit the family some day. ",#Person1# asks Lily about Lizzy's family because #Person1# wants to pay a visit. -"#Person1#: The Johnsons are on their way back. You remember them, don't you? -#Person2#: Johnson? I can't place them. -#Person1#: We met them in Bermuda last May. -#Person2#: They've completely slipped my mind. -#Person1#: The couple with the dogs-think back. -#Person2#: No, I don't recall a thing about them. -#Person1#: Well, I've invited them for brunch. +"#Person1#: The Johnsons are on their way back. You remember them, don't you? +#Person2#: Johnson? I can't place them. +#Person1#: We met them in Bermuda last May. +#Person2#: They've completely slipped my mind. +#Person1#: The couple with the dogs-think back. +#Person2#: No, I don't recall a thing about them. +#Person1#: Well, I've invited them for brunch. #Person2#: Hmm, I must be getting absent-minded. ",#Person1# helps #Person2# to recall the Johnsons but fails. -"#Person1#: Hello. Capital Hotel. May I help you? -#Person2#: Yes, unlikely my flight will be 2 hours due to the fog. Would you please keep my reservation? -#Person1#: Sure. May I have your name please? +"#Person1#: Hello. Capital Hotel. May I help you? +#Person2#: Yes, unlikely my flight will be 2 hours due to the fog. Would you please keep my reservation? +#Person1#: Sure. May I have your name please? #Person2#: Lincoln. That's L-I-N-C-O-L-N. Thank you. ",#Person1# helps Lincoln to keep the reservation. -"#Person1#: May I take your order now, sir? -#Person2#: Yes, please. I'd like to start with a chef's salad. -#Person1#: Chef's salad for starter. And what would you like to have for the main course? -#Person2#: I'll have steak. -#Person1#: How would you like your steak done? -#Person2#: Medium. -#Person1#: And what would you like to go with your steak? -#Person2#: Peas and carrots. -#Person1#: Potatoes? -#Person2#: Boiled. +"#Person1#: May I take your order now, sir? +#Person2#: Yes, please. I'd like to start with a chef's salad. +#Person1#: Chef's salad for starter. And what would you like to have for the main course? +#Person2#: I'll have steak. +#Person1#: How would you like your steak done? +#Person2#: Medium. +#Person1#: And what would you like to go with your steak? +#Person2#: Peas and carrots. +#Person1#: Potatoes? +#Person2#: Boiled. #Person1#: Thank you. ",#Person1# helps #Person2# order the starter and main course. "#Person1#: Would you hurry up? We're late. #Person2#: I know, I'm coming. @@ -2696,53 +2696,53 @@ After seeing his right foot, Dr. Cardano decides to send him up to the lab on th #Person2#: Thanks, but I can only play music on my guitar because it's a left-handed guitar...it's for people who use their left hands for most things. I fixed my guitar on Monday night. #Person1#: Why didn't you fix it sooner? We only have two days until our show. #Person2#: I've been so busy this month! I have to work at the grocery store and watch my little sister until my mom comes home from work.",Tina didn't come to band practice last week because her guitar was broken. #Person1# blames her for not fixing the guitar sooner but Tina has been too busy this month. -"#Person1#: So, you finally got your doctorate in genetics. Well done! -#Person2#: Thanks. Now, I have to find a job. -#Person1#: What are you thinking of doing? -#Person2#: I'd like to conduct some scientific research into genes. It would be wonderful to make a medical breakthrough. -#Person1#: There must be several private companies that are interested in employing someone like you. You could do some research for a university. There's a lot of discussion about genetics nowadays. Someone wit -#Person2#: Many companies and universities investing resources in genetics, because there are so many possibilities. Few people know where next discoveries will be made. +"#Person1#: So, you finally got your doctorate in genetics. Well done! +#Person2#: Thanks. Now, I have to find a job. +#Person1#: What are you thinking of doing? +#Person2#: I'd like to conduct some scientific research into genes. It would be wonderful to make a medical breakthrough. +#Person1#: There must be several private companies that are interested in employing someone like you. You could do some research for a university. There's a lot of discussion about genetics nowadays. Someone wit +#Person2#: Many companies and universities investing resources in genetics, because there are so many possibilities. Few people know where next discoveries will be made. #Person1#: Well, I hope scientists don't decode to make a clone of me in the future! I wouldn't like to be the subject of an experiment. ",#Person2# got a doctorate in genetic and wants to find a job conducting genetic research. #Person1# suggests working for private companies and universities. -"#Person1#: While you are thinking about what you might like to order for dinner, would you like to order your drinks? -#Person2#: Can you tell me where your wine list is? -#Person1#: The wine list is posted right there on the board. -#Person2#: Can we order a mixed drink in this restaurant? -#Person1#: Yes, we have a wide selection of mixed drinks available from our bar. -#Person2#: Do you have any house specials that you could recommend? -#Person1#: Our most popular drinks are our Cuervo Gold margaritas. -#Person2#: That sounds like a good choice for me. May I have one, please? -#Person1#: Can I bring that to you on the rocks, or would you like it blended? -#Person2#: Please bring it to me on the rocks. -#Person1#: Salt or no salt? +"#Person1#: While you are thinking about what you might like to order for dinner, would you like to order your drinks? +#Person2#: Can you tell me where your wine list is? +#Person1#: The wine list is posted right there on the board. +#Person2#: Can we order a mixed drink in this restaurant? +#Person1#: Yes, we have a wide selection of mixed drinks available from our bar. +#Person2#: Do you have any house specials that you could recommend? +#Person1#: Our most popular drinks are our Cuervo Gold margaritas. +#Person2#: That sounds like a good choice for me. May I have one, please? +#Person1#: Can I bring that to you on the rocks, or would you like it blended? +#Person2#: Please bring it to me on the rocks. +#Person1#: Salt or no salt? #Person2#: I would like it with no salt, please. ",#Person2# orders Cuervo Gold margaritas under #Person1#'s recommendation and asks #Person1# to bring it on the rocks with no salt. -"#Person1#: How do you feel about teaching my friend how to read? -#Person2#: How old is your friend and why doesn't he know how to read? -#Person1#: He's 78 and he's a new emigrant from South America and he's never been to school. -#Person2#: Does he even know how to speak English? -#Person1#: No. But I thought that you could start with reading and then go from there. -#Person2#: That was very thoughtful of you to volunteer me. -#Person1#: Come on. You're great at teaching and I know you will love him. He's adorable! +"#Person1#: How do you feel about teaching my friend how to read? +#Person2#: How old is your friend and why doesn't he know how to read? +#Person1#: He's 78 and he's a new emigrant from South America and he's never been to school. +#Person2#: Does he even know how to speak English? +#Person1#: No. But I thought that you could start with reading and then go from there. +#Person2#: That was very thoughtful of you to volunteer me. +#Person1#: Come on. You're great at teaching and I know you will love him. He's adorable! #Person2#: Oh, all right. Have him come over here for dinner. But you get to make dinner! ",#Person1# volunteers #Person2# to teach a 78-year-old illiterate American how to read. #Person2# thinks it challenging but agrees on the condition that #Person1# makes dinner. -"#Person1#: Veronica, wait! Come on, honey, get back in the car. Let's talk it over, okay? -#Person2#: No! I'm tired of your lies! I don't know who you are anymore! -#Person1#: Veronica. It's me, the man that has and always will love you. I'm sorry that I've lied to you. Believe me, it's been so hard for me as well, and time and again, I've thought of coming clean. But, I couldn't put you or my mission at risk. It's all over now. My assignment is complete and now I have to go back to India. -#Person2#: What? Are you kidding? Is there anything else I should know before I never see you again? How could you deceive me like that? -#Person1#: Yes. . . Veronica. . . I know that this isn't the best time and that you probably hate me right now but, I want to be completely forthright with you. I know deep in my heart that you are the best thing that has ever happened to me. Veronica. . . will you marry me? Come with me to India,baby, I can't make up for everything that's happened, but I can promise you my undying love. I will be the most devoted husband, and I will cherish you always. -#Person2#: Steven. . . I can't just leave everything at the drop of a hat! With everything t hat has happened between us, I just don't know you any more. I just can't build a relationship on a foundation of lies. I do love you but. . . I can't go with you. I'm sorry. . . I love you. . . -#Person3#: This is the last call for flight eight one five from Los Angeles to Hyderabad. -#Person4#: I'm sorry , sir, we can't wait any longer you must board the plane. Are you waiting for someone? +"#Person1#: Veronica, wait! Come on, honey, get back in the car. Let's talk it over, okay? +#Person2#: No! I'm tired of your lies! I don't know who you are anymore! +#Person1#: Veronica. It's me, the man that has and always will love you. I'm sorry that I've lied to you. Believe me, it's been so hard for me as well, and time and again, I've thought of coming clean. But, I couldn't put you or my mission at risk. It's all over now. My assignment is complete and now I have to go back to India. +#Person2#: What? Are you kidding? Is there anything else I should know before I never see you again? How could you deceive me like that? +#Person1#: Yes. . . Veronica. . . I know that this isn't the best time and that you probably hate me right now but, I want to be completely forthright with you. I know deep in my heart that you are the best thing that has ever happened to me. Veronica. . . will you marry me? Come with me to India,baby, I can't make up for everything that's happened, but I can promise you my undying love. I will be the most devoted husband, and I will cherish you always. +#Person2#: Steven. . . I can't just leave everything at the drop of a hat! With everything t hat has happened between us, I just don't know you any more. I just can't build a relationship on a foundation of lies. I do love you but. . . I can't go with you. I'm sorry. . . I love you. . . +#Person3#: This is the last call for flight eight one five from Los Angeles to Hyderabad. +#Person4#: I'm sorry , sir, we can't wait any longer you must board the plane. Are you waiting for someone? #Person1#: I was but, I don't think she is coming. . . ","Steven lied to Veronica because of his mission. Veronica feels so deceived that she doesn't believe Steven anymore. Steven asks Veronica to move to India together and marry him but Veronica refuses. At last, Veronica doesn't appear at the airport when Steven's going to board the plane from Los Angeles to Hyderabad." -"#Person1#: I was told to come to you to get a chest X-ray. -#Person2#: No problem. Just take your clothes off from the waist up and put the gown on, with the opening in the back. -#Person1#: Then what should I do? -#Person2#: You will stand over here up against this plate. -#Person1#: Should I just stand naturally? -#Person2#: You will raise your arms up shoulder high. -#Person1#: Is this all right? -#Person2#: Yes, you are doing great. -#Person1#: Where will you be going? -#Person2#: I need to stand behind this shield. Now you will take a deep breath, hold it, and let it out. -#Person1#: Is that it? +"#Person1#: I was told to come to you to get a chest X-ray. +#Person2#: No problem. Just take your clothes off from the waist up and put the gown on, with the opening in the back. +#Person1#: Then what should I do? +#Person2#: You will stand over here up against this plate. +#Person1#: Should I just stand naturally? +#Person2#: You will raise your arms up shoulder high. +#Person1#: Is this all right? +#Person2#: Yes, you are doing great. +#Person1#: Where will you be going? +#Person2#: I need to stand behind this shield. Now you will take a deep breath, hold it, and let it out. +#Person1#: Is that it? #Person2#: That's it. You can get dressed when the film is developed. ",#Person1# gets a chest X-ray step by step under #Person2#'s guidance. "#Person1#: Oh, man. Nobody can stand this kind of burning heat. #Person2#: Tell me about it. You can't even stay in the sun for 5 minutes. @@ -3199,78 +3199,78 @@ After seeing his right foot, Dr. Cardano decides to send him up to the lab on th #Person1#: No, no. Actually, it's 10:30. I set my watch half an hour fast. #Person2#: You're never late, are you? #Person1#: Never. I can't be!",#Person1# tells #Person2# #Person1#'s alarm is ringing for an appointment at 11. -"#Person1#: Excuse me, I'd like to make a suit of this material. -#Person2#: Well, sir. Can I take your measurements first? -#Person1#: Yes. Should I take off my coat? -#Person2#: That'll be helpful. All right, thank you. -#Person1#: Please make a single-breasted. -#Person2#: No, problem. If you'll wait one moment, I'll make out your receipt. -#Person1#: How much does it cost? -#Person2#: Let me see, with padding and lining cloth, it comes to 357 dollars altogether. -#Person1#: All right. When can I get it? -#Person2#: In two weeks. +"#Person1#: Excuse me, I'd like to make a suit of this material. +#Person2#: Well, sir. Can I take your measurements first? +#Person1#: Yes. Should I take off my coat? +#Person2#: That'll be helpful. All right, thank you. +#Person1#: Please make a single-breasted. +#Person2#: No, problem. If you'll wait one moment, I'll make out your receipt. +#Person1#: How much does it cost? +#Person2#: Let me see, with padding and lining cloth, it comes to 357 dollars altogether. +#Person1#: All right. When can I get it? +#Person2#: In two weeks. #Person1#: Thank you. ","#Person1# wants to make a single-breasted suit. #Person2# measures #Person1#'s size, and tells the price is 357 dollars." -"#Person1#: did you go to university? -#Person2#: yes, I graguated with a BA in English from Qingdao Uinversity. -#Person1#: when did you graduate? -#Person2#: just a few years ago. What about you? -#Person1#: I just graduated from high school. -#Person2#: are you planning on going to university? -#Person1#: I'd like to get a BA, but I don't know where I should go. -#Person2#: have you applied anywhere yet? -#Person1#: yes, I've applied to four universities and have been accepted into all of them. -#Person2#: congratulations! Which one is the cheapest? -#Person1#: the tuition is the same for all of them. -#Person2#: which one has the most interesting course? -#Person1#: I think the course at Leeds University is interesting, but I think the one at Manchester University would be more practical. -#Person2#: where would you like to be located? -#Person1#: I'd really like to be in London, but it's the most expensive city in England to live in, so I don't know if I can afford to live there. -#Person2#: have you applied for grants or financial aid of some sort? -#Person1#: not yet. -#Person2#: I think you should do that soon. It will help you make a decision about the school you go to. -#Person1#: that's a good idea. +"#Person1#: did you go to university? +#Person2#: yes, I graguated with a BA in English from Qingdao Uinversity. +#Person1#: when did you graduate? +#Person2#: just a few years ago. What about you? +#Person1#: I just graduated from high school. +#Person2#: are you planning on going to university? +#Person1#: I'd like to get a BA, but I don't know where I should go. +#Person2#: have you applied anywhere yet? +#Person1#: yes, I've applied to four universities and have been accepted into all of them. +#Person2#: congratulations! Which one is the cheapest? +#Person1#: the tuition is the same for all of them. +#Person2#: which one has the most interesting course? +#Person1#: I think the course at Leeds University is interesting, but I think the one at Manchester University would be more practical. +#Person2#: where would you like to be located? +#Person1#: I'd really like to be in London, but it's the most expensive city in England to live in, so I don't know if I can afford to live there. +#Person2#: have you applied for grants or financial aid of some sort? +#Person1#: not yet. +#Person2#: I think you should do that soon. It will help you make a decision about the school you go to. +#Person1#: that's a good idea. #Person2#: good luck! ",#Person2# congratulates #Person1# for receiving four university offers and asks #Person1# which one is preferred. #Person2# suggests #Person1# apply for financial aid. -"#Person1#: Have you read the new rules about using cell phone at work? -#Person2#: Yes, not bad. Like turn your cell phone ringer off and find a private place to make calls which it's showing your respect to your co-workers. -#Person1#: Well, but for this one, don't bring your cell phone to meetings, I think it is not reasonable. What if there are some important calls? -#Person2#: Well, this one is not compulsory. It is just suggestion. +"#Person1#: Have you read the new rules about using cell phone at work? +#Person2#: Yes, not bad. Like turn your cell phone ringer off and find a private place to make calls which it's showing your respect to your co-workers. +#Person1#: Well, but for this one, don't bring your cell phone to meetings, I think it is not reasonable. What if there are some important calls? +#Person2#: Well, this one is not compulsory. It is just suggestion. #Person1#: I didn't pay attention to that. ",#Person1# and #Person2# are talking about the new rules of using a cellphone at work. -"#Person1#: Hi! Is that the new laptop you brought last week? It looks very nice. -#Person2#: Yes, it is. Thanks. I'm just surfing on the internet. -#Person1#: Here? In this cafe? How can you do that? -#Person2#: This cafe offers a wireless internet connection. That means I can get on the net for free while I'm here. Of course , I have to buy a cup of coffee! -#Person1#: That's great. Can you do it anywhere? -#Person2#: No. you can only do it when the cafe offers a wireless connection. There are only about 10 or 12 places that offer it in this city. -#Person1#: So, what programes do you have on your laptop? -#Person2#: I've got all the usual ones for word processing and then I have a few for creating and editing photographs. -#Person1#: I know you are keen on photography. It's very useful for you to be able to download photos from your digital camera. Then you attach the picture files to emails and send them to anyone, anywhere, at anytime! +"#Person1#: Hi! Is that the new laptop you brought last week? It looks very nice. +#Person2#: Yes, it is. Thanks. I'm just surfing on the internet. +#Person1#: Here? In this cafe? How can you do that? +#Person2#: This cafe offers a wireless internet connection. That means I can get on the net for free while I'm here. Of course , I have to buy a cup of coffee! +#Person1#: That's great. Can you do it anywhere? +#Person2#: No. you can only do it when the cafe offers a wireless connection. There are only about 10 or 12 places that offer it in this city. +#Person1#: So, what programes do you have on your laptop? +#Person2#: I've got all the usual ones for word processing and then I have a few for creating and editing photographs. +#Person1#: I know you are keen on photography. It's very useful for you to be able to download photos from your digital camera. Then you attach the picture files to emails and send them to anyone, anywhere, at anytime! #Person2#: It's wonderful, isn't it? Would you like to see some photos that I look recently? ","#Person2# tells #Person1# the new laptop's functions, photography program, and how to surf the Internet in the cafe by using the wireless." -"#Person1#: Are there any interesting stories in the newspaper today? -#Person2#: There are a few stories about natural disasters. There is a massive forest fire in Australia. It covers several square kilometers of land has destroyed many more square kilometers. -#Person1#: Was it caused accidentally or naturally? Sometimes it gets so hot that fires begin naturally in Australia and Africa. -#Person2#: Nobody knows at the moment, but it has been very hot there recently. The drought in Africa is causing starvation. Millions of people have migrated to try and find food. -#Person1#: What is the international community doing to help? -#Person2#: The European union has sent several plants with relief supplies. Several countries have sent soldiers to distribute food and medical supplies. Refugee camps have been set up across the region. -#Person1#: How many countries have been affected? -#Person2#: Six have been seriously affected, but the refugees are also migrating to several surrounding countries. -#Person1#: I saw on the tv yesterday that there has been another earthquake in Iran. -#Person2#: Yes. There have been a few there recently. They say that this one was not a big quake. The Iranians are dealing with it on their own. They have purchased some special equipment to find people buried under rubble. -#Person1#: Does the newspaper say anything about casualties? +"#Person1#: Are there any interesting stories in the newspaper today? +#Person2#: There are a few stories about natural disasters. There is a massive forest fire in Australia. It covers several square kilometers of land has destroyed many more square kilometers. +#Person1#: Was it caused accidentally or naturally? Sometimes it gets so hot that fires begin naturally in Australia and Africa. +#Person2#: Nobody knows at the moment, but it has been very hot there recently. The drought in Africa is causing starvation. Millions of people have migrated to try and find food. +#Person1#: What is the international community doing to help? +#Person2#: The European union has sent several plants with relief supplies. Several countries have sent soldiers to distribute food and medical supplies. Refugee camps have been set up across the region. +#Person1#: How many countries have been affected? +#Person2#: Six have been seriously affected, but the refugees are also migrating to several surrounding countries. +#Person1#: I saw on the tv yesterday that there has been another earthquake in Iran. +#Person2#: Yes. There have been a few there recently. They say that this one was not a big quake. The Iranians are dealing with it on their own. They have purchased some special equipment to find people buried under rubble. +#Person1#: Does the newspaper say anything about casualties? #Person2#: So far, less than 20 people have died, but over 100 are in hospital. ","#Person2# tells #Person1# the news of natural disasters reported in today's newspaper, including the massive forest fire in Australia, the starvation in Africa, an earthquake in Iran, and the help of the international community in Australia and Africa." -"#Person1#: Are you ready to order, sir? -#Person2#: Yes. I'll have the beef stew for starters and my wife would like tomato soup. -#Person1#: One beef stew and one tomato soup. What would you like for the main course? -#Person2#: I'll have the Cayenne Pepper Steak and my wife would like the Fried Trout with mashed potatoes. -#Person1#: I'm afraid the trout is off. -#Person2#: Oh dear. Err. . . What else do you recommend? -#Person1#: The sole is very good. -#Person2#: OK. I'll have that. Do you have any coleslaw? -#Person1#: No, I'm sorry, we don't. -#Person2#: Just give me a small mixed salad then. Same for me. -#Person1#: Certainly. Would you like something to drink? -#Person2#: Yes, please. May I see the wine list? -#Person1#: Certainly. Here you are. -#Person2#: A bottle of Chablis 99, please. +"#Person1#: Are you ready to order, sir? +#Person2#: Yes. I'll have the beef stew for starters and my wife would like tomato soup. +#Person1#: One beef stew and one tomato soup. What would you like for the main course? +#Person2#: I'll have the Cayenne Pepper Steak and my wife would like the Fried Trout with mashed potatoes. +#Person1#: I'm afraid the trout is off. +#Person2#: Oh dear. Err. . . What else do you recommend? +#Person1#: The sole is very good. +#Person2#: OK. I'll have that. Do you have any coleslaw? +#Person1#: No, I'm sorry, we don't. +#Person2#: Just give me a small mixed salad then. Same for me. +#Person1#: Certainly. Would you like something to drink? +#Person2#: Yes, please. May I see the wine list? +#Person1#: Certainly. Here you are. +#Person2#: A bottle of Chablis 99, please. #Person1#: Excellent choice! ",#Person1# serves #Person2# and his wife in the restaurant. #Person2# orders some courses and drinks recommended by #Person1#. "#Person1#: Ah, that's the forth ad that appears suddenly on my computer screen since I started working on my paper. #Person2#: You can buy an app that will stop those ads. @@ -3649,59 +3649,59 @@ After seeing his right foot, Dr. Cardano decides to send him up to the lab on th #Person2#: You can't do it for ever. #Person1#: No, but I've decided to open a dance school once I've moved to the top. A lot of young dancers need better training, don't they? #Person2#: That's a wonderful idea.",David has left his position because of his rude boss. Susan becomes a successful dancer and plans to open a dance school. -"#Person1#: How are you doing today? -#Person2#: I'm doing great. What about you? -#Person1#: I'm absolutely lovely, thank you. -#Person2#: Everything's been good with you? -#Person1#: I haven't been better. How about yourself? -#Person2#: I started school recently. -#Person1#: Where are you going to school? -#Person2#: I'm going to PCC. -#Person1#: How do you like it so far? -#Person2#: I like it so far. My classes are pretty good right now. -#Person1#: I wish you luck. +"#Person1#: How are you doing today? +#Person2#: I'm doing great. What about you? +#Person1#: I'm absolutely lovely, thank you. +#Person2#: Everything's been good with you? +#Person1#: I haven't been better. How about yourself? +#Person2#: I started school recently. +#Person1#: Where are you going to school? +#Person2#: I'm going to PCC. +#Person1#: How do you like it so far? +#Person2#: I like it so far. My classes are pretty good right now. +#Person1#: I wish you luck. #Person2#: Thanks a lot. ",#Person1# and #Person2# exchange greetings. #Person2# tells #Person1# #Person2#'s going to PCC and #Person2# likes the classes there. -"#Person1#: What kind of car is best for me? -#Person2#: For you, I would recommend this one here. -#Person1#: The compact? Why do you think that one is better than the others? -#Person2#: This automobile is just right for your needs because not only is it compact for ease in city driving, but also, it has many safety features. I know that as a parent, you are concerned about safety in driving your kids to and from school. -#Person1#: That's true. What kind of safety features are we talking about? -#Person2#: This model features anti-lock brakes, airbags on both driver and passenger sides, and impact collision design. But that's not all. This car isn't only safe but it's also very economical. -#Person1#: You mean it has a cheaper price than similar models? -#Person2#: Yes, this price is very affordable, but driving this car you'll also notice a significant annual saving in gas consumption. The main attraction for this model is the fuel economy. -#Person1#: With the cost of gasoline these days, that is a big plus. I think this model may be just what I'm looking for. +"#Person1#: What kind of car is best for me? +#Person2#: For you, I would recommend this one here. +#Person1#: The compact? Why do you think that one is better than the others? +#Person2#: This automobile is just right for your needs because not only is it compact for ease in city driving, but also, it has many safety features. I know that as a parent, you are concerned about safety in driving your kids to and from school. +#Person1#: That's true. What kind of safety features are we talking about? +#Person2#: This model features anti-lock brakes, airbags on both driver and passenger sides, and impact collision design. But that's not all. This car isn't only safe but it's also very economical. +#Person1#: You mean it has a cheaper price than similar models? +#Person2#: Yes, this price is very affordable, but driving this car you'll also notice a significant annual saving in gas consumption. The main attraction for this model is the fuel economy. +#Person1#: With the cost of gasoline these days, that is a big plus. I think this model may be just what I'm looking for. #Person2#: Why don't you take it for a test drive, and think it over. ",#Person2# recommends the compact to #Person1# and introduces its features. #Person1# is satisfied with the price and then #Person2# suggests #Person1# have a test drive and think it over. -"#Person1#: Have you ever been involved in the auditing work? -#Person2#: Yes,I have. I was employed by the financial section of the university ever since I graduated. I worked there for 3 years. Then I had worked in a bank for 3 years. -#Person1#: How long did it take you to become an auditor? +"#Person1#: Have you ever been involved in the auditing work? +#Person2#: Yes,I have. I was employed by the financial section of the university ever since I graduated. I worked there for 3 years. Then I had worked in a bank for 3 years. +#Person1#: How long did it take you to become an auditor? #Person2#: Very short time. I became an auditor within three months. ",#Person2# tells #Person1# about #Person2#'s auditory experience. -"#Person1#: Nice dress. How do I look? Be honest. -#Person2#: Hmm... you look too dressed up. How about this purple top and these jeans? -#Person1#: Well, that top is a little too tight, and those jeans aren't dressy enough. And I don't feel comfortable with that. What do you think, Vicky? You've been very quiet up to now. +"#Person1#: Nice dress. How do I look? Be honest. +#Person2#: Hmm... you look too dressed up. How about this purple top and these jeans? +#Person1#: Well, that top is a little too tight, and those jeans aren't dressy enough. And I don't feel comfortable with that. What do you think, Vicky? You've been very quiet up to now. #Person3#: Be confident. Wear styles you're going to be comfortable in. ",#Person1#'s asking for opinions about #Person1#'s dressing. #Person2# thinks #Person1# looks too dressed up while Vicky thinks #Person1# should be confident. -"#Person1#: Whew! I had to wait for almost an hour to get to the front of the line. -#Person2#: You have much patience. -#Person1#: Wow! Your calligraphy is very beautiful. It was worth the wait! -#Person2#: Thank you. Today I'm writing a kind of poem called a Chinese couplet. -#Person1#: What does it say? -#Person2#: This is an especially famous one. It says 'May the passing days bring you health and longevity. May this season of renewal find you basked in riches.' -#Person1#: That's very nice. Is it for sale? -#Person2#: No. I never sell my artwork. -#Person1#: Really? Then what do you do with it? -#Person2#: I give it away. Here, this one is for you. -#Person1#: Wow! Really? Are you sure? Now I'll have a lucky year! +"#Person1#: Whew! I had to wait for almost an hour to get to the front of the line. +#Person2#: You have much patience. +#Person1#: Wow! Your calligraphy is very beautiful. It was worth the wait! +#Person2#: Thank you. Today I'm writing a kind of poem called a Chinese couplet. +#Person1#: What does it say? +#Person2#: This is an especially famous one. It says 'May the passing days bring you health and longevity. May this season of renewal find you basked in riches.' +#Person1#: That's very nice. Is it for sale? +#Person2#: No. I never sell my artwork. +#Person1#: Really? Then what do you do with it? +#Person2#: I give it away. Here, this one is for you. +#Person1#: Wow! Really? Are you sure? Now I'll have a lucky year! #Person2#: Remember, real luck must be created (by) yourself, and then it cannot be given or taken away. . . ",#Person1# waited for a long time to see #Person2#'s beautiful calligraphy. #Person2# today is writing a Chinese couplet and gives it away to #Person1#. #Person1#'s thrilled. -"#Person1#: They got a divorce at last. -#Person2#: It's inenvitable. Their love wasbuilt on the sand, and this is why their marriage has landed on the rocks. -#Person1#: You said it. Love buit on the sand will soon be on the rocks. +"#Person1#: They got a divorce at last. +#Person2#: It's inenvitable. Their love wasbuilt on the sand, and this is why their marriage has landed on the rocks. +#Person1#: You said it. Love buit on the sand will soon be on the rocks. #Person2#: That give us a good lesson. ",#Person1# and #Person2# learn that love built on the sand will soon be on the rocks from someone's divorce. -"#Person1#: Most of our customers are foreigners. How many foreign languages can you speak, Elizabeth? -#Person2#: Two. French and Spanish. -#Person1#: And how well can you speak them? -#Person2#: Well, French was my best subject at school. I can read and write it pretty well. -#Person1#: And how about your Spanish? -#Person2#: Well, it's not as good as my French. I can speak it reasonably well, but my written Spanish isn't very good. -#Person1#: I see. Well, we have a lot of Spanish customers, but you wouldn't need to write any Spanish here. +"#Person1#: Most of our customers are foreigners. How many foreign languages can you speak, Elizabeth? +#Person2#: Two. French and Spanish. +#Person1#: And how well can you speak them? +#Person2#: Well, French was my best subject at school. I can read and write it pretty well. +#Person1#: And how about your Spanish? +#Person2#: Well, it's not as good as my French. I can speak it reasonably well, but my written Spanish isn't very good. +#Person1#: I see. Well, we have a lot of Spanish customers, but you wouldn't need to write any Spanish here. #Person2#: In that case, I'm fit for the position I think. ","Elizabeth can speak French well. Since #Person1# has many Spanish customers, Elizabeth thinks she's fit for the position." "#Person1#: Ah, where am I? #Person2#: Excuse me, do you need any help? @@ -4086,124 +4086,124 @@ After seeing his right foot, Dr. Cardano decides to send him up to the lab on th #Person2#: What shall we do in the meantime? #Person1#: Let's find some seats in the quiet part of the terminal to take a nap. #Person2#: Good idea. I am pretty tired.",#Person1# tells #Person2# their flight is delayed and suggests taking a nap. -"#Person1#: May I help you? -#Person2#: Yes. I'm looking for a green dress. -#Person1#: What size do you wear? These dresses are on sale. -#Person2#: I wear size 32. This one looks nice. Where may I try it on? -#Person1#: Come this way. Here's the dressing room. -#Person2#: How does it look? -#Person1#: It looks nice. And it's not expensive. -#Person2#: How much is it? -#Person1#: It's only $20. +"#Person1#: May I help you? +#Person2#: Yes. I'm looking for a green dress. +#Person1#: What size do you wear? These dresses are on sale. +#Person2#: I wear size 32. This one looks nice. Where may I try it on? +#Person1#: Come this way. Here's the dressing room. +#Person2#: How does it look? +#Person1#: It looks nice. And it's not expensive. +#Person2#: How much is it? +#Person1#: It's only $20. #Person2#: I'll take it. ",#Person1# recommends a dress for #Person2#. #Person2# tries it and buys it. -"#Person1#: Can I help you, sir? -#Person2#: I want to find a book called Gone with the Wind. But I can't find it. -#Person1#: Let me give you a hand. The author is. . . -#Person2#: Margaret Mitchell. -#Person1#: Oh, yes. Here it is. -#Person2#: Thank you very much. I have been looking for it for a long time. Is this the latest edition? -#Person1#: Yes, we have both the paperback and hardcover. which would you want to buy? -#Person2#: How about the price of the hardcover? -#Person1#: It's $25. +"#Person1#: Can I help you, sir? +#Person2#: I want to find a book called Gone with the Wind. But I can't find it. +#Person1#: Let me give you a hand. The author is. . . +#Person2#: Margaret Mitchell. +#Person1#: Oh, yes. Here it is. +#Person2#: Thank you very much. I have been looking for it for a long time. Is this the latest edition? +#Person1#: Yes, we have both the paperback and hardcover. which would you want to buy? +#Person2#: How about the price of the hardcover? +#Person1#: It's $25. #Person2#: A little bit expensive, but I will buy one. This is $25 , here you are. ",#Person2# buys a hardcover of Gone with the Wind for $25 with #Person1#'s help. -"#Person1#: Excuse me, Sir, do you know what time it is? -#Person2#: Oh, it's almost eleven twenty. -#Person1#: Thank you. -#Person2#: You're welcome. The rain is quite heavy, isn't it? -#Person1#: Yeah. I was in a hurry and I forgot my umbrella today. -#Person2#: I have one. We could share it. Which way are you going? -#Person1#: Oh, that's very kind of you. I am going to the Garden Hotel. -#Person2#: I am going there, too. We can walk together. +"#Person1#: Excuse me, Sir, do you know what time it is? +#Person2#: Oh, it's almost eleven twenty. +#Person1#: Thank you. +#Person2#: You're welcome. The rain is quite heavy, isn't it? +#Person1#: Yeah. I was in a hurry and I forgot my umbrella today. +#Person2#: I have one. We could share it. Which way are you going? +#Person1#: Oh, that's very kind of you. I am going to the Garden Hotel. +#Person2#: I am going there, too. We can walk together. #Person1#: Sure. ","It rains heavily, #Person2# shares an umbrella with #Person1#, and they go to the Garden Hotel." -"#Person1#: Hi Mary, how's it going? -#Person2#: Well, last night I had a big argument with Ann. -#Person1#: Terrible. It must be something serious. You two are such close friends. -#Person2#: Now that I look back at it, it wasn't that big a deal. I shouldn't have lost my temper. -#Person1#: Really? What happened? -#Person2#: It's just we've been planning to go the beach for a while, and we decided we could both make it this weekend. Then out of nowhere she called me up, said her boyfriend had made plans and that she need to cancel the trip. I was so angry when she told me that I said she didn't care about our friendship at all. -#Person1#: That's pretty harsh. -#Person2#: I know, but I was so upset. I mean, come on! Does she have to do everything her boyfriend says? -#Person1#: You know she probably feels just as bad. -#Person2#: Well, I think I was being a little selfish myself. I know they don't get to see each other very often. -#Person1#: Well, in that case I guess maybe you can be more understanding. You shouldn't let a trivial thing like this stand in the way of your friendship. After all you can go to the beach anytime you want. +"#Person1#: Hi Mary, how's it going? +#Person2#: Well, last night I had a big argument with Ann. +#Person1#: Terrible. It must be something serious. You two are such close friends. +#Person2#: Now that I look back at it, it wasn't that big a deal. I shouldn't have lost my temper. +#Person1#: Really? What happened? +#Person2#: It's just we've been planning to go the beach for a while, and we decided we could both make it this weekend. Then out of nowhere she called me up, said her boyfriend had made plans and that she need to cancel the trip. I was so angry when she told me that I said she didn't care about our friendship at all. +#Person1#: That's pretty harsh. +#Person2#: I know, but I was so upset. I mean, come on! Does she have to do everything her boyfriend says? +#Person1#: You know she probably feels just as bad. +#Person2#: Well, I think I was being a little selfish myself. I know they don't get to see each other very often. +#Person1#: Well, in that case I guess maybe you can be more understanding. You shouldn't let a trivial thing like this stand in the way of your friendship. After all you can go to the beach anytime you want. #Person2#: Yeah, I'll call later to patch things up. ",Mary argued with Ann yesterday because Ann needed to cancel their trip and went to her boyfriend's plan. #Person1# tells Mary to be more understanding. Mary will call later to patch things up. -"#Person1#: Jenny, what's wrong with you? Why do you keep weeping like that? -#Person2#: Mary told me that she had seen you with John last night. I got to know the fact that you are playing the field. +"#Person1#: Jenny, what's wrong with you? Why do you keep weeping like that? +#Person2#: Mary told me that she had seen you with John last night. I got to know the fact that you are playing the field. #Person1#: Honey, cross my heart, I'v never looked at another woman since the first day I set my eyes on you! Believe me, that's the truth. ",Jenny thinks #Person1# is playing the field. #Person1# declares love to Jenny. "#Person1#: Lieb! How are you doing these day? -#Person2#: Hi! I am busy with my new cat. Do you want to see a picture of her? +#Person2#: Hi! I am busy with my new cat. Do you want to see a picture of her? #Person2#: What? You have had a cat! Show me the pictures please! #Person1#: See, she is only 3 month. #Person2#: Yes, I can tell. Look how small she is. She's really cute.",Lieb has a small cat and shows the pictures to #Person2#. -"#Person1#: You're so witty. . . -#Person2#: So why is the face tilted to the right? -#Person1#: This watch is supposed to be worn on your left hand. -#Person2#: So it's not as convenient for left-handed people? -#Person1#: It's better for right-handed people like me. See, I don't even have to move my arm to see the time. -#Person2#: I'm left-handed. You bought that watch so that I won't borrow it. . . +"#Person1#: You're so witty. . . +#Person2#: So why is the face tilted to the right? +#Person1#: This watch is supposed to be worn on your left hand. +#Person2#: So it's not as convenient for left-handed people? +#Person1#: It's better for right-handed people like me. See, I don't even have to move my arm to see the time. +#Person2#: I'm left-handed. You bought that watch so that I won't borrow it. . . #Person1#: Bingo! ","#Person1# buys a watch that is convenient for right-handed people, so left-handed #Person2# won't borrow it." -"#Person1#: I heard Rose is pregnant. I hope it'll be a boy this time. -#Person2#: I hope so, too. Rose and her husband have been wanting a boy so much. -#Person1#: After three baby girls in a row, Rose is under a lot of pressure from her in-laws. They want a boy in the worst way now. -#Person2#: But baby girls are just as good and just as fun as baby boys. +"#Person1#: I heard Rose is pregnant. I hope it'll be a boy this time. +#Person2#: I hope so, too. Rose and her husband have been wanting a boy so much. +#Person1#: After three baby girls in a row, Rose is under a lot of pressure from her in-laws. They want a boy in the worst way now. +#Person2#: But baby girls are just as good and just as fun as baby boys. #Person1#: I agree with you, but you know how old-fashioned the elders are. ",#Person1# and #Person2# are talking about Rose's pregnancy and that Rose is under pressure from the old-fashioned elders. -"#Person1#: My friend finally dumped her boyfriend, and she's sworn she's going to abstain until she finds the right man to marry . -#Person2#: After going through an episode like that I'm not surprised . How's her headspace? -#Person1#: She's doing great , she's getting her confidence back, and her self-esteem, has improved drastically. She's very happy. -#Person2#: I'm proud of you for standing by her. I think you've helped make a big difference in her life. -#Person1#: Do you have any plans for next Sunday evening? -#Person2#: No, why? -#Person1#: My friend, who had the mishap, wants to take us to dinner to show her gratitude for helping her. -#Person2#: She doesn't need to do that, I didn't do anything. +"#Person1#: My friend finally dumped her boyfriend, and she's sworn she's going to abstain until she finds the right man to marry . +#Person2#: After going through an episode like that I'm not surprised . How's her headspace? +#Person1#: She's doing great , she's getting her confidence back, and her self-esteem, has improved drastically. She's very happy. +#Person2#: I'm proud of you for standing by her. I think you've helped make a big difference in her life. +#Person1#: Do you have any plans for next Sunday evening? +#Person2#: No, why? +#Person1#: My friend, who had the mishap, wants to take us to dinner to show her gratitude for helping her. +#Person2#: She doesn't need to do that, I didn't do anything. #Person1#: She feels you gave me the freedom to be able to assist her and she appreciates that. Come on, Let's indulge her. ",#Person1# tells #Person2# #Person1#'s friend finally dumped her boyfriend. They both stand by her and she invites them to have dinner to show gratitude for helping her. -"#Person1#: Susan has got the cancer of stomach. -#Person2#: How terrible! This is quite unexpected! -#Person1#: Yesterday when I went to hospital to see her, you cannot imagine how greatly surprised when I saw her. -#Person3#: What happened? +"#Person1#: Susan has got the cancer of stomach. +#Person2#: How terrible! This is quite unexpected! +#Person1#: Yesterday when I went to hospital to see her, you cannot imagine how greatly surprised when I saw her. +#Person3#: What happened? #Person2#: Because of atomic cocktail and other medicines, all of them have the side effect. she has lost all her hair. ",#Person1# tells #Person2# Susan got stomach cancer and she has lost all her hair. -"#Person1#: The sun is up! Time for all the campers to rise. Time to get paddling. -#Person2#: Oh, no! No more paddling! My arms are sore! -#Person1#: Do not worry. Today will be easier. -#Person2#: Beth, what date is today? -#Person1#: Today is Saturday. -#Person2#: What is the date today? -#Person1#: Today is July 4th. -#Person2#: Oh, i almost forgot. Today is my mom's birthday. -#Person1#: Call her on my cell phone. Wish her 'Happy Birthday!'. Tell her you are out exploring the great American wilderness. Tell her I said she is lucky to be born on Independence Day. -#Person2#: Thanks! I will do that! When is your birthday? -#Person1#: It is December 25th. -#Person2#: Wow! What a lucky girl! Your birthday is on Christmas Day. -#Person1#: Yes, I am lucky. I was born on Christ's birthday. Maybe that is why I usually go to church on Sundays. When is your birthday? -#Person2#: April 2nd. I missed being a target of a lot of jokes by one day. I guess I am lucky, too! -#Person1#: That is true! Here, have some Granola for breakfast. -#Person2#: Thanks. -#Person1#: After eating , we will take down our tent. Then we will pack everything into the canoe, We can shove off by 6 -#Person2#: I guess so. -#Person1#: How about going for swim around 10 -#Person2#: That should work out great. You are miracle worker! You have got me awake and motivated. +"#Person1#: The sun is up! Time for all the campers to rise. Time to get paddling. +#Person2#: Oh, no! No more paddling! My arms are sore! +#Person1#: Do not worry. Today will be easier. +#Person2#: Beth, what date is today? +#Person1#: Today is Saturday. +#Person2#: What is the date today? +#Person1#: Today is July 4th. +#Person2#: Oh, i almost forgot. Today is my mom's birthday. +#Person1#: Call her on my cell phone. Wish her 'Happy Birthday!'. Tell her you are out exploring the great American wilderness. Tell her I said she is lucky to be born on Independence Day. +#Person2#: Thanks! I will do that! When is your birthday? +#Person1#: It is December 25th. +#Person2#: Wow! What a lucky girl! Your birthday is on Christmas Day. +#Person1#: Yes, I am lucky. I was born on Christ's birthday. Maybe that is why I usually go to church on Sundays. When is your birthday? +#Person2#: April 2nd. I missed being a target of a lot of jokes by one day. I guess I am lucky, too! +#Person1#: That is true! Here, have some Granola for breakfast. +#Person2#: Thanks. +#Person1#: After eating , we will take down our tent. Then we will pack everything into the canoe, We can shove off by 6 +#Person2#: I guess so. +#Person1#: How about going for swim around 10 +#Person2#: That should work out great. You are miracle worker! You have got me awake and motivated. #Person1#: Happy Independence Day! ",#Person1# asks #Person2# to go paddling but #Person2# remembers today is #Person2#'s mother's birthday. #Person1# suggests #Person2# call her and wish her happy birthday and tells her #Person2# is out. Then they talk about their birthdays and later schedule. -"#Person1#: May I have my bill, please? -#Person2#: That's $20 in all. -#Person1#: Well, I am afraid you have made a mistake. Would you check it again, please? -#Person2#: Let me see. I am terribty sorry, sir. That should be $18. +"#Person1#: May I have my bill, please? +#Person2#: That's $20 in all. +#Person1#: Well, I am afraid you have made a mistake. Would you check it again, please? +#Person2#: Let me see. I am terribty sorry, sir. That should be $18. #Person1#: It doesn't matter. ",#Person1# points out a mistake on #Person1#'s bill. -"#Person1#: Hi, Mary. You look pale today. What's the matter with you? -#Person2#: I think I've caught a cold. Now I'm aching all over. -#Person1#: You'd better take some medicine and have a good rest. I hope you'll be yourself pretty soon. +"#Person1#: Hi, Mary. You look pale today. What's the matter with you? +#Person2#: I think I've caught a cold. Now I'm aching all over. +#Person1#: You'd better take some medicine and have a good rest. I hope you'll be yourself pretty soon. #Person2#: Thank you. I suppose I should go to see a doctor. ",Mary gets cold. #Person1# hopes Mary gets better soon. -"#Person1#: Do you want to hear a funny joke? -#Person2#: OK. Are you sure it's funny, though? -#Person1#: Well, you'll see. -#Person2#: OK. -#Person1#: OK, an Englishman, a Scotsman, and an Irishman were going on a trip across the desert, and they could only take one thing with them. -#Person2#: I see. -#Person1#: So they met up at the start of the journey and showed each other their equipment. -#Person2#: Oh, that's funny! -#Person1#: Hang on, I haven't finished yet. -#Person2#: Oh, sorry. -#Person1#: Well, as I was saying, they showed each other what they had decided to bring. The Englishman had brought some water. 'If we get thirsty, we'll have something to drink, ' he said. The Scotsman brought a map. 'If we get lost, we'll be able to find our way. ' The Irishman had brought a car door. -#Person2#: A car door? You mean just one car door? -#Person1#: Yep. A car door. 'Why the door? ' the others asked him. 'Well, ' he said, 'If it gets hot, we can open the window. ' Do you get it? +"#Person1#: Do you want to hear a funny joke? +#Person2#: OK. Are you sure it's funny, though? +#Person1#: Well, you'll see. +#Person2#: OK. +#Person1#: OK, an Englishman, a Scotsman, and an Irishman were going on a trip across the desert, and they could only take one thing with them. +#Person2#: I see. +#Person1#: So they met up at the start of the journey and showed each other their equipment. +#Person2#: Oh, that's funny! +#Person1#: Hang on, I haven't finished yet. +#Person2#: Oh, sorry. +#Person1#: Well, as I was saying, they showed each other what they had decided to bring. The Englishman had brought some water. 'If we get thirsty, we'll have something to drink, ' he said. The Scotsman brought a map. 'If we get lost, we'll be able to find our way. ' The Irishman had brought a car door. +#Person2#: A car door? You mean just one car door? +#Person1#: Yep. A car door. 'Why the door? ' the others asked him. 'Well, ' he said, 'If it gets hot, we can open the window. ' Do you get it? #Person2#: Well... ","#Person1# tells #Person2# a cold joke about an Englishman, a Scotsman, and an Irishman taking some water, a map, and a car door on a trip across the desert." "#Person1#: I'm now at the airport to meet Mr. Dale, who is arriving at 3:00 PM. There will be some calls for me while I'm away. So please take a message. #Person2#: Certainly. What time will you be back? @@ -4594,62 +4594,62 @@ After seeing his right foot, Dr. Cardano decides to send him up to the lab on th #Person2#: No, but I can't stand him anymore. He is the worst roommate I've ever had. He never cleans up after himself and he is always listening to loud music when I try to get some sleep. #Person1#: Why don't you have a heart-to-heart talk with him? #Person2#: I've tried, but it didn't work. Maybe you can talk to him. After all, you are his good friend.","#Person2# complains about #Person2#'s roommate, Charlie, to #Person1# and asks #Person1# to talk to Charlie." -"#Person1#: Tom, I married Julia last month. Have you already known it? -#Person2#: No, I haven't. I'm so surprised at the news. -#Person1#: Indeed, we got married too soon. -#Person2#: Congratulations. But have you heard the proverb that if one gets married too hurriedly one may regret it for a long time? -#Person1#: Yes. However, I believe that marriage comes by destiny. I knew I would marry Julia when I met her at the first time. -#Person2#: How's your married life? -#Person1#: We're happy together now. -#Person2#: I have to say you're a well-matched couple. +"#Person1#: Tom, I married Julia last month. Have you already known it? +#Person2#: No, I haven't. I'm so surprised at the news. +#Person1#: Indeed, we got married too soon. +#Person2#: Congratulations. But have you heard the proverb that if one gets married too hurriedly one may regret it for a long time? +#Person1#: Yes. However, I believe that marriage comes by destiny. I knew I would marry Julia when I met her at the first time. +#Person2#: How's your married life? +#Person1#: We're happy together now. +#Person2#: I have to say you're a well-matched couple. #Person1#: Thank you! ",#Person1# tells Tom he and Julia got married hurriedly but they are happy. -"#Person1#: Have you ever seen Bill Gate's home on the internet? -#Person2#: No. what's it like? -#Person1#: It's got its own library, theatre, swimming pool, and a guest house. The house itself has about ten different rooms that are all hooked up to computers so you can get things done in each room through a remote control. It's also located near the sea, so he can park his boats next to his house. It's absolutely amazing! -#Person2#: Would you want to live there? -#Person1#: I think his house is fantastic, but I wouldn't want to live there. You would have to hire one or two people to clean all the rooms in the house, plus a few people to take care of the gardens, and probably an au pair or two to take care of the children. It's just too big of a place to take care of on your own. -#Person2#: What's your dreamhome like then? +"#Person1#: Have you ever seen Bill Gate's home on the internet? +#Person2#: No. what's it like? +#Person1#: It's got its own library, theatre, swimming pool, and a guest house. The house itself has about ten different rooms that are all hooked up to computers so you can get things done in each room through a remote control. It's also located near the sea, so he can park his boats next to his house. It's absolutely amazing! +#Person2#: Would you want to live there? +#Person1#: I think his house is fantastic, but I wouldn't want to live there. You would have to hire one or two people to clean all the rooms in the house, plus a few people to take care of the gardens, and probably an au pair or two to take care of the children. It's just too big of a place to take care of on your own. +#Person2#: What's your dreamhome like then? #Person1#: My dream home is actually just a small cottage in a quiet village in England. -#Person2#: Would you want to buy an old cottage or build a new one yourself? -#Person1#: Old homes are great because they've got character. I think that's important. -#Person2#: Is that why you wear second-hand clothes as well? Because they've got character? -#Person1#: No, that's just because I don't have enough money to buy new cloths all the time! -#Person2#: I see. If you lived in an old house, would it be decorated in a modern way? +#Person2#: Would you want to buy an old cottage or build a new one yourself? +#Person1#: Old homes are great because they've got character. I think that's important. +#Person2#: Is that why you wear second-hand clothes as well? Because they've got character? +#Person1#: No, that's just because I don't have enough money to buy new cloths all the time! +#Person2#: I see. If you lived in an old house, would it be decorated in a modern way? #Person1#: No, I'd definitely try to restore it to its original state. I love to imagine what it'd be like to live in another time in history and living in a house decorated like it would have been 200 years ago would be a great way to feed my imagination even more! ","#Person1# tells #Person2# what Bill Gate's home like. It's got its own library, theatre, swimming pool, and a guest house. #Person1# doesn't want to live there because it's too big to take care of by one person. #Person1# prefers old cottages in a quiet village in England because they've got characters." -"#Person1#: What can I do for you, sir? -#Person2#: What have you got this morning? -#Person1#: Fruit juice, cakes and refreshments, and everything. -#Person2#: I'd like to have a glass of tomato juice, please. -#Person1#: Any cereal, sir? -#Person2#: Yes, a dish of cream of wheat. -#Person1#: And eggs? -#Person2#: Yes, bacon and eggs with buttered toast. I like my bacon very crisp. -#Person1#: How do you want your eggs? -#Person2#: Fried, please. -#Person1#: Anything more, sir? +"#Person1#: What can I do for you, sir? +#Person2#: What have you got this morning? +#Person1#: Fruit juice, cakes and refreshments, and everything. +#Person2#: I'd like to have a glass of tomato juice, please. +#Person1#: Any cereal, sir? +#Person2#: Yes, a dish of cream of wheat. +#Person1#: And eggs? +#Person2#: Yes, bacon and eggs with buttered toast. I like my bacon very crisp. +#Person1#: How do you want your eggs? +#Person2#: Fried, please. +#Person1#: Anything more, sir? #Person2#: No, that's enough. T hank you. ","#Person2# orders tomato juice, a dish of cream of wheat, crisp bacon, and fried eggs." -"#Person1#: Excuse me, is there a table for 8 right now? -#Person2#: Let me see. . . I am sorry the tables you want are booked. -#Person1#: Well, since there are some small square tables, could we put two tables together? +"#Person1#: Excuse me, is there a table for 8 right now? +#Person2#: Let me see. . . I am sorry the tables you want are booked. +#Person1#: Well, since there are some small square tables, could we put two tables together? #Person2#: No problem, sir. Let me help you. ",#Person2# helps #Person1# put two tables together to make it for 8 people. -"#Person1#: I am totally fed up with my boss. He has crossed the line one too many times with his sexist comments. This time I am really going to report him for sexual harassment. -#Person2#: What happened? Did your boss say something to offend you at work? -#Person1#: He constantly lets inappropriate things slip out, referring to the women employees as girls or calling us sweetheart or darling. I doubt any of my male colleagues would stand for such treatment. -#Person2#: Don't you think you are overreacting a little? Calling you by nicknames shouldn't be so bad... -#Person1#: You're missing the point. It's about respect. He treats us with such a patronizing attitude, as if we are not equal or not as serious as our male co-workers. It's his attitude that needs to be changed, not just his words. +"#Person1#: I am totally fed up with my boss. He has crossed the line one too many times with his sexist comments. This time I am really going to report him for sexual harassment. +#Person2#: What happened? Did your boss say something to offend you at work? +#Person1#: He constantly lets inappropriate things slip out, referring to the women employees as girls or calling us sweetheart or darling. I doubt any of my male colleagues would stand for such treatment. +#Person2#: Don't you think you are overreacting a little? Calling you by nicknames shouldn't be so bad... +#Person1#: You're missing the point. It's about respect. He treats us with such a patronizing attitude, as if we are not equal or not as serious as our male co-workers. It's his attitude that needs to be changed, not just his words. #Person2#: That's what you get for working in a male-dominated field. I think you'll find that most male bosses in your industry are already conditioned to treat females in this way. You probably won't be able to change him. ",#Person1# complains to #Person2# about her boss's sexist comments. #Person1# is going to report him for sexual harassment. #Person2# thinks #Person1# is overreacting and she can't change her boss. -"#Person1#: Now that it's the new year, I've decided to turn over a new leaf. -#Person2#: Yeah? You finally decided to wipe the slate clean? -#Person1#: You got it! I have a new job, I'm living in a new city, with new friends! This is my opportunity to make some small changes in the way I live my life. -#Person2#: So what are you going to do? Take up an art class or something? -#Person1#: Well, first of all, I've decided to stop smoking. It's not that I'm pinching pennies or anything, it's just that I've been smoking since I was sixteen, and I think it's time to stop. -#Person2#: I'm with you on that one. Anything else you're planning on doing? -#Person1#: One last thing, I've decided to come out of the closet. +"#Person1#: Now that it's the new year, I've decided to turn over a new leaf. +#Person2#: Yeah? You finally decided to wipe the slate clean? +#Person1#: You got it! I have a new job, I'm living in a new city, with new friends! This is my opportunity to make some small changes in the way I live my life. +#Person2#: So what are you going to do? Take up an art class or something? +#Person1#: Well, first of all, I've decided to stop smoking. It's not that I'm pinching pennies or anything, it's just that I've been smoking since I was sixteen, and I think it's time to stop. +#Person2#: I'm with you on that one. Anything else you're planning on doing? +#Person1#: One last thing, I've decided to come out of the closet. #Person2#: It's about time! ",#Person1# decides to stop smoking and come out of the closet in the new year. #Person2# supports #Person1#. -"#Person1#: You married Joe, didn't you? -#Person2#: Joe? I don't know what you mean. -#Person1#: I remember you are in love. -#Person2#: Oh, I took a shine to him when we met for the first time. But it comes and goes. +"#Person1#: You married Joe, didn't you? +#Person2#: Joe? I don't know what you mean. +#Person1#: I remember you are in love. +#Person2#: Oh, I took a shine to him when we met for the first time. But it comes and goes. #Person1#: It's Greek to me. ",#Person1# thought #Person2# married Joe. #Person2# denies. "#Person1#: How can I help you mam? #Person2#: I was hoping you could look at my car today for the past few weeks. It has been making very strange noises. diff --git a/lumigator/python/mzai/backend/backend/tests/data/health_job_metadata.json b/lumigator/lumigator/backend/backend/tests/data/health_job_metadata.json similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/data/health_job_metadata.json rename to lumigator/lumigator/backend/backend/tests/data/health_job_metadata.json diff --git a/lumigator/python/mzai/backend/backend/tests/data/health_job_metadata_ray.json b/lumigator/lumigator/backend/backend/tests/data/health_job_metadata_ray.json similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/data/health_job_metadata_ray.json rename to lumigator/lumigator/backend/backend/tests/data/health_job_metadata_ray.json diff --git a/lumigator/python/mzai/backend/backend/tests/data/models.json b/lumigator/lumigator/backend/backend/tests/data/models.json similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/data/models.json rename to lumigator/lumigator/backend/backend/tests/data/models.json diff --git a/lumigator/python/mzai/backend/backend/tests/data/ray_version.json b/lumigator/lumigator/backend/backend/tests/data/ray_version.json similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/data/ray_version.json rename to lumigator/lumigator/backend/backend/tests/data/ray_version.json diff --git a/lumigator/python/mzai/backend/backend/tests/fakes/__init__.py b/lumigator/lumigator/backend/backend/tests/fakes/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/fakes/__init__.py rename to lumigator/lumigator/backend/backend/tests/fakes/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/fakes/fake_s3.py b/lumigator/lumigator/backend/backend/tests/fakes/fake_s3.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/fakes/fake_s3.py rename to lumigator/lumigator/backend/backend/tests/fakes/fake_s3.py diff --git a/lumigator/python/mzai/backend/backend/tests/integration/__init__.py b/lumigator/lumigator/backend/backend/tests/integration/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/integration/__init__.py rename to lumigator/lumigator/backend/backend/tests/integration/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/integration/api/__init__.py b/lumigator/lumigator/backend/backend/tests/integration/api/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/integration/api/__init__.py rename to lumigator/lumigator/backend/backend/tests/integration/api/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/integration/api/routes/__init__.py b/lumigator/lumigator/backend/backend/tests/integration/api/routes/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/integration/api/routes/__init__.py rename to lumigator/lumigator/backend/backend/tests/integration/api/routes/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/integration/api/routes/test_api_workflows.py b/lumigator/lumigator/backend/backend/tests/integration/api/routes/test_api_workflows.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/integration/api/routes/test_api_workflows.py rename to lumigator/lumigator/backend/backend/tests/integration/api/routes/test_api_workflows.py diff --git a/lumigator/python/mzai/backend/backend/tests/integration/services/__init__.py b/lumigator/lumigator/backend/backend/tests/integration/services/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/integration/services/__init__.py rename to lumigator/lumigator/backend/backend/tests/integration/services/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/test_responses.dockerfile b/lumigator/lumigator/backend/backend/tests/test_responses.dockerfile similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/test_responses.dockerfile rename to lumigator/lumigator/backend/backend/tests/test_responses.dockerfile diff --git a/lumigator/python/mzai/backend/backend/tests/unit/__init__.py b/lumigator/lumigator/backend/backend/tests/unit/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/__init__.py rename to lumigator/lumigator/backend/backend/tests/unit/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/api/__init__.py b/lumigator/lumigator/backend/backend/tests/unit/api/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/api/__init__.py rename to lumigator/lumigator/backend/backend/tests/unit/api/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/api/routes/__init__.py b/lumigator/lumigator/backend/backend/tests/unit/api/routes/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/api/routes/__init__.py rename to lumigator/lumigator/backend/backend/tests/unit/api/routes/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_datasets.py b/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_datasets.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_datasets.py rename to lumigator/lumigator/backend/backend/tests/unit/api/routes/test_datasets.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_health.py b/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_health.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_health.py rename to lumigator/lumigator/backend/backend/tests/unit/api/routes/test_health.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_jobs.py b/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_jobs.py similarity index 98% rename from lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_jobs.py rename to lumigator/lumigator/backend/backend/tests/unit/api/routes/test_jobs.py index 96db7481..e1fcc19e 100644 --- a/lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_jobs.py +++ b/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_jobs.py @@ -13,13 +13,14 @@ def load_json(path: Path) -> str: with Path.open(path) as file: return json.load(file) + def test_get_job_status( app_client: TestClient, job_repository, request_mock, json_ray_version, json_data_health_job_metadata_ray, - dependency_overrides_fakes + dependency_overrides_fakes, ): created_job = job_repository.create(name="test", description="test desc") @@ -93,4 +94,4 @@ def test_job_logs( response = app_client.get(f"/jobs/{job_id}/logs") assert response is not None assert response.status_code == status.HTTP_200_OK - assert json.loads(logs_content)["logs"] == json.loads(f'"{log}"') \ No newline at end of file + assert json.loads(logs_content)["logs"] == json.loads(f'"{log}"') diff --git a/lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_main.py b/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_main.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_main.py rename to lumigator/lumigator/backend/backend/tests/unit/api/routes/test_main.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_models.py b/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_models.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/api/routes/test_models.py rename to lumigator/lumigator/backend/backend/tests/unit/api/routes/test_models.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/repositories/__init__.py b/lumigator/lumigator/backend/backend/tests/unit/repositories/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/repositories/__init__.py rename to lumigator/lumigator/backend/backend/tests/unit/repositories/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/repositories/test_experiments.py b/lumigator/lumigator/backend/backend/tests/unit/repositories/test_experiments.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/repositories/test_experiments.py rename to lumigator/lumigator/backend/backend/tests/unit/repositories/test_experiments.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/repositories/test_jobs.py b/lumigator/lumigator/backend/backend/tests/unit/repositories/test_jobs.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/repositories/test_jobs.py rename to lumigator/lumigator/backend/backend/tests/unit/repositories/test_jobs.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/services/__init__.py b/lumigator/lumigator/backend/backend/tests/unit/services/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/services/__init__.py rename to lumigator/lumigator/backend/backend/tests/unit/services/__init__.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/services/test_dataset_service.py b/lumigator/lumigator/backend/backend/tests/unit/services/test_dataset_service.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/services/test_dataset_service.py rename to lumigator/lumigator/backend/backend/tests/unit/services/test_dataset_service.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/services/test_job_service.py b/lumigator/lumigator/backend/backend/tests/unit/services/test_job_service.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/services/test_job_service.py rename to lumigator/lumigator/backend/backend/tests/unit/services/test_job_service.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/test_ray_submit.py b/lumigator/lumigator/backend/backend/tests/unit/test_ray_submit.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/test_ray_submit.py rename to lumigator/lumigator/backend/backend/tests/unit/test_ray_submit.py diff --git a/lumigator/python/mzai/backend/backend/tests/unit/test_settings.py b/lumigator/lumigator/backend/backend/tests/unit/test_settings.py similarity index 100% rename from lumigator/python/mzai/backend/backend/tests/unit/test_settings.py rename to lumigator/lumigator/backend/backend/tests/unit/test_settings.py diff --git a/lumigator/python/mzai/backend/pyproject.toml b/lumigator/lumigator/backend/pyproject.toml similarity index 100% rename from lumigator/python/mzai/backend/pyproject.toml rename to lumigator/lumigator/backend/pyproject.toml diff --git a/lumigator/python/mzai/backend/uv.lock b/lumigator/lumigator/backend/uv.lock similarity index 100% rename from lumigator/python/mzai/backend/uv.lock rename to lumigator/lumigator/backend/uv.lock diff --git a/lumigator/python/mzai/jobs/evaluator/README.md b/lumigator/lumigator/jobs/evaluator/README.md similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/README.md rename to lumigator/lumigator/jobs/evaluator/README.md diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/configs/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/configs/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/__main__.py b/lumigator/lumigator/jobs/evaluator/evaluator/__main__.py similarity index 99% rename from lumigator/python/mzai/jobs/evaluator/evaluator/__main__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/__main__.py index 7be604e9..098f4e4e 100644 --- a/lumigator/python/mzai/jobs/evaluator/evaluator/__main__.py +++ b/lumigator/lumigator/jobs/evaluator/evaluator/__main__.py @@ -17,6 +17,7 @@ ConfigType = TypeVar("ConfigType", bound=JobConfig) + def parse_config_option(config_cls: type[ConfigType], config: str) -> ConfigType: """Parse the config option string from the CLI. @@ -28,6 +29,7 @@ def parse_config_option(config_cls: type[ConfigType], config: str) -> ConfigType else: return config_cls.model_validate_json(config) + @click.group(name="Evaluator CLI", help="Entrypoints for the evaluator CLI ") def cli(): pass @@ -37,8 +39,10 @@ def cli(): def group() -> None: pass + cli.add_command(group) + @group.command("lm-harness", help="Run the lm-harness evaluation job.") @click.option("--config", type=str) def lm_harness_command(config: str) -> None: @@ -55,5 +59,6 @@ def huggingface_command(config: str) -> None: evaluator = entrypoint.Evaluator() evaluator.evaluate(config) + if __name__ == "__main__": cli() diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/configs/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/configs/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/configs/common.py b/lumigator/lumigator/jobs/evaluator/evaluator/configs/common.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/configs/common.py rename to lumigator/lumigator/jobs/evaluator/evaluator/configs/common.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/configs/huggingface.py b/lumigator/lumigator/jobs/evaluator/evaluator/configs/huggingface.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/configs/huggingface.py rename to lumigator/lumigator/jobs/evaluator/evaluator/configs/huggingface.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/configs/jobs/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/configs/jobs/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/configs/jobs/common.py b/lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/common.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/configs/jobs/common.py rename to lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/common.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py b/lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py rename to lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/configs/jobs/lm_harness.py b/lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/lm_harness.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/configs/jobs/lm_harness.py rename to lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/lm_harness.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/configs/vllm.py b/lumigator/lumigator/jobs/evaluator/evaluator/configs/vllm.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/configs/vllm.py rename to lumigator/lumigator/jobs/evaluator/evaluator/configs/vllm.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/configs/wandb.py b/lumigator/lumigator/jobs/evaluator/evaluator/configs/wandb.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/configs/wandb.py rename to lumigator/lumigator/jobs/evaluator/evaluator/configs/wandb.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/constants.py b/lumigator/lumigator/jobs/evaluator/evaluator/constants.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/constants.py rename to lumigator/lumigator/jobs/evaluator/evaluator/constants.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/entrypoint.py b/lumigator/lumigator/jobs/evaluator/evaluator/entrypoint.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/entrypoint.py rename to lumigator/lumigator/jobs/evaluator/evaluator/entrypoint.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/asset_loader.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/asset_loader.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/asset_loader.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/asset_loader.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/common.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/common.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/common.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/common.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/conversation.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/conversation.py similarity index 99% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/conversation.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/conversation.py index 7fdc96b5..fd725ab2 100644 --- a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/conversation.py +++ b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/conversation.py @@ -1332,7 +1332,7 @@ def get_conv_template(name: str) -> Conversation: Conversation( name="metharme", system_template="<|system|>{system_message}", - system_message="""Enter RP mode. You shall reply to the user while staying + system_message="""Enter RP mode. You shall reply to the user while staying in character. Your responses must be detailed, creative, immersive, and drive the scenario forward.""", roles=("<|user|>", "<|model|>"), diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/metrics.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/metrics.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/evaluation/metrics.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/metrics.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/model_clients.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/model_clients.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/model_clients.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/model_clients.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/jobs/utils.py b/lumigator/lumigator/jobs/evaluator/evaluator/jobs/utils.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/jobs/utils.py rename to lumigator/lumigator/jobs/evaluator/evaluator/jobs/utils.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/paths.py b/lumigator/lumigator/jobs/evaluator/evaluator/paths.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/paths.py rename to lumigator/lumigator/jobs/evaluator/evaluator/paths.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/preprocessing.py b/lumigator/lumigator/jobs/evaluator/evaluator/preprocessing.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/preprocessing.py rename to lumigator/lumigator/jobs/evaluator/evaluator/preprocessing.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/conftest.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/conftest.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/conftest.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/conftest.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/README.md b/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/README.md similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/README.md rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/README.md diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/conftest.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/conftest.py similarity index 93% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/conftest.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/conftest.py index c7e233d7..605828a4 100644 --- a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/conftest.py +++ b/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/conftest.py @@ -34,8 +34,8 @@ def integration_env_vars(integration_storage_path): "WANDB_CONFIG_DIR": str(integration_storage_path / "config" / "wandb"), "HF_HOME": str(integration_storage_path / "cache" / "huggingface"), "WANDB_MODE": "disabled", - "WANDB_API_KEY": "SECRET", - "OPENAI_API_KEY": "SECRET", + "WANDB_API_KEY": "SECRET", # pragma: allowlist secret + "OPENAI_API_KEY": "SECRET", # pragma: allowlist secret } with mock.patch.dict(os.environ, env_vars): yield env_vars diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/README.md b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/README.md similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/README.md rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/README.md diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json similarity index 99% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json index 10c3f93d..76bf1805 100644 --- a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json +++ b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json @@ -45,4 +45,4 @@ "minor": 0, "patch": 0 } -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json similarity index 99% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json index ad98d9db..a4a8b5a1 100644 --- a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json +++ b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json @@ -10,4 +10,4 @@ "_format_type": null, "_output_all_columns": false, "_split": "train[:10]" -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json similarity index 99% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json index 872c12a3..63102527 100644 --- a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json +++ b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json @@ -17,4 +17,4 @@ }, "homepage": "", "license": "" -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json similarity index 99% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json index 93fe3d1d..5bfaa1c6 100644 --- a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json +++ b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json @@ -10,4 +10,4 @@ "_format_type": null, "_output_all_columns": false, "_split": null -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json b/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/test_utils.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/test_utils.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/test_utils.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/test_utils.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/jobs/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/jobs/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/jobs/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/jobs/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_common.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_common.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_common.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_common.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tracking/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tracking/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/test_paths.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/test_paths.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/test_paths.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/test_paths.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py b/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py diff --git a/lumigator/python/mzai/jobs/evaluator_lite/tests/__init__.py b/lumigator/lumigator/jobs/evaluator/evaluator/tracking/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/tests/__init__.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tracking/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tracking/artifact_utils.py b/lumigator/lumigator/jobs/evaluator/evaluator/tracking/artifact_utils.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tracking/artifact_utils.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tracking/artifact_utils.py diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/tracking/run_utils.py b/lumigator/lumigator/jobs/evaluator/evaluator/tracking/run_utils.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/evaluator/tracking/run_utils.py rename to lumigator/lumigator/jobs/evaluator/evaluator/tracking/run_utils.py diff --git a/lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml b/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml rename to lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml diff --git a/lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml b/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml rename to lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml diff --git a/lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml b/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml rename to lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml diff --git a/lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml b/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml rename to lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml diff --git a/lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml b/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml rename to lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml diff --git a/lumigator/python/mzai/jobs/evaluator/requirements.txt b/lumigator/lumigator/jobs/evaluator/requirements.txt similarity index 100% rename from lumigator/python/mzai/jobs/evaluator/requirements.txt rename to lumigator/lumigator/jobs/evaluator/requirements.txt diff --git a/lumigator/python/mzai/jobs/evaluator_lite/README.md b/lumigator/lumigator/jobs/evaluator_lite/README.md similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/README.md rename to lumigator/lumigator/jobs/evaluator_lite/README.md diff --git a/lumigator/python/mzai/jobs/evaluator_lite/eval_lite.py b/lumigator/lumigator/jobs/evaluator_lite/eval_lite.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/eval_lite.py rename to lumigator/lumigator/jobs/evaluator_lite/eval_lite.py diff --git a/lumigator/python/mzai/jobs/evaluator_lite/eval_metrics.py b/lumigator/lumigator/jobs/evaluator_lite/eval_metrics.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/eval_metrics.py rename to lumigator/lumigator/jobs/evaluator_lite/eval_metrics.py diff --git a/lumigator/python/mzai/jobs/evaluator_lite/requirements.txt b/lumigator/lumigator/jobs/evaluator_lite/requirements.txt similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/requirements.txt rename to lumigator/lumigator/jobs/evaluator_lite/requirements.txt diff --git a/lumigator/python/mzai/jobs/evaluator_lite/schemas.py b/lumigator/lumigator/jobs/evaluator_lite/schemas.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/schemas.py rename to lumigator/lumigator/jobs/evaluator_lite/schemas.py diff --git a/lumigator/python/mzai/jobs/inference/tests/__init__.py b/lumigator/lumigator/jobs/evaluator_lite/tests/__init__.py similarity index 100% rename from lumigator/python/mzai/jobs/inference/tests/__init__.py rename to lumigator/lumigator/jobs/evaluator_lite/tests/__init__.py diff --git a/lumigator/python/mzai/jobs/evaluator_lite/tests/conftest.py b/lumigator/lumigator/jobs/evaluator_lite/tests/conftest.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/tests/conftest.py rename to lumigator/lumigator/jobs/evaluator_lite/tests/conftest.py diff --git a/lumigator/python/mzai/jobs/evaluator_lite/tests/data/config_full_hf.json b/lumigator/lumigator/jobs/evaluator_lite/tests/data/config_full_hf.json similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/tests/data/config_full_hf.json rename to lumigator/lumigator/jobs/evaluator_lite/tests/data/config_full_hf.json diff --git a/lumigator/python/mzai/jobs/evaluator_lite/tests/data/config_minimal.json b/lumigator/lumigator/jobs/evaluator_lite/tests/data/config_minimal.json similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/tests/data/config_minimal.json rename to lumigator/lumigator/jobs/evaluator_lite/tests/data/config_minimal.json diff --git a/lumigator/python/mzai/jobs/evaluator_lite/tests/test_configs.py b/lumigator/lumigator/jobs/evaluator_lite/tests/test_configs.py similarity index 100% rename from lumigator/python/mzai/jobs/evaluator_lite/tests/test_configs.py rename to lumigator/lumigator/jobs/evaluator_lite/tests/test_configs.py diff --git a/lumigator/python/mzai/jobs/inference/README.md b/lumigator/lumigator/jobs/inference/README.md similarity index 100% rename from lumigator/python/mzai/jobs/inference/README.md rename to lumigator/lumigator/jobs/inference/README.md diff --git a/lumigator/python/mzai/jobs/inference/inference.py b/lumigator/lumigator/jobs/inference/inference.py similarity index 100% rename from lumigator/python/mzai/jobs/inference/inference.py rename to lumigator/lumigator/jobs/inference/inference.py diff --git a/lumigator/python/mzai/jobs/inference/inference_config.py b/lumigator/lumigator/jobs/inference/inference_config.py similarity index 100% rename from lumigator/python/mzai/jobs/inference/inference_config.py rename to lumigator/lumigator/jobs/inference/inference_config.py diff --git a/lumigator/python/mzai/jobs/inference/model_clients.py b/lumigator/lumigator/jobs/inference/model_clients.py similarity index 100% rename from lumigator/python/mzai/jobs/inference/model_clients.py rename to lumigator/lumigator/jobs/inference/model_clients.py diff --git a/lumigator/python/mzai/jobs/inference/paths.py b/lumigator/lumigator/jobs/inference/paths.py similarity index 100% rename from lumigator/python/mzai/jobs/inference/paths.py rename to lumigator/lumigator/jobs/inference/paths.py diff --git a/lumigator/python/mzai/jobs/inference/requirements.txt b/lumigator/lumigator/jobs/inference/requirements.txt similarity index 100% rename from lumigator/python/mzai/jobs/inference/requirements.txt rename to lumigator/lumigator/jobs/inference/requirements.txt diff --git a/lumigator/python/mzai/jobs/inference/requirements_cpu.txt b/lumigator/lumigator/jobs/inference/requirements_cpu.txt similarity index 100% rename from lumigator/python/mzai/jobs/inference/requirements_cpu.txt rename to lumigator/lumigator/jobs/inference/requirements_cpu.txt diff --git a/lumigator/python/mzai/jobs/inference/schemas.py b/lumigator/lumigator/jobs/inference/schemas.py similarity index 100% rename from lumigator/python/mzai/jobs/inference/schemas.py rename to lumigator/lumigator/jobs/inference/schemas.py diff --git a/lumigator/python/mzai/schemas/lumigator_schemas/__init__.py b/lumigator/lumigator/jobs/inference/tests/__init__.py similarity index 100% rename from lumigator/python/mzai/schemas/lumigator_schemas/__init__.py rename to lumigator/lumigator/jobs/inference/tests/__init__.py diff --git a/lumigator/python/mzai/jobs/inference/tests/conftest.py b/lumigator/lumigator/jobs/inference/tests/conftest.py similarity index 100% rename from lumigator/python/mzai/jobs/inference/tests/conftest.py rename to lumigator/lumigator/jobs/inference/tests/conftest.py diff --git a/lumigator/python/mzai/jobs/inference/tests/data/config_full_api.json b/lumigator/lumigator/jobs/inference/tests/data/config_full_api.json similarity index 100% rename from lumigator/python/mzai/jobs/inference/tests/data/config_full_api.json rename to lumigator/lumigator/jobs/inference/tests/data/config_full_api.json diff --git a/lumigator/python/mzai/jobs/inference/tests/data/config_full_hf.json b/lumigator/lumigator/jobs/inference/tests/data/config_full_hf.json similarity index 100% rename from lumigator/python/mzai/jobs/inference/tests/data/config_full_hf.json rename to lumigator/lumigator/jobs/inference/tests/data/config_full_hf.json diff --git a/lumigator/python/mzai/jobs/inference/tests/data/config_minimal.json b/lumigator/lumigator/jobs/inference/tests/data/config_minimal.json similarity index 100% rename from lumigator/python/mzai/jobs/inference/tests/data/config_minimal.json rename to lumigator/lumigator/jobs/inference/tests/data/config_minimal.json diff --git a/lumigator/python/mzai/jobs/inference/tests/test_configs.py b/lumigator/lumigator/jobs/inference/tests/test_configs.py similarity index 100% rename from lumigator/python/mzai/jobs/inference/tests/test_configs.py rename to lumigator/lumigator/jobs/inference/tests/test_configs.py diff --git a/lumigator/python/mzai/jobs/inference/utils.py b/lumigator/lumigator/jobs/inference/utils.py similarity index 100% rename from lumigator/python/mzai/jobs/inference/utils.py rename to lumigator/lumigator/jobs/inference/utils.py diff --git a/lumigator/python/mzai/sample_data/dialogsum_exc.csv b/lumigator/lumigator/sample_data/dialogsum_exc.csv similarity index 100% rename from lumigator/python/mzai/sample_data/dialogsum_exc.csv rename to lumigator/lumigator/sample_data/dialogsum_exc.csv diff --git a/lumigator/python/mzai/sample_data/dialogsum_mini_all_gt_is_whitespace.csv b/lumigator/lumigator/sample_data/dialogsum_mini_all_gt_is_whitespace.csv similarity index 80% rename from lumigator/python/mzai/sample_data/dialogsum_mini_all_gt_is_whitespace.csv rename to lumigator/lumigator/sample_data/dialogsum_mini_all_gt_is_whitespace.csv index 4cfebdff..3a297268 100644 --- a/lumigator/python/mzai/sample_data/dialogsum_mini_all_gt_is_whitespace.csv +++ b/lumigator/lumigator/sample_data/dialogsum_mini_all_gt_is_whitespace.csv @@ -1,14 +1,14 @@ examples,ground_truth "#Person1#: Hello, how are you doing today? -#Person2#: I ' Ve been having trouble breathing lately., +#Person2#: I ' Ve been having trouble breathing lately., #Person1#: Have you had any type of cold lately? #Person2#: No, I haven ' t had a cold. I just have a heavy feeling in my chest when I try to breathe. #Person1#: Do you have any allergies that you know of?, #Person2#: No, I don ' t have any allergies that I know of. #Person1#: Does this happen all the time or mostly when you are active? -#Person2#: It happens a lot when I work out., +#Person2#: It happens a lot when I work out., #Person1#: I am going to send you to a pulmonary specialist who can run tests on you for asthma. -#Person2#: Thank you for your help, doctor.", +#Person2#: Thank you for your help, doctor.", "#Person1#: Hey Jimmy. Let's go workout later today. #Person2#: Sure. What time do you want to go? #Person1#: How about at 3:30? @@ -16,4 +16,4 @@ examples,ground_truth #Person1#: Hey. I just played basketball earlier, so my legs are a little sore. Let's work out on arms and stomach today. #Person2#: I'm on a weekly schedule. You're messing everything up. #Person1#: C'mon. We're only switching two days. You can do legs on Friday. -#Person2#: Aright. I'll meet you at the gym at 3:30 then.", \ No newline at end of file +#Person2#: Aright. I'll meet you at the gym at 3:30 then.", diff --git a/lumigator/python/mzai/sample_data/dialogsum_mini_empty_gt.csv b/lumigator/lumigator/sample_data/dialogsum_mini_empty_gt.csv similarity index 100% rename from lumigator/python/mzai/sample_data/dialogsum_mini_empty_gt.csv rename to lumigator/lumigator/sample_data/dialogsum_mini_empty_gt.csv diff --git a/lumigator/python/mzai/sample_data/dialogsum_mini_no_gt.csv b/lumigator/lumigator/sample_data/dialogsum_mini_no_gt.csv similarity index 100% rename from lumigator/python/mzai/sample_data/dialogsum_mini_no_gt.csv rename to lumigator/lumigator/sample_data/dialogsum_mini_no_gt.csv diff --git a/lumigator/python/mzai/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv b/lumigator/lumigator/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv similarity index 86% rename from lumigator/python/mzai/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv rename to lumigator/lumigator/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv index e28c49de..b0930997 100644 --- a/lumigator/python/mzai/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv +++ b/lumigator/lumigator/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv @@ -1,12 +1,12 @@ examples,ground_truth "#Person1#: Hello, how are you doing today? -#Person2#: I ' Ve been having trouble breathing lately., +#Person2#: I ' Ve been having trouble breathing lately., #Person1#: Have you had any type of cold lately? #Person2#: No, I haven ' t had a cold. I just have a heavy feeling in my chest when I try to breathe. #Person1#: Do you have any allergies that you know of?, #Person2#: No, I don ' t have any allergies that I know of. #Person1#: Does this happen all the time or mostly when you are active? -#Person2#: It happens a lot when I work out., +#Person2#: It happens a lot when I work out., #Person1#: I am going to send you to a pulmonary specialist who can run tests on you for asthma. #Person2#: Thank you for your help, doctor.",#Person2# has trouble breathing. The doctor asks #Person2# about it and will send #Person2# to a pulmonary specialist. "#Person1#: Hey Jimmy. Let's go workout later today. @@ -16,4 +16,4 @@ examples,ground_truth #Person1#: Hey. I just played basketball earlier, so my legs are a little sore. Let's work out on arms and stomach today. #Person2#: I'm on a weekly schedule. You're messing everything up. #Person1#: C'mon. We're only switching two days. You can do legs on Friday. -#Person2#: Aright. I'll meet you at the gym at 3:30 then.", \ No newline at end of file +#Person2#: Aright. I'll meet you at the gym at 3:30 then.", diff --git a/lumigator/python/mzai/schemas/.python-version b/lumigator/lumigator/schemas/.python-version similarity index 100% rename from lumigator/python/mzai/schemas/.python-version rename to lumigator/lumigator/schemas/.python-version diff --git a/lumigator/python/mzai/schemas/README.md b/lumigator/lumigator/schemas/README.md similarity index 85% rename from lumigator/python/mzai/schemas/README.md rename to lumigator/lumigator/schemas/README.md index cd7421e5..13234808 100644 --- a/lumigator/python/mzai/schemas/README.md +++ b/lumigator/lumigator/schemas/README.md @@ -1,3 +1,3 @@ # REST API schemas -The lumigator REST API uses `json` objects to communicate with the lumigator server. Their schemas are defined as `pydantic` models within this package. It is a requirement both for the `backend`and the `lumigator_sdk` packages. \ No newline at end of file +The lumigator REST API uses `json` objects to communicate with the lumigator server. Their schemas are defined as `pydantic` models within this package. It is a requirement both for the `backend`and the `lumigator_sdk` packages. diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/__init__.py b/lumigator/lumigator/schemas/lumigator_schemas/__init__.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/__init__.py rename to lumigator/lumigator/schemas/lumigator_schemas/__init__.py diff --git a/lumigator/python/mzai/schemas/lumigator_schemas/completions.py b/lumigator/lumigator/schemas/lumigator_schemas/completions.py similarity index 99% rename from lumigator/python/mzai/schemas/lumigator_schemas/completions.py rename to lumigator/lumigator/schemas/lumigator_schemas/completions.py index ebca1fd3..28bb2484 100644 --- a/lumigator/python/mzai/schemas/lumigator_schemas/completions.py +++ b/lumigator/lumigator/schemas/lumigator_schemas/completions.py @@ -1,4 +1,3 @@ - from pydantic import BaseModel diff --git a/lumigator/python/mzai/schemas/lumigator_schemas/datasets.py b/lumigator/lumigator/schemas/lumigator_schemas/datasets.py similarity index 100% rename from lumigator/python/mzai/schemas/lumigator_schemas/datasets.py rename to lumigator/lumigator/schemas/lumigator_schemas/datasets.py diff --git a/lumigator/python/mzai/schemas/lumigator_schemas/experiments.py b/lumigator/lumigator/schemas/lumigator_schemas/experiments.py similarity index 100% rename from lumigator/python/mzai/schemas/lumigator_schemas/experiments.py rename to lumigator/lumigator/schemas/lumigator_schemas/experiments.py diff --git a/lumigator/python/mzai/schemas/lumigator_schemas/extras.py b/lumigator/lumigator/schemas/lumigator_schemas/extras.py similarity index 100% rename from lumigator/python/mzai/schemas/lumigator_schemas/extras.py rename to lumigator/lumigator/schemas/lumigator_schemas/extras.py diff --git a/lumigator/python/mzai/schemas/lumigator_schemas/jobs.py b/lumigator/lumigator/schemas/lumigator_schemas/jobs.py similarity index 100% rename from lumigator/python/mzai/schemas/lumigator_schemas/jobs.py rename to lumigator/lumigator/schemas/lumigator_schemas/jobs.py diff --git a/lumigator/python/mzai/schemas/lumigator_schemas/models.py b/lumigator/lumigator/schemas/lumigator_schemas/models.py similarity index 100% rename from lumigator/python/mzai/schemas/lumigator_schemas/models.py rename to lumigator/lumigator/schemas/lumigator_schemas/models.py diff --git a/lumigator/python/mzai/schemas/pyproject.toml b/lumigator/lumigator/schemas/pyproject.toml similarity index 100% rename from lumigator/python/mzai/schemas/pyproject.toml rename to lumigator/lumigator/schemas/pyproject.toml diff --git a/lumigator/python/mzai/schemas/uv.lock b/lumigator/lumigator/schemas/uv.lock similarity index 100% rename from lumigator/python/mzai/schemas/uv.lock rename to lumigator/lumigator/schemas/uv.lock diff --git a/lumigator/python/mzai/sdk/.python-version b/lumigator/lumigator/sdk/.python-version similarity index 100% rename from lumigator/python/mzai/sdk/.python-version rename to lumigator/lumigator/sdk/.python-version diff --git a/lumigator/python/mzai/sdk/README.md b/lumigator/lumigator/sdk/README.md similarity index 95% rename from lumigator/python/mzai/sdk/README.md rename to lumigator/lumigator/sdk/README.md index 992ffe2c..f2f3c9cd 100644 --- a/lumigator/python/mzai/sdk/README.md +++ b/lumigator/lumigator/sdk/README.md @@ -6,13 +6,13 @@ either locally or remotely. You can install the lumigator SDK via `pip` directly or via `uv` from the cloned repository: ```bash -pip install -e lumigator/python/mzai/sdk +pip install -e lumigator/lumigator/sdk ``` or ```bash -uv pip install -e lumigator/python/mzai/sdk +uv pip install -e lumigator/lumigator/sdk ``` Now that you have the SDK installed, you can use it to communicate with Lumigator. You can run the diff --git a/lumigator/python/mzai/sdk/tests/__init__.py b/lumigator/lumigator/sdk/lumigator_sdk/__init__.py similarity index 100% rename from lumigator/python/mzai/sdk/tests/__init__.py rename to lumigator/lumigator/sdk/lumigator_sdk/__init__.py diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/client.py b/lumigator/lumigator/sdk/lumigator_sdk/client.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/client.py rename to lumigator/lumigator/sdk/lumigator_sdk/client.py diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/completions.py b/lumigator/lumigator/sdk/lumigator_sdk/completions.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/completions.py rename to lumigator/lumigator/sdk/lumigator_sdk/completions.py diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/experiments.py b/lumigator/lumigator/sdk/lumigator_sdk/experiments.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/experiments.py rename to lumigator/lumigator/sdk/lumigator_sdk/experiments.py diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/health.py b/lumigator/lumigator/sdk/lumigator_sdk/health.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/health.py rename to lumigator/lumigator/sdk/lumigator_sdk/health.py diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/jobs.py b/lumigator/lumigator/sdk/lumigator_sdk/jobs.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/jobs.py rename to lumigator/lumigator/sdk/lumigator_sdk/jobs.py diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/lm_datasets.py b/lumigator/lumigator/sdk/lumigator_sdk/lm_datasets.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/lm_datasets.py rename to lumigator/lumigator/sdk/lumigator_sdk/lm_datasets.py diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/lumigator.py b/lumigator/lumigator/sdk/lumigator_sdk/lumigator.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/lumigator.py rename to lumigator/lumigator/sdk/lumigator_sdk/lumigator.py diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/models.py b/lumigator/lumigator/sdk/lumigator_sdk/models.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/models.py rename to lumigator/lumigator/sdk/lumigator_sdk/models.py diff --git a/lumigator/python/mzai/sdk/lumigator_sdk/strict_schemas.py b/lumigator/lumigator/sdk/lumigator_sdk/strict_schemas.py similarity index 100% rename from lumigator/python/mzai/sdk/lumigator_sdk/strict_schemas.py rename to lumigator/lumigator/sdk/lumigator_sdk/strict_schemas.py diff --git a/lumigator/python/mzai/sdk/pyproject.toml b/lumigator/lumigator/sdk/pyproject.toml similarity index 100% rename from lumigator/python/mzai/sdk/pyproject.toml rename to lumigator/lumigator/sdk/pyproject.toml diff --git a/lumigator/lumigator/sdk/tests/__init__.py b/lumigator/lumigator/sdk/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lumigator/python/mzai/sdk/tests/conftest.py b/lumigator/lumigator/sdk/tests/conftest.py similarity index 100% rename from lumigator/python/mzai/sdk/tests/conftest.py rename to lumigator/lumigator/sdk/tests/conftest.py diff --git a/lumigator/python/mzai/sdk/tests/data/dataset.json b/lumigator/lumigator/sdk/tests/data/dataset.json similarity index 99% rename from lumigator/python/mzai/sdk/tests/data/dataset.json rename to lumigator/lumigator/sdk/tests/data/dataset.json index ffedba94..7547bbfe 100644 --- a/lumigator/python/mzai/sdk/tests/data/dataset.json +++ b/lumigator/lumigator/sdk/tests/data/dataset.json @@ -8,4 +8,4 @@ "size": 16, "ground_truth": true, "created_at": "2024-09-26T11:52:05" -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/datasets.json b/lumigator/lumigator/sdk/tests/data/datasets.json similarity index 99% rename from lumigator/python/mzai/sdk/tests/data/datasets.json rename to lumigator/lumigator/sdk/tests/data/datasets.json index e0884244..6084759f 100644 --- a/lumigator/python/mzai/sdk/tests/data/datasets.json +++ b/lumigator/lumigator/sdk/tests/data/datasets.json @@ -35,4 +35,4 @@ "created_at": "2024-09-26T11:52:05" } ] -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiment-download-no-experiment.json b/lumigator/lumigator/sdk/tests/data/experiment-download-no-experiment.json similarity index 97% rename from lumigator/python/mzai/sdk/tests/data/experiment-download-no-experiment.json rename to lumigator/lumigator/sdk/tests/data/experiment-download-no-experiment.json index 2e4f0258..1ea8dc98 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiment-download-no-experiment.json +++ b/lumigator/lumigator/sdk/tests/data/experiment-download-no-experiment.json @@ -1,3 +1,3 @@ { "detail": "No result available for experiment 'string' (status = 'JobStatus.CREATED')." -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiment-download.json b/lumigator/lumigator/sdk/tests/data/experiment-download.json similarity index 98% rename from lumigator/python/mzai/sdk/tests/data/experiment-download.json rename to lumigator/lumigator/sdk/tests/data/experiment-download.json index 6cac067c..f74fc521 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiment-download.json +++ b/lumigator/lumigator/sdk/tests/data/experiment-download.json @@ -1,4 +1,4 @@ { "id": "1e23ed9f-b193-444e-8427-e2119a08b0d8", "download_url": "http://mozilla.ai/results/some-result.csv?X-Key=ABCDEF" -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiment-missing.json b/lumigator/lumigator/sdk/tests/data/experiment-missing.json similarity index 97% rename from lumigator/python/mzai/sdk/tests/data/experiment-missing.json rename to lumigator/lumigator/sdk/tests/data/experiment-missing.json index c4cecef5..44df119a 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiment-missing.json +++ b/lumigator/lumigator/sdk/tests/data/experiment-missing.json @@ -1,3 +1,3 @@ { "detail": "Experiment e3be6e4b-dd1e-43b7-a97b-0d47dcc49a11 not found." -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiment-post-all.json b/lumigator/lumigator/sdk/tests/data/experiment-post-all.json similarity index 99% rename from lumigator/python/mzai/sdk/tests/data/experiment-post-all.json rename to lumigator/lumigator/sdk/tests/data/experiment-post-all.json index cc2e9a2c..6eba26a3 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiment-post-all.json +++ b/lumigator/lumigator/sdk/tests/data/experiment-post-all.json @@ -5,4 +5,4 @@ "dataset": "daab39ac-be9f-4de9-87c0-c4c94b297a97", "max_samples": 1000, "system_prompt": "This is a test template. Just generate something interesting." -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiment-post-response.json b/lumigator/lumigator/sdk/tests/data/experiment-post-response.json similarity index 99% rename from lumigator/python/mzai/sdk/tests/data/experiment-post-response.json rename to lumigator/lumigator/sdk/tests/data/experiment-post-response.json index c13f6066..c181e0c3 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiment-post-response.json +++ b/lumigator/lumigator/sdk/tests/data/experiment-post-response.json @@ -5,4 +5,4 @@ "status": "created", "created_at": "2024-10-01T19:01:45.080000Z", "updated_at": null -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiment-post-simple.json b/lumigator/lumigator/sdk/tests/data/experiment-post-simple.json similarity index 98% rename from lumigator/python/mzai/sdk/tests/data/experiment-post-simple.json rename to lumigator/lumigator/sdk/tests/data/experiment-post-simple.json index 28cd40f8..da4b6395 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiment-post-simple.json +++ b/lumigator/lumigator/sdk/tests/data/experiment-post-simple.json @@ -3,4 +3,4 @@ "description": "test experiment", "model": "hf://facebook/bart-large-cnn", "dataset": "daab39ac-be9f-4de9-87c0-c4c94b297a97" -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiment-result-no-experiment.json b/lumigator/lumigator/sdk/tests/data/experiment-result-no-experiment.json similarity index 97% rename from lumigator/python/mzai/sdk/tests/data/experiment-result-no-experiment.json rename to lumigator/lumigator/sdk/tests/data/experiment-result-no-experiment.json index afbe9b08..bfb2def8 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiment-result-no-experiment.json +++ b/lumigator/lumigator/sdk/tests/data/experiment-result-no-experiment.json @@ -1,3 +1,3 @@ { "detail": "Experiment 71aaf905-4bea-4d19-ad06-214202165814 not found." -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiment-result.json b/lumigator/lumigator/sdk/tests/data/experiment-result.json similarity index 98% rename from lumigator/python/mzai/sdk/tests/data/experiment-result.json rename to lumigator/lumigator/sdk/tests/data/experiment-result.json index 43491e13..de397cb0 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiment-result.json +++ b/lumigator/lumigator/sdk/tests/data/experiment-result.json @@ -1,4 +1,4 @@ { "id": "e3be6e4b-dd1e-43b7-a97b-0d47dcc49a4f", "experiment_id": "1e23ed9f-b193-444e-8427-e2119a08b0d8" -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiment.json b/lumigator/lumigator/sdk/tests/data/experiment.json similarity index 98% rename from lumigator/python/mzai/sdk/tests/data/experiment.json rename to lumigator/lumigator/sdk/tests/data/experiment.json index d4b393df..c89272aa 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiment.json +++ b/lumigator/lumigator/sdk/tests/data/experiment.json @@ -4,4 +4,4 @@ "description": "experiment without update", "status": "created", "created_at": "2024-10-01T19:01:45.080000Z" -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/experiments.json b/lumigator/lumigator/sdk/tests/data/experiments.json similarity index 99% rename from lumigator/python/mzai/sdk/tests/data/experiments.json rename to lumigator/lumigator/sdk/tests/data/experiments.json index ee20b9a4..a98ab8d7 100644 --- a/lumigator/python/mzai/sdk/tests/data/experiments.json +++ b/lumigator/lumigator/sdk/tests/data/experiments.json @@ -15,4 +15,4 @@ "created_at": "2024-10-01T19:01:45.080000Z", "updated_at": "2024-10-01T19:05:45.080000Z" } -] \ No newline at end of file +] diff --git a/lumigator/python/mzai/sdk/tests/data/job-all.json b/lumigator/lumigator/sdk/tests/data/job-all.json similarity index 100% rename from lumigator/python/mzai/sdk/tests/data/job-all.json rename to lumigator/lumigator/sdk/tests/data/job-all.json diff --git a/lumigator/python/mzai/sdk/tests/data/job-extra.json b/lumigator/lumigator/sdk/tests/data/job-extra.json similarity index 97% rename from lumigator/python/mzai/sdk/tests/data/job-extra.json rename to lumigator/lumigator/sdk/tests/data/job-extra.json index b92e4df8..21717c4c 100644 --- a/lumigator/python/mzai/sdk/tests/data/job-extra.json +++ b/lumigator/lumigator/sdk/tests/data/job-extra.json @@ -4,4 +4,4 @@ "model": "some_model", "dataset": "6f6487ac-7170-4a11-af7a-0f6db1ec9a74", "extra": "data" - } \ No newline at end of file + } diff --git a/lumigator/python/mzai/sdk/tests/data/job-minimal.json b/lumigator/lumigator/sdk/tests/data/job-minimal.json similarity index 97% rename from lumigator/python/mzai/sdk/tests/data/job-minimal.json rename to lumigator/lumigator/sdk/tests/data/job-minimal.json index 8634a8bc..ae3f337c 100644 --- a/lumigator/python/mzai/sdk/tests/data/job-minimal.json +++ b/lumigator/lumigator/sdk/tests/data/job-minimal.json @@ -3,4 +3,4 @@ "description": "This is a test job", "model": "some_model", "dataset": "6f6487ac-7170-4a11-af7a-0f6db1ec9a74" - } \ No newline at end of file + } diff --git a/lumigator/python/mzai/sdk/tests/data/job-resp.json b/lumigator/lumigator/sdk/tests/data/job-resp.json similarity index 99% rename from lumigator/python/mzai/sdk/tests/data/job-resp.json rename to lumigator/lumigator/sdk/tests/data/job-resp.json index 51405417..b20625ac 100644 --- a/lumigator/python/mzai/sdk/tests/data/job-resp.json +++ b/lumigator/lumigator/sdk/tests/data/job-resp.json @@ -5,4 +5,4 @@ "status": "created", "created_at": "2024-10-01T19:01:45.080000Z", "updated_at": "2024-10-01T19:04:34.727000Z" -} \ No newline at end of file +} diff --git a/lumigator/python/mzai/sdk/tests/data/job-submit-resp.json b/lumigator/lumigator/sdk/tests/data/job-submit-resp.json similarity index 100% rename from lumigator/python/mzai/sdk/tests/data/job-submit-resp.json rename to lumigator/lumigator/sdk/tests/data/job-submit-resp.json diff --git a/lumigator/python/mzai/sdk/tests/data/job.json b/lumigator/lumigator/sdk/tests/data/job.json similarity index 100% rename from lumigator/python/mzai/sdk/tests/data/job.json rename to lumigator/lumigator/sdk/tests/data/job.json diff --git a/lumigator/python/mzai/sdk/tests/data/jobs-submit.json b/lumigator/lumigator/sdk/tests/data/jobs-submit.json similarity index 99% rename from lumigator/python/mzai/sdk/tests/data/jobs-submit.json rename to lumigator/lumigator/sdk/tests/data/jobs-submit.json index aa3aace8..25d49a12 100644 --- a/lumigator/python/mzai/sdk/tests/data/jobs-submit.json +++ b/lumigator/lumigator/sdk/tests/data/jobs-submit.json @@ -101,4 +101,4 @@ "driver_node_id": "bb961a432bd4ad649fa987d739945e38c23406747ce30dd1102c22e1", "driver_exit_code": 1 } -] \ No newline at end of file +] diff --git a/lumigator/python/mzai/sdk/tests/data/jobs.json b/lumigator/lumigator/sdk/tests/data/jobs.json similarity index 100% rename from lumigator/python/mzai/sdk/tests/data/jobs.json rename to lumigator/lumigator/sdk/tests/data/jobs.json diff --git a/lumigator/python/mzai/sdk/tests/data/models.json b/lumigator/lumigator/sdk/tests/data/models.json similarity index 100% rename from lumigator/python/mzai/sdk/tests/data/models.json rename to lumigator/lumigator/sdk/tests/data/models.json diff --git a/lumigator/python/mzai/sdk/tests/helpers.py b/lumigator/lumigator/sdk/tests/helpers.py similarity index 100% rename from lumigator/python/mzai/sdk/tests/helpers.py rename to lumigator/lumigator/sdk/tests/helpers.py diff --git a/lumigator/python/mzai/sdk/tests/integration/test_scenarios.py b/lumigator/lumigator/sdk/tests/integration/test_scenarios.py similarity index 100% rename from lumigator/python/mzai/sdk/tests/integration/test_scenarios.py rename to lumigator/lumigator/sdk/tests/integration/test_scenarios.py diff --git a/lumigator/python/mzai/sdk/tests/unit/test_completions.py b/lumigator/lumigator/sdk/tests/unit/test_completions.py similarity index 100% rename from lumigator/python/mzai/sdk/tests/unit/test_completions.py rename to lumigator/lumigator/sdk/tests/unit/test_completions.py diff --git a/lumigator/python/mzai/sdk/tests/unit/test_datasets.py b/lumigator/lumigator/sdk/tests/unit/test_datasets.py similarity index 96% rename from lumigator/python/mzai/sdk/tests/unit/test_datasets.py rename to lumigator/lumigator/sdk/tests/unit/test_datasets.py index 6afcc6a1..2a11151e 100644 --- a/lumigator/python/mzai/sdk/tests/unit/test_datasets.py +++ b/lumigator/lumigator/sdk/tests/unit/test_datasets.py @@ -58,9 +58,7 @@ def test_delete_dataset_ok(lumi_client, json_data_dataset, request_mock): lumi_client.datasets.delete_dataset(UUID(data["id"])) -def test_delete_dataset_not_found( - lumi_client, json_data_dataset, request_mock -): +def test_delete_dataset_not_found(lumi_client, json_data_dataset, request_mock): data = load_json(json_data_dataset) request_mock.delete( url=lumi_client.client._api_url + f'/{Datasets.DATASETS_ROUTE}/{data["id"]}', diff --git a/lumigator/python/mzai/sdk/tests/unit/test_health.py b/lumigator/lumigator/sdk/tests/unit/test_health.py similarity index 91% rename from lumigator/python/mzai/sdk/tests/unit/test_health.py rename to lumigator/lumigator/sdk/tests/unit/test_health.py index 3092c502..70e88908 100644 --- a/lumigator/python/mzai/sdk/tests/unit/test_health.py +++ b/lumigator/lumigator/sdk/tests/unit/test_health.py @@ -25,10 +25,7 @@ def test_sdk_healthcheck_server_error(lumi_client, request_mock): response = Response() response.status_code = HTTPStatus.INTERNAL_SERVER_ERROR error = HTTPError(response=response) - request_mock.get( - url=lumi_client.client._api_url + f"/{Health.HEALTH_ROUTE}", - exc=error - ) + request_mock.get(url=lumi_client.client._api_url + f"/{Health.HEALTH_ROUTE}", exc=error) with raises(HTTPError): result = lumi_client.health.healthcheck() print(result) diff --git a/lumigator/python/mzai/sdk/tests/unit/test_jobs.py b/lumigator/lumigator/sdk/tests/unit/test_jobs.py similarity index 100% rename from lumigator/python/mzai/sdk/tests/unit/test_jobs.py rename to lumigator/lumigator/sdk/tests/unit/test_jobs.py diff --git a/lumigator/python/mzai/sdk/tests/unit/test_models.py b/lumigator/lumigator/sdk/tests/unit/test_models.py similarity index 80% rename from lumigator/python/mzai/sdk/tests/unit/test_models.py rename to lumigator/lumigator/sdk/tests/unit/test_models.py index e96864b3..319be613 100644 --- a/lumigator/python/mzai/sdk/tests/unit/test_models.py +++ b/lumigator/lumigator/sdk/tests/unit/test_models.py @@ -7,9 +7,7 @@ from tests.helpers import load_json -def test_sdk_suggested_models_ok( - lumi_client, json_data_models, request_mock -): +def test_sdk_suggested_models_ok(lumi_client, json_data_models, request_mock): task = "summarization" request_mock.get( url=lumi_client.client._api_url + f"/{Models.MODELS_ROUTE}/{task}", @@ -27,10 +25,7 @@ def test_sdk_suggested_models_invalid_task(lumi_client, request_mock): response = Response() response.status_code = HTTPStatus.BAD_REQUEST error = HTTPError(response=response) - request_mock.get( - url=lumi_client.client._api_url + f"/{Models.MODELS_ROUTE}/{task}", - exc = error - ) + request_mock.get(url=lumi_client.client._api_url + f"/{Models.MODELS_ROUTE}/{task}", exc=error) with raises(HTTPError): lumi_client.models.get_suggested_models(task) diff --git a/lumigator/python/mzai/sdk/uv.lock b/lumigator/lumigator/sdk/uv.lock similarity index 100% rename from lumigator/python/mzai/sdk/uv.lock rename to lumigator/lumigator/sdk/uv.lock diff --git a/lumigator/python/mzai/jobs/evaluator/evaluator/__init__.py b/lumigator/python/mzai/jobs/evaluator/evaluator/__init__.py deleted file mode 100644 index 8b137891..00000000 --- a/lumigator/python/mzai/jobs/evaluator/evaluator/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/notebooks/requirements.txt b/notebooks/requirements.txt index 602ab9d4..2c880357 100644 --- a/notebooks/requirements.txt +++ b/notebooks/requirements.txt @@ -1,5 +1,5 @@ --e ../lumigator/python/mzai/schemas --e ../lumigator/python/mzai/sdk +-e ../lumigator/lumigator/schemas +-e ../lumigator/lumigator/sdk datasets==2.20.0 ipywidgets==8.1.3 jupyterlab==4.2.5 From bccd772e1b4bb65724ac70fe8be9f57c6fcc3bd6 Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 15:49:07 -0500 Subject: [PATCH 02/21] Fix some paths --- docs/source/conceptual-guides/endpoints.md | 2 +- docs/source/get-started/installation.md | 4 ++-- docs/source/operations-guide/alembic.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/source/conceptual-guides/endpoints.md b/docs/source/conceptual-guides/endpoints.md index 4ac6cf22..7539e441 100644 --- a/docs/source/conceptual-guides/endpoints.md +++ b/docs/source/conceptual-guides/endpoints.md @@ -59,7 +59,7 @@ def get_health() -> HealthResponse: Note that the returned type is a `HealthResponse`: this is a [pydantic model](https://docs.pydantic.dev/latest/api/base_model/) defining the schema of the returned data. The general rule is that all return values in our routes should match a predefined -schema. Schemas are defined under the `schemas` directory (see: [health response in our source code](https://github.com/mozilla-ai/lumigator/blob/d87dc33b4578d1fe89277ba2412ab53857c9cad8/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)), +schema. Schemas are defined under the `schemas` directory (see: [health response in our source code](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)), typically in files with the same name of the route, service, etc. All the code for `get_health()` appears in the route file. A `HealthResponse`, composed of a diff --git a/docs/source/get-started/installation.md b/docs/source/get-started/installation.md index 3805ab8a..09bb791f 100644 --- a/docs/source/get-started/installation.md +++ b/docs/source/get-started/installation.md @@ -37,7 +37,7 @@ the repository for more details. Despite the fact this is a local setup, it lends itself to more distributed scenarios. For instance, one could provide different `AWS_*` environment variables to the backend container to connect to any provider's S3-compatible service, instead of minio. Similarly, one could provide a different -`RAY_HEAD_NODE_HOST` to move compute to a remote ray cluster, and so on. See [here](https://github.com/mozilla-ai/lumigator/blob/7be2518ec8c6bc59ab8463fc7c39aad078bbb386/docker-compose.external.yaml) for an example of how to do +`RAY_HEAD_NODE_HOST` to move compute to a remote ray cluster, and so on. See [here](https://github.com/mozilla-ai/lumigator/blob/{{commit_hash}}/docker-compose.external.yaml) for an example of how to do this. To deploy Lumigator locally: @@ -71,7 +71,7 @@ should receive the following JSON response: ```{note} If you need to change the port that the Lumigator service listens on, you can do it in the -[`docker-compose.yaml`](https://github.com/mozilla-ai/lumigator/blob/7be2518ec8c6bc59ab8463fc7c39aad078bbb386/docker-compose.yaml) +[`docker-compose.yaml`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/docker-compose.yaml) file. ``` diff --git a/docs/source/operations-guide/alembic.md b/docs/source/operations-guide/alembic.md index 86ebc428..c5189b6d 100644 --- a/docs/source/operations-guide/alembic.md +++ b/docs/source/operations-guide/alembic.md @@ -90,7 +90,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic stamp head ## My database is in a different state (from a prior release) This scenario requires manual review of the existing revisions stored in the -[versions folder](https://github.com/mozilla-ai/lumigator/tree/main/lumigator/lumigator/backend/backend/alembic/versions), +[versions folder](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/alembic/versions), to determine which revision ID represents the current state of the database containing the data. Revisions are stored in a format resembling a linked-list, with each revision containing a @@ -176,7 +176,7 @@ To create an empty revision that you populate manually: user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision -m "{Explanatory commit-like message}" ``` -This will create a new Python file under `[versions/](https://github.com/mozilla-ai/lumigator/tree/main/lumigator/lumigator/backend/backend/alembic/versions)`. +This will create a new Python file under `[versions/](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/alembic/versions)`. For example: From d25a75de1e9f14a2bbb4ff8435bf6f3b587a725c Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 15:55:00 -0500 Subject: [PATCH 03/21] more cleanup --- docs/source/conceptual-guides/quickstart.md | 285 -------------------- docs/source/conceptual-guides/ui-guide.md | 55 ---- docs/source/conf.py | 6 +- docs/source/operations-guide/alembic.md | 2 +- 4 files changed, 4 insertions(+), 344 deletions(-) delete mode 100644 docs/source/conceptual-guides/quickstart.md delete mode 100644 docs/source/conceptual-guides/ui-guide.md diff --git a/docs/source/conceptual-guides/quickstart.md b/docs/source/conceptual-guides/quickstart.md deleted file mode 100644 index 03410479..00000000 --- a/docs/source/conceptual-guides/quickstart.md +++ /dev/null @@ -1,285 +0,0 @@ -# Quickstart - -Now that you have a local deployment of Lumigator, you can start using it. In this quickstart guide, -we will show you how to upload a dataset and create a simple evaluation job. Finally, we'll show you -how to retrieve the results of the evaluation job. - -## Upload a Dataset - -The Lumigator backend provides an API endpoint for uploading datasets and running evaluation jobs. -To view the available endpoints, navigate to the API documentation page at -[`http://localhost:8000/docs`](http://localhost:8000/docs). - -There are a few ways to interact with the API; - -1. Test the endpoints via the OpenAPI documentation page at `http://localhost:8000/docs` -1. cURL commands. -1. The Lumigator Python SDK. - -We'll focus on the last two. - -To upload a dataset, you need to send a POST request to the `/datasets` endpoint. The request should -include the dataset file. Here is an example: - -::::{tab-set} - -:::{tab-item} cURL -:sync: tab1 -```console -user@host:~/lumigator$ curl -s http://localhost:8000/api/v1/datasets/ \ - -H 'Accept: application/json' \ - -H 'Content-Type: multipart/form-data' \ - -F 'dataset=@'"path/to/dataset.csv"';type=text/csv' \ - -F 'format=experiment' | jq -{ - "id": "dd15bbaa-8d6f-44ae-a995-b3b78f4ea6fb", - "filename": "dataset.csv", - "format": "experiment", - "size": 180528, - "ground_truth": true, - "created_at": "2024-10-30T12:10:18" -} -``` -::: - -:::{tab-item} Python SDK -:sync: tab2 -```python -from lumigator_sdk.lumigator import LumigatorClient -from lumigator_schemas.datasets import DatasetFormat - -dataset_path = 'path/to/dataset.csv' -lm_client = LumigatorClient('localhost:8000') - -response = lm_client.datasets.create_dataset( - open(dataset_path, 'rb'), - DatasetFormat.JOB -) -``` -::: - -:::: - -```{note} -The dataset file should be in CSV format and contain a header row with the following columns: -`examples`, `ground_truth`. The `ground_truth` column is optional since you can generate it using -Lumigator. See [here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/blob/{{ commit_hash }}/sample_data/dialogsum_exc.csv#L4) -for an example. -``` - -You can verify that the dataset was uploaded successfully by asking the API to list all datasets and -checking that the uploaded dataset is in the list: - -::::{tab-set} - -:::{tab-item} cURL -:sync: tab1 -```console -user@host:~/lumigator$ curl -s http://localhost:8000/api/v1/datasets/ | jq -r '.items | .[] | .filename' -dataset.csv -``` -::: - -:::{tab-item} Python SDK -:sync: tab2 -```python -datasets = lm_client.datasets.get_datasets() -print(datasets.items[-1].filename) -``` -::: - -:::: - -## Create an Evaluation Job - -Now that you have uploaded a dataset, you can create an evaluation job. To this end, you need to -send a POST request to the `/jobs/evaluate` endpoint. The request should include the following -required fields: - -- A name for the evaluation job. -- A short description for tracking purposes. -- The name of the model you want to evaluate. -- The ID of the dataset you want to use for evaluation. -- The maximum number of examples to use for evaluation. - -Here is an example of how to create an evaluation job: - -::::{tab-set} - -:::{tab-item} cURL -:sync: tab1 - -Set the following variables: -```console -user@host:~/lumigator$ export EVAL_NAME="test_run_hugging_face" \ - EVAL_DESC="Test run for Huggingface model" \ - EVAL_MODEL="hf://facebook/bart-large-cnn" \ - EVAL_DATASET="$(curl -s http://localhost:8000/api/v1/datasets/ | jq -r '.items | .[0].id')" \ - EVAL_MAX_SAMPLES="10" -``` - -Define the JSON string: -```console -user@host:~/lumigator$ export JSON_STRING=$(jq -n \ - --arg name "$EVAL_NAME" \ - --arg desc "$EVAL_DESC" \ - --arg model "$EVAL_MODEL" \ - --arg dataset_id "$EVAL_DATASET" \ - --arg max_samples "$EVAL_MAX_SAMPLES" \ - '{name: $name, description: $desc, model: $model, dataset: $dataset_id, max_samples: $max_samples}' -) -``` - -Create the evaluation job: -```console -user@host:~/lumigator$ curl -s http://localhost:8000/api/v1/jobs/evaluate/ \ - -H 'Accept: application/json' \ - -H 'Content-Type: application/json' \ - -d "$JSON_STRING" | jq -{ - "id": "3f15667d-d2e7-459b-9c22-3da2d236b406", - "name": "test_run_hugging_face", - "description": "Test run for Huggingface model", - "status": "created", - "created_at": "2024-10-31T09:07:43", - "updated_at": null -} -``` - -::: - -:::{tab-item} Python SDK -:sync: tab2 -```python -from lumigator_schemas.jobs import JobType, JobEvalCreate - -dataset_id = datasets.items[-1].id - -models = ['hf://facebook/bart-large-cnn',] - -# set this value to limit the evaluation to the first max_samples items (0=all) -max_samples = 10 -# team_name is a way to group jobs together under the same namespace, feel free to customize it -team_name = "lumigator_enthusiasts" - -responses = [] -for model in models: - job_args = JobEvalCreate( - name=team_name, - description="Test", - model=model, - dataset=str(dataset_id), - max_samples=max_samples - ) - # descr = f"Testing {model} summarization model on {dataset_name}" - responses.append(lm_client.jobs.create_job(JobType.EVALUATION, job_args)) -``` -::: - -:::: - -## Track the Evaluation Job - -You can track the status of the evaluation job by sending a GET request to the `/jobs/{job_id}` -endpoint, or by using th Lumigator Python SDK. Here is an example of how to track the evaluation -job: - -::::{tab-set} - -:::{tab-item} cURL -:sync: tab1 - -Get the job's submission ID: - -```console -user@host:~/lumigator$ export SUBMISSION_ID=$(curl -s http://localhost:8000/api/v1/health/jobs/ | jq -r 'sort_by(.start_time) | reverse | .[0] | .submission_id') -``` - -Track the job: - -```console -user@host:~/lumigator$ curl -s "http://localhost:8000/api/v1/health/jobs/$SUBMISSION_ID" \ - -H 'Accept: application/json' | jq -{ - "type": "SUBMISSION", - "job_id": null, - "submission_id": "5195c9a5-938d-475e-b0fc-cf866492909d", - "driver_info": null, - "status": "SUCCEEDED", - ... -} -``` - -::: - -:::{tab-item} Python SDK -:sync: tab2 -```python -from pprint import pprint -job_id = responses[0].id - -job = lm_client.jobs.wait_for_job(job_id) # Create the coroutine object -pprint(job) -``` -::: - -:::: - -## Retrieve the Results - -Once the evaluation job is complete, you can retrieve the results by sending a GET request to the -`/jobs/{job_id}/result/download` endpoint, or by using the Lumigator Python SDK. This will return a -URI that you can use to download the results. Here is an example of how to retrieve the results: - -::::{tab-set} - -:::{tab-item} cURL -:sync: tab1 - -```console -user@host:~/lumigator$ curl -s http://localhost:8000/api/v1/jobs/$SUBMISSION_ID/result/download \ - -H 'accept: application/json' | jq -{ - "id": "5195c9a5-938d-475e-b0fc-cf866492909d", - "download_url": "http://localhost:9000/lumigator-storage/jobs/results/lumigator_enthusiasts/5195c9a5-938d-475e-b0fc-cf866492909d/results.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=test%2F20241031%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Date=20241031T104126Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=0309fe4825bc2358180c607a4a4ad4e8d36946133574d8b9416df228ce62944e" -} -``` - -::: - -:::{tab-item} Python SDK -:sync: tab2 -```python -import requests - -eval_result = lm_client.jobs.get_job_download(job_id) -response = requests.request(url=eval_result.download_url, method="GET") -``` -::: - -:::: - -The metrics we use to evaluate are ROUGE, METEOR, and BERT score. They all measure similarity -between predicted summaries and those provided with the ground truth, but each of them focuses on -different aspects: - -- [ROUGE](https://aclanthology.org/W04-1013.pdf) - (Recall-Oriented Understudy for Gisting - Evaluation), which compares an automatically-generated summary to one generated by a machine - learning model on a score of `0` to `1` in a range of metrics comparing statistical similarity of - two texts. -- [METEOR](https://aclanthology.org/W05-0909.pdf) - Looks at the harmonic mean of precision and - recall. -- [BERTScore](https://openreview.net/pdf?id=SkeHuCVFDr) - Generates embeddings of ground truth input - and model output and compares their cosine similarity - -## Terminate Session -In order to shut down Lumigator, you can stop the containers that were [started](../get-started/installation.md) using Docker Compose. This can be done by simply running the following command: -```console -user@host:~/lumigator$ make stop-lumigator -``` - -## Next Steps - -Congratulations! You have successfully uploaded a dataset, created an evaluation job, and retrieved -the results. In the next section, we will show you how to deploy Lumigator on a distributed -environment. diff --git a/docs/source/conceptual-guides/ui-guide.md b/docs/source/conceptual-guides/ui-guide.md deleted file mode 100644 index bf22608f..00000000 --- a/docs/source/conceptual-guides/ui-guide.md +++ /dev/null @@ -1,55 +0,0 @@ -# Using Lumigator UI -Lumigator comes with a web-based UI that allows you to interact with the Lumigator API. It is designed to be easy to use and to provide a quick way to get started with Lumigator. - -## Getting Started -Follow the [installation guide](installation.md#local-deployment) to get Lumigator up and running. The UI can then be accessed by visiting [localhost](http://localhost) on your web browser. You should be able to see a screen with the sections **Datasets** and **Experiments**. Lets go through each of them in detail. - -## Upload a Dataset -The main purpose of Lumigator is to help you select a model that works well for your particular data. It does this by evaluating multiple models on a sample of your data: your dataset. - -The first step is to upload your dataset. This can be done by clicking on the **Provide Dataset** button in the **Datasets** section. This will open a dialog box where you can select the dataset file to be uploaded from your local machine. The dataset file should be in `csv` format with columns examples and (optionally) ground_truth. - -You can get started by uploading the [sample dataset](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/blob/{{ commit_hash }}/sample_data/dialogsum_exc.csv) provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). - -![Datasets Page](../../assets/ui_guide_steps/datasets_page.png) - -Once the dataset is uploaded, it can be viewed as a row in the table in the **Datasets** section. - -![Datasets Table](../../assets/ui_guide_steps/datasets_table.png) - -## Create and Run an Experiment -Next we move on to the **Experiments** section. Start by clicking on the **Create Experiment** button. - -![Experiments Page](../../assets/ui_guide_steps/experiments_page.png) - -This will open a sidebar where you would specify which use case and dataset, and further experiment details. The maximum samples field defines the number of rows from the dataset to be used for the experiment, on which Lumigator would run inference and evaluation to produce as results the [relevent metrics](quickstart.md#retrieve-the-results). - -Below that, you have the option to select the models to be used for the experiment. Multiple models may be simultaneously selected. - -| ![Experiment Fields](../../assets/ui_guide_steps/experiment_fields.png) | ![Model Selection](../../assets/ui_guide_steps/model_select.png) | -| --- | --- | - -```{note} -Reminder: In order to be able to use API based models, you must have provided the respective API keys (`OPENAI_API_KEY` or `MISTRAL_API_KEY`) as environment variables before starting Lumigator. See more in the [installation guide](installation.md). -``` - -Finally click the **Run Experiment** button. - -![Experiments Running](../../assets/ui_guide_steps/experiments_running.png) - -The **Experiments** page gets populated with the experiment details and the status of the experiment, which would initially be `RUNNING` and changes to `SUCCEEDED` once the experiment is complete or `FAILED` if the experiment fails. - -![Experiments Completed](../../assets/ui_guide_steps/experiments_completed.png) - -## View Results -For each experiment, you can view the sidebar which contains a **View Results** button. On clicking this button, we would be able to see a table with evaluation metrics comparing the previously selected models. - -![Results Overall Comparison](../../assets/ui_guide_steps/results_overall_comparison.png) - -You can further view the row by row predictions for each individual model by expanding under a given model. This gives you a detailed view of how the model predictions compare to the ground truth for each instance in the dataset. - -![Results Row by Row Comparison](../../assets/ui_guide_steps/results_row_by_row.png) - ---- - -Congratulations! With that, you have successfully run your first experiment using the Lumigator UI! You can continue to run more experiments by uploading your custom datasets and selecting from among the different models available. diff --git a/docs/source/conf.py b/docs/source/conf.py index dd295880..70a980d0 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -7,6 +7,9 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information import os + +# Get the commit hash from the environment variable +commit_hash = os.environ.get("commit_hash", "main") import sys from pathlib import Path @@ -25,9 +28,6 @@ # see: https://github.com/pydantic/pydantic/discussions/7763#discussioncomment-8417097 from lumigator_sdk import jobs, lm_datasets, models # noqa: F401, E402 -# Get the commit hash from the environment variable -commit_hash = os.environ.get("commit_hash", "main") - project = "Lumigator 🐊" copyright = "2024, Mozilla AI" author = "Mozilla AI Engineering" diff --git a/docs/source/operations-guide/alembic.md b/docs/source/operations-guide/alembic.md index c5189b6d..eb200aaf 100644 --- a/docs/source/operations-guide/alembic.md +++ b/docs/source/operations-guide/alembic.md @@ -28,7 +28,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic --version When code changes are made to the data models, or when new models are added, a manual step is required in order to ensure that the models are visible to Alembic. -First, the imports at the top of [`env.py`](https://github.com/mozilla-ai/lumigator/blob/main/lumigator/lumigator/backend/backend/alembic/env.py) +First, the imports at the top of [`env.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/alembic/env.py) **MUST** import your package: `from backend.records.{package} import * # noqa: F403` From 871fb7d3a59519538455aad4dcbd7dc38a125de2 Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 16:00:30 -0500 Subject: [PATCH 04/21] fix links --- docs/source/conf.py | 6 +++--- lumigator/lumigator/sdk/tests/data/job-submit-resp.json | 2 +- lumigator/lumigator/sdk/tests/data/jobs-submit.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 70a980d0..5bffde59 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -9,15 +9,15 @@ import os # Get the commit hash from the environment variable -commit_hash = os.environ.get("commit_hash", "main") +commit_hash = os.environ["commit_hash"] import sys from pathlib import Path # patch the Sphinx run so that it can operate directly on the sources # see: https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#ensuring-the-code-can-be-imported module_paths = [ - Path("..", "..", "lumigator", "python", "mzai", "sdk").resolve(), - Path("..", "..", "lumigator", "python", "mzai", "schemas").resolve(), + Path("..", "..", "lumigator", "sdk").resolve(), + Path("..", "..", "lumigator", "schemas").resolve(), ] for path in module_paths: diff --git a/lumigator/lumigator/sdk/tests/data/job-submit-resp.json b/lumigator/lumigator/sdk/tests/data/job-submit-resp.json index 3b9c5803..688afd87 100644 --- a/lumigator/lumigator/sdk/tests/data/job-submit-resp.json +++ b/lumigator/lumigator/sdk/tests/data/job-submit-resp.json @@ -4,7 +4,7 @@ "submission_id": "6f6487ac-7170-4a11-af7a-0f6db1ec9a74", "driver_info": null, "status": "FAILED", - "entrypoint": "python -m lumigator.python.mzai.evaluator evaluate huggingface --config '{\"name\": \"test_run_hugging_face/6f6487ac-7170-4a11-af7a-0f6db1ec9a74\", \"model\": {\"path\": \"hf://facebook/bart-large-cnn\"}, \"tokenizer\": {\"path\": \"hf://facebook/bart-large-cnn\", \"mod_max_length\": 1024}, \"dataset\": {\"path\": \"s3://lumigator-storage/datasets/131ce97c-f89e-4fab-a2cf-9593adadce10/thunderbird_gt_bart.csv\"}, \"evaluation\": {\"metrics\": [\"rouge\", \"meteor\", \"bertscore\"], \"use_pipeline\": true, \"max_samples\": 10, \"return_input_data\": true, \"return_predictions\": true, \"storage_path\": \"s3://lumigator-storage/experiments/results/\"}}'", + "entrypoint": "python -m lumigator.lumigator.evaluator evaluate huggingface --config '{\"name\": \"test_run_hugging_face/6f6487ac-7170-4a11-af7a-0f6db1ec9a74\", \"model\": {\"path\": \"hf://facebook/bart-large-cnn\"}, \"tokenizer\": {\"path\": \"hf://facebook/bart-large-cnn\", \"mod_max_length\": 1024}, \"dataset\": {\"path\": \"s3://lumigator-storage/datasets/131ce97c-f89e-4fab-a2cf-9593adadce10/thunderbird_gt_bart.csv\"}, \"evaluation\": {\"metrics\": [\"rouge\", \"meteor\", \"bertscore\"], \"use_pipeline\": true, \"max_samples\": 10, \"return_input_data\": true, \"return_predictions\": true, \"storage_path\": \"s3://lumigator-storage/experiments/results/\"}}'", "message": "I am another message", "error_type": null, "start_time": "2024-10-01T19:01:45.080000Z", diff --git a/lumigator/lumigator/sdk/tests/data/jobs-submit.json b/lumigator/lumigator/sdk/tests/data/jobs-submit.json index 25d49a12..0a513edb 100644 --- a/lumigator/lumigator/sdk/tests/data/jobs-submit.json +++ b/lumigator/lumigator/sdk/tests/data/jobs-submit.json @@ -5,7 +5,7 @@ "submission_id": "6f6487ac-7170-4a11-af7a-0f6db1ec9a75", "driver_info": null, "status": "FAILED", - "entrypoint": "python -m lumigator.python.mzai.evaluator evaluate huggingface --config '{\"name\": \"test_run_hugging_face/6f6487ac-7170-4a11-af7a-0f6db1ec9a74\", \"model\": {\"path\": \"hf://facebook/bart-large-cnn\"}, \"tokenizer\": {\"path\": \"hf://facebook/bart-large-cnn\", \"mod_max_length\": 1024}, \"dataset\": {\"path\": \"s3://lumigator-storage/datasets/131ce97c-f89e-4fab-a2cf-9593adadce10/thunderbird_gt_bart.csv\"}, \"evaluation\": {\"metrics\": [\"rouge\", \"meteor\", \"bertscore\"], \"use_pipeline\": true, \"max_samples\": 10, \"return_input_data\": true, \"return_predictions\": true, \"storage_path\": \"s3://lumigator-storage/experiments/results/\"}}'", + "entrypoint": "python -m lumigator.lumigator.evaluator evaluate huggingface --config '{\"name\": \"test_run_hugging_face/6f6487ac-7170-4a11-af7a-0f6db1ec9a74\", \"model\": {\"path\": \"hf://facebook/bart-large-cnn\"}, \"tokenizer\": {\"path\": \"hf://facebook/bart-large-cnn\", \"mod_max_length\": 1024}, \"dataset\": {\"path\": \"s3://lumigator-storage/datasets/131ce97c-f89e-4fab-a2cf-9593adadce10/thunderbird_gt_bart.csv\"}, \"evaluation\": {\"metrics\": [\"rouge\", \"meteor\", \"bertscore\"], \"use_pipeline\": true, \"max_samples\": 10, \"return_input_data\": true, \"return_predictions\": true, \"storage_path\": \"s3://lumigator-storage/experiments/results/\"}}'", "message": "I am the message", "error_type": null, "start_time": "2024-10-01T19:01:45.080000Z", @@ -56,7 +56,7 @@ "submission_id": "6f6487ac-7170-4a11-af7a-0f6db1ec9a74", "driver_info": null, "status": "FAILED", - "entrypoint": "python -m lumigator.python.mzai.evaluator evaluate huggingface --config '{\"name\": \"test_run_hugging_face/6f6487ac-7170-4a11-af7a-0f6db1ec9a74\", \"model\": {\"path\": \"hf://facebook/bart-large-cnn\"}, \"tokenizer\": {\"path\": \"hf://facebook/bart-large-cnn\", \"mod_max_length\": 1024}, \"dataset\": {\"path\": \"s3://lumigator-storage/datasets/131ce97c-f89e-4fab-a2cf-9593adadce10/thunderbird_gt_bart.csv\"}, \"evaluation\": {\"metrics\": [\"rouge\", \"meteor\", \"bertscore\"], \"use_pipeline\": true, \"max_samples\": 10, \"return_input_data\": true, \"return_predictions\": true, \"storage_path\": \"s3://lumigator-storage/experiments/results/\"}}'", + "entrypoint": "python -m lumigator.lumigator.evaluator evaluate huggingface --config '{\"name\": \"test_run_hugging_face/6f6487ac-7170-4a11-af7a-0f6db1ec9a74\", \"model\": {\"path\": \"hf://facebook/bart-large-cnn\"}, \"tokenizer\": {\"path\": \"hf://facebook/bart-large-cnn\", \"mod_max_length\": 1024}, \"dataset\": {\"path\": \"s3://lumigator-storage/datasets/131ce97c-f89e-4fab-a2cf-9593adadce10/thunderbird_gt_bart.csv\"}, \"evaluation\": {\"metrics\": [\"rouge\", \"meteor\", \"bertscore\"], \"use_pipeline\": true, \"max_samples\": 10, \"return_input_data\": true, \"return_predictions\": true, \"storage_path\": \"s3://lumigator-storage/experiments/results/\"}}'", "message": "I am another message", "error_type": null, "start_time": "2024-10-01T19:01:45.080000Z", From 19d0ae1075a47d84abbcf9ea9e301909c6c556f0 Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 16:08:14 -0500 Subject: [PATCH 05/21] better dynamic hash --- docs/source/conceptual-guides/endpoints.md | 32 +++++++++---------- docs/source/conceptual-guides/new-endpoint.md | 10 +++--- docs/source/conf.py | 10 +++--- docs/source/get-started/installation.md | 6 ++-- docs/source/get-started/quickstart.md | 2 +- docs/source/get-started/ui-guide.md | 2 +- docs/source/operations-guide/alembic.md | 8 ++--- 7 files changed, 36 insertions(+), 34 deletions(-) diff --git a/docs/source/conceptual-guides/endpoints.md b/docs/source/conceptual-guides/endpoints.md index 7539e441..5d88c57b 100644 --- a/docs/source/conceptual-guides/endpoints.md +++ b/docs/source/conceptual-guides/endpoints.md @@ -13,16 +13,16 @@ cluster, SQL database, and S3-compatible Storage) are the different services Lum The components inside the backend, shown in the image below, are the different abstraction layers the backend itself relies on: -* The **API** makes backend functionalities available to the UI through different **routes** (see: [schema code](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/routes)). - [**Schemas**](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/schemas/schemas) +* The **API** makes backend functionalities available to the UI through different **routes** (see: [schema code](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/routes)). + [**Schemas**](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/schemas/schemas) are used in the API which allows one to exactly know which kind of data has to be passed to it. * **Services** implement the actual functionalities and are called by the different methods exposed - in the API (see: [backend services](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/services)). + in the API (see: [backend services](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/services)). * **Repositories** implement the [repository pattern](https://www.cosmicpython.com/book/chapter_02_repository.html) - as an abstraction over the SQL database (see: [code for repositories](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/repositories)). - They make use of [record classes](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/records) to refer to actual records in the database. + as an abstraction over the SQL database (see: [code for repositories](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/repositories)). + They make use of [record classes](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/records) to refer to actual records in the database. ![Lumigator Backend](../../assets/lumigator-backend.svg) @@ -36,17 +36,17 @@ trailing slash) will map to the absolute path from the root of the repo ## Lumigator endpoints All the endpoints you can access in Lumigator's API are defined in -[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/routes) +[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/routes) and explicitly listed in -[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/router.py), -together with a [metadata tag](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/tags.py) +[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/router.py), +together with a [metadata tag](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/tags.py) which is used to provide a short description of the route. Let us now walk through a few examples to understand how Lumigator's endpoints work. ### The simplest endpoint: `/health` -The [`/health`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/routes/health.py) +The [`/health`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/routes/health.py) route provides perhaps the simplest example as it allows you to get the current backend status which is a constant: @@ -59,12 +59,12 @@ def get_health() -> HealthResponse: Note that the returned type is a `HealthResponse`: this is a [pydantic model](https://docs.pydantic.dev/latest/api/base_model/) defining the schema of the returned data. The general rule is that all return values in our routes should match a predefined -schema. Schemas are defined under the `schemas` directory (see: [health response in our source code](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)), +schema. Schemas are defined under the `schemas` directory (see: [health response in our source code](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)), typically in files with the same name of the route, service, etc. All the code for `get_health()` appears in the route file. A `HealthResponse`, composed of a deployment type which is loaded from -[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/settings.py#L12) +[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/settings.py#L12) and the status (currently always ok), is returned. ### One step further: `/datasets` @@ -80,7 +80,7 @@ def get_dataset(service: DatasetServiceDep, dataset_id: UUID) -> DatasetResponse ``` * The core functionalities are provided by a *service* (in this case a `DatasetService`) defined in - [`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/services/datasets.py). + [`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/services/datasets.py). * Instead of directly passing a `DatasetService` to the `get_dataset` method, DatasetServiceDep is defined to perform a *dependency injection* (see: @@ -96,7 +96,7 @@ So, let us suppose you have already uploaded a dataset to Lumigator. What happen First thing, `DatasetServiceDep` will make sure that all the dependencies to run your `DatasetService` are met. If you look at -[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/deps.py) +[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/deps.py) you will see that a `DatasetServiceDep` is nothing more than a `DatasetService` that depends on a `DBSessionDep` and `S3ClientDep`: @@ -116,7 +116,7 @@ database session and on an S3 client. While the S3 dependency is a "simple" one (i.e., it just instantiates a boto3 client in place), the database one is a bit more advanced (i.e., it relies on a -[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/db.py) +[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/db.py) to return a session). Second, `DatasetService` provides a `get_dataset` method which gets the actual data from the @@ -137,10 +137,10 @@ def _get_dataset_record(self, dataset_id: UUID) -> DatasetRecord: We access the database using the `repository` abstraction `DatasetRepository` class. All repositories are defined in `backend/repositories` and inherit from -[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/repositories/base.py) +[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/repositories/base.py) which is a general class providing ORM access to SQL statements. In particular, the `DatasetRepository` is a `BaseRepository` working with items of type -[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/records/datasets.py). +[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/records/datasets.py). Fields in records are defined as a mix of explicit type definitions and declarative mappings (see the picture below to see how the fields in the datasets table are defined). diff --git a/docs/source/conceptual-guides/new-endpoint.md b/docs/source/conceptual-guides/new-endpoint.md index a2b9da3c..18a5b5b1 100644 --- a/docs/source/conceptual-guides/new-endpoint.md +++ b/docs/source/conceptual-guides/new-endpoint.md @@ -48,7 +48,7 @@ Being this the code for a new route, you will save it in `backend/api/routes/tas ### 1.2. Add the route to `router.py` with the appropriate tags The following step is adding the new route to -[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/router.py). +[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/router.py). The code below shows the updated file with comments next to the two lines marked below as **NEW**: ```python @@ -75,7 +75,7 @@ api_router.include_router(tasks.router, prefix="/tasks", tags=[Tags.TASKS]) # N ``` Also note that we are specifying some `Tags.TASKS` which have not been defined yet! Open -[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/tags.py) +[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/tags.py) and add the sections marked below as **NEW**: ```python @@ -184,7 +184,7 @@ class TaskRepository(BaseRepository[TaskRecord]): ``` This does not usually change much as long as you are fine with the base methods provided by the -[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/repositories/base.py) +[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/repositories/base.py) class. The `TaskRepository` is a repository that allows to run the set of methods defined in the @@ -204,7 +204,7 @@ class TaskRecord(BaseRecord, NameDescriptionMixin, CreatedAtMixin): ``` Similarly to what you saw before for `DatasetRecord`, `TaskRecord` inherits from -[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/records/base.py) +[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/records/base.py) the property of having an `id` primary key. In addition to that, it inherits `name` and `description` from `NameDescriptionMixin` and `created_at` from `CreatedAtMixin`. The only field that we need to specify manually is `models`, a non-null column holding a list of strings. @@ -301,7 +301,7 @@ endpoints (e.g. those which involve running ray jobs), but we'll discuss that in As `TaskService` depends on the existence of a database, we should inject a dependency on a DB session. To do this, add the following code to -[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/api/deps.py): +[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/deps.py): ```python def get_task_service(session: DBSessionDep) -> TaskService: diff --git a/docs/source/conf.py b/docs/source/conf.py index 5bffde59..40b37c5d 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -6,11 +6,8 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -import os - -# Get the commit hash from the environment variable -commit_hash = os.environ["commit_hash"] import sys +import subprocess from pathlib import Path # patch the Sphinx run so that it can operate directly on the sources @@ -33,6 +30,11 @@ author = "Mozilla AI Engineering" release = "0.0.1" +commit_hash = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('ascii') +# Add the commit_id to rst_epilog for substitution +rst_epilog = f""" +.. |commit_id| replace:: {commit_hash} +""" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration diff --git a/docs/source/get-started/installation.md b/docs/source/get-started/installation.md index 09bb791f..7753beb6 100644 --- a/docs/source/get-started/installation.md +++ b/docs/source/get-started/installation.md @@ -1,7 +1,7 @@ # Installation You can deploy Lumigator either locally or into a distributed environment using Kubernetes -[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/infra/helm/lumigator/README.md). +[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/infra/helm/lumigator/README.md). In this guide, we'll show you how to get started with a local deployment. ## Prerequisites @@ -37,7 +37,7 @@ the repository for more details. Despite the fact this is a local setup, it lends itself to more distributed scenarios. For instance, one could provide different `AWS_*` environment variables to the backend container to connect to any provider's S3-compatible service, instead of minio. Similarly, one could provide a different -`RAY_HEAD_NODE_HOST` to move compute to a remote ray cluster, and so on. See [here](https://github.com/mozilla-ai/lumigator/blob/{{commit_hash}}/docker-compose.external.yaml) for an example of how to do +`RAY_HEAD_NODE_HOST` to move compute to a remote ray cluster, and so on. See [here](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/docker-compose.external.yaml) for an example of how to do this. To deploy Lumigator locally: @@ -71,7 +71,7 @@ should receive the following JSON response: ```{note} If you need to change the port that the Lumigator service listens on, you can do it in the -[`docker-compose.yaml`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/docker-compose.yaml) +[`docker-compose.yaml`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/docker-compose.yaml) file. ``` diff --git a/docs/source/get-started/quickstart.md b/docs/source/get-started/quickstart.md index 7c8b80d0..fb120847 100644 --- a/docs/source/get-started/quickstart.md +++ b/docs/source/get-started/quickstart.md @@ -63,7 +63,7 @@ response = lm_client.datasets.create_dataset( ```{note} The dataset file should be in CSV format and contain a header row with the following columns: `examples`, `ground_truth`. The `ground_truth` column is optional since you can generate it using -Lumigator. See [here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/sample_data/dialogsum_exc.csv#L4) +Lumigator. See [here](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/sample_data/dialogsum_exc.csv#L4) for an example. ``` diff --git a/docs/source/get-started/ui-guide.md b/docs/source/get-started/ui-guide.md index 112a9575..d0446aff 100644 --- a/docs/source/get-started/ui-guide.md +++ b/docs/source/get-started/ui-guide.md @@ -9,7 +9,7 @@ The main purpose of Lumigator is to help you select a model that works well for The first step is to upload your dataset. This can be done by clicking on the **Provide Dataset** button in the **Datasets** section. This will open a dialog box where you can select the dataset file to be uploaded from your local machine. The dataset file should be in `csv` format with columns examples and (optionally) ground_truth. -You can get started by uploading the [sample dataset](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/sample_data/dialogsum_exc.csv) provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). +You can get started by uploading the [sample dataset](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/sample_data/dialogsum_exc.csv) provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). ![Datasets Page](../../assets/ui_guide_steps/datasets_page.png) diff --git a/docs/source/operations-guide/alembic.md b/docs/source/operations-guide/alembic.md index eb200aaf..0dcff2d0 100644 --- a/docs/source/operations-guide/alembic.md +++ b/docs/source/operations-guide/alembic.md @@ -28,7 +28,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic --version When code changes are made to the data models, or when new models are added, a manual step is required in order to ensure that the models are visible to Alembic. -First, the imports at the top of [`env.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/alembic/env.py) +First, the imports at the top of [`env.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/alembic/env.py) **MUST** import your package: `from backend.records.{package} import * # noqa: F403` @@ -60,7 +60,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ SQLALCHEMY_DATABASE_URL=sqlit The rest of the document assumes `SQLALCHEMY_DATABASE_URL` is exported. If `SQLALCHEMY_DATABASE_URL` is not present then a default of `sqlite:///local.db` will be used (see: -[here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/alembic.ini#L65)). +[here](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/alembic.ini#L65)). If you've followed the `README` for `backend`, you should have sourced the virtual environment. This means you can run the `alembic` command directly in the terminal. Alternatively, you can also run it @@ -90,7 +90,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic stamp head ## My database is in a different state (from a prior release) This scenario requires manual review of the existing revisions stored in the -[versions folder](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/alembic/versions), +[versions folder](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/alembic/versions), to determine which revision ID represents the current state of the database containing the data. Revisions are stored in a format resembling a linked-list, with each revision containing a @@ -176,7 +176,7 @@ To create an empty revision that you populate manually: user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision -m "{Explanatory commit-like message}" ``` -This will create a new Python file under `[versions/](https://github.com/mozilla-ai/lumigator/blob/{{ commit_hash }}/lumigator/lumigator/backend/backend/alembic/versions)`. +This will create a new Python file under `[versions/](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/alembic/versions)`. For example: From 4f6718bfbea8e8c0c936727d1fe8458d10f1df8c Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 16:10:35 -0500 Subject: [PATCH 06/21] handle md --- docs/source/conf.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 40b37c5d..d8c7560c 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -31,10 +31,17 @@ release = "0.0.1" commit_hash = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('ascii') -# Add the commit_id to rst_epilog for substitution + +# Add the commit_id to rst_epilog for substitution in reStructuredText files rst_epilog = f""" .. |commit_id| replace:: {commit_hash} """ + +# Add the commit_id to myst_substitutions for substitution in Markdown files +myst_substitutions = { + "commit_id": commit_hash +} + # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -65,4 +72,4 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = "sphinx_rtd_theme" -# html_static_path = ['_static'] +# html_static_path = ['_static'] \ No newline at end of file From e7c837e1722ca5807fbd922780a0c9167a0d3632 Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 16:11:45 -0500 Subject: [PATCH 07/21] i will make this work --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index d8c7560c..68557d16 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -39,7 +39,7 @@ # Add the commit_id to myst_substitutions for substitution in Markdown files myst_substitutions = { - "commit_id": commit_hash + "|commit_id|": commit_hash } # -- General configuration --------------------------------------------------- From 5e7042635d970f994b15f5178b50820373d3257d Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 16:17:28 -0500 Subject: [PATCH 08/21] enable substitutions --- docs/source/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 68557d16..09ee36af 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -60,6 +60,7 @@ myst_enable_extensions = [ "colon_fence", + "substitution", ] myst_heading_anchors = 3 From a580a20adc5164bb7fd320827cf0879496f759e0 Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 16:21:15 -0500 Subject: [PATCH 09/21] enable substitutions --- docs/source/conceptual-guides/endpoints.md | 32 +++++++++---------- docs/source/conceptual-guides/new-endpoint.md | 10 +++--- docs/source/conf.py | 6 ++-- docs/source/get-started/installation.md | 6 ++-- docs/source/get-started/quickstart.md | 2 +- docs/source/get-started/ui-guide.md | 2 +- docs/source/operations-guide/alembic.md | 8 ++--- frontend/Dockerfile | 2 +- 8 files changed, 34 insertions(+), 34 deletions(-) diff --git a/docs/source/conceptual-guides/endpoints.md b/docs/source/conceptual-guides/endpoints.md index 5d88c57b..218126e1 100644 --- a/docs/source/conceptual-guides/endpoints.md +++ b/docs/source/conceptual-guides/endpoints.md @@ -13,16 +13,16 @@ cluster, SQL database, and S3-compatible Storage) are the different services Lum The components inside the backend, shown in the image below, are the different abstraction layers the backend itself relies on: -* The **API** makes backend functionalities available to the UI through different **routes** (see: [schema code](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/routes)). - [**Schemas**](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/schemas/schemas) +* The **API** makes backend functionalities available to the UI through different **routes** (see: [schema code](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/routes)). + [**Schemas**](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/schemas/schemas) are used in the API which allows one to exactly know which kind of data has to be passed to it. * **Services** implement the actual functionalities and are called by the different methods exposed - in the API (see: [backend services](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/services)). + in the API (see: [backend services](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/services)). * **Repositories** implement the [repository pattern](https://www.cosmicpython.com/book/chapter_02_repository.html) - as an abstraction over the SQL database (see: [code for repositories](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/repositories)). - They make use of [record classes](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/records) to refer to actual records in the database. + as an abstraction over the SQL database (see: [code for repositories](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/repositories)). + They make use of [record classes](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/records) to refer to actual records in the database. ![Lumigator Backend](../../assets/lumigator-backend.svg) @@ -36,17 +36,17 @@ trailing slash) will map to the absolute path from the root of the repo ## Lumigator endpoints All the endpoints you can access in Lumigator's API are defined in -[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/routes) +[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/routes) and explicitly listed in -[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/router.py), -together with a [metadata tag](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/tags.py) +[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/router.py), +together with a [metadata tag](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/tags.py) which is used to provide a short description of the route. Let us now walk through a few examples to understand how Lumigator's endpoints work. ### The simplest endpoint: `/health` -The [`/health`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/routes/health.py) +The [`/health`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/routes/health.py) route provides perhaps the simplest example as it allows you to get the current backend status which is a constant: @@ -59,12 +59,12 @@ def get_health() -> HealthResponse: Note that the returned type is a `HealthResponse`: this is a [pydantic model](https://docs.pydantic.dev/latest/api/base_model/) defining the schema of the returned data. The general rule is that all return values in our routes should match a predefined -schema. Schemas are defined under the `schemas` directory (see: [health response in our source code](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)), +schema. Schemas are defined under the `schemas` directory (see: [health response in our source code](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)), typically in files with the same name of the route, service, etc. All the code for `get_health()` appears in the route file. A `HealthResponse`, composed of a deployment type which is loaded from -[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/settings.py#L12) +[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/settings.py#L12) and the status (currently always ok), is returned. ### One step further: `/datasets` @@ -80,7 +80,7 @@ def get_dataset(service: DatasetServiceDep, dataset_id: UUID) -> DatasetResponse ``` * The core functionalities are provided by a *service* (in this case a `DatasetService`) defined in - [`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/services/datasets.py). + [`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/services/datasets.py). * Instead of directly passing a `DatasetService` to the `get_dataset` method, DatasetServiceDep is defined to perform a *dependency injection* (see: @@ -96,7 +96,7 @@ So, let us suppose you have already uploaded a dataset to Lumigator. What happen First thing, `DatasetServiceDep` will make sure that all the dependencies to run your `DatasetService` are met. If you look at -[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/deps.py) +[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/deps.py) you will see that a `DatasetServiceDep` is nothing more than a `DatasetService` that depends on a `DBSessionDep` and `S3ClientDep`: @@ -116,7 +116,7 @@ database session and on an S3 client. While the S3 dependency is a "simple" one (i.e., it just instantiates a boto3 client in place), the database one is a bit more advanced (i.e., it relies on a -[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/db.py) +[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/db.py) to return a session). Second, `DatasetService` provides a `get_dataset` method which gets the actual data from the @@ -137,10 +137,10 @@ def _get_dataset_record(self, dataset_id: UUID) -> DatasetRecord: We access the database using the `repository` abstraction `DatasetRepository` class. All repositories are defined in `backend/repositories` and inherit from -[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/repositories/base.py) +[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/repositories/base.py) which is a general class providing ORM access to SQL statements. In particular, the `DatasetRepository` is a `BaseRepository` working with items of type -[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/records/datasets.py). +[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/records/datasets.py). Fields in records are defined as a mix of explicit type definitions and declarative mappings (see the picture below to see how the fields in the datasets table are defined). diff --git a/docs/source/conceptual-guides/new-endpoint.md b/docs/source/conceptual-guides/new-endpoint.md index 18a5b5b1..3defa13e 100644 --- a/docs/source/conceptual-guides/new-endpoint.md +++ b/docs/source/conceptual-guides/new-endpoint.md @@ -48,7 +48,7 @@ Being this the code for a new route, you will save it in `backend/api/routes/tas ### 1.2. Add the route to `router.py` with the appropriate tags The following step is adding the new route to -[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/router.py). +[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/router.py). The code below shows the updated file with comments next to the two lines marked below as **NEW**: ```python @@ -75,7 +75,7 @@ api_router.include_router(tasks.router, prefix="/tasks", tags=[Tags.TASKS]) # N ``` Also note that we are specifying some `Tags.TASKS` which have not been defined yet! Open -[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/tags.py) +[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/tags.py) and add the sections marked below as **NEW**: ```python @@ -184,7 +184,7 @@ class TaskRepository(BaseRepository[TaskRecord]): ``` This does not usually change much as long as you are fine with the base methods provided by the -[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/repositories/base.py) +[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/repositories/base.py) class. The `TaskRepository` is a repository that allows to run the set of methods defined in the @@ -204,7 +204,7 @@ class TaskRecord(BaseRecord, NameDescriptionMixin, CreatedAtMixin): ``` Similarly to what you saw before for `DatasetRecord`, `TaskRecord` inherits from -[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/records/base.py) +[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/records/base.py) the property of having an `id` primary key. In addition to that, it inherits `name` and `description` from `NameDescriptionMixin` and `created_at` from `CreatedAtMixin`. The only field that we need to specify manually is `models`, a non-null column holding a list of strings. @@ -301,7 +301,7 @@ endpoints (e.g. those which involve running ray jobs), but we'll discuss that in As `TaskService` depends on the existence of a database, we should inject a dependency on a DB session. To do this, add the following code to -[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/api/deps.py): +[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/deps.py): ```python def get_task_service(session: DBSessionDep) -> TaskService: diff --git a/docs/source/conf.py b/docs/source/conf.py index 09ee36af..2c89cfba 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -30,16 +30,16 @@ author = "Mozilla AI Engineering" release = "0.0.1" -commit_hash = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('ascii') +commit_id = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('ascii') # Add the commit_id to rst_epilog for substitution in reStructuredText files rst_epilog = f""" -.. |commit_id| replace:: {commit_hash} +.. {{ commit_id }} replace:: {commit_id} """ # Add the commit_id to myst_substitutions for substitution in Markdown files myst_substitutions = { - "|commit_id|": commit_hash + "commit_id": commit_id } # -- General configuration --------------------------------------------------- diff --git a/docs/source/get-started/installation.md b/docs/source/get-started/installation.md index 7753beb6..87995d03 100644 --- a/docs/source/get-started/installation.md +++ b/docs/source/get-started/installation.md @@ -1,7 +1,7 @@ # Installation You can deploy Lumigator either locally or into a distributed environment using Kubernetes -[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/infra/helm/lumigator/README.md). +[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/infra/helm/lumigator/README.md). In this guide, we'll show you how to get started with a local deployment. ## Prerequisites @@ -37,7 +37,7 @@ the repository for more details. Despite the fact this is a local setup, it lends itself to more distributed scenarios. For instance, one could provide different `AWS_*` environment variables to the backend container to connect to any provider's S3-compatible service, instead of minio. Similarly, one could provide a different -`RAY_HEAD_NODE_HOST` to move compute to a remote ray cluster, and so on. See [here](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/docker-compose.external.yaml) for an example of how to do +`RAY_HEAD_NODE_HOST` to move compute to a remote ray cluster, and so on. See [here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/docker-compose.external.yaml) for an example of how to do this. To deploy Lumigator locally: @@ -71,7 +71,7 @@ should receive the following JSON response: ```{note} If you need to change the port that the Lumigator service listens on, you can do it in the -[`docker-compose.yaml`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/docker-compose.yaml) +[`docker-compose.yaml`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/docker-compose.yaml) file. ``` diff --git a/docs/source/get-started/quickstart.md b/docs/source/get-started/quickstart.md index fb120847..683d4ef9 100644 --- a/docs/source/get-started/quickstart.md +++ b/docs/source/get-started/quickstart.md @@ -63,7 +63,7 @@ response = lm_client.datasets.create_dataset( ```{note} The dataset file should be in CSV format and contain a header row with the following columns: `examples`, `ground_truth`. The `ground_truth` column is optional since you can generate it using -Lumigator. See [here](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/sample_data/dialogsum_exc.csv#L4) +Lumigator. See [here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/sample_data/dialogsum_exc.csv#L4) for an example. ``` diff --git a/docs/source/get-started/ui-guide.md b/docs/source/get-started/ui-guide.md index d0446aff..56d0332c 100644 --- a/docs/source/get-started/ui-guide.md +++ b/docs/source/get-started/ui-guide.md @@ -9,7 +9,7 @@ The main purpose of Lumigator is to help you select a model that works well for The first step is to upload your dataset. This can be done by clicking on the **Provide Dataset** button in the **Datasets** section. This will open a dialog box where you can select the dataset file to be uploaded from your local machine. The dataset file should be in `csv` format with columns examples and (optionally) ground_truth. -You can get started by uploading the [sample dataset](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/sample_data/dialogsum_exc.csv) provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). +You can get started by uploading the [sample dataset](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/sample_data/dialogsum_exc.csv) provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). ![Datasets Page](../../assets/ui_guide_steps/datasets_page.png) diff --git a/docs/source/operations-guide/alembic.md b/docs/source/operations-guide/alembic.md index 0dcff2d0..3c2e9fdb 100644 --- a/docs/source/operations-guide/alembic.md +++ b/docs/source/operations-guide/alembic.md @@ -28,7 +28,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic --version When code changes are made to the data models, or when new models are added, a manual step is required in order to ensure that the models are visible to Alembic. -First, the imports at the top of [`env.py`](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/alembic/env.py) +First, the imports at the top of [`env.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/alembic/env.py) **MUST** import your package: `from backend.records.{package} import * # noqa: F403` @@ -60,7 +60,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ SQLALCHEMY_DATABASE_URL=sqlit The rest of the document assumes `SQLALCHEMY_DATABASE_URL` is exported. If `SQLALCHEMY_DATABASE_URL` is not present then a default of `sqlite:///local.db` will be used (see: -[here](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/alembic.ini#L65)). +[here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/alembic.ini#L65)). If you've followed the `README` for `backend`, you should have sourced the virtual environment. This means you can run the `alembic` command directly in the terminal. Alternatively, you can also run it @@ -90,7 +90,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic stamp head ## My database is in a different state (from a prior release) This scenario requires manual review of the existing revisions stored in the -[versions folder](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/alembic/versions), +[versions folder](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/alembic/versions), to determine which revision ID represents the current state of the database containing the data. Revisions are stored in a format resembling a linked-list, with each revision containing a @@ -176,7 +176,7 @@ To create an empty revision that you populate manually: user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision -m "{Explanatory commit-like message}" ``` -This will create a new Python file under `[versions/](https://github.com/mozilla-ai/lumigator/blob/|commit_id|/lumigator/lumigator/backend/backend/alembic/versions)`. +This will create a new Python file under `[versions/](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/alembic/versions)`. For example: diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 703542b5..27ea5da1 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -3,7 +3,7 @@ ARG NODE_VERSION=18.20.0 FROM node:${NODE_VERSION}-alpine AS base # Copy the project into the image -COPY ../ /mzai +COPY ../frontend /mzai/frontend WORKDIR /mzai/ From 47222cca0aa0ac04f6397f3e8e94c2adfc46243e Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 16:24:28 -0500 Subject: [PATCH 10/21] enable substitutions --- docs/source/conf.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 2c89cfba..4db6d128 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -7,9 +7,12 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information import sys -import subprocess +import os from pathlib import Path +# Get the commit hash from the environment variable +commit_id = os.environ.get("GIT_COMMIT", "main") +print(f"Git Commit ID: {commit_id}") # patch the Sphinx run so that it can operate directly on the sources # see: https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#ensuring-the-code-can-be-imported module_paths = [ @@ -30,8 +33,6 @@ author = "Mozilla AI Engineering" release = "0.0.1" -commit_id = subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('ascii') - # Add the commit_id to rst_epilog for substitution in reStructuredText files rst_epilog = f""" .. {{ commit_id }} replace:: {commit_id} From 8c5deb194ddcec66edba100c10567b0901788430 Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 16:29:20 -0500 Subject: [PATCH 11/21] enable substitutions --- .github/workflows/build_and_publish_docs.yaml | 3 ++- docs/source/conf.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_and_publish_docs.yaml b/.github/workflows/build_and_publish_docs.yaml index 7e5cdac2..bf517edf 100644 --- a/.github/workflows/build_and_publish_docs.yaml +++ b/.github/workflows/build_and_publish_docs.yaml @@ -28,7 +28,8 @@ jobs: uses: lycheeverse/lychee-action@v2 with: # Documentation: https://github.com/lycheeverse/lychee?tab=readme-ov-file#commandline-parameters - args: --base . --verbose --no-progress './**/*.md' './**/*.rst' --exclude 'mailto:|localhost' + # Excluding the docs folder because these links will be checked by the sphinx linkcheck builder later + args: --base . --verbose --no-progress './**/*.md' './**/*.rst' --exclude 'mailto:|localhost' --exclude-path 'docs' - name: Check for modified paths uses: dorny/paths-filter@v3 diff --git a/docs/source/conf.py b/docs/source/conf.py index 4db6d128..87d7fe17 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -53,6 +53,7 @@ "myst_parser", "sphinx_design", "sphinx_copybutton", + "sphinx.ext.linkcheck" ] # napoleon settings From e952454e6c652ad2d7bf0dd0255cfa3b4fed94cc Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 19:18:16 -0500 Subject: [PATCH 12/21] enable substitutions --- docs/source/conf.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 87d7fe17..75e7d5ff 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -10,14 +10,15 @@ import os from pathlib import Path -# Get the commit hash from the environment variable -commit_id = os.environ.get("GIT_COMMIT", "main") +# Get the commit hash from git +import subprocess +commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"]).strip().decode("utf-8") print(f"Git Commit ID: {commit_id}") # patch the Sphinx run so that it can operate directly on the sources # see: https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#ensuring-the-code-can-be-imported module_paths = [ - Path("..", "..", "lumigator", "sdk").resolve(), - Path("..", "..", "lumigator", "schemas").resolve(), + Path("..", "..", "lumigator", "lumigator", "sdk").resolve(), + Path("..", "..", "lumigator", "lumigator", "schemas").resolve(), ] for path in module_paths: @@ -53,7 +54,7 @@ "myst_parser", "sphinx_design", "sphinx_copybutton", - "sphinx.ext.linkcheck" + "sphinx.builders.linkcheck" ] # napoleon settings From 2b99ec7d81d84baab68370ea359d2538feee57bb Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 19:56:32 -0500 Subject: [PATCH 13/21] Fix link rendering --- docs/source/conceptual-guides/endpoints.md | 32 +++++++++---------- docs/source/conceptual-guides/new-endpoint.md | 10 +++--- docs/source/get-started/installation.md | 6 ++-- docs/source/get-started/quickstart.md | 2 +- docs/source/get-started/ui-guide.md | 2 +- docs/source/operations-guide/alembic.md | 8 ++--- 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/docs/source/conceptual-guides/endpoints.md b/docs/source/conceptual-guides/endpoints.md index 218126e1..4acfba81 100644 --- a/docs/source/conceptual-guides/endpoints.md +++ b/docs/source/conceptual-guides/endpoints.md @@ -13,16 +13,16 @@ cluster, SQL database, and S3-compatible Storage) are the different services Lum The components inside the backend, shown in the image below, are the different abstraction layers the backend itself relies on: -* The **API** makes backend functionalities available to the UI through different **routes** (see: [schema code](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/routes)). - [**Schemas**](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/schemas/schemas) +* The **API** makes backend functionalities available to the UI through different **routes** (see: {{ '[schema code](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/routes)'.format(commit_id) }} ). +{{ '[**Schemas**](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/schemas)'.format(commit_id) }} are used in the API which allows one to exactly know which kind of data has to be passed to it. * **Services** implement the actual functionalities and are called by the different methods exposed - in the API (see: [backend services](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/services)). + in the API (see: {{ '[backend services](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/services)'.format(commit_id) }} ). * **Repositories** implement the [repository pattern](https://www.cosmicpython.com/book/chapter_02_repository.html) - as an abstraction over the SQL database (see: [code for repositories](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/repositories)). - They make use of [record classes](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/records) to refer to actual records in the database. + as an abstraction over the SQL database (see: {{ '[code for repositories](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/repositories)'.format(commit_id) }} ). + They make use of {{ '[record classes](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/records)'.format(commit_id) }} to refer to actual records in the database. ![Lumigator Backend](../../assets/lumigator-backend.svg) @@ -36,17 +36,17 @@ trailing slash) will map to the absolute path from the root of the repo ## Lumigator endpoints All the endpoints you can access in Lumigator's API are defined in -[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/routes) +{{ '[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/routes)'.format(commit_id) }} and explicitly listed in -[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/router.py), -together with a [metadata tag](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/tags.py) +{{ '[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/router.py)'.format(commit_id) }}, +together with a {{ '[metadata tag](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/tags.py)'.format(commit_id) }} which is used to provide a short description of the route. Let us now walk through a few examples to understand how Lumigator's endpoints work. ### The simplest endpoint: `/health` -The [`/health`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/routes/health.py) +The {{ '[`/health`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/routes/health.py)'.format(commit_id) }} route provides perhaps the simplest example as it allows you to get the current backend status which is a constant: @@ -59,12 +59,12 @@ def get_health() -> HealthResponse: Note that the returned type is a `HealthResponse`: this is a [pydantic model](https://docs.pydantic.dev/latest/api/base_model/) defining the schema of the returned data. The general rule is that all return values in our routes should match a predefined -schema. Schemas are defined under the `schemas` directory (see: [health response in our source code](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)), +schema. Schemas are defined under the `schemas` directory (see: {{ '[health response in our source code](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)'.format(commit_id) }}), typically in files with the same name of the route, service, etc. All the code for `get_health()` appears in the route file. A `HealthResponse`, composed of a deployment type which is loaded from -[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/settings.py#L12) +{{ '[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/settings.py#L12)'.format(commit_id) }} and the status (currently always ok), is returned. ### One step further: `/datasets` @@ -80,7 +80,7 @@ def get_dataset(service: DatasetServiceDep, dataset_id: UUID) -> DatasetResponse ``` * The core functionalities are provided by a *service* (in this case a `DatasetService`) defined in - [`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/services/datasets.py). + {{ '[`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/services/datasets.py)'.format(commit_id) }}. * Instead of directly passing a `DatasetService` to the `get_dataset` method, DatasetServiceDep is defined to perform a *dependency injection* (see: @@ -96,7 +96,7 @@ So, let us suppose you have already uploaded a dataset to Lumigator. What happen First thing, `DatasetServiceDep` will make sure that all the dependencies to run your `DatasetService` are met. If you look at -[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/deps.py) +{{ '[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/deps.py)'.format(commit_id) }} you will see that a `DatasetServiceDep` is nothing more than a `DatasetService` that depends on a `DBSessionDep` and `S3ClientDep`: @@ -116,7 +116,7 @@ database session and on an S3 client. While the S3 dependency is a "simple" one (i.e., it just instantiates a boto3 client in place), the database one is a bit more advanced (i.e., it relies on a -[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/db.py) +{{ '[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/db.py)'.format(commit_id) }} to return a session). Second, `DatasetService` provides a `get_dataset` method which gets the actual data from the @@ -137,10 +137,10 @@ def _get_dataset_record(self, dataset_id: UUID) -> DatasetRecord: We access the database using the `repository` abstraction `DatasetRepository` class. All repositories are defined in `backend/repositories` and inherit from -[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/repositories/base.py) +{{ '[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/repositories/base.py)'.format(commit_id) }} which is a general class providing ORM access to SQL statements. In particular, the `DatasetRepository` is a `BaseRepository` working with items of type -[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/records/datasets.py). +{{ '[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/records/datasets.py)'.format(commit_id) }}. Fields in records are defined as a mix of explicit type definitions and declarative mappings (see the picture below to see how the fields in the datasets table are defined). diff --git a/docs/source/conceptual-guides/new-endpoint.md b/docs/source/conceptual-guides/new-endpoint.md index 3defa13e..5bea2fd3 100644 --- a/docs/source/conceptual-guides/new-endpoint.md +++ b/docs/source/conceptual-guides/new-endpoint.md @@ -48,7 +48,7 @@ Being this the code for a new route, you will save it in `backend/api/routes/tas ### 1.2. Add the route to `router.py` with the appropriate tags The following step is adding the new route to -[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/router.py). +{{ '[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/router.py)'.format(commit_id) }}. The code below shows the updated file with comments next to the two lines marked below as **NEW**: ```python @@ -75,7 +75,7 @@ api_router.include_router(tasks.router, prefix="/tasks", tags=[Tags.TASKS]) # N ``` Also note that we are specifying some `Tags.TASKS` which have not been defined yet! Open -[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/tags.py) +{{ '[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/tags.py)'.format(commit_id) }} and add the sections marked below as **NEW**: ```python @@ -184,7 +184,7 @@ class TaskRepository(BaseRepository[TaskRecord]): ``` This does not usually change much as long as you are fine with the base methods provided by the -[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/repositories/base.py) +{{ '[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/repositories/base.py)'.format(commit_id) }} class. The `TaskRepository` is a repository that allows to run the set of methods defined in the @@ -204,7 +204,7 @@ class TaskRecord(BaseRecord, NameDescriptionMixin, CreatedAtMixin): ``` Similarly to what you saw before for `DatasetRecord`, `TaskRecord` inherits from -[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/records/base.py) +{{ '[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/records/base.py)'.format(commit_id) }} the property of having an `id` primary key. In addition to that, it inherits `name` and `description` from `NameDescriptionMixin` and `created_at` from `CreatedAtMixin`. The only field that we need to specify manually is `models`, a non-null column holding a list of strings. @@ -301,7 +301,7 @@ endpoints (e.g. those which involve running ray jobs), but we'll discuss that in As `TaskService` depends on the existence of a database, we should inject a dependency on a DB session. To do this, add the following code to -[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/api/deps.py): +{{ '[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/deps.py)'.format(commit_id) }}: ```python def get_task_service(session: DBSessionDep) -> TaskService: diff --git a/docs/source/get-started/installation.md b/docs/source/get-started/installation.md index 87995d03..a66f07e2 100644 --- a/docs/source/get-started/installation.md +++ b/docs/source/get-started/installation.md @@ -1,7 +1,7 @@ # Installation You can deploy Lumigator either locally or into a distributed environment using Kubernetes -[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/infra/helm/lumigator/README.md). +{{ '[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/infra/helm/lumigator/README.md)'.format(commit_id) }}. In this guide, we'll show you how to get started with a local deployment. ## Prerequisites @@ -37,7 +37,7 @@ the repository for more details. Despite the fact this is a local setup, it lends itself to more distributed scenarios. For instance, one could provide different `AWS_*` environment variables to the backend container to connect to any provider's S3-compatible service, instead of minio. Similarly, one could provide a different -`RAY_HEAD_NODE_HOST` to move compute to a remote ray cluster, and so on. See [here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/docker-compose.external.yaml) for an example of how to do +`RAY_HEAD_NODE_HOST` to move compute to a remote ray cluster, and so on. See {{ '[here](https://github.com/mozilla-ai/lumigator/blob/{}/docker-compose.external.yaml)'.format(commit_id) }} for an example of how to do this. To deploy Lumigator locally: @@ -71,7 +71,7 @@ should receive the following JSON response: ```{note} If you need to change the port that the Lumigator service listens on, you can do it in the -[`docker-compose.yaml`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/docker-compose.yaml) +{{ '[`docker-compose.yaml`](https://github.com/mozilla-ai/lumigator/blob/{}/docker-compose.yaml)'.format(commit_id) }} file. ``` diff --git a/docs/source/get-started/quickstart.md b/docs/source/get-started/quickstart.md index 683d4ef9..df94d85a 100644 --- a/docs/source/get-started/quickstart.md +++ b/docs/source/get-started/quickstart.md @@ -63,7 +63,7 @@ response = lm_client.datasets.create_dataset( ```{note} The dataset file should be in CSV format and contain a header row with the following columns: `examples`, `ground_truth`. The `ground_truth` column is optional since you can generate it using -Lumigator. See [here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/sample_data/dialogsum_exc.csv#L4) +Lumigator. See {{ '[here](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/sample_data/dialogsum_exc.csv#L4)'.format(commit_id) }} for an example. ``` diff --git a/docs/source/get-started/ui-guide.md b/docs/source/get-started/ui-guide.md index 56d0332c..30ce437d 100644 --- a/docs/source/get-started/ui-guide.md +++ b/docs/source/get-started/ui-guide.md @@ -9,7 +9,7 @@ The main purpose of Lumigator is to help you select a model that works well for The first step is to upload your dataset. This can be done by clicking on the **Provide Dataset** button in the **Datasets** section. This will open a dialog box where you can select the dataset file to be uploaded from your local machine. The dataset file should be in `csv` format with columns examples and (optionally) ground_truth. -You can get started by uploading the [sample dataset](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/sample_data/dialogsum_exc.csv) provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). +You can get started by uploading the {{ '[sample dataset](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/sample_data/dialogsum_exc.csv)'.format(commit_id) }} provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). ![Datasets Page](../../assets/ui_guide_steps/datasets_page.png) diff --git a/docs/source/operations-guide/alembic.md b/docs/source/operations-guide/alembic.md index 3c2e9fdb..f76b198e 100644 --- a/docs/source/operations-guide/alembic.md +++ b/docs/source/operations-guide/alembic.md @@ -28,7 +28,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic --version When code changes are made to the data models, or when new models are added, a manual step is required in order to ensure that the models are visible to Alembic. -First, the imports at the top of [`env.py`](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/alembic/env.py) +First, the imports at the top of {{ '[`env.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/alembic/env.py)'.format(commit_id) }} **MUST** import your package: `from backend.records.{package} import * # noqa: F403` @@ -60,7 +60,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ SQLALCHEMY_DATABASE_URL=sqlit The rest of the document assumes `SQLALCHEMY_DATABASE_URL` is exported. If `SQLALCHEMY_DATABASE_URL` is not present then a default of `sqlite:///local.db` will be used (see: -[here](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/alembic.ini#L65)). +{{ '[here](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/alembic.ini#L65)'.format(commit_id) }}). If you've followed the `README` for `backend`, you should have sourced the virtual environment. This means you can run the `alembic` command directly in the terminal. Alternatively, you can also run it @@ -90,7 +90,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic stamp head ## My database is in a different state (from a prior release) This scenario requires manual review of the existing revisions stored in the -[versions folder](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/alembic/versions), +{{ '[versions folder](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/alembic/versions)'.format(commit_id) }}, to determine which revision ID represents the current state of the database containing the data. Revisions are stored in a format resembling a linked-list, with each revision containing a @@ -176,7 +176,7 @@ To create an empty revision that you populate manually: user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision -m "{Explanatory commit-like message}" ``` -This will create a new Python file under `[versions/](https://github.com/mozilla-ai/lumigator/blob/{{ commit_id }}/lumigator/lumigator/backend/backend/alembic/versions)`. +This will create a new Python file under {{ '[versions/](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/alembic/versions)'.format(commit_id) }}. For example: From 8dd5c61a42a4acddf9e5b37b29216ad425ccc291 Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Wed, 22 Jan 2025 20:00:18 -0500 Subject: [PATCH 14/21] add back the init --- lumigator/lumigator/jobs/evaluator/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lumigator/lumigator/jobs/evaluator/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/__init__.py b/lumigator/lumigator/jobs/evaluator/__init__.py new file mode 100644 index 00000000..e69de29b From 389b6aa964a6964630dfd7d494156a7a7b87b54f Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Tue, 28 Jan 2025 09:00:46 -0500 Subject: [PATCH 15/21] Reorg based on feedback --- lumigator/README.md | 27 ------------------ .../{lumigator => }/backend/.dockerignore | 0 .../{lumigator => }/backend/.python-version | 0 lumigator/{lumigator => }/backend/README.md | 0 lumigator/{lumigator => }/backend/alembic.ini | 0 .../backend/backend/__init__.py | 0 .../backend/backend/alembic/env.py | 3 +- .../backend/backend/alembic/script.py.mako | 0 .../4c0345b3d525_introduce_experiments.py | 0 .../versions/e75fa022c781_create_db.py | 0 .../e9679cbc3c36_generated_datasets.py | 0 .../backend/backend/api/__init__.py | 0 .../backend/backend/api/deps.py | 0 .../backend/backend/api/http_headers.py | 0 .../backend/backend/api/router.py | 0 .../backend/backend/api/routes/__init__.py | 0 .../backend/backend/api/routes/completions.py | 0 .../backend/backend/api/routes/datasets.py | 0 .../backend/backend/api/routes/experiments.py | 0 .../backend/api/routes/experiments_new.py | 0 .../backend/backend/api/routes/health.py | 0 .../backend/backend/api/routes/jobs.py | 0 .../backend/backend/api/routes/models.py | 0 .../backend/backend/api/tags.py | 0 .../backend/backend/config_templates.py | 0 .../{lumigator => }/backend/backend/db.py | 0 .../{lumigator => }/backend/backend/main.py | 0 .../backend/backend/models.yaml | 0 .../backend/backend/ray_submit/submission.py | 0 .../backend/backend/records/__init__.py | 0 .../backend/backend/records/base.py | 0 .../backend/backend/records/datasets.py | 0 .../backend/backend/records/experiments.py | 0 .../backend/backend/records/jobs.py | 0 .../backend/backend/records/mixins.py | 0 .../backend/backend/repositories/__init__.py | 0 .../backend/backend/repositories/base.py | 0 .../backend/backend/repositories/datasets.py | 0 .../backend/repositories/experiments.py | 0 .../backend/backend/repositories/jobs.py | 0 .../backend/backend/services/__init__.py | 0 .../backend/backend/services/completions.py | 0 .../backend/backend/services/datasets.py | 0 .../backend/services/exceptions}/__init__.py | 0 .../services/exceptions/base_exceptions.py | 0 .../exceptions/completion_exceptions.py | 0 .../services/exceptions/dataset_exceptions.py | 0 .../services/exceptions/job_exceptions.py | 0 .../backend/backend/services/experiments.py | 0 .../backend/backend/services/jobs.py | 0 .../backend/backend/settings.py | 0 .../backend/backend/tests/README.md | 0 .../backend/tests}/__init__.py | 0 .../backend/backend/tests/conftest.py | 0 .../tests/data/dialogsum_converted.csv | 0 .../tests/data/health_job_metadata.json | 0 .../tests/data/health_job_metadata_ray.json | 0 .../backend/backend/tests/data/models.json | 0 .../backend/tests/data/ray_version.json | 0 .../backend/tests/fakes}/__init__.py | 0 .../backend/backend/tests/fakes/fake_s3.py | 0 .../backend/tests/integration}/__init__.py | 0 .../tests/integration/api}/__init__.py | 0 .../tests/integration/api/routes}/__init__.py | 0 .../api/routes/test_api_workflows.py | 0 .../tests/integration/services}/__init__.py | 0 .../backend/tests/test_responses.dockerfile | 0 .../backend/tests/unit}/__init__.py | 0 .../backend/tests/unit/api}/__init__.py | 0 .../tests/unit/api/routes}/__init__.py | 0 .../tests/unit/api/routes/test_datasets.py | 0 .../tests/unit/api/routes/test_health.py | 0 .../tests/unit/api/routes/test_jobs.py | 0 .../tests/unit/api/routes/test_main.py | 0 .../tests/unit/api/routes/test_models.py | 0 .../tests/unit/repositories}/__init__.py | 0 .../unit/repositories/test_experiments.py | 0 .../tests/unit/repositories/test_jobs.py | 0 .../backend/tests/unit/services}/__init__.py | 0 .../unit/services/test_dataset_service.py | 0 .../tests/unit/services/test_job_service.py | 0 .../backend/tests/unit/test_ray_submit.py | 0 .../backend/tests/unit/test_settings.py | 0 .../{lumigator => }/backend/pyproject.toml | 0 lumigator/{lumigator => }/backend/uv.lock | 0 {frontend => lumigator/frontend}/.gitignore | 0 {frontend => lumigator/frontend}/.prettierrc | 0 .../frontend}/.vscode/extensions.json | 0 {frontend => lumigator/frontend}/Dockerfile | 0 {frontend => lumigator/frontend}/README.md | 0 .../frontend}/eslint.config.js | 0 {frontend => lumigator/frontend}/index.html | 0 .../frontend}/nginx/default.conf.template | 0 .../frontend}/package-lock.json | 0 {frontend => lumigator/frontend}/package.json | 0 .../frontend}/public/lumigator.svg | 0 .../frontend}/src/.editorconfig | 0 {frontend => lumigator/frontend}/src/App.vue | 0 .../frontend}/src/assets/LogoText.svg | 0 .../frontend}/src/assets/icons/BinIcon.svg | 0 .../src/assets/icons/DatasetsIcon.svg | 0 .../src/assets/icons/DownloadIcon.svg | 0 .../src/assets/icons/ExperimentIcon.svg | 0 .../frontend}/src/assets/lumigator.svg | 0 .../components/molecules/LDatasetEmpty.vue | 0 .../components/molecules/LDatasetTable.vue | 0 .../molecules/LExperimentDetails.vue | 0 .../components/molecules/LExperimentForm.vue | 0 .../components/molecules/LExperimentLogs.vue | 0 .../components/molecules/LExperimentTable.vue | 0 .../components/molecules/LExperimentTabs.vue | 0 .../molecules/LExperimentsDrawer.vue | 0 .../molecules/LExperimentsEmpty.vue | 0 .../src/components/molecules/LFileUpload.vue | 0 .../molecules/LGenerateGroundTruthPopup.vue | 0 .../components/molecules/LHealthStatus.vue | 0 .../molecules/LInferenceJobsTable.vue | 0 .../src/components/molecules/LJobResults.vue | 0 .../src/components/molecules/LJobsTable.vue | 0 .../src/components/molecules/LModelCards.vue | 0 .../src/components/molecules/LPageHeader.vue | 0 .../components/organisms/LDatasetDetails.vue | 0 .../organisms/LExperimentResults.vue | 0 .../src/components/organisms/LMenu.vue | 0 .../src/components/pages/LDatasets.vue | 0 .../src/components/pages/LExperiments.vue | 0 .../frontend}/src/composables/SlidingPanel.js | 0 .../frontend}/src/helpers/index.js | 0 .../frontend}/src/libs/primevue.config.js | 0 {frontend => lumigator/frontend}/src/main.js | 0 .../frontend}/src/router/index.js | 0 .../frontend}/src/services/datasets/api.js | 0 .../src/services/datasets/datasetsService.js | 0 .../frontend}/src/services/experiments/api.js | 0 .../services/experiments/experimentService.js | 0 .../frontend}/src/services/health/api.js | 0 .../src/services/health/healthService.js | 0 .../frontend}/src/services/http/index.js | 0 .../frontend}/src/services/models/api.js | 0 .../src/services/models/modelsService.js | 0 .../frontend}/src/stores/datasets/store.js | 0 .../frontend}/src/stores/experiments/store.js | 0 .../frontend}/src/stores/health/store.js | 0 .../frontend}/src/stores/models/store.js | 0 .../frontend}/src/styles/_components.scss | 0 .../frontend}/src/styles/_icons.scss | 0 .../src/styles/_lumigator-theme.scss | 0 .../frontend}/src/styles/_resetcss.scss | 0 .../frontend}/src/styles/_transitions.scss | 0 .../frontend}/src/styles/_typography.scss | 0 .../frontend}/src/styles/_variables.scss | 0 .../frontend}/src/styles/app.scss | 0 .../frontend}/vite.config.js | 0 .../{lumigator => }/jobs/evaluator/README.md | 0 .../evaluator => jobs}/evaluator/__init__.py | 0 .../evaluator/evaluator}/__init__.py | 0 .../jobs/evaluator/evaluator/__main__.py | 0 .../evaluator/evaluator/configs}/__init__.py | 0 .../evaluator/evaluator/configs/common.py | 0 .../evaluator/configs/huggingface.py | 0 .../evaluator/configs/jobs/__init__.py | 0 .../evaluator/configs/jobs/common.py | 0 .../evaluator/configs/jobs/hf_evaluate.py | 0 .../evaluator/configs/jobs/lm_harness.py | 0 .../jobs/evaluator/evaluator/configs/vllm.py | 0 .../jobs/evaluator/evaluator/configs/wandb.py | 0 .../jobs/evaluator/evaluator/constants.py | 0 .../jobs/evaluator/evaluator/entrypoint.py | 0 .../evaluator/evaluator/jobs}/__init__.py | 0 .../evaluator/evaluator/jobs/asset_loader.py | 0 .../jobs/evaluator/evaluator/jobs/common.py | 0 .../evaluator/jobs/evaluation}/__init__.py | 0 .../evaluator/jobs/evaluation/conversation.py | 0 .../evaluator/jobs/evaluation/hf_evaluate.py | 0 .../evaluator/jobs/evaluation/lm_harness.py | 0 .../evaluator/jobs/evaluation/metrics.py | 0 .../evaluator/evaluator/jobs/model_clients.py | 0 .../jobs/evaluator/evaluator/jobs/utils.py | 0 .../jobs/evaluator/evaluator/paths.py | 0 .../jobs/evaluator/evaluator/preprocessing.py | 0 .../evaluator/evaluator/tests}/__init__.py | 0 .../evaluator/evaluator/tests/conftest.py | 0 .../evaluator/tests/integration/README.md | 0 .../evaluator/tests/integration}/__init__.py | 0 .../evaluator/tests/integration/conftest.py | 0 .../integration/test_integration_setup.py | 0 .../tests/integration/test_lm_harness.py | 0 .../evaluator/tests/resources/README.md | 0 .../evaluator/tests/resources}/__init__.py | 0 .../tests/resources/datasets}/__init__.py | 0 .../datasets/tiny_shakespeare}/__init__.py | 0 .../create_tiny_shakespeare.py | 0 .../data-00000-of-00001.arrow | Bin .../tiny_shakespeare/dataset_info.json | 0 .../datasets/tiny_shakespeare/state.json | 0 .../tests/resources/datasets/xyz}/__init__.py | 0 .../resources/datasets/xyz/create_xyz.py | 0 .../datasets/xyz/data-00000-of-00001.arrow | Bin .../resources/datasets/xyz/dataset_info.json | 0 .../tests/resources/datasets/xyz/state.json | 0 .../tests/resources/models}/__init__.py | 0 .../resources/models/tiny_gpt2}/__init__.py | 0 .../resources/models/tiny_gpt2/config.json | 0 .../models/tiny_gpt2/create_tiny_gpt2.py | 0 .../resources/models/tiny_gpt2/merges.txt | 0 .../models/tiny_gpt2/model.safetensors | Bin .../models/tiny_gpt2/special_tokens_map.json | 0 .../models/tiny_gpt2/tokenizer_config.json | 0 .../resources/models/tiny_gpt2/vocab.json | 0 .../evaluator/evaluator/tests/test_utils.py | 0 .../evaluator/tests/unit}/__init__.py | 0 .../evaluator/tests/unit/configs}/__init__.py | 0 .../tests/unit/configs}/jobs/__init__.py | 0 .../tests/unit/configs/jobs/conftest.py | 0 .../configs/jobs/test_lm_harness_config.py | 0 .../tests/unit/configs/test_adapter_config.py | 0 .../tests/unit/configs/test_common.py | 0 .../tests/unit/configs/test_dataset_config.py | 0 .../unit/configs/test_quantization_config.py | 0 .../tests/unit/configs/test_run_config.py | 0 .../evaluator/tests/unit/jobs}/__init__.py | 0 .../tests/unit/jobs/test_asset_loader.py | 0 .../evaluator/tests/unit/test_paths.py | 0 .../tests/unit/test_preprocessing.py | 0 .../evaluator/evaluator/tracking}/__init__.py | 0 .../evaluator/tracking/artifact_utils.py | 0 .../evaluator/evaluator/tracking/run_utils.py | 0 .../evaluation/hf_evaluate_config.yaml | 0 .../hf_evaluate_inference_server_config.yaml | 0 .../evaluation/hf_evaluate_openai_config.yaml | 0 .../evaluation/lm_harness_hf_config.yaml | 0 .../lm_harness_inference_server_config.yaml | 0 .../jobs/evaluator/requirements.txt | 0 .../jobs/evaluator_lite/README.md | 0 .../jobs/evaluator_lite/eval_lite.py | 1 + .../jobs/evaluator_lite/eval_metrics.py | 0 .../jobs/evaluator_lite/requirements.txt | 0 .../jobs/evaluator_lite/schemas.py | 0 .../evaluator_lite}/tests/__init__.py | 0 .../jobs/evaluator_lite/tests/conftest.py | 0 .../tests/data/config_full_hf.json | 0 .../tests/data/config_minimal.json | 0 .../jobs/evaluator_lite/tests/test_configs.py | 1 + .../{lumigator => }/jobs/inference/README.md | 0 .../jobs/inference/inference.py | 3 +- .../jobs/inference/inference_config.py | 5 ++-- .../jobs/inference/model_clients.py | 0 .../{lumigator => }/jobs/inference/paths.py | 0 .../jobs/inference/requirements.txt | 0 .../jobs/inference/requirements_cpu.txt | 0 .../{lumigator => }/jobs/inference/schemas.py | 0 .../inference/tests}/__init__.py | 0 .../jobs/inference/tests/conftest.py | 0 .../inference/tests/data/config_full_api.json | 0 .../inference/tests/data/config_full_hf.json | 0 .../inference/tests/data/config_minimal.json | 0 .../jobs/inference/tests/test_configs.py | 0 .../{lumigator => }/jobs/inference/utils.py | 0 .../sample_data/dialogsum_exc.csv | 0 .../dialogsum_mini_all_gt_is_whitespace.csv | 0 .../sample_data/dialogsum_mini_empty_gt.csv | 0 .../sample_data/dialogsum_mini_no_gt.csv | 0 ...m_mini_some_missing_some_whitespace_gt.csv | 0 .../{lumigator => }/schemas/.python-version | 0 lumigator/{lumigator => }/schemas/README.md | 0 .../lumigator_schemas}/__init__.py | 0 .../schemas/lumigator_schemas/completions.py | 0 .../schemas/lumigator_schemas/datasets.py | 0 .../schemas/lumigator_schemas/experiments.py | 0 .../schemas/lumigator_schemas/extras.py | 0 .../schemas/lumigator_schemas/jobs.py | 0 .../schemas/lumigator_schemas/models.py | 0 .../{lumigator => }/schemas/pyproject.toml | 0 lumigator/{lumigator => }/schemas/uv.lock | 0 lumigator/{lumigator => }/sdk/.python-version | 0 lumigator/{lumigator => }/sdk/README.md | 0 .../tests => sdk/lumigator_sdk}/__init__.py | 0 .../sdk/lumigator_sdk/client.py | 0 .../sdk/lumigator_sdk/completions.py | 0 .../sdk/lumigator_sdk/experiments.py | 0 .../sdk/lumigator_sdk/health.py | 0 .../{lumigator => }/sdk/lumigator_sdk/jobs.py | 0 .../sdk/lumigator_sdk/lm_datasets.py | 0 .../sdk/lumigator_sdk/lumigator.py | 0 .../sdk/lumigator_sdk/models.py | 0 .../sdk/lumigator_sdk/strict_schemas.py | 0 lumigator/{lumigator => }/sdk/pyproject.toml | 0 .../exceptions => sdk/tests}/__init__.py | 0 .../{lumigator => }/sdk/tests/conftest.py | 0 .../sdk/tests/data/dataset.json | 0 .../sdk/tests/data/datasets.json | 0 .../experiment-download-no-experiment.json | 0 .../sdk/tests/data/experiment-download.json | 0 .../sdk/tests/data/experiment-missing.json | 0 .../sdk/tests/data/experiment-post-all.json | 0 .../tests/data/experiment-post-response.json | 0 .../tests/data/experiment-post-simple.json | 0 .../data/experiment-result-no-experiment.json | 0 .../sdk/tests/data/experiment-result.json | 0 .../sdk/tests/data/experiment.json | 0 .../sdk/tests/data/experiments.json | 0 .../sdk/tests/data/job-all.json | 0 .../sdk/tests/data/job-extra.json | 0 .../sdk/tests/data/job-minimal.json | 0 .../sdk/tests/data/job-resp.json | 0 .../sdk/tests/data/job-submit-resp.json | 0 .../{lumigator => }/sdk/tests/data/job.json | 0 .../sdk/tests/data/jobs-submit.json | 0 .../{lumigator => }/sdk/tests/data/jobs.json | 0 .../sdk/tests/data/models.json | 0 .../{lumigator => }/sdk/tests/helpers.py | 0 .../sdk/tests/integration/test_scenarios.py | 0 .../sdk/tests/unit/test_completions.py | 0 .../sdk/tests/unit/test_datasets.py | 0 .../sdk/tests/unit/test_health.py | 0 .../sdk/tests/unit/test_jobs.py | 0 .../sdk/tests/unit/test_models.py | 0 lumigator/{lumigator => }/sdk/uv.lock | 0 318 files changed, 9 insertions(+), 31 deletions(-) delete mode 100644 lumigator/README.md rename lumigator/{lumigator => }/backend/.dockerignore (100%) rename lumigator/{lumigator => }/backend/.python-version (100%) rename lumigator/{lumigator => }/backend/README.md (100%) rename lumigator/{lumigator => }/backend/alembic.ini (100%) rename lumigator/{lumigator => }/backend/backend/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/alembic/env.py (99%) rename lumigator/{lumigator => }/backend/backend/alembic/script.py.mako (100%) rename lumigator/{lumigator => }/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py (100%) rename lumigator/{lumigator => }/backend/backend/alembic/versions/e75fa022c781_create_db.py (100%) rename lumigator/{lumigator => }/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py (100%) rename lumigator/{lumigator => }/backend/backend/api/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/api/deps.py (100%) rename lumigator/{lumigator => }/backend/backend/api/http_headers.py (100%) rename lumigator/{lumigator => }/backend/backend/api/router.py (100%) rename lumigator/{lumigator => }/backend/backend/api/routes/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/api/routes/completions.py (100%) rename lumigator/{lumigator => }/backend/backend/api/routes/datasets.py (100%) rename lumigator/{lumigator => }/backend/backend/api/routes/experiments.py (100%) rename lumigator/{lumigator => }/backend/backend/api/routes/experiments_new.py (100%) rename lumigator/{lumigator => }/backend/backend/api/routes/health.py (100%) rename lumigator/{lumigator => }/backend/backend/api/routes/jobs.py (100%) rename lumigator/{lumigator => }/backend/backend/api/routes/models.py (100%) rename lumigator/{lumigator => }/backend/backend/api/tags.py (100%) rename lumigator/{lumigator => }/backend/backend/config_templates.py (100%) rename lumigator/{lumigator => }/backend/backend/db.py (100%) rename lumigator/{lumigator => }/backend/backend/main.py (100%) rename lumigator/{lumigator => }/backend/backend/models.yaml (100%) rename lumigator/{lumigator => }/backend/backend/ray_submit/submission.py (100%) rename lumigator/{lumigator => }/backend/backend/records/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/records/base.py (100%) rename lumigator/{lumigator => }/backend/backend/records/datasets.py (100%) rename lumigator/{lumigator => }/backend/backend/records/experiments.py (100%) rename lumigator/{lumigator => }/backend/backend/records/jobs.py (100%) rename lumigator/{lumigator => }/backend/backend/records/mixins.py (100%) rename lumigator/{lumigator => }/backend/backend/repositories/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/repositories/base.py (100%) rename lumigator/{lumigator => }/backend/backend/repositories/datasets.py (100%) rename lumigator/{lumigator => }/backend/backend/repositories/experiments.py (100%) rename lumigator/{lumigator => }/backend/backend/repositories/jobs.py (100%) rename lumigator/{lumigator => }/backend/backend/services/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/services/completions.py (100%) rename lumigator/{lumigator => }/backend/backend/services/datasets.py (100%) rename lumigator/{lumigator/backend/backend/tests => backend/backend/services/exceptions}/__init__.py (100%) rename lumigator/{python/mzai => }/backend/backend/services/exceptions/base_exceptions.py (100%) rename lumigator/{python/mzai => }/backend/backend/services/exceptions/completion_exceptions.py (100%) rename lumigator/{python/mzai => }/backend/backend/services/exceptions/dataset_exceptions.py (100%) rename lumigator/{python/mzai => }/backend/backend/services/exceptions/job_exceptions.py (100%) rename lumigator/{lumigator => }/backend/backend/services/experiments.py (100%) rename lumigator/{lumigator => }/backend/backend/services/jobs.py (100%) rename lumigator/{lumigator => }/backend/backend/settings.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/README.md (100%) rename lumigator/{lumigator/backend/backend/tests/fakes => backend/backend/tests}/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/conftest.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/data/dialogsum_converted.csv (100%) rename lumigator/{lumigator => }/backend/backend/tests/data/health_job_metadata.json (100%) rename lumigator/{lumigator => }/backend/backend/tests/data/health_job_metadata_ray.json (100%) rename lumigator/{lumigator => }/backend/backend/tests/data/models.json (100%) rename lumigator/{lumigator => }/backend/backend/tests/data/ray_version.json (100%) rename lumigator/{lumigator/backend/backend/tests/integration => backend/backend/tests/fakes}/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/fakes/fake_s3.py (100%) rename lumigator/{lumigator/backend/backend/tests/integration/api => backend/backend/tests/integration}/__init__.py (100%) rename lumigator/{lumigator/backend/backend/tests/integration/api/routes => backend/backend/tests/integration/api}/__init__.py (100%) rename lumigator/{lumigator/backend/backend/tests/integration/services => backend/backend/tests/integration/api/routes}/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/integration/api/routes/test_api_workflows.py (100%) rename lumigator/{lumigator/backend/backend/tests/unit => backend/backend/tests/integration/services}/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/test_responses.dockerfile (100%) rename lumigator/{lumigator/backend/backend/tests/unit/api => backend/backend/tests/unit}/__init__.py (100%) rename lumigator/{lumigator/backend/backend/tests/unit/api/routes => backend/backend/tests/unit/api}/__init__.py (100%) rename lumigator/{lumigator/backend/backend/tests/unit/repositories => backend/backend/tests/unit/api/routes}/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/api/routes/test_datasets.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/api/routes/test_health.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/api/routes/test_jobs.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/api/routes/test_main.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/api/routes/test_models.py (100%) rename lumigator/{lumigator/backend/backend/tests/unit/services => backend/backend/tests/unit/repositories}/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/repositories/test_experiments.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/repositories/test_jobs.py (100%) rename lumigator/{lumigator/jobs/evaluator => backend/backend/tests/unit/services}/__init__.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/services/test_dataset_service.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/services/test_job_service.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/test_ray_submit.py (100%) rename lumigator/{lumigator => }/backend/backend/tests/unit/test_settings.py (100%) rename lumigator/{lumigator => }/backend/pyproject.toml (100%) rename lumigator/{lumigator => }/backend/uv.lock (100%) rename {frontend => lumigator/frontend}/.gitignore (100%) rename {frontend => lumigator/frontend}/.prettierrc (100%) rename {frontend => lumigator/frontend}/.vscode/extensions.json (100%) rename {frontend => lumigator/frontend}/Dockerfile (100%) rename {frontend => lumigator/frontend}/README.md (100%) rename {frontend => lumigator/frontend}/eslint.config.js (100%) rename {frontend => lumigator/frontend}/index.html (100%) rename {frontend => lumigator/frontend}/nginx/default.conf.template (100%) rename {frontend => lumigator/frontend}/package-lock.json (100%) rename {frontend => lumigator/frontend}/package.json (100%) rename {frontend => lumigator/frontend}/public/lumigator.svg (100%) rename {frontend => lumigator/frontend}/src/.editorconfig (100%) rename {frontend => lumigator/frontend}/src/App.vue (100%) rename {frontend => lumigator/frontend}/src/assets/LogoText.svg (100%) rename {frontend => lumigator/frontend}/src/assets/icons/BinIcon.svg (100%) rename {frontend => lumigator/frontend}/src/assets/icons/DatasetsIcon.svg (100%) rename {frontend => lumigator/frontend}/src/assets/icons/DownloadIcon.svg (100%) rename {frontend => lumigator/frontend}/src/assets/icons/ExperimentIcon.svg (100%) rename {frontend => lumigator/frontend}/src/assets/lumigator.svg (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LDatasetEmpty.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LDatasetTable.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LExperimentDetails.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LExperimentForm.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LExperimentLogs.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LExperimentTable.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LExperimentTabs.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LExperimentsDrawer.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LExperimentsEmpty.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LFileUpload.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LGenerateGroundTruthPopup.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LHealthStatus.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LInferenceJobsTable.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LJobResults.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LJobsTable.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LModelCards.vue (100%) rename {frontend => lumigator/frontend}/src/components/molecules/LPageHeader.vue (100%) rename {frontend => lumigator/frontend}/src/components/organisms/LDatasetDetails.vue (100%) rename {frontend => lumigator/frontend}/src/components/organisms/LExperimentResults.vue (100%) rename {frontend => lumigator/frontend}/src/components/organisms/LMenu.vue (100%) rename {frontend => lumigator/frontend}/src/components/pages/LDatasets.vue (100%) rename {frontend => lumigator/frontend}/src/components/pages/LExperiments.vue (100%) rename {frontend => lumigator/frontend}/src/composables/SlidingPanel.js (100%) rename {frontend => lumigator/frontend}/src/helpers/index.js (100%) rename {frontend => lumigator/frontend}/src/libs/primevue.config.js (100%) rename {frontend => lumigator/frontend}/src/main.js (100%) rename {frontend => lumigator/frontend}/src/router/index.js (100%) rename {frontend => lumigator/frontend}/src/services/datasets/api.js (100%) rename {frontend => lumigator/frontend}/src/services/datasets/datasetsService.js (100%) rename {frontend => lumigator/frontend}/src/services/experiments/api.js (100%) rename {frontend => lumigator/frontend}/src/services/experiments/experimentService.js (100%) rename {frontend => lumigator/frontend}/src/services/health/api.js (100%) rename {frontend => lumigator/frontend}/src/services/health/healthService.js (100%) rename {frontend => lumigator/frontend}/src/services/http/index.js (100%) rename {frontend => lumigator/frontend}/src/services/models/api.js (100%) rename {frontend => lumigator/frontend}/src/services/models/modelsService.js (100%) rename {frontend => lumigator/frontend}/src/stores/datasets/store.js (100%) rename {frontend => lumigator/frontend}/src/stores/experiments/store.js (100%) rename {frontend => lumigator/frontend}/src/stores/health/store.js (100%) rename {frontend => lumigator/frontend}/src/stores/models/store.js (100%) rename {frontend => lumigator/frontend}/src/styles/_components.scss (100%) rename {frontend => lumigator/frontend}/src/styles/_icons.scss (100%) rename {frontend => lumigator/frontend}/src/styles/_lumigator-theme.scss (100%) rename {frontend => lumigator/frontend}/src/styles/_resetcss.scss (100%) rename {frontend => lumigator/frontend}/src/styles/_transitions.scss (100%) rename {frontend => lumigator/frontend}/src/styles/_typography.scss (100%) rename {frontend => lumigator/frontend}/src/styles/_variables.scss (100%) rename {frontend => lumigator/frontend}/src/styles/app.scss (100%) rename {frontend => lumigator/frontend}/vite.config.js (100%) rename lumigator/{lumigator => }/jobs/evaluator/README.md (100%) rename lumigator/{lumigator/jobs/evaluator => jobs}/evaluator/__init__.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/configs => jobs/evaluator/evaluator}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/__main__.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/jobs => jobs/evaluator/evaluator/configs}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/configs/common.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/configs/huggingface.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/configs/jobs/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/configs/jobs/common.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/configs/jobs/lm_harness.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/configs/vllm.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/configs/wandb.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/constants.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/entrypoint.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/jobs/evaluation => jobs/evaluator/evaluator/jobs}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/jobs/asset_loader.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/jobs/common.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests => jobs/evaluator/evaluator/jobs/evaluation}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/jobs/evaluation/conversation.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/jobs/evaluation/metrics.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/jobs/model_clients.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/jobs/utils.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/paths.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/preprocessing.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/integration => jobs/evaluator/evaluator/tests}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/conftest.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/integration/README.md (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/resources => jobs/evaluator/evaluator/tests/integration}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/integration/conftest.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/README.md (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/resources/datasets => jobs/evaluator/evaluator/tests/resources}/__init__.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare => jobs/evaluator/evaluator/tests/resources/datasets}/__init__.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz => jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/resources/models => jobs/evaluator/evaluator/tests/resources/datasets/xyz}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2 => jobs/evaluator/evaluator/tests/resources/models}/__init__.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/unit => jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/test_utils.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/unit/configs => jobs/evaluator/evaluator/tests/unit}/__init__.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs => jobs/evaluator/evaluator/tests/unit/configs}/__init__.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tests/unit => jobs/evaluator/evaluator/tests/unit/configs}/jobs/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/configs/test_common.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py (100%) rename lumigator/{lumigator/jobs/evaluator/evaluator/tracking => jobs/evaluator/evaluator/tests/unit/jobs}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/test_paths.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py (100%) rename lumigator/{lumigator/jobs/evaluator_lite/tests => jobs/evaluator/evaluator/tracking}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tracking/artifact_utils.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/evaluator/tracking/run_utils.py (100%) rename lumigator/{lumigator => }/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml (100%) rename lumigator/{lumigator => }/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml (100%) rename lumigator/{lumigator => }/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml (100%) rename lumigator/{lumigator => }/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml (100%) rename lumigator/{lumigator => }/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml (100%) rename lumigator/{lumigator => }/jobs/evaluator/requirements.txt (100%) rename lumigator/{lumigator => }/jobs/evaluator_lite/README.md (100%) rename lumigator/{lumigator => }/jobs/evaluator_lite/eval_lite.py (99%) rename lumigator/{lumigator => }/jobs/evaluator_lite/eval_metrics.py (100%) rename lumigator/{lumigator => }/jobs/evaluator_lite/requirements.txt (100%) rename lumigator/{lumigator => }/jobs/evaluator_lite/schemas.py (100%) rename lumigator/{lumigator/jobs/inference => jobs/evaluator_lite}/tests/__init__.py (100%) rename lumigator/{lumigator => }/jobs/evaluator_lite/tests/conftest.py (100%) rename lumigator/{lumigator => }/jobs/evaluator_lite/tests/data/config_full_hf.json (100%) rename lumigator/{lumigator => }/jobs/evaluator_lite/tests/data/config_minimal.json (100%) rename lumigator/{lumigator => }/jobs/evaluator_lite/tests/test_configs.py (99%) rename lumigator/{lumigator => }/jobs/inference/README.md (100%) rename lumigator/{lumigator => }/jobs/inference/inference.py (99%) rename lumigator/{lumigator => }/jobs/inference/inference_config.py (99%) rename lumigator/{lumigator => }/jobs/inference/model_clients.py (100%) rename lumigator/{lumigator => }/jobs/inference/paths.py (100%) rename lumigator/{lumigator => }/jobs/inference/requirements.txt (100%) rename lumigator/{lumigator => }/jobs/inference/requirements_cpu.txt (100%) rename lumigator/{lumigator => }/jobs/inference/schemas.py (100%) rename lumigator/{lumigator/schemas/lumigator_schemas => jobs/inference/tests}/__init__.py (100%) rename lumigator/{lumigator => }/jobs/inference/tests/conftest.py (100%) rename lumigator/{lumigator => }/jobs/inference/tests/data/config_full_api.json (100%) rename lumigator/{lumigator => }/jobs/inference/tests/data/config_full_hf.json (100%) rename lumigator/{lumigator => }/jobs/inference/tests/data/config_minimal.json (100%) rename lumigator/{lumigator => }/jobs/inference/tests/test_configs.py (100%) rename lumigator/{lumigator => }/jobs/inference/utils.py (100%) rename lumigator/{lumigator => }/sample_data/dialogsum_exc.csv (100%) rename lumigator/{lumigator => }/sample_data/dialogsum_mini_all_gt_is_whitespace.csv (100%) rename lumigator/{lumigator => }/sample_data/dialogsum_mini_empty_gt.csv (100%) rename lumigator/{lumigator => }/sample_data/dialogsum_mini_no_gt.csv (100%) rename lumigator/{lumigator => }/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv (100%) rename lumigator/{lumigator => }/schemas/.python-version (100%) rename lumigator/{lumigator => }/schemas/README.md (100%) rename lumigator/{lumigator/sdk/lumigator_sdk => schemas/lumigator_schemas}/__init__.py (100%) rename lumigator/{lumigator => }/schemas/lumigator_schemas/completions.py (100%) rename lumigator/{lumigator => }/schemas/lumigator_schemas/datasets.py (100%) rename lumigator/{lumigator => }/schemas/lumigator_schemas/experiments.py (100%) rename lumigator/{lumigator => }/schemas/lumigator_schemas/extras.py (100%) rename lumigator/{lumigator => }/schemas/lumigator_schemas/jobs.py (100%) rename lumigator/{lumigator => }/schemas/lumigator_schemas/models.py (100%) rename lumigator/{lumigator => }/schemas/pyproject.toml (100%) rename lumigator/{lumigator => }/schemas/uv.lock (100%) rename lumigator/{lumigator => }/sdk/.python-version (100%) rename lumigator/{lumigator => }/sdk/README.md (100%) rename lumigator/{lumigator/sdk/tests => sdk/lumigator_sdk}/__init__.py (100%) rename lumigator/{lumigator => }/sdk/lumigator_sdk/client.py (100%) rename lumigator/{lumigator => }/sdk/lumigator_sdk/completions.py (100%) rename lumigator/{lumigator => }/sdk/lumigator_sdk/experiments.py (100%) rename lumigator/{lumigator => }/sdk/lumigator_sdk/health.py (100%) rename lumigator/{lumigator => }/sdk/lumigator_sdk/jobs.py (100%) rename lumigator/{lumigator => }/sdk/lumigator_sdk/lm_datasets.py (100%) rename lumigator/{lumigator => }/sdk/lumigator_sdk/lumigator.py (100%) rename lumigator/{lumigator => }/sdk/lumigator_sdk/models.py (100%) rename lumigator/{lumigator => }/sdk/lumigator_sdk/strict_schemas.py (100%) rename lumigator/{lumigator => }/sdk/pyproject.toml (100%) rename lumigator/{python/mzai/backend/backend/services/exceptions => sdk/tests}/__init__.py (100%) rename lumigator/{lumigator => }/sdk/tests/conftest.py (100%) rename lumigator/{lumigator => }/sdk/tests/data/dataset.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/datasets.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiment-download-no-experiment.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiment-download.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiment-missing.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiment-post-all.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiment-post-response.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiment-post-simple.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiment-result-no-experiment.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiment-result.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiment.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/experiments.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/job-all.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/job-extra.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/job-minimal.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/job-resp.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/job-submit-resp.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/job.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/jobs-submit.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/jobs.json (100%) rename lumigator/{lumigator => }/sdk/tests/data/models.json (100%) rename lumigator/{lumigator => }/sdk/tests/helpers.py (100%) rename lumigator/{lumigator => }/sdk/tests/integration/test_scenarios.py (100%) rename lumigator/{lumigator => }/sdk/tests/unit/test_completions.py (100%) rename lumigator/{lumigator => }/sdk/tests/unit/test_datasets.py (100%) rename lumigator/{lumigator => }/sdk/tests/unit/test_health.py (100%) rename lumigator/{lumigator => }/sdk/tests/unit/test_jobs.py (100%) rename lumigator/{lumigator => }/sdk/tests/unit/test_models.py (100%) rename lumigator/{lumigator => }/sdk/uv.lock (100%) diff --git a/lumigator/README.md b/lumigator/README.md deleted file mode 100644 index 3a6953ff..00000000 --- a/lumigator/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Lumigator - -Lumigator is an open-source platform developed by [Mozilla.ai](https://www.mozilla.ai/) designed to -help users select the most appropriate language model for their needs. It supports tasks such as -evaluating summarization using sequence-to-sequence models (like BART and BERT) and causal models -(like GPT and Mistral), with plans to expand to other machine learning tasks and use cases in the -future. - -## `infra` Directory - -The `infra` directory contains all necessary infrastructure files for deploying Lumigator, -including: - -- **HELM charts**: For deploying Lumigator on Kubernetes. -- **YAML configuration files**: For deploying Ray clusters. - -## `python` Directory - -The `python` directory contains the source code for the core functionality of Lumigator, -including: - -- **SDK**: A Python SDK for interacting with Lumigator services. -- **Backend API**: The backend API that makes the platform's features available. - -## `frontend` Directory - -The `frontend` directory contains the source code for Lumigator frontend. diff --git a/lumigator/lumigator/backend/.dockerignore b/lumigator/backend/.dockerignore similarity index 100% rename from lumigator/lumigator/backend/.dockerignore rename to lumigator/backend/.dockerignore diff --git a/lumigator/lumigator/backend/.python-version b/lumigator/backend/.python-version similarity index 100% rename from lumigator/lumigator/backend/.python-version rename to lumigator/backend/.python-version diff --git a/lumigator/lumigator/backend/README.md b/lumigator/backend/README.md similarity index 100% rename from lumigator/lumigator/backend/README.md rename to lumigator/backend/README.md diff --git a/lumigator/lumigator/backend/alembic.ini b/lumigator/backend/alembic.ini similarity index 100% rename from lumigator/lumigator/backend/alembic.ini rename to lumigator/backend/alembic.ini diff --git a/lumigator/lumigator/backend/backend/__init__.py b/lumigator/backend/backend/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/__init__.py rename to lumigator/backend/backend/__init__.py diff --git a/lumigator/lumigator/backend/backend/alembic/env.py b/lumigator/backend/backend/alembic/env.py similarity index 99% rename from lumigator/lumigator/backend/backend/alembic/env.py rename to lumigator/backend/backend/alembic/env.py index af9b8d39..e4c10f5e 100644 --- a/lumigator/lumigator/backend/backend/alembic/env.py +++ b/lumigator/backend/backend/alembic/env.py @@ -2,11 +2,12 @@ from logging.config import fileConfig from alembic import context +from sqlalchemy import engine_from_config, pool + from backend.records.base import BaseRecord from backend.records.datasets import * # noqa: F403 from backend.records.experiments import * # noqa: F403 from backend.records.jobs import * # noqa: F403 -from sqlalchemy import engine_from_config, pool """ NOTE: Do NOT remove imports for the data models: backend.records.{package} diff --git a/lumigator/lumigator/backend/backend/alembic/script.py.mako b/lumigator/backend/backend/alembic/script.py.mako similarity index 100% rename from lumigator/lumigator/backend/backend/alembic/script.py.mako rename to lumigator/backend/backend/alembic/script.py.mako diff --git a/lumigator/lumigator/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py b/lumigator/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py similarity index 100% rename from lumigator/lumigator/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py rename to lumigator/backend/backend/alembic/versions/4c0345b3d525_introduce_experiments.py diff --git a/lumigator/lumigator/backend/backend/alembic/versions/e75fa022c781_create_db.py b/lumigator/backend/backend/alembic/versions/e75fa022c781_create_db.py similarity index 100% rename from lumigator/lumigator/backend/backend/alembic/versions/e75fa022c781_create_db.py rename to lumigator/backend/backend/alembic/versions/e75fa022c781_create_db.py diff --git a/lumigator/lumigator/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py b/lumigator/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py similarity index 100% rename from lumigator/lumigator/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py rename to lumigator/backend/backend/alembic/versions/e9679cbc3c36_generated_datasets.py diff --git a/lumigator/lumigator/backend/backend/api/__init__.py b/lumigator/backend/backend/api/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/__init__.py rename to lumigator/backend/backend/api/__init__.py diff --git a/lumigator/lumigator/backend/backend/api/deps.py b/lumigator/backend/backend/api/deps.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/deps.py rename to lumigator/backend/backend/api/deps.py diff --git a/lumigator/lumigator/backend/backend/api/http_headers.py b/lumigator/backend/backend/api/http_headers.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/http_headers.py rename to lumigator/backend/backend/api/http_headers.py diff --git a/lumigator/lumigator/backend/backend/api/router.py b/lumigator/backend/backend/api/router.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/router.py rename to lumigator/backend/backend/api/router.py diff --git a/lumigator/lumigator/backend/backend/api/routes/__init__.py b/lumigator/backend/backend/api/routes/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/routes/__init__.py rename to lumigator/backend/backend/api/routes/__init__.py diff --git a/lumigator/lumigator/backend/backend/api/routes/completions.py b/lumigator/backend/backend/api/routes/completions.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/routes/completions.py rename to lumigator/backend/backend/api/routes/completions.py diff --git a/lumigator/lumigator/backend/backend/api/routes/datasets.py b/lumigator/backend/backend/api/routes/datasets.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/routes/datasets.py rename to lumigator/backend/backend/api/routes/datasets.py diff --git a/lumigator/lumigator/backend/backend/api/routes/experiments.py b/lumigator/backend/backend/api/routes/experiments.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/routes/experiments.py rename to lumigator/backend/backend/api/routes/experiments.py diff --git a/lumigator/lumigator/backend/backend/api/routes/experiments_new.py b/lumigator/backend/backend/api/routes/experiments_new.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/routes/experiments_new.py rename to lumigator/backend/backend/api/routes/experiments_new.py diff --git a/lumigator/lumigator/backend/backend/api/routes/health.py b/lumigator/backend/backend/api/routes/health.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/routes/health.py rename to lumigator/backend/backend/api/routes/health.py diff --git a/lumigator/lumigator/backend/backend/api/routes/jobs.py b/lumigator/backend/backend/api/routes/jobs.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/routes/jobs.py rename to lumigator/backend/backend/api/routes/jobs.py diff --git a/lumigator/lumigator/backend/backend/api/routes/models.py b/lumigator/backend/backend/api/routes/models.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/routes/models.py rename to lumigator/backend/backend/api/routes/models.py diff --git a/lumigator/lumigator/backend/backend/api/tags.py b/lumigator/backend/backend/api/tags.py similarity index 100% rename from lumigator/lumigator/backend/backend/api/tags.py rename to lumigator/backend/backend/api/tags.py diff --git a/lumigator/lumigator/backend/backend/config_templates.py b/lumigator/backend/backend/config_templates.py similarity index 100% rename from lumigator/lumigator/backend/backend/config_templates.py rename to lumigator/backend/backend/config_templates.py diff --git a/lumigator/lumigator/backend/backend/db.py b/lumigator/backend/backend/db.py similarity index 100% rename from lumigator/lumigator/backend/backend/db.py rename to lumigator/backend/backend/db.py diff --git a/lumigator/lumigator/backend/backend/main.py b/lumigator/backend/backend/main.py similarity index 100% rename from lumigator/lumigator/backend/backend/main.py rename to lumigator/backend/backend/main.py diff --git a/lumigator/lumigator/backend/backend/models.yaml b/lumigator/backend/backend/models.yaml similarity index 100% rename from lumigator/lumigator/backend/backend/models.yaml rename to lumigator/backend/backend/models.yaml diff --git a/lumigator/lumigator/backend/backend/ray_submit/submission.py b/lumigator/backend/backend/ray_submit/submission.py similarity index 100% rename from lumigator/lumigator/backend/backend/ray_submit/submission.py rename to lumigator/backend/backend/ray_submit/submission.py diff --git a/lumigator/lumigator/backend/backend/records/__init__.py b/lumigator/backend/backend/records/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/records/__init__.py rename to lumigator/backend/backend/records/__init__.py diff --git a/lumigator/lumigator/backend/backend/records/base.py b/lumigator/backend/backend/records/base.py similarity index 100% rename from lumigator/lumigator/backend/backend/records/base.py rename to lumigator/backend/backend/records/base.py diff --git a/lumigator/lumigator/backend/backend/records/datasets.py b/lumigator/backend/backend/records/datasets.py similarity index 100% rename from lumigator/lumigator/backend/backend/records/datasets.py rename to lumigator/backend/backend/records/datasets.py diff --git a/lumigator/lumigator/backend/backend/records/experiments.py b/lumigator/backend/backend/records/experiments.py similarity index 100% rename from lumigator/lumigator/backend/backend/records/experiments.py rename to lumigator/backend/backend/records/experiments.py diff --git a/lumigator/lumigator/backend/backend/records/jobs.py b/lumigator/backend/backend/records/jobs.py similarity index 100% rename from lumigator/lumigator/backend/backend/records/jobs.py rename to lumigator/backend/backend/records/jobs.py diff --git a/lumigator/lumigator/backend/backend/records/mixins.py b/lumigator/backend/backend/records/mixins.py similarity index 100% rename from lumigator/lumigator/backend/backend/records/mixins.py rename to lumigator/backend/backend/records/mixins.py diff --git a/lumigator/lumigator/backend/backend/repositories/__init__.py b/lumigator/backend/backend/repositories/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/repositories/__init__.py rename to lumigator/backend/backend/repositories/__init__.py diff --git a/lumigator/lumigator/backend/backend/repositories/base.py b/lumigator/backend/backend/repositories/base.py similarity index 100% rename from lumigator/lumigator/backend/backend/repositories/base.py rename to lumigator/backend/backend/repositories/base.py diff --git a/lumigator/lumigator/backend/backend/repositories/datasets.py b/lumigator/backend/backend/repositories/datasets.py similarity index 100% rename from lumigator/lumigator/backend/backend/repositories/datasets.py rename to lumigator/backend/backend/repositories/datasets.py diff --git a/lumigator/lumigator/backend/backend/repositories/experiments.py b/lumigator/backend/backend/repositories/experiments.py similarity index 100% rename from lumigator/lumigator/backend/backend/repositories/experiments.py rename to lumigator/backend/backend/repositories/experiments.py diff --git a/lumigator/lumigator/backend/backend/repositories/jobs.py b/lumigator/backend/backend/repositories/jobs.py similarity index 100% rename from lumigator/lumigator/backend/backend/repositories/jobs.py rename to lumigator/backend/backend/repositories/jobs.py diff --git a/lumigator/lumigator/backend/backend/services/__init__.py b/lumigator/backend/backend/services/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/services/__init__.py rename to lumigator/backend/backend/services/__init__.py diff --git a/lumigator/lumigator/backend/backend/services/completions.py b/lumigator/backend/backend/services/completions.py similarity index 100% rename from lumigator/lumigator/backend/backend/services/completions.py rename to lumigator/backend/backend/services/completions.py diff --git a/lumigator/lumigator/backend/backend/services/datasets.py b/lumigator/backend/backend/services/datasets.py similarity index 100% rename from lumigator/lumigator/backend/backend/services/datasets.py rename to lumigator/backend/backend/services/datasets.py diff --git a/lumigator/lumigator/backend/backend/tests/__init__.py b/lumigator/backend/backend/services/exceptions/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/__init__.py rename to lumigator/backend/backend/services/exceptions/__init__.py diff --git a/lumigator/python/mzai/backend/backend/services/exceptions/base_exceptions.py b/lumigator/backend/backend/services/exceptions/base_exceptions.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/exceptions/base_exceptions.py rename to lumigator/backend/backend/services/exceptions/base_exceptions.py diff --git a/lumigator/python/mzai/backend/backend/services/exceptions/completion_exceptions.py b/lumigator/backend/backend/services/exceptions/completion_exceptions.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/exceptions/completion_exceptions.py rename to lumigator/backend/backend/services/exceptions/completion_exceptions.py diff --git a/lumigator/python/mzai/backend/backend/services/exceptions/dataset_exceptions.py b/lumigator/backend/backend/services/exceptions/dataset_exceptions.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/exceptions/dataset_exceptions.py rename to lumigator/backend/backend/services/exceptions/dataset_exceptions.py diff --git a/lumigator/python/mzai/backend/backend/services/exceptions/job_exceptions.py b/lumigator/backend/backend/services/exceptions/job_exceptions.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/exceptions/job_exceptions.py rename to lumigator/backend/backend/services/exceptions/job_exceptions.py diff --git a/lumigator/lumigator/backend/backend/services/experiments.py b/lumigator/backend/backend/services/experiments.py similarity index 100% rename from lumigator/lumigator/backend/backend/services/experiments.py rename to lumigator/backend/backend/services/experiments.py diff --git a/lumigator/lumigator/backend/backend/services/jobs.py b/lumigator/backend/backend/services/jobs.py similarity index 100% rename from lumigator/lumigator/backend/backend/services/jobs.py rename to lumigator/backend/backend/services/jobs.py diff --git a/lumigator/lumigator/backend/backend/settings.py b/lumigator/backend/backend/settings.py similarity index 100% rename from lumigator/lumigator/backend/backend/settings.py rename to lumigator/backend/backend/settings.py diff --git a/lumigator/lumigator/backend/backend/tests/README.md b/lumigator/backend/backend/tests/README.md similarity index 100% rename from lumigator/lumigator/backend/backend/tests/README.md rename to lumigator/backend/backend/tests/README.md diff --git a/lumigator/lumigator/backend/backend/tests/fakes/__init__.py b/lumigator/backend/backend/tests/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/fakes/__init__.py rename to lumigator/backend/backend/tests/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/conftest.py b/lumigator/backend/backend/tests/conftest.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/conftest.py rename to lumigator/backend/backend/tests/conftest.py diff --git a/lumigator/lumigator/backend/backend/tests/data/dialogsum_converted.csv b/lumigator/backend/backend/tests/data/dialogsum_converted.csv similarity index 100% rename from lumigator/lumigator/backend/backend/tests/data/dialogsum_converted.csv rename to lumigator/backend/backend/tests/data/dialogsum_converted.csv diff --git a/lumigator/lumigator/backend/backend/tests/data/health_job_metadata.json b/lumigator/backend/backend/tests/data/health_job_metadata.json similarity index 100% rename from lumigator/lumigator/backend/backend/tests/data/health_job_metadata.json rename to lumigator/backend/backend/tests/data/health_job_metadata.json diff --git a/lumigator/lumigator/backend/backend/tests/data/health_job_metadata_ray.json b/lumigator/backend/backend/tests/data/health_job_metadata_ray.json similarity index 100% rename from lumigator/lumigator/backend/backend/tests/data/health_job_metadata_ray.json rename to lumigator/backend/backend/tests/data/health_job_metadata_ray.json diff --git a/lumigator/lumigator/backend/backend/tests/data/models.json b/lumigator/backend/backend/tests/data/models.json similarity index 100% rename from lumigator/lumigator/backend/backend/tests/data/models.json rename to lumigator/backend/backend/tests/data/models.json diff --git a/lumigator/lumigator/backend/backend/tests/data/ray_version.json b/lumigator/backend/backend/tests/data/ray_version.json similarity index 100% rename from lumigator/lumigator/backend/backend/tests/data/ray_version.json rename to lumigator/backend/backend/tests/data/ray_version.json diff --git a/lumigator/lumigator/backend/backend/tests/integration/__init__.py b/lumigator/backend/backend/tests/fakes/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/integration/__init__.py rename to lumigator/backend/backend/tests/fakes/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/fakes/fake_s3.py b/lumigator/backend/backend/tests/fakes/fake_s3.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/fakes/fake_s3.py rename to lumigator/backend/backend/tests/fakes/fake_s3.py diff --git a/lumigator/lumigator/backend/backend/tests/integration/api/__init__.py b/lumigator/backend/backend/tests/integration/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/integration/api/__init__.py rename to lumigator/backend/backend/tests/integration/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/integration/api/routes/__init__.py b/lumigator/backend/backend/tests/integration/api/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/integration/api/routes/__init__.py rename to lumigator/backend/backend/tests/integration/api/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/integration/services/__init__.py b/lumigator/backend/backend/tests/integration/api/routes/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/integration/services/__init__.py rename to lumigator/backend/backend/tests/integration/api/routes/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/integration/api/routes/test_api_workflows.py b/lumigator/backend/backend/tests/integration/api/routes/test_api_workflows.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/integration/api/routes/test_api_workflows.py rename to lumigator/backend/backend/tests/integration/api/routes/test_api_workflows.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/__init__.py b/lumigator/backend/backend/tests/integration/services/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/__init__.py rename to lumigator/backend/backend/tests/integration/services/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/test_responses.dockerfile b/lumigator/backend/backend/tests/test_responses.dockerfile similarity index 100% rename from lumigator/lumigator/backend/backend/tests/test_responses.dockerfile rename to lumigator/backend/backend/tests/test_responses.dockerfile diff --git a/lumigator/lumigator/backend/backend/tests/unit/api/__init__.py b/lumigator/backend/backend/tests/unit/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/api/__init__.py rename to lumigator/backend/backend/tests/unit/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/api/routes/__init__.py b/lumigator/backend/backend/tests/unit/api/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/api/routes/__init__.py rename to lumigator/backend/backend/tests/unit/api/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/repositories/__init__.py b/lumigator/backend/backend/tests/unit/api/routes/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/repositories/__init__.py rename to lumigator/backend/backend/tests/unit/api/routes/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_datasets.py b/lumigator/backend/backend/tests/unit/api/routes/test_datasets.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/api/routes/test_datasets.py rename to lumigator/backend/backend/tests/unit/api/routes/test_datasets.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_health.py b/lumigator/backend/backend/tests/unit/api/routes/test_health.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/api/routes/test_health.py rename to lumigator/backend/backend/tests/unit/api/routes/test_health.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_jobs.py b/lumigator/backend/backend/tests/unit/api/routes/test_jobs.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/api/routes/test_jobs.py rename to lumigator/backend/backend/tests/unit/api/routes/test_jobs.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_main.py b/lumigator/backend/backend/tests/unit/api/routes/test_main.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/api/routes/test_main.py rename to lumigator/backend/backend/tests/unit/api/routes/test_main.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/api/routes/test_models.py b/lumigator/backend/backend/tests/unit/api/routes/test_models.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/api/routes/test_models.py rename to lumigator/backend/backend/tests/unit/api/routes/test_models.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/services/__init__.py b/lumigator/backend/backend/tests/unit/repositories/__init__.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/services/__init__.py rename to lumigator/backend/backend/tests/unit/repositories/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/repositories/test_experiments.py b/lumigator/backend/backend/tests/unit/repositories/test_experiments.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/repositories/test_experiments.py rename to lumigator/backend/backend/tests/unit/repositories/test_experiments.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/repositories/test_jobs.py b/lumigator/backend/backend/tests/unit/repositories/test_jobs.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/repositories/test_jobs.py rename to lumigator/backend/backend/tests/unit/repositories/test_jobs.py diff --git a/lumigator/lumigator/jobs/evaluator/__init__.py b/lumigator/backend/backend/tests/unit/services/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/__init__.py rename to lumigator/backend/backend/tests/unit/services/__init__.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/services/test_dataset_service.py b/lumigator/backend/backend/tests/unit/services/test_dataset_service.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/services/test_dataset_service.py rename to lumigator/backend/backend/tests/unit/services/test_dataset_service.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/services/test_job_service.py b/lumigator/backend/backend/tests/unit/services/test_job_service.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/services/test_job_service.py rename to lumigator/backend/backend/tests/unit/services/test_job_service.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/test_ray_submit.py b/lumigator/backend/backend/tests/unit/test_ray_submit.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/test_ray_submit.py rename to lumigator/backend/backend/tests/unit/test_ray_submit.py diff --git a/lumigator/lumigator/backend/backend/tests/unit/test_settings.py b/lumigator/backend/backend/tests/unit/test_settings.py similarity index 100% rename from lumigator/lumigator/backend/backend/tests/unit/test_settings.py rename to lumigator/backend/backend/tests/unit/test_settings.py diff --git a/lumigator/lumigator/backend/pyproject.toml b/lumigator/backend/pyproject.toml similarity index 100% rename from lumigator/lumigator/backend/pyproject.toml rename to lumigator/backend/pyproject.toml diff --git a/lumigator/lumigator/backend/uv.lock b/lumigator/backend/uv.lock similarity index 100% rename from lumigator/lumigator/backend/uv.lock rename to lumigator/backend/uv.lock diff --git a/frontend/.gitignore b/lumigator/frontend/.gitignore similarity index 100% rename from frontend/.gitignore rename to lumigator/frontend/.gitignore diff --git a/frontend/.prettierrc b/lumigator/frontend/.prettierrc similarity index 100% rename from frontend/.prettierrc rename to lumigator/frontend/.prettierrc diff --git a/frontend/.vscode/extensions.json b/lumigator/frontend/.vscode/extensions.json similarity index 100% rename from frontend/.vscode/extensions.json rename to lumigator/frontend/.vscode/extensions.json diff --git a/frontend/Dockerfile b/lumigator/frontend/Dockerfile similarity index 100% rename from frontend/Dockerfile rename to lumigator/frontend/Dockerfile diff --git a/frontend/README.md b/lumigator/frontend/README.md similarity index 100% rename from frontend/README.md rename to lumigator/frontend/README.md diff --git a/frontend/eslint.config.js b/lumigator/frontend/eslint.config.js similarity index 100% rename from frontend/eslint.config.js rename to lumigator/frontend/eslint.config.js diff --git a/frontend/index.html b/lumigator/frontend/index.html similarity index 100% rename from frontend/index.html rename to lumigator/frontend/index.html diff --git a/frontend/nginx/default.conf.template b/lumigator/frontend/nginx/default.conf.template similarity index 100% rename from frontend/nginx/default.conf.template rename to lumigator/frontend/nginx/default.conf.template diff --git a/frontend/package-lock.json b/lumigator/frontend/package-lock.json similarity index 100% rename from frontend/package-lock.json rename to lumigator/frontend/package-lock.json diff --git a/frontend/package.json b/lumigator/frontend/package.json similarity index 100% rename from frontend/package.json rename to lumigator/frontend/package.json diff --git a/frontend/public/lumigator.svg b/lumigator/frontend/public/lumigator.svg similarity index 100% rename from frontend/public/lumigator.svg rename to lumigator/frontend/public/lumigator.svg diff --git a/frontend/src/.editorconfig b/lumigator/frontend/src/.editorconfig similarity index 100% rename from frontend/src/.editorconfig rename to lumigator/frontend/src/.editorconfig diff --git a/frontend/src/App.vue b/lumigator/frontend/src/App.vue similarity index 100% rename from frontend/src/App.vue rename to lumigator/frontend/src/App.vue diff --git a/frontend/src/assets/LogoText.svg b/lumigator/frontend/src/assets/LogoText.svg similarity index 100% rename from frontend/src/assets/LogoText.svg rename to lumigator/frontend/src/assets/LogoText.svg diff --git a/frontend/src/assets/icons/BinIcon.svg b/lumigator/frontend/src/assets/icons/BinIcon.svg similarity index 100% rename from frontend/src/assets/icons/BinIcon.svg rename to lumigator/frontend/src/assets/icons/BinIcon.svg diff --git a/frontend/src/assets/icons/DatasetsIcon.svg b/lumigator/frontend/src/assets/icons/DatasetsIcon.svg similarity index 100% rename from frontend/src/assets/icons/DatasetsIcon.svg rename to lumigator/frontend/src/assets/icons/DatasetsIcon.svg diff --git a/frontend/src/assets/icons/DownloadIcon.svg b/lumigator/frontend/src/assets/icons/DownloadIcon.svg similarity index 100% rename from frontend/src/assets/icons/DownloadIcon.svg rename to lumigator/frontend/src/assets/icons/DownloadIcon.svg diff --git a/frontend/src/assets/icons/ExperimentIcon.svg b/lumigator/frontend/src/assets/icons/ExperimentIcon.svg similarity index 100% rename from frontend/src/assets/icons/ExperimentIcon.svg rename to lumigator/frontend/src/assets/icons/ExperimentIcon.svg diff --git a/frontend/src/assets/lumigator.svg b/lumigator/frontend/src/assets/lumigator.svg similarity index 100% rename from frontend/src/assets/lumigator.svg rename to lumigator/frontend/src/assets/lumigator.svg diff --git a/frontend/src/components/molecules/LDatasetEmpty.vue b/lumigator/frontend/src/components/molecules/LDatasetEmpty.vue similarity index 100% rename from frontend/src/components/molecules/LDatasetEmpty.vue rename to lumigator/frontend/src/components/molecules/LDatasetEmpty.vue diff --git a/frontend/src/components/molecules/LDatasetTable.vue b/lumigator/frontend/src/components/molecules/LDatasetTable.vue similarity index 100% rename from frontend/src/components/molecules/LDatasetTable.vue rename to lumigator/frontend/src/components/molecules/LDatasetTable.vue diff --git a/frontend/src/components/molecules/LExperimentDetails.vue b/lumigator/frontend/src/components/molecules/LExperimentDetails.vue similarity index 100% rename from frontend/src/components/molecules/LExperimentDetails.vue rename to lumigator/frontend/src/components/molecules/LExperimentDetails.vue diff --git a/frontend/src/components/molecules/LExperimentForm.vue b/lumigator/frontend/src/components/molecules/LExperimentForm.vue similarity index 100% rename from frontend/src/components/molecules/LExperimentForm.vue rename to lumigator/frontend/src/components/molecules/LExperimentForm.vue diff --git a/frontend/src/components/molecules/LExperimentLogs.vue b/lumigator/frontend/src/components/molecules/LExperimentLogs.vue similarity index 100% rename from frontend/src/components/molecules/LExperimentLogs.vue rename to lumigator/frontend/src/components/molecules/LExperimentLogs.vue diff --git a/frontend/src/components/molecules/LExperimentTable.vue b/lumigator/frontend/src/components/molecules/LExperimentTable.vue similarity index 100% rename from frontend/src/components/molecules/LExperimentTable.vue rename to lumigator/frontend/src/components/molecules/LExperimentTable.vue diff --git a/frontend/src/components/molecules/LExperimentTabs.vue b/lumigator/frontend/src/components/molecules/LExperimentTabs.vue similarity index 100% rename from frontend/src/components/molecules/LExperimentTabs.vue rename to lumigator/frontend/src/components/molecules/LExperimentTabs.vue diff --git a/frontend/src/components/molecules/LExperimentsDrawer.vue b/lumigator/frontend/src/components/molecules/LExperimentsDrawer.vue similarity index 100% rename from frontend/src/components/molecules/LExperimentsDrawer.vue rename to lumigator/frontend/src/components/molecules/LExperimentsDrawer.vue diff --git a/frontend/src/components/molecules/LExperimentsEmpty.vue b/lumigator/frontend/src/components/molecules/LExperimentsEmpty.vue similarity index 100% rename from frontend/src/components/molecules/LExperimentsEmpty.vue rename to lumigator/frontend/src/components/molecules/LExperimentsEmpty.vue diff --git a/frontend/src/components/molecules/LFileUpload.vue b/lumigator/frontend/src/components/molecules/LFileUpload.vue similarity index 100% rename from frontend/src/components/molecules/LFileUpload.vue rename to lumigator/frontend/src/components/molecules/LFileUpload.vue diff --git a/frontend/src/components/molecules/LGenerateGroundTruthPopup.vue b/lumigator/frontend/src/components/molecules/LGenerateGroundTruthPopup.vue similarity index 100% rename from frontend/src/components/molecules/LGenerateGroundTruthPopup.vue rename to lumigator/frontend/src/components/molecules/LGenerateGroundTruthPopup.vue diff --git a/frontend/src/components/molecules/LHealthStatus.vue b/lumigator/frontend/src/components/molecules/LHealthStatus.vue similarity index 100% rename from frontend/src/components/molecules/LHealthStatus.vue rename to lumigator/frontend/src/components/molecules/LHealthStatus.vue diff --git a/frontend/src/components/molecules/LInferenceJobsTable.vue b/lumigator/frontend/src/components/molecules/LInferenceJobsTable.vue similarity index 100% rename from frontend/src/components/molecules/LInferenceJobsTable.vue rename to lumigator/frontend/src/components/molecules/LInferenceJobsTable.vue diff --git a/frontend/src/components/molecules/LJobResults.vue b/lumigator/frontend/src/components/molecules/LJobResults.vue similarity index 100% rename from frontend/src/components/molecules/LJobResults.vue rename to lumigator/frontend/src/components/molecules/LJobResults.vue diff --git a/frontend/src/components/molecules/LJobsTable.vue b/lumigator/frontend/src/components/molecules/LJobsTable.vue similarity index 100% rename from frontend/src/components/molecules/LJobsTable.vue rename to lumigator/frontend/src/components/molecules/LJobsTable.vue diff --git a/frontend/src/components/molecules/LModelCards.vue b/lumigator/frontend/src/components/molecules/LModelCards.vue similarity index 100% rename from frontend/src/components/molecules/LModelCards.vue rename to lumigator/frontend/src/components/molecules/LModelCards.vue diff --git a/frontend/src/components/molecules/LPageHeader.vue b/lumigator/frontend/src/components/molecules/LPageHeader.vue similarity index 100% rename from frontend/src/components/molecules/LPageHeader.vue rename to lumigator/frontend/src/components/molecules/LPageHeader.vue diff --git a/frontend/src/components/organisms/LDatasetDetails.vue b/lumigator/frontend/src/components/organisms/LDatasetDetails.vue similarity index 100% rename from frontend/src/components/organisms/LDatasetDetails.vue rename to lumigator/frontend/src/components/organisms/LDatasetDetails.vue diff --git a/frontend/src/components/organisms/LExperimentResults.vue b/lumigator/frontend/src/components/organisms/LExperimentResults.vue similarity index 100% rename from frontend/src/components/organisms/LExperimentResults.vue rename to lumigator/frontend/src/components/organisms/LExperimentResults.vue diff --git a/frontend/src/components/organisms/LMenu.vue b/lumigator/frontend/src/components/organisms/LMenu.vue similarity index 100% rename from frontend/src/components/organisms/LMenu.vue rename to lumigator/frontend/src/components/organisms/LMenu.vue diff --git a/frontend/src/components/pages/LDatasets.vue b/lumigator/frontend/src/components/pages/LDatasets.vue similarity index 100% rename from frontend/src/components/pages/LDatasets.vue rename to lumigator/frontend/src/components/pages/LDatasets.vue diff --git a/frontend/src/components/pages/LExperiments.vue b/lumigator/frontend/src/components/pages/LExperiments.vue similarity index 100% rename from frontend/src/components/pages/LExperiments.vue rename to lumigator/frontend/src/components/pages/LExperiments.vue diff --git a/frontend/src/composables/SlidingPanel.js b/lumigator/frontend/src/composables/SlidingPanel.js similarity index 100% rename from frontend/src/composables/SlidingPanel.js rename to lumigator/frontend/src/composables/SlidingPanel.js diff --git a/frontend/src/helpers/index.js b/lumigator/frontend/src/helpers/index.js similarity index 100% rename from frontend/src/helpers/index.js rename to lumigator/frontend/src/helpers/index.js diff --git a/frontend/src/libs/primevue.config.js b/lumigator/frontend/src/libs/primevue.config.js similarity index 100% rename from frontend/src/libs/primevue.config.js rename to lumigator/frontend/src/libs/primevue.config.js diff --git a/frontend/src/main.js b/lumigator/frontend/src/main.js similarity index 100% rename from frontend/src/main.js rename to lumigator/frontend/src/main.js diff --git a/frontend/src/router/index.js b/lumigator/frontend/src/router/index.js similarity index 100% rename from frontend/src/router/index.js rename to lumigator/frontend/src/router/index.js diff --git a/frontend/src/services/datasets/api.js b/lumigator/frontend/src/services/datasets/api.js similarity index 100% rename from frontend/src/services/datasets/api.js rename to lumigator/frontend/src/services/datasets/api.js diff --git a/frontend/src/services/datasets/datasetsService.js b/lumigator/frontend/src/services/datasets/datasetsService.js similarity index 100% rename from frontend/src/services/datasets/datasetsService.js rename to lumigator/frontend/src/services/datasets/datasetsService.js diff --git a/frontend/src/services/experiments/api.js b/lumigator/frontend/src/services/experiments/api.js similarity index 100% rename from frontend/src/services/experiments/api.js rename to lumigator/frontend/src/services/experiments/api.js diff --git a/frontend/src/services/experiments/experimentService.js b/lumigator/frontend/src/services/experiments/experimentService.js similarity index 100% rename from frontend/src/services/experiments/experimentService.js rename to lumigator/frontend/src/services/experiments/experimentService.js diff --git a/frontend/src/services/health/api.js b/lumigator/frontend/src/services/health/api.js similarity index 100% rename from frontend/src/services/health/api.js rename to lumigator/frontend/src/services/health/api.js diff --git a/frontend/src/services/health/healthService.js b/lumigator/frontend/src/services/health/healthService.js similarity index 100% rename from frontend/src/services/health/healthService.js rename to lumigator/frontend/src/services/health/healthService.js diff --git a/frontend/src/services/http/index.js b/lumigator/frontend/src/services/http/index.js similarity index 100% rename from frontend/src/services/http/index.js rename to lumigator/frontend/src/services/http/index.js diff --git a/frontend/src/services/models/api.js b/lumigator/frontend/src/services/models/api.js similarity index 100% rename from frontend/src/services/models/api.js rename to lumigator/frontend/src/services/models/api.js diff --git a/frontend/src/services/models/modelsService.js b/lumigator/frontend/src/services/models/modelsService.js similarity index 100% rename from frontend/src/services/models/modelsService.js rename to lumigator/frontend/src/services/models/modelsService.js diff --git a/frontend/src/stores/datasets/store.js b/lumigator/frontend/src/stores/datasets/store.js similarity index 100% rename from frontend/src/stores/datasets/store.js rename to lumigator/frontend/src/stores/datasets/store.js diff --git a/frontend/src/stores/experiments/store.js b/lumigator/frontend/src/stores/experiments/store.js similarity index 100% rename from frontend/src/stores/experiments/store.js rename to lumigator/frontend/src/stores/experiments/store.js diff --git a/frontend/src/stores/health/store.js b/lumigator/frontend/src/stores/health/store.js similarity index 100% rename from frontend/src/stores/health/store.js rename to lumigator/frontend/src/stores/health/store.js diff --git a/frontend/src/stores/models/store.js b/lumigator/frontend/src/stores/models/store.js similarity index 100% rename from frontend/src/stores/models/store.js rename to lumigator/frontend/src/stores/models/store.js diff --git a/frontend/src/styles/_components.scss b/lumigator/frontend/src/styles/_components.scss similarity index 100% rename from frontend/src/styles/_components.scss rename to lumigator/frontend/src/styles/_components.scss diff --git a/frontend/src/styles/_icons.scss b/lumigator/frontend/src/styles/_icons.scss similarity index 100% rename from frontend/src/styles/_icons.scss rename to lumigator/frontend/src/styles/_icons.scss diff --git a/frontend/src/styles/_lumigator-theme.scss b/lumigator/frontend/src/styles/_lumigator-theme.scss similarity index 100% rename from frontend/src/styles/_lumigator-theme.scss rename to lumigator/frontend/src/styles/_lumigator-theme.scss diff --git a/frontend/src/styles/_resetcss.scss b/lumigator/frontend/src/styles/_resetcss.scss similarity index 100% rename from frontend/src/styles/_resetcss.scss rename to lumigator/frontend/src/styles/_resetcss.scss diff --git a/frontend/src/styles/_transitions.scss b/lumigator/frontend/src/styles/_transitions.scss similarity index 100% rename from frontend/src/styles/_transitions.scss rename to lumigator/frontend/src/styles/_transitions.scss diff --git a/frontend/src/styles/_typography.scss b/lumigator/frontend/src/styles/_typography.scss similarity index 100% rename from frontend/src/styles/_typography.scss rename to lumigator/frontend/src/styles/_typography.scss diff --git a/frontend/src/styles/_variables.scss b/lumigator/frontend/src/styles/_variables.scss similarity index 100% rename from frontend/src/styles/_variables.scss rename to lumigator/frontend/src/styles/_variables.scss diff --git a/frontend/src/styles/app.scss b/lumigator/frontend/src/styles/app.scss similarity index 100% rename from frontend/src/styles/app.scss rename to lumigator/frontend/src/styles/app.scss diff --git a/frontend/vite.config.js b/lumigator/frontend/vite.config.js similarity index 100% rename from frontend/vite.config.js rename to lumigator/frontend/vite.config.js diff --git a/lumigator/lumigator/jobs/evaluator/README.md b/lumigator/jobs/evaluator/README.md similarity index 100% rename from lumigator/lumigator/jobs/evaluator/README.md rename to lumigator/jobs/evaluator/README.md diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/__init__.py b/lumigator/jobs/evaluator/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/__init__.py rename to lumigator/jobs/evaluator/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/configs/__init__.py b/lumigator/jobs/evaluator/evaluator/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/configs/__init__.py rename to lumigator/jobs/evaluator/evaluator/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/__main__.py b/lumigator/jobs/evaluator/evaluator/__main__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/__main__.py rename to lumigator/jobs/evaluator/evaluator/__main__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/__init__.py b/lumigator/jobs/evaluator/evaluator/configs/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/__init__.py rename to lumigator/jobs/evaluator/evaluator/configs/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/configs/common.py b/lumigator/jobs/evaluator/evaluator/configs/common.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/configs/common.py rename to lumigator/jobs/evaluator/evaluator/configs/common.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/configs/huggingface.py b/lumigator/jobs/evaluator/evaluator/configs/huggingface.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/configs/huggingface.py rename to lumigator/jobs/evaluator/evaluator/configs/huggingface.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/__init__.py b/lumigator/jobs/evaluator/evaluator/configs/jobs/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/__init__.py rename to lumigator/jobs/evaluator/evaluator/configs/jobs/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/common.py b/lumigator/jobs/evaluator/evaluator/configs/jobs/common.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/common.py rename to lumigator/jobs/evaluator/evaluator/configs/jobs/common.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py b/lumigator/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py rename to lumigator/jobs/evaluator/evaluator/configs/jobs/hf_evaluate.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/lm_harness.py b/lumigator/jobs/evaluator/evaluator/configs/jobs/lm_harness.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/configs/jobs/lm_harness.py rename to lumigator/jobs/evaluator/evaluator/configs/jobs/lm_harness.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/configs/vllm.py b/lumigator/jobs/evaluator/evaluator/configs/vllm.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/configs/vllm.py rename to lumigator/jobs/evaluator/evaluator/configs/vllm.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/configs/wandb.py b/lumigator/jobs/evaluator/evaluator/configs/wandb.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/configs/wandb.py rename to lumigator/jobs/evaluator/evaluator/configs/wandb.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/constants.py b/lumigator/jobs/evaluator/evaluator/constants.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/constants.py rename to lumigator/jobs/evaluator/evaluator/constants.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/entrypoint.py b/lumigator/jobs/evaluator/evaluator/entrypoint.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/entrypoint.py rename to lumigator/jobs/evaluator/evaluator/entrypoint.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/__init__.py b/lumigator/jobs/evaluator/evaluator/jobs/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/__init__.py rename to lumigator/jobs/evaluator/evaluator/jobs/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/asset_loader.py b/lumigator/jobs/evaluator/evaluator/jobs/asset_loader.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/asset_loader.py rename to lumigator/jobs/evaluator/evaluator/jobs/asset_loader.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/common.py b/lumigator/jobs/evaluator/evaluator/jobs/common.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/common.py rename to lumigator/jobs/evaluator/evaluator/jobs/common.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/__init__.py b/lumigator/jobs/evaluator/evaluator/jobs/evaluation/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/__init__.py rename to lumigator/jobs/evaluator/evaluator/jobs/evaluation/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/conversation.py b/lumigator/jobs/evaluator/evaluator/jobs/evaluation/conversation.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/conversation.py rename to lumigator/jobs/evaluator/evaluator/jobs/evaluation/conversation.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py b/lumigator/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py rename to lumigator/jobs/evaluator/evaluator/jobs/evaluation/hf_evaluate.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py b/lumigator/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py rename to lumigator/jobs/evaluator/evaluator/jobs/evaluation/lm_harness.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/metrics.py b/lumigator/jobs/evaluator/evaluator/jobs/evaluation/metrics.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/evaluation/metrics.py rename to lumigator/jobs/evaluator/evaluator/jobs/evaluation/metrics.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/model_clients.py b/lumigator/jobs/evaluator/evaluator/jobs/model_clients.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/model_clients.py rename to lumigator/jobs/evaluator/evaluator/jobs/model_clients.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/jobs/utils.py b/lumigator/jobs/evaluator/evaluator/jobs/utils.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/jobs/utils.py rename to lumigator/jobs/evaluator/evaluator/jobs/utils.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/paths.py b/lumigator/jobs/evaluator/evaluator/paths.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/paths.py rename to lumigator/jobs/evaluator/evaluator/paths.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/preprocessing.py b/lumigator/jobs/evaluator/evaluator/preprocessing.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/preprocessing.py rename to lumigator/jobs/evaluator/evaluator/preprocessing.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/conftest.py b/lumigator/jobs/evaluator/evaluator/tests/conftest.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/conftest.py rename to lumigator/jobs/evaluator/evaluator/tests/conftest.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/README.md b/lumigator/jobs/evaluator/evaluator/tests/integration/README.md similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/README.md rename to lumigator/jobs/evaluator/evaluator/tests/integration/README.md diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/integration/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/integration/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/conftest.py b/lumigator/jobs/evaluator/evaluator/tests/integration/conftest.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/conftest.py rename to lumigator/jobs/evaluator/evaluator/tests/integration/conftest.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py b/lumigator/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py rename to lumigator/jobs/evaluator/evaluator/tests/integration/test_integration_setup.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py b/lumigator/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py rename to lumigator/jobs/evaluator/evaluator/tests/integration/test_lm_harness.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/README.md b/lumigator/jobs/evaluator/evaluator/tests/resources/README.md similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/README.md rename to lumigator/jobs/evaluator/evaluator/tests/resources/README.md diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/resources/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/resources/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/create_tiny_shakespeare.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/data-00000-of-00001.arrow diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/dataset_info.json diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/tiny_shakespeare/state.json diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/create_xyz.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/data-00000-of-00001.arrow diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/dataset_info.json diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json b/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json rename to lumigator/jobs/evaluator/evaluator/tests/resources/datasets/xyz/state.json diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/resources/models/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/resources/models/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json b/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json rename to lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/config.json diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py b/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py rename to lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/create_tiny_gpt2.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt b/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt rename to lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/merges.txt diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors b/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors rename to lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/model.safetensors diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json b/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json rename to lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/special_tokens_map.json diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json b/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json rename to lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/tokenizer_config.json diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json b/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json rename to lumigator/jobs/evaluator/evaluator/tests/resources/models/tiny_gpt2/vocab.json diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/test_utils.py b/lumigator/jobs/evaluator/evaluator/tests/test_utils.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/test_utils.py rename to lumigator/jobs/evaluator/evaluator/tests/test_utils.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/unit/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/unit/configs/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/configs/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py b/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/conftest.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py b/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/configs/jobs/test_lm_harness_config.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py b/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_adapter_config.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_common.py b/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_common.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_common.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_common.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py b/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_dataset_config.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py b/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_quantization_config.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py b/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/configs/test_run_config.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tracking/__init__.py b/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tracking/__init__.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/jobs/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py b/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/jobs/test_asset_loader.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/test_paths.py b/lumigator/jobs/evaluator/evaluator/tests/unit/test_paths.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/test_paths.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/test_paths.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py b/lumigator/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py rename to lumigator/jobs/evaluator/evaluator/tests/unit/test_preprocessing.py diff --git a/lumigator/lumigator/jobs/evaluator_lite/tests/__init__.py b/lumigator/jobs/evaluator/evaluator/tracking/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator_lite/tests/__init__.py rename to lumigator/jobs/evaluator/evaluator/tracking/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tracking/artifact_utils.py b/lumigator/jobs/evaluator/evaluator/tracking/artifact_utils.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tracking/artifact_utils.py rename to lumigator/jobs/evaluator/evaluator/tracking/artifact_utils.py diff --git a/lumigator/lumigator/jobs/evaluator/evaluator/tracking/run_utils.py b/lumigator/jobs/evaluator/evaluator/tracking/run_utils.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator/evaluator/tracking/run_utils.py rename to lumigator/jobs/evaluator/evaluator/tracking/run_utils.py diff --git a/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml b/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml similarity index 100% rename from lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml rename to lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_config.yaml diff --git a/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml b/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml similarity index 100% rename from lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml rename to lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_inference_server_config.yaml diff --git a/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml b/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml similarity index 100% rename from lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml rename to lumigator/jobs/evaluator/examples/configs/evaluation/hf_evaluate_openai_config.yaml diff --git a/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml b/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml similarity index 100% rename from lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml rename to lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_hf_config.yaml diff --git a/lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml b/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml similarity index 100% rename from lumigator/lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml rename to lumigator/jobs/evaluator/examples/configs/evaluation/lm_harness_inference_server_config.yaml diff --git a/lumigator/lumigator/jobs/evaluator/requirements.txt b/lumigator/jobs/evaluator/requirements.txt similarity index 100% rename from lumigator/lumigator/jobs/evaluator/requirements.txt rename to lumigator/jobs/evaluator/requirements.txt diff --git a/lumigator/lumigator/jobs/evaluator_lite/README.md b/lumigator/jobs/evaluator_lite/README.md similarity index 100% rename from lumigator/lumigator/jobs/evaluator_lite/README.md rename to lumigator/jobs/evaluator_lite/README.md diff --git a/lumigator/lumigator/jobs/evaluator_lite/eval_lite.py b/lumigator/jobs/evaluator_lite/eval_lite.py similarity index 99% rename from lumigator/lumigator/jobs/evaluator_lite/eval_lite.py rename to lumigator/jobs/evaluator_lite/eval_lite.py index 407465f8..61e01f28 100644 --- a/lumigator/lumigator/jobs/evaluator_lite/eval_lite.py +++ b/lumigator/jobs/evaluator_lite/eval_lite.py @@ -6,6 +6,7 @@ from datasets import load_from_disk from eval_metrics import EvaluationMetrics from loguru import logger + from schemas import EvalJobConfig diff --git a/lumigator/lumigator/jobs/evaluator_lite/eval_metrics.py b/lumigator/jobs/evaluator_lite/eval_metrics.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator_lite/eval_metrics.py rename to lumigator/jobs/evaluator_lite/eval_metrics.py diff --git a/lumigator/lumigator/jobs/evaluator_lite/requirements.txt b/lumigator/jobs/evaluator_lite/requirements.txt similarity index 100% rename from lumigator/lumigator/jobs/evaluator_lite/requirements.txt rename to lumigator/jobs/evaluator_lite/requirements.txt diff --git a/lumigator/lumigator/jobs/evaluator_lite/schemas.py b/lumigator/jobs/evaluator_lite/schemas.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator_lite/schemas.py rename to lumigator/jobs/evaluator_lite/schemas.py diff --git a/lumigator/lumigator/jobs/inference/tests/__init__.py b/lumigator/jobs/evaluator_lite/tests/__init__.py similarity index 100% rename from lumigator/lumigator/jobs/inference/tests/__init__.py rename to lumigator/jobs/evaluator_lite/tests/__init__.py diff --git a/lumigator/lumigator/jobs/evaluator_lite/tests/conftest.py b/lumigator/jobs/evaluator_lite/tests/conftest.py similarity index 100% rename from lumigator/lumigator/jobs/evaluator_lite/tests/conftest.py rename to lumigator/jobs/evaluator_lite/tests/conftest.py diff --git a/lumigator/lumigator/jobs/evaluator_lite/tests/data/config_full_hf.json b/lumigator/jobs/evaluator_lite/tests/data/config_full_hf.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator_lite/tests/data/config_full_hf.json rename to lumigator/jobs/evaluator_lite/tests/data/config_full_hf.json diff --git a/lumigator/lumigator/jobs/evaluator_lite/tests/data/config_minimal.json b/lumigator/jobs/evaluator_lite/tests/data/config_minimal.json similarity index 100% rename from lumigator/lumigator/jobs/evaluator_lite/tests/data/config_minimal.json rename to lumigator/jobs/evaluator_lite/tests/data/config_minimal.json diff --git a/lumigator/lumigator/jobs/evaluator_lite/tests/test_configs.py b/lumigator/jobs/evaluator_lite/tests/test_configs.py similarity index 99% rename from lumigator/lumigator/jobs/evaluator_lite/tests/test_configs.py rename to lumigator/jobs/evaluator_lite/tests/test_configs.py index b1644489..e4ca8f70 100644 --- a/lumigator/lumigator/jobs/evaluator_lite/tests/test_configs.py +++ b/lumigator/jobs/evaluator_lite/tests/test_configs.py @@ -2,6 +2,7 @@ import pytest from pydantic import ValidationError + from schemas import DatasetConfig, EvalJobConfig, EvaluationConfig, ModelConfig diff --git a/lumigator/lumigator/jobs/inference/README.md b/lumigator/jobs/inference/README.md similarity index 100% rename from lumigator/lumigator/jobs/inference/README.md rename to lumigator/jobs/inference/README.md diff --git a/lumigator/lumigator/jobs/inference/inference.py b/lumigator/jobs/inference/inference.py similarity index 99% rename from lumigator/lumigator/jobs/inference/inference.py rename to lumigator/jobs/inference/inference.py index 859a8a39..4f7e29ee 100644 --- a/lumigator/lumigator/jobs/inference/inference.py +++ b/lumigator/jobs/inference/inference.py @@ -16,9 +16,10 @@ OpenAIModelClient, ) from paths import PathPrefix -from schemas import InferenceJobOutput from tqdm import tqdm +from schemas import InferenceJobOutput + def predict(dataset_iterable: Iterable, model_client: BaseModelClient) -> list: predictions = [] diff --git a/lumigator/lumigator/jobs/inference/inference_config.py b/lumigator/jobs/inference/inference_config.py similarity index 99% rename from lumigator/lumigator/jobs/inference/inference_config.py rename to lumigator/jobs/inference/inference_config.py index 2e369d5b..1ce7bdb4 100644 --- a/lumigator/lumigator/jobs/inference/inference_config.py +++ b/lumigator/jobs/inference/inference_config.py @@ -5,14 +5,15 @@ from huggingface_hub.utils import validate_repo_id from loguru import logger from pydantic import AfterValidator, BeforeValidator, ConfigDict, Field, computed_field +from transformers.pipelines import check_task, get_supported_tasks +from utils import resolve_model_repo + from schemas import DatasetConfig from schemas import HfPipelineConfig as BaseHfPipelineConfig from schemas import InferenceJobConfig as BaseInferenceJobConfig from schemas import InferenceServerConfig as BaseInferenceServerConfig from schemas import JobConfig as BaseJobConfig from schemas import SamplingParameters as BaseSamplingParameters -from transformers.pipelines import check_task, get_supported_tasks -from utils import resolve_model_repo def _validate_torch_dtype(x: str | torch.dtype) -> str | torch.dtype: diff --git a/lumigator/lumigator/jobs/inference/model_clients.py b/lumigator/jobs/inference/model_clients.py similarity index 100% rename from lumigator/lumigator/jobs/inference/model_clients.py rename to lumigator/jobs/inference/model_clients.py diff --git a/lumigator/lumigator/jobs/inference/paths.py b/lumigator/jobs/inference/paths.py similarity index 100% rename from lumigator/lumigator/jobs/inference/paths.py rename to lumigator/jobs/inference/paths.py diff --git a/lumigator/lumigator/jobs/inference/requirements.txt b/lumigator/jobs/inference/requirements.txt similarity index 100% rename from lumigator/lumigator/jobs/inference/requirements.txt rename to lumigator/jobs/inference/requirements.txt diff --git a/lumigator/lumigator/jobs/inference/requirements_cpu.txt b/lumigator/jobs/inference/requirements_cpu.txt similarity index 100% rename from lumigator/lumigator/jobs/inference/requirements_cpu.txt rename to lumigator/jobs/inference/requirements_cpu.txt diff --git a/lumigator/lumigator/jobs/inference/schemas.py b/lumigator/jobs/inference/schemas.py similarity index 100% rename from lumigator/lumigator/jobs/inference/schemas.py rename to lumigator/jobs/inference/schemas.py diff --git a/lumigator/lumigator/schemas/lumigator_schemas/__init__.py b/lumigator/jobs/inference/tests/__init__.py similarity index 100% rename from lumigator/lumigator/schemas/lumigator_schemas/__init__.py rename to lumigator/jobs/inference/tests/__init__.py diff --git a/lumigator/lumigator/jobs/inference/tests/conftest.py b/lumigator/jobs/inference/tests/conftest.py similarity index 100% rename from lumigator/lumigator/jobs/inference/tests/conftest.py rename to lumigator/jobs/inference/tests/conftest.py diff --git a/lumigator/lumigator/jobs/inference/tests/data/config_full_api.json b/lumigator/jobs/inference/tests/data/config_full_api.json similarity index 100% rename from lumigator/lumigator/jobs/inference/tests/data/config_full_api.json rename to lumigator/jobs/inference/tests/data/config_full_api.json diff --git a/lumigator/lumigator/jobs/inference/tests/data/config_full_hf.json b/lumigator/jobs/inference/tests/data/config_full_hf.json similarity index 100% rename from lumigator/lumigator/jobs/inference/tests/data/config_full_hf.json rename to lumigator/jobs/inference/tests/data/config_full_hf.json diff --git a/lumigator/lumigator/jobs/inference/tests/data/config_minimal.json b/lumigator/jobs/inference/tests/data/config_minimal.json similarity index 100% rename from lumigator/lumigator/jobs/inference/tests/data/config_minimal.json rename to lumigator/jobs/inference/tests/data/config_minimal.json diff --git a/lumigator/lumigator/jobs/inference/tests/test_configs.py b/lumigator/jobs/inference/tests/test_configs.py similarity index 100% rename from lumigator/lumigator/jobs/inference/tests/test_configs.py rename to lumigator/jobs/inference/tests/test_configs.py diff --git a/lumigator/lumigator/jobs/inference/utils.py b/lumigator/jobs/inference/utils.py similarity index 100% rename from lumigator/lumigator/jobs/inference/utils.py rename to lumigator/jobs/inference/utils.py diff --git a/lumigator/lumigator/sample_data/dialogsum_exc.csv b/lumigator/sample_data/dialogsum_exc.csv similarity index 100% rename from lumigator/lumigator/sample_data/dialogsum_exc.csv rename to lumigator/sample_data/dialogsum_exc.csv diff --git a/lumigator/lumigator/sample_data/dialogsum_mini_all_gt_is_whitespace.csv b/lumigator/sample_data/dialogsum_mini_all_gt_is_whitespace.csv similarity index 100% rename from lumigator/lumigator/sample_data/dialogsum_mini_all_gt_is_whitespace.csv rename to lumigator/sample_data/dialogsum_mini_all_gt_is_whitespace.csv diff --git a/lumigator/lumigator/sample_data/dialogsum_mini_empty_gt.csv b/lumigator/sample_data/dialogsum_mini_empty_gt.csv similarity index 100% rename from lumigator/lumigator/sample_data/dialogsum_mini_empty_gt.csv rename to lumigator/sample_data/dialogsum_mini_empty_gt.csv diff --git a/lumigator/lumigator/sample_data/dialogsum_mini_no_gt.csv b/lumigator/sample_data/dialogsum_mini_no_gt.csv similarity index 100% rename from lumigator/lumigator/sample_data/dialogsum_mini_no_gt.csv rename to lumigator/sample_data/dialogsum_mini_no_gt.csv diff --git a/lumigator/lumigator/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv b/lumigator/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv similarity index 100% rename from lumigator/lumigator/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv rename to lumigator/sample_data/dialogsum_mini_some_missing_some_whitespace_gt.csv diff --git a/lumigator/lumigator/schemas/.python-version b/lumigator/schemas/.python-version similarity index 100% rename from lumigator/lumigator/schemas/.python-version rename to lumigator/schemas/.python-version diff --git a/lumigator/lumigator/schemas/README.md b/lumigator/schemas/README.md similarity index 100% rename from lumigator/lumigator/schemas/README.md rename to lumigator/schemas/README.md diff --git a/lumigator/lumigator/sdk/lumigator_sdk/__init__.py b/lumigator/schemas/lumigator_schemas/__init__.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/__init__.py rename to lumigator/schemas/lumigator_schemas/__init__.py diff --git a/lumigator/lumigator/schemas/lumigator_schemas/completions.py b/lumigator/schemas/lumigator_schemas/completions.py similarity index 100% rename from lumigator/lumigator/schemas/lumigator_schemas/completions.py rename to lumigator/schemas/lumigator_schemas/completions.py diff --git a/lumigator/lumigator/schemas/lumigator_schemas/datasets.py b/lumigator/schemas/lumigator_schemas/datasets.py similarity index 100% rename from lumigator/lumigator/schemas/lumigator_schemas/datasets.py rename to lumigator/schemas/lumigator_schemas/datasets.py diff --git a/lumigator/lumigator/schemas/lumigator_schemas/experiments.py b/lumigator/schemas/lumigator_schemas/experiments.py similarity index 100% rename from lumigator/lumigator/schemas/lumigator_schemas/experiments.py rename to lumigator/schemas/lumigator_schemas/experiments.py diff --git a/lumigator/lumigator/schemas/lumigator_schemas/extras.py b/lumigator/schemas/lumigator_schemas/extras.py similarity index 100% rename from lumigator/lumigator/schemas/lumigator_schemas/extras.py rename to lumigator/schemas/lumigator_schemas/extras.py diff --git a/lumigator/lumigator/schemas/lumigator_schemas/jobs.py b/lumigator/schemas/lumigator_schemas/jobs.py similarity index 100% rename from lumigator/lumigator/schemas/lumigator_schemas/jobs.py rename to lumigator/schemas/lumigator_schemas/jobs.py diff --git a/lumigator/lumigator/schemas/lumigator_schemas/models.py b/lumigator/schemas/lumigator_schemas/models.py similarity index 100% rename from lumigator/lumigator/schemas/lumigator_schemas/models.py rename to lumigator/schemas/lumigator_schemas/models.py diff --git a/lumigator/lumigator/schemas/pyproject.toml b/lumigator/schemas/pyproject.toml similarity index 100% rename from lumigator/lumigator/schemas/pyproject.toml rename to lumigator/schemas/pyproject.toml diff --git a/lumigator/lumigator/schemas/uv.lock b/lumigator/schemas/uv.lock similarity index 100% rename from lumigator/lumigator/schemas/uv.lock rename to lumigator/schemas/uv.lock diff --git a/lumigator/lumigator/sdk/.python-version b/lumigator/sdk/.python-version similarity index 100% rename from lumigator/lumigator/sdk/.python-version rename to lumigator/sdk/.python-version diff --git a/lumigator/lumigator/sdk/README.md b/lumigator/sdk/README.md similarity index 100% rename from lumigator/lumigator/sdk/README.md rename to lumigator/sdk/README.md diff --git a/lumigator/lumigator/sdk/tests/__init__.py b/lumigator/sdk/lumigator_sdk/__init__.py similarity index 100% rename from lumigator/lumigator/sdk/tests/__init__.py rename to lumigator/sdk/lumigator_sdk/__init__.py diff --git a/lumigator/lumigator/sdk/lumigator_sdk/client.py b/lumigator/sdk/lumigator_sdk/client.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/client.py rename to lumigator/sdk/lumigator_sdk/client.py diff --git a/lumigator/lumigator/sdk/lumigator_sdk/completions.py b/lumigator/sdk/lumigator_sdk/completions.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/completions.py rename to lumigator/sdk/lumigator_sdk/completions.py diff --git a/lumigator/lumigator/sdk/lumigator_sdk/experiments.py b/lumigator/sdk/lumigator_sdk/experiments.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/experiments.py rename to lumigator/sdk/lumigator_sdk/experiments.py diff --git a/lumigator/lumigator/sdk/lumigator_sdk/health.py b/lumigator/sdk/lumigator_sdk/health.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/health.py rename to lumigator/sdk/lumigator_sdk/health.py diff --git a/lumigator/lumigator/sdk/lumigator_sdk/jobs.py b/lumigator/sdk/lumigator_sdk/jobs.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/jobs.py rename to lumigator/sdk/lumigator_sdk/jobs.py diff --git a/lumigator/lumigator/sdk/lumigator_sdk/lm_datasets.py b/lumigator/sdk/lumigator_sdk/lm_datasets.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/lm_datasets.py rename to lumigator/sdk/lumigator_sdk/lm_datasets.py diff --git a/lumigator/lumigator/sdk/lumigator_sdk/lumigator.py b/lumigator/sdk/lumigator_sdk/lumigator.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/lumigator.py rename to lumigator/sdk/lumigator_sdk/lumigator.py diff --git a/lumigator/lumigator/sdk/lumigator_sdk/models.py b/lumigator/sdk/lumigator_sdk/models.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/models.py rename to lumigator/sdk/lumigator_sdk/models.py diff --git a/lumigator/lumigator/sdk/lumigator_sdk/strict_schemas.py b/lumigator/sdk/lumigator_sdk/strict_schemas.py similarity index 100% rename from lumigator/lumigator/sdk/lumigator_sdk/strict_schemas.py rename to lumigator/sdk/lumigator_sdk/strict_schemas.py diff --git a/lumigator/lumigator/sdk/pyproject.toml b/lumigator/sdk/pyproject.toml similarity index 100% rename from lumigator/lumigator/sdk/pyproject.toml rename to lumigator/sdk/pyproject.toml diff --git a/lumigator/python/mzai/backend/backend/services/exceptions/__init__.py b/lumigator/sdk/tests/__init__.py similarity index 100% rename from lumigator/python/mzai/backend/backend/services/exceptions/__init__.py rename to lumigator/sdk/tests/__init__.py diff --git a/lumigator/lumigator/sdk/tests/conftest.py b/lumigator/sdk/tests/conftest.py similarity index 100% rename from lumigator/lumigator/sdk/tests/conftest.py rename to lumigator/sdk/tests/conftest.py diff --git a/lumigator/lumigator/sdk/tests/data/dataset.json b/lumigator/sdk/tests/data/dataset.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/dataset.json rename to lumigator/sdk/tests/data/dataset.json diff --git a/lumigator/lumigator/sdk/tests/data/datasets.json b/lumigator/sdk/tests/data/datasets.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/datasets.json rename to lumigator/sdk/tests/data/datasets.json diff --git a/lumigator/lumigator/sdk/tests/data/experiment-download-no-experiment.json b/lumigator/sdk/tests/data/experiment-download-no-experiment.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiment-download-no-experiment.json rename to lumigator/sdk/tests/data/experiment-download-no-experiment.json diff --git a/lumigator/lumigator/sdk/tests/data/experiment-download.json b/lumigator/sdk/tests/data/experiment-download.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiment-download.json rename to lumigator/sdk/tests/data/experiment-download.json diff --git a/lumigator/lumigator/sdk/tests/data/experiment-missing.json b/lumigator/sdk/tests/data/experiment-missing.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiment-missing.json rename to lumigator/sdk/tests/data/experiment-missing.json diff --git a/lumigator/lumigator/sdk/tests/data/experiment-post-all.json b/lumigator/sdk/tests/data/experiment-post-all.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiment-post-all.json rename to lumigator/sdk/tests/data/experiment-post-all.json diff --git a/lumigator/lumigator/sdk/tests/data/experiment-post-response.json b/lumigator/sdk/tests/data/experiment-post-response.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiment-post-response.json rename to lumigator/sdk/tests/data/experiment-post-response.json diff --git a/lumigator/lumigator/sdk/tests/data/experiment-post-simple.json b/lumigator/sdk/tests/data/experiment-post-simple.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiment-post-simple.json rename to lumigator/sdk/tests/data/experiment-post-simple.json diff --git a/lumigator/lumigator/sdk/tests/data/experiment-result-no-experiment.json b/lumigator/sdk/tests/data/experiment-result-no-experiment.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiment-result-no-experiment.json rename to lumigator/sdk/tests/data/experiment-result-no-experiment.json diff --git a/lumigator/lumigator/sdk/tests/data/experiment-result.json b/lumigator/sdk/tests/data/experiment-result.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiment-result.json rename to lumigator/sdk/tests/data/experiment-result.json diff --git a/lumigator/lumigator/sdk/tests/data/experiment.json b/lumigator/sdk/tests/data/experiment.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiment.json rename to lumigator/sdk/tests/data/experiment.json diff --git a/lumigator/lumigator/sdk/tests/data/experiments.json b/lumigator/sdk/tests/data/experiments.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/experiments.json rename to lumigator/sdk/tests/data/experiments.json diff --git a/lumigator/lumigator/sdk/tests/data/job-all.json b/lumigator/sdk/tests/data/job-all.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/job-all.json rename to lumigator/sdk/tests/data/job-all.json diff --git a/lumigator/lumigator/sdk/tests/data/job-extra.json b/lumigator/sdk/tests/data/job-extra.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/job-extra.json rename to lumigator/sdk/tests/data/job-extra.json diff --git a/lumigator/lumigator/sdk/tests/data/job-minimal.json b/lumigator/sdk/tests/data/job-minimal.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/job-minimal.json rename to lumigator/sdk/tests/data/job-minimal.json diff --git a/lumigator/lumigator/sdk/tests/data/job-resp.json b/lumigator/sdk/tests/data/job-resp.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/job-resp.json rename to lumigator/sdk/tests/data/job-resp.json diff --git a/lumigator/lumigator/sdk/tests/data/job-submit-resp.json b/lumigator/sdk/tests/data/job-submit-resp.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/job-submit-resp.json rename to lumigator/sdk/tests/data/job-submit-resp.json diff --git a/lumigator/lumigator/sdk/tests/data/job.json b/lumigator/sdk/tests/data/job.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/job.json rename to lumigator/sdk/tests/data/job.json diff --git a/lumigator/lumigator/sdk/tests/data/jobs-submit.json b/lumigator/sdk/tests/data/jobs-submit.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/jobs-submit.json rename to lumigator/sdk/tests/data/jobs-submit.json diff --git a/lumigator/lumigator/sdk/tests/data/jobs.json b/lumigator/sdk/tests/data/jobs.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/jobs.json rename to lumigator/sdk/tests/data/jobs.json diff --git a/lumigator/lumigator/sdk/tests/data/models.json b/lumigator/sdk/tests/data/models.json similarity index 100% rename from lumigator/lumigator/sdk/tests/data/models.json rename to lumigator/sdk/tests/data/models.json diff --git a/lumigator/lumigator/sdk/tests/helpers.py b/lumigator/sdk/tests/helpers.py similarity index 100% rename from lumigator/lumigator/sdk/tests/helpers.py rename to lumigator/sdk/tests/helpers.py diff --git a/lumigator/lumigator/sdk/tests/integration/test_scenarios.py b/lumigator/sdk/tests/integration/test_scenarios.py similarity index 100% rename from lumigator/lumigator/sdk/tests/integration/test_scenarios.py rename to lumigator/sdk/tests/integration/test_scenarios.py diff --git a/lumigator/lumigator/sdk/tests/unit/test_completions.py b/lumigator/sdk/tests/unit/test_completions.py similarity index 100% rename from lumigator/lumigator/sdk/tests/unit/test_completions.py rename to lumigator/sdk/tests/unit/test_completions.py diff --git a/lumigator/lumigator/sdk/tests/unit/test_datasets.py b/lumigator/sdk/tests/unit/test_datasets.py similarity index 100% rename from lumigator/lumigator/sdk/tests/unit/test_datasets.py rename to lumigator/sdk/tests/unit/test_datasets.py diff --git a/lumigator/lumigator/sdk/tests/unit/test_health.py b/lumigator/sdk/tests/unit/test_health.py similarity index 100% rename from lumigator/lumigator/sdk/tests/unit/test_health.py rename to lumigator/sdk/tests/unit/test_health.py diff --git a/lumigator/lumigator/sdk/tests/unit/test_jobs.py b/lumigator/sdk/tests/unit/test_jobs.py similarity index 100% rename from lumigator/lumigator/sdk/tests/unit/test_jobs.py rename to lumigator/sdk/tests/unit/test_jobs.py diff --git a/lumigator/lumigator/sdk/tests/unit/test_models.py b/lumigator/sdk/tests/unit/test_models.py similarity index 100% rename from lumigator/lumigator/sdk/tests/unit/test_models.py rename to lumigator/sdk/tests/unit/test_models.py diff --git a/lumigator/lumigator/sdk/uv.lock b/lumigator/sdk/uv.lock similarity index 100% rename from lumigator/lumigator/sdk/uv.lock rename to lumigator/sdk/uv.lock From 208b6dba83cbfe57908071cd2c8378dd4012370f Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Tue, 28 Jan 2025 09:03:35 -0500 Subject: [PATCH 16/21] Reorg based on feedback --- .devcontainer/docker-compose.override.yaml | 14 +++--- .github/labeler.yml | 8 ++-- .github/workflows/lumigator_pipeline.yaml | 16 +++---- .vscode/settings.json | 4 +- CONTRIBUTING.md | 2 +- Dockerfile | 8 ++-- Makefile | 12 ++--- docker-compose.yaml | 12 ++--- docs/source/conceptual-guides/endpoints.md | 36 +++++++-------- docs/source/conceptual-guides/new-endpoint.md | 10 ++-- docs/source/get-started/quickstart.md | 2 +- docs/source/get-started/ui-guide.md | 2 +- docs/source/operations-guide/alembic.md | 46 +++++++++---------- docs/source/operations-guide/kubernetes.md | 2 +- docs/source/user-guides/inference.md | 4 +- .../helm/lumigator/charts/backend/values.yaml | 4 +- lumigator/frontend/Dockerfile | 2 +- lumigator/frontend/src/helpers/index.js | 2 +- lumigator/sdk/README.md | 4 +- notebooks/requirements.txt | 4 +- 20 files changed, 97 insertions(+), 97 deletions(-) diff --git a/.devcontainer/docker-compose.override.yaml b/.devcontainer/docker-compose.override.yaml index 4e2bca35..46f48b31 100644 --- a/.devcontainer/docker-compose.override.yaml +++ b/.devcontainer/docker-compose.override.yaml @@ -13,20 +13,20 @@ services: - "5678:5678" develop: watch: - - path: lumigator/lumigator/backend/ - target: /mzai/lumigator/lumigator/backend + - path: lumigator/backend/ + target: /mzai/lumigator/backend action: sync ignore: - .venv/ - - path: lumigator/lumigator/jobs/ - target: /mzai/lumigator/lumigator/jobs + - path: lumigator/jobs/ + target: /mzai/lumigator/jobs action: sync ignore: - .venv/ - - path: lumigator/lumigator/schemas/ - target: /mzai/lumigator/lumigator/schemas + - path: lumigator/schemas/ + target: /mzai/lumigator/schemas action: sync ignore: - .venv/ - - path: lumigator/lumigator/backend/pyproject.toml + - path: lumigator/backend/pyproject.toml action: rebuild diff --git a/.github/labeler.yml b/.github/labeler.yml index c82bdbf3..ea956cb1 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,9 +1,9 @@ api: - changed-files: - - any-glob-to-any-file: 'lumigator/lumigator/backend/backend/api/**' + - any-glob-to-any-file: 'lumigator/backend/backend/api/**' backend: - changed-files: - - any-glob-to-any-file: 'lumigator/lumigator/backend/**' + - any-glob-to-any-file: 'lumigator/backend/**' dependencies: - changed-files: - any-glob-to-any-file: 'pyproject.toml' @@ -18,7 +18,7 @@ gha: - any-glob-to-any-file: '.github/workflows/**' schemas: - changed-files: - - any-glob-to-any-file: 'lumigator/lumigator/schemas/**' + - any-glob-to-any-file: 'lumigator/schemas/**' sdk: - changed-files: - - any-glob-to-any-file: 'lumigator/lumigator/sdk/**' + - any-glob-to-any-file: 'lumigator/sdk/**' diff --git a/.github/workflows/lumigator_pipeline.yaml b/.github/workflows/lumigator_pipeline.yaml index cdb7ca20..27bc6e0c 100644 --- a/.github/workflows/lumigator_pipeline.yaml +++ b/.github/workflows/lumigator_pipeline.yaml @@ -242,32 +242,32 @@ jobs: - name: Check tag consistency (SDK) run: check_version.sh - working-directory: lumigator/lumigator/sdk + working-directory: lumigator/sdk - name: Check tag consistency (schemas) run: check_version.sh - working-directory: lumigator/lumigator/schemas + working-directory: lumigator/schemas - name: Install python (SDK) run: uv python install - working-directory: lumigator/lumigator/sdk + working-directory: lumigator/sdk - name: Install python (schemas) run: uv python install - working-directory: lumigator/lumigator/schemas + working-directory: lumigator/schemas - name: Package SDK run: uv build - working-directory: lumigator/lumigator/sdk + working-directory: lumigator/sdk - name: Package schemas run: uv build - working-directory: lumigator/lumigator/schemas + working-directory: lumigator/schemas - name: Upload SDK packages to PyPI - working-directory: lumigator/lumigator/sdk + working-directory: lumigator/sdk run: uv publish --token ${{ secrets.PYPI_TOKEN }} --verbose - name: Upload schemas packages to PyPI - working-directory: lumigator/lumigator/schemas + working-directory: lumigator/schemas run: uv publish --token ${{ secrets.PYPI_TOKEN }} --verbose diff --git a/.vscode/settings.json b/.vscode/settings.json index a2da18b7..e09dc415 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,7 +10,7 @@ }, "python.testing.pytestEnabled": true, "python.analysis.extraPaths": [ - "./lumigator/lumigator/schemas", - "./lumigator/lumigator/jobs" + "./lumigator/schemas", + "./lumigator/jobs" ] } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 54706768..c2c24867 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ We want to encourage both suggestions and contributions from the community in th * Check out the [roadmap](https://github.com/orgs/mozilla-ai/projects/17): This will give you an overview of the project's direction and help you identify areas where your contributions can have the greatest impact. * Take a look into the existing issues: Check if your issue or challenge has already been discussed or reported. This helps avoid duplication of effort. -* Learn about the code: The Lumigator project consists of several packages, each with its own pyproject.toml file. Understanding the project structure will make it easier to contribute effectively: the `lumigator/python/mzai/backend` package that powers the lumigator server functionality, the `lumigator/python/mzai/schemas` package containing the formal schemas for communication with the server through the REST API, and the `lumigator/python/mzai/sdk` package abstracting the REST API for Python applications. Each package holds its own `pyproject.toml` definition. +* Learn about the code: The Lumigator project consists of several packages, each with its own pyproject.toml file. Understanding the project structure will make it easier to contribute effectively: the `lumigator/backend` package that powers the lumigator server functionality, the `lumigator/schemas` package containing the formal schemas for communication with the server through the REST API, and the `lumigator/sdk` package abstracting the REST API for Python applications. Each package holds its own `pyproject.toml` definition. ### **Disclaimer** diff --git a/Dockerfile b/Dockerfile index 4a4e003d..8f457ecf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,8 +4,8 @@ COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv # Copy the project into the image ADD . /mzai -WORKDIR /mzai/lumigator/lumigator/backend -ENV PYTHONPATH=/mzai/lumigator/lumigator/backend:/mzai/lumigator/lumigator/jobs +WORKDIR /mzai/lumigator/backend +ENV PYTHONPATH=/mzai/lumigator/backend:/mzai/lumigator/jobs FROM base AS main_image @@ -23,8 +23,8 @@ RUN uv sync --frozen CMD [\ "uv","run", "-m", "debugpy", "--listen", "0.0.0.0:5678", \ "-m", "uvicorn", "backend.main:app", "--reload", \ - "--reload-dir", "/mzai/lumigator/python/mzai/jobs", \ - "--reload-dir", "/mzai/lumigator/python/mzai/schemas", \ + "--reload-dir", "/mzai/lumigator/jobs", \ + "--reload-dir", "/mzai/lumigator/schemas", \ "--host", "0.0.0.0", \ "--port", "8000" \ ] diff --git a/Makefile b/Makefile index 84600fc0..16c6cbc9 100644 --- a/Makefile +++ b/Makefile @@ -153,11 +153,11 @@ clean-all: clean-docker-buildcache clean-docker-containers # `test-sdk-integration-containers` is usually called and this will either # start them if they are not present or use the currently running ones. test-sdk-unit: - cd lumigator/python/mzai/sdk/tests; \ + cd lumigator/sdk/tests; \ uv run $(DEBUGPY_ARGS) -m pytest -o python_files="unit/*/test_*.py unit/test_*.py" test-sdk-integration: - cd lumigator/python/mzai/sdk/tests; \ + cd lumigator/sdk/tests; \ uv run $(DEBUGPY_ARGS) -m pytest -s -o python_files="integration/test_*.py integration/*/test_*.py" test-sdk-integration-containers: @@ -176,7 +176,7 @@ test-sdk: test-sdk-unit test-sdk-integration-containers # `test-sdk-integration-containers` is usually called and this will either # start them if they are not present or use the currently running ones. test-backend-unit: - cd lumigator/lumigator/backend/; \ + cd lumigator/backend/; \ S3_BUCKET=lumigator-storage \ RAY_HEAD_NODE_HOST=localhost \ RAY_DASHBOARD_PORT=8265 \ @@ -185,7 +185,7 @@ test-backend-unit: uv run $(DEBUGPY_ARGS) -m pytest -s -o python_files="backend/tests/unit/*/test_*.py backend/tests/unit/test_*.py" test-backend-integration: - cd lumigator/lumigator/backend/; \ + cd lumigator/backend/; \ docker container list --all; \ S3_BUCKET=lumigator-storage \ RAY_HEAD_NODE_HOST=localhost \ @@ -217,11 +217,11 @@ test-backend: test-backend-unit test-backend-integration-containers # be running, but they will set up a different, volatile python environment # with all the deps specified in their respective `requirements.txt` files. test-jobs-evaluation-unit: - cd lumigator/python/mzai/jobs/evaluator_lite; \ + cd lumigator/jobs/evaluator_lite; \ uv run $(DEBUGPY_ARGS) --with pytest --with-requirements requirements.txt --isolated pytest test-jobs-inference-unit: - cd lumigator/python/mzai/jobs/inference; \ + cd lumigator/jobs/inference; \ uv run $(DEBUGPY_ARGS) --with pytest --with-requirements requirements.txt --isolated pytest test-jobs-unit: test-jobs-evaluation-unit test-jobs-inference-unit diff --git a/docker-compose.yaml b/docker-compose.yaml index 3c8a7939..d0aa0974 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -107,14 +107,14 @@ services: - AWS_DEFAULT_REGION - AWS_ENDPOINT_URL - S3_BUCKET - - EVALUATOR_PIP_REQS=/mzai/lumigator/lumigator/jobs/evaluator/requirements.txt - - EVALUATOR_WORK_DIR=/mzai/lumigator/lumigator/jobs/evaluator + - EVALUATOR_PIP_REQS=/mzai/lumigator/jobs/evaluator/requirements.txt + - EVALUATOR_WORK_DIR=/mzai/lumigator/jobs/evaluator # TODO: the following two rows should be renamed to EVALUATOR_* # and the two above should be removed when we depreate evaluator - - EVALUATOR_LITE_PIP_REQS=/mzai/lumigator/lumigator/jobs/evaluator_lite/requirements.txt - - EVALUATOR_LITE_WORK_DIR=/mzai/lumigator/lumigator/jobs/evaluator_lite - - INFERENCE_PIP_REQS=/mzai/lumigator/lumigator/jobs/inference/requirements.txt - - INFERENCE_WORK_DIR=/mzai/lumigator/lumigator/jobs/inference + - EVALUATOR_LITE_PIP_REQS=/mzai/lumigator/jobs/evaluator_lite/requirements.txt + - EVALUATOR_LITE_WORK_DIR=/mzai/lumigator/jobs/evaluator_lite + - INFERENCE_PIP_REQS=/mzai/lumigator/jobs/inference/requirements.txt + - INFERENCE_WORK_DIR=/mzai/lumigator/jobs/inference - RAY_DASHBOARD_PORT - RAY_HEAD_NODE_HOST - MISTRAL_API_KEY=$MISTRAL_API_KEY diff --git a/docs/source/conceptual-guides/endpoints.md b/docs/source/conceptual-guides/endpoints.md index 4acfba81..c3a3c5ff 100644 --- a/docs/source/conceptual-guides/endpoints.md +++ b/docs/source/conceptual-guides/endpoints.md @@ -13,40 +13,40 @@ cluster, SQL database, and S3-compatible Storage) are the different services Lum The components inside the backend, shown in the image below, are the different abstraction layers the backend itself relies on: -* The **API** makes backend functionalities available to the UI through different **routes** (see: {{ '[schema code](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/routes)'.format(commit_id) }} ). -{{ '[**Schemas**](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/schemas)'.format(commit_id) }} +* The **API** makes backend functionalities available to the UI through different **routes** (see: {{ '[schema code](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/api/routes)'.format(commit_id) }} ). +{{ '[**Schemas**](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/schemas)'.format(commit_id) }} are used in the API which allows one to exactly know which kind of data has to be passed to it. * **Services** implement the actual functionalities and are called by the different methods exposed - in the API (see: {{ '[backend services](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/services)'.format(commit_id) }} ). + in the API (see: {{ '[backend services](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/services)'.format(commit_id) }} ). * **Repositories** implement the [repository pattern](https://www.cosmicpython.com/book/chapter_02_repository.html) - as an abstraction over the SQL database (see: {{ '[code for repositories](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/repositories)'.format(commit_id) }} ). - They make use of {{ '[record classes](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/records)'.format(commit_id) }} to refer to actual records in the database. + as an abstraction over the SQL database (see: {{ '[code for repositories](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/repositories)'.format(commit_id) }} ). + They make use of {{ '[record classes](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/records)'.format(commit_id) }} to refer to actual records in the database. ![Lumigator Backend](../../assets/lumigator-backend.svg) ```{admonition} Notation In the following, we will refer to paths inside Lumigator's repo relative to the -`/lumigator/lumigator/backend` folder, e.g. the relative path `backend/api/routes` (note the lack of a +`/lumigator/backend` folder, e.g. the relative path `backend/api/routes` (note the lack of a trailing slash) will map to the absolute path from the root of the repo -`/lumigator/lumigator/backend/backend/api/routes`. +`/lumigator/backend/backend/api/routes`. ``` ## Lumigator endpoints All the endpoints you can access in Lumigator's API are defined in -{{ '[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/routes)'.format(commit_id) }} +{{ '[`backend/api/routes/`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/api/routes)'.format(commit_id) }} and explicitly listed in -{{ '[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/router.py)'.format(commit_id) }}, -together with a {{ '[metadata tag](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/tags.py)'.format(commit_id) }} +{{ '[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/api/router.py)'.format(commit_id) }}, +together with a {{ '[metadata tag](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/api/tags.py)'.format(commit_id) }} which is used to provide a short description of the route. Let us now walk through a few examples to understand how Lumigator's endpoints work. ### The simplest endpoint: `/health` -The {{ '[`/health`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/routes/health.py)'.format(commit_id) }} +The {{ '[`/health`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/api/routes/health.py)'.format(commit_id) }} route provides perhaps the simplest example as it allows you to get the current backend status which is a constant: @@ -59,12 +59,12 @@ def get_health() -> HealthResponse: Note that the returned type is a `HealthResponse`: this is a [pydantic model](https://docs.pydantic.dev/latest/api/base_model/) defining the schema of the returned data. The general rule is that all return values in our routes should match a predefined -schema. Schemas are defined under the `schemas` directory (see: {{ '[health response in our source code](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/schemas/lumigator_schemas/extras.py#L16)'.format(commit_id) }}), +schema. Schemas are defined under the `schemas` directory (see: {{ '[health response in our source code](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/schemas/lumigator_schemas/extras.py#L16)'.format(commit_id) }}), typically in files with the same name of the route, service, etc. All the code for `get_health()` appears in the route file. A `HealthResponse`, composed of a deployment type which is loaded from -{{ '[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/settings.py#L12)'.format(commit_id) }} +{{ '[`backend/settings.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/settings.py#L12)'.format(commit_id) }} and the status (currently always ok), is returned. ### One step further: `/datasets` @@ -80,7 +80,7 @@ def get_dataset(service: DatasetServiceDep, dataset_id: UUID) -> DatasetResponse ``` * The core functionalities are provided by a *service* (in this case a `DatasetService`) defined in - {{ '[`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/services/datasets.py)'.format(commit_id) }}. + {{ '[`backend/services/datasets.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/services/datasets.py)'.format(commit_id) }}. * Instead of directly passing a `DatasetService` to the `get_dataset` method, DatasetServiceDep is defined to perform a *dependency injection* (see: @@ -96,7 +96,7 @@ So, let us suppose you have already uploaded a dataset to Lumigator. What happen First thing, `DatasetServiceDep` will make sure that all the dependencies to run your `DatasetService` are met. If you look at -{{ '[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/deps.py)'.format(commit_id) }} +{{ '[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/api/deps.py)'.format(commit_id) }} you will see that a `DatasetServiceDep` is nothing more than a `DatasetService` that depends on a `DBSessionDep` and `S3ClientDep`: @@ -116,7 +116,7 @@ database session and on an S3 client. While the S3 dependency is a "simple" one (i.e., it just instantiates a boto3 client in place), the database one is a bit more advanced (i.e., it relies on a -{{ '[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/db.py)'.format(commit_id) }} +{{ '[`DatabaseSessionManager`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/db.py)'.format(commit_id) }} to return a session). Second, `DatasetService` provides a `get_dataset` method which gets the actual data from the @@ -137,10 +137,10 @@ def _get_dataset_record(self, dataset_id: UUID) -> DatasetRecord: We access the database using the `repository` abstraction `DatasetRepository` class. All repositories are defined in `backend/repositories` and inherit from -{{ '[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/repositories/base.py)'.format(commit_id) }} +{{ '[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/repositories/base.py)'.format(commit_id) }} which is a general class providing ORM access to SQL statements. In particular, the `DatasetRepository` is a `BaseRepository` working with items of type -{{ '[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/records/datasets.py)'.format(commit_id) }}. +{{ '[`DatasetRecord`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/records/datasets.py)'.format(commit_id) }}. Fields in records are defined as a mix of explicit type definitions and declarative mappings (see the picture below to see how the fields in the datasets table are defined). diff --git a/docs/source/conceptual-guides/new-endpoint.md b/docs/source/conceptual-guides/new-endpoint.md index 5bea2fd3..f365c22e 100644 --- a/docs/source/conceptual-guides/new-endpoint.md +++ b/docs/source/conceptual-guides/new-endpoint.md @@ -48,7 +48,7 @@ Being this the code for a new route, you will save it in `backend/api/routes/tas ### 1.2. Add the route to `router.py` with the appropriate tags The following step is adding the new route to -{{ '[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/router.py)'.format(commit_id) }}. +{{ '[`backend/api/router.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/api/router.py)'.format(commit_id) }}. The code below shows the updated file with comments next to the two lines marked below as **NEW**: ```python @@ -75,7 +75,7 @@ api_router.include_router(tasks.router, prefix="/tasks", tags=[Tags.TASKS]) # N ``` Also note that we are specifying some `Tags.TASKS` which have not been defined yet! Open -{{ '[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/tags.py)'.format(commit_id) }} +{{ '[`backend/api/tags.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/api/tags.py)'.format(commit_id) }} and add the sections marked below as **NEW**: ```python @@ -184,7 +184,7 @@ class TaskRepository(BaseRepository[TaskRecord]): ``` This does not usually change much as long as you are fine with the base methods provided by the -{{ '[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/repositories/base.py)'.format(commit_id) }} +{{ '[`BaseRepository`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/repositories/base.py)'.format(commit_id) }} class. The `TaskRepository` is a repository that allows to run the set of methods defined in the @@ -204,7 +204,7 @@ class TaskRecord(BaseRecord, NameDescriptionMixin, CreatedAtMixin): ``` Similarly to what you saw before for `DatasetRecord`, `TaskRecord` inherits from -{{ '[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/records/base.py)'.format(commit_id) }} +{{ '[`BaseRecord`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/records/base.py)'.format(commit_id) }} the property of having an `id` primary key. In addition to that, it inherits `name` and `description` from `NameDescriptionMixin` and `created_at` from `CreatedAtMixin`. The only field that we need to specify manually is `models`, a non-null column holding a list of strings. @@ -301,7 +301,7 @@ endpoints (e.g. those which involve running ray jobs), but we'll discuss that in As `TaskService` depends on the existence of a database, we should inject a dependency on a DB session. To do this, add the following code to -{{ '[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/api/deps.py)'.format(commit_id) }}: +{{ '[`backend/api/deps.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/api/deps.py)'.format(commit_id) }}: ```python def get_task_service(session: DBSessionDep) -> TaskService: diff --git a/docs/source/get-started/quickstart.md b/docs/source/get-started/quickstart.md index df94d85a..a6d53641 100644 --- a/docs/source/get-started/quickstart.md +++ b/docs/source/get-started/quickstart.md @@ -63,7 +63,7 @@ response = lm_client.datasets.create_dataset( ```{note} The dataset file should be in CSV format and contain a header row with the following columns: `examples`, `ground_truth`. The `ground_truth` column is optional since you can generate it using -Lumigator. See {{ '[here](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/sample_data/dialogsum_exc.csv#L4)'.format(commit_id) }} +Lumigator. See {{ '[here](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/sample_data/dialogsum_exc.csv#L4)'.format(commit_id) }} for an example. ``` diff --git a/docs/source/get-started/ui-guide.md b/docs/source/get-started/ui-guide.md index 30ce437d..c3430199 100644 --- a/docs/source/get-started/ui-guide.md +++ b/docs/source/get-started/ui-guide.md @@ -9,7 +9,7 @@ The main purpose of Lumigator is to help you select a model that works well for The first step is to upload your dataset. This can be done by clicking on the **Provide Dataset** button in the **Datasets** section. This will open a dialog box where you can select the dataset file to be uploaded from your local machine. The dataset file should be in `csv` format with columns examples and (optionally) ground_truth. -You can get started by uploading the {{ '[sample dataset](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/sample_data/dialogsum_exc.csv)'.format(commit_id) }} provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). +You can get started by uploading the {{ '[sample dataset](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/sample_data/dialogsum_exc.csv)'.format(commit_id) }} provided in the [Lumigator repository](https://github.com/mozilla-ai/lumigator). ![Datasets Page](../../assets/ui_guide_steps/datasets_page.png) diff --git a/docs/source/operations-guide/alembic.md b/docs/source/operations-guide/alembic.md index f76b198e..3abeac39 100644 --- a/docs/source/operations-guide/alembic.md +++ b/docs/source/operations-guide/alembic.md @@ -16,11 +16,11 @@ matching revision ID. ## Running commands -Please run `alembic` commands in this document within the backend (`lumigator/lumigator/backend`) folder, using `uv`. For example, where the Lumigator repository is cloned to your `$HOME` directory: +Please run `alembic` commands in this document within the backend (`lumigator/backend`) folder, using `uv`. For example, where the Lumigator repository is cloned to your `$HOME` directory: ```console -user@host:~/$ cd lumigator/lumigator/lumigator/backend -user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic --version +user@host:~/$ cd lumigator/lumigator/backend +user@host:~/lumigator/lumigator/backend$ uv run alembic --version ``` ## Data model changes @@ -28,7 +28,7 @@ user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic --version When code changes are made to the data models, or when new models are added, a manual step is required in order to ensure that the models are visible to Alembic. -First, the imports at the top of {{ '[`env.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/alembic/env.py)'.format(commit_id) }} +First, the imports at the top of {{ '[`env.py`](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/alembic/env.py)'.format(commit_id) }} **MUST** import your package: `from backend.records.{package} import * # noqa: F403` @@ -49,25 +49,25 @@ In order to connect to a "real" database to compare its state against the codifi variable in your shell, or provide it on each invocation of `alembic`: ```console -user@host:~/lumigator/lumigator/lumigator/backend$ export SQLALCHEMY_DATABASE_URL=sqlite:///local.db +user@host:~/lumigator/lumigator/backend$ export SQLALCHEMY_DATABASE_URL=sqlite:///local.db ``` or ```console -user@host:~/lumigator/lumigator/lumigator/backend$ SQLALCHEMY_DATABASE_URL=sqlite:///local.db uv run alembic history +user@host:~/lumigator/lumigator/backend$ SQLALCHEMY_DATABASE_URL=sqlite:///local.db uv run alembic history ``` The rest of the document assumes `SQLALCHEMY_DATABASE_URL` is exported. If `SQLALCHEMY_DATABASE_URL` is not present then a default of `sqlite:///local.db` will be used (see: -{{ '[here](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/alembic.ini#L65)'.format(commit_id) }}). +{{ '[here](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/alembic.ini#L65)'.format(commit_id) }}). If you've followed the `README` for `backend`, you should have sourced the virtual environment. This means you can run the `alembic` command directly in the terminal. Alternatively, you can also run it using `uv`: ```console -user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic --version +user@host:~/lumigator/lumigator/backend$ uv run alembic --version ``` ## Pre-existing databases (not currently managed by Alembic) @@ -84,13 +84,13 @@ manage going forward. If you believe your database already matches the most up-to-date models: ```console -user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic stamp head +user@host:~/lumigator/lumigator/backend$ uv run alembic stamp head ``` ## My database is in a different state (from a prior release) This scenario requires manual review of the existing revisions stored in the -{{ '[versions folder](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/alembic/versions)'.format(commit_id) }}, +{{ '[versions folder](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/alembic/versions)'.format(commit_id) }}, to determine which revision ID represents the current state of the database containing the data. Revisions are stored in a format resembling a linked-list, with each revision containing a @@ -103,7 +103,7 @@ To align your database with a specific revision (migration ID `e75fa022c781` ali state of our database): ```console -user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic stamp e75fa022c781 +user@host:~/lumigator/lumigator/backend$ uv run alembic stamp e75fa022c781 ``` ## Other Alembic commands @@ -115,13 +115,13 @@ downgrading the database. - Viewing migration history ```console - user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic history + user@host:~/lumigator/lumigator/backend$ uv run alembic history ``` - Show your current revision ```console - user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic current + user@host:~/lumigator/lumigator/backend$ uv run alembic current ``` - Upgrading @@ -129,19 +129,19 @@ downgrading the database. - Manually upgrade your database to match the latest models: ```console - user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic upgrade head + user@host:~/lumigator/lumigator/backend$ uv run alembic upgrade head ``` - You can also upgrade 'relative' to your current state, so to move forwards 1 revision: ```console - user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic upgrade +1 + user@host:~/lumigator/lumigator/backend$ uv run alembic upgrade +1 ``` - If you know the version you want to migrate to, you can specify it: ```console - user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic upgrade cb3cf47d9259 + user@host:~/lumigator/lumigator/backend$ uv run alembic upgrade cb3cf47d9259 ``` - Downgrading @@ -149,19 +149,19 @@ downgrading the database. - To downgrade to the original state (not recommended) use: ```console - user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic downgrade base + user@host:~/lumigator/lumigator/backend$ uv run alembic downgrade base ``` - You can also downgrade 'relative' to your current state, so to move backwards 1 revision: ```console - user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic downgrade -1 + user@host:~/lumigator/lumigator/backend$ uv run alembic downgrade -1 ``` - If you know the version you want to migrate to, you can specify it: ```console - user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic upgrade cb3cf47d9259 + user@host:~/lumigator/lumigator/backend$ uv run alembic upgrade cb3cf47d9259 ```` ## Creating revisions @@ -173,15 +173,15 @@ when moving between migrations). To create an empty revision that you populate manually: ```console -user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision -m "{Explanatory commit-like message}" +user@host:~/lumigator/lumigator/backend$ uv run alembic revision -m "{Explanatory commit-like message}" ``` -This will create a new Python file under {{ '[versions/](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/lumigator/backend/backend/alembic/versions)'.format(commit_id) }}. +This will create a new Python file under {{ '[versions/](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/backend/backend/alembic/versions)'.format(commit_id) }}. For example: ```console -user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision -m "added desc field to job" +user@host:~/lumigator/lumigator/backend$ uv run alembic revision -m "added desc field to job" ``` should see a new Python file created with a commit/ID prepended to your message: @@ -193,7 +193,7 @@ create a revision using the `--autogenerate` flag when creating a revision. This way to create revisions in Lumigator. ```console -user@host:~/lumigator/lumigator/lumigator/backend$ uv run alembic revision --autogenerate -m {Explanatory commit-like message} +user@host:~/lumigator/lumigator/backend$ uv run alembic revision --autogenerate -m {Explanatory commit-like message} ``` Please note that "automatic" doesn't mean this can be completely automated, as manual steps are diff --git a/docs/source/operations-guide/kubernetes.md b/docs/source/operations-guide/kubernetes.md index 444941b7..c3120c66 100644 --- a/docs/source/operations-guide/kubernetes.md +++ b/docs/source/operations-guide/kubernetes.md @@ -91,7 +91,7 @@ To install Lumigator on a Kubernetes cluster, follow these steps: 1. Install the Lumigator Helm chart: ```console - user@host:~/lumigator$ helm install lumigator ./lumigator/infra/mzai/helm/lumigator -f values.yaml + user@host:~/lumigator$ helm install lumigator ./infra/helm/lumigator -f values.yaml ``` ## Next Steps diff --git a/docs/source/user-guides/inference.md b/docs/source/user-guides/inference.md index a14f7081..e475390b 100644 --- a/docs/source/user-guides/inference.md +++ b/docs/source/user-guides/inference.md @@ -19,7 +19,7 @@ Refer to the [troubleshooting section](../get-started/troubleshooting.md) for mo 1. Install the Lumigator SDK: ```console - user@host:~/lumigator$ uv pip install -e lumigator/lumigator/sdk + user@host:~/lumigator$ uv pip install -e lumigator/sdk ``` 1. Create a new Python file: @@ -48,7 +48,7 @@ Refer to the [troubleshooting section](../get-started/troubleshooting.md) for mo lm_client = LumigatorClient(f"{HOST}:{LUMIGATOR_PORT}") # Upload a dataset - dataset_path = "lumigator/lumigator/sample_data/dialogsum_exc.csv" + dataset_path = "lumigator/sample_data/dialogsum_exc.csv" dataset = lm_client.datasets.create_dataset( dataset=open(dataset_path, 'rb'), format=datasets.DatasetFormat.JOB diff --git a/infra/helm/lumigator/charts/backend/values.yaml b/infra/helm/lumigator/charts/backend/values.yaml index 3fbcaef3..af6bf08a 100644 --- a/infra/helm/lumigator/charts/backend/values.yaml +++ b/infra/helm/lumigator/charts/backend/values.yaml @@ -17,8 +17,8 @@ serviceAccountName: "" existingMistralAPISecret: "" mistralAPIKey: "" -evaluatorPipReqs: "/mzai/lumigator/lumigator/jobs/evaluator/requirements.txt" -evaluatorWorkDir: "/mzai/lumigator/lumigator/jobs/evaluator" +evaluatorPipReqs: "/mzai/lumigator/jobs/evaluator/requirements.txt" +evaluatorWorkDir: "/mzai/lumigator/jobs/evaluator" image: repository: "mzdotai/lumigator" diff --git a/lumigator/frontend/Dockerfile b/lumigator/frontend/Dockerfile index 27ea5da1..5479575c 100644 --- a/lumigator/frontend/Dockerfile +++ b/lumigator/frontend/Dockerfile @@ -3,7 +3,7 @@ ARG NODE_VERSION=18.20.0 FROM node:${NODE_VERSION}-alpine AS base # Copy the project into the image -COPY ../frontend /mzai/frontend +COPY . /mzai/frontend WORKDIR /mzai/ diff --git a/lumigator/frontend/src/helpers/index.js b/lumigator/frontend/src/helpers/index.js index 446fa5cf..5035dbb8 100644 --- a/lumigator/frontend/src/helpers/index.js +++ b/lumigator/frontend/src/helpers/index.js @@ -36,7 +36,7 @@ export function retrieveEntrypoint(job) { // NOTE: Normalization is required because the config templates used per-model sometimes vary, // meaning that the location of the data we are trying to parse isn't always the same. - // See: lumigator/lumigator/backend/backend/config_templates.py + // See: lumigator/backend/backend/config_templates.py // Normalize the max_samples if (jsonObject?.job?.max_samples !== undefined) { diff --git a/lumigator/sdk/README.md b/lumigator/sdk/README.md index f2f3c9cd..14883c88 100644 --- a/lumigator/sdk/README.md +++ b/lumigator/sdk/README.md @@ -6,13 +6,13 @@ either locally or remotely. You can install the lumigator SDK via `pip` directly or via `uv` from the cloned repository: ```bash -pip install -e lumigator/lumigator/sdk +pip install -e lumigator/sdk ``` or ```bash -uv pip install -e lumigator/lumigator/sdk +uv pip install -e lumigator/sdk ``` Now that you have the SDK installed, you can use it to communicate with Lumigator. You can run the diff --git a/notebooks/requirements.txt b/notebooks/requirements.txt index 2c880357..bc11d55d 100644 --- a/notebooks/requirements.txt +++ b/notebooks/requirements.txt @@ -1,5 +1,5 @@ --e ../lumigator/lumigator/schemas --e ../lumigator/lumigator/sdk +-e ../lumigator/schemas +-e ../lumigator/sdk datasets==2.20.0 ipywidgets==8.1.3 jupyterlab==4.2.5 From bec0ce12ea49fb9bd6ef8655bc010f40625241fa Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Tue, 28 Jan 2025 09:05:37 -0500 Subject: [PATCH 17/21] docs path --- docs/source/conf.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 75e7d5ff..21276ccf 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -6,19 +6,19 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -import sys -import os -from pathlib import Path # Get the commit hash from git import subprocess +import sys +from pathlib import Path + commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"]).strip().decode("utf-8") print(f"Git Commit ID: {commit_id}") # patch the Sphinx run so that it can operate directly on the sources # see: https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#ensuring-the-code-can-be-imported module_paths = [ - Path("..", "..", "lumigator", "lumigator", "sdk").resolve(), - Path("..", "..", "lumigator", "lumigator", "schemas").resolve(), + Path("..", "..", "lumigator", "sdk").resolve(), + Path("..", "..", "lumigator", "schemas").resolve(), ] for path in module_paths: @@ -40,9 +40,7 @@ """ # Add the commit_id to myst_substitutions for substitution in Markdown files -myst_substitutions = { - "commit_id": commit_id -} +myst_substitutions = {"commit_id": commit_id} # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -54,7 +52,7 @@ "myst_parser", "sphinx_design", "sphinx_copybutton", - "sphinx.builders.linkcheck" + "sphinx.builders.linkcheck", ] # napoleon settings @@ -76,4 +74,4 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = "sphinx_rtd_theme" -# html_static_path = ['_static'] \ No newline at end of file +# html_static_path = ['_static'] From 66747ab142aab3c77e9e858d8eb6e4edfb32d1d7 Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Tue, 28 Jan 2025 09:16:27 -0500 Subject: [PATCH 18/21] update some frontend paths --- .github/labeler.yml | 2 +- .github/workflows/lumigator_pipeline.yaml | 2 +- docker-compose.yaml | 4 ++-- docs/source/operations-guide/dev.md | 8 ++++---- lumigator/frontend/Dockerfile | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index ea956cb1..12824519 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -12,7 +12,7 @@ documentation: - any-glob-to-any-file: 'docs/**' frontend: - changed-files: - - any-glob-to-any-file: 'frontend/**' + - any-glob-to-any-file: 'lumigator/frontend/**' gha: - changed-files: - any-glob-to-any-file: '.github/workflows/**' diff --git a/.github/workflows/lumigator_pipeline.yaml b/.github/workflows/lumigator_pipeline.yaml index 27bc6e0c..cc2ddf9a 100644 --- a/.github/workflows/lumigator_pipeline.yaml +++ b/.github/workflows/lumigator_pipeline.yaml @@ -213,7 +213,7 @@ jobs: uses: docker/build-push-action@v6 if: steps.filter.outputs.rebuild_fe == 'true' || contains(github.ref, 'refs/tags/') with: - file: "frontend/Dockerfile" + file: "lumigator/frontend/Dockerfile" platforms: linux/amd64,linux/arm64 push: true target: "server" diff --git a/docker-compose.yaml b/docker-compose.yaml index d0aa0974..e7560212 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -134,7 +134,7 @@ services: image: mzdotai/lumigator-frontend:latest build: context: . - dockerfile: "./frontend/Dockerfile" + dockerfile: "./lumigator/frontend/Dockerfile" target: "server" args: VUE_APP_BASE_URL: http://localhost/api/v1/ @@ -142,7 +142,7 @@ services: LUMIGATOR_API_PORT: 8000 LUMIGATOR_API_HOST: backend volumes: - - ./frontend/nginx/:/etc/nginx/templates/ + - ./lumigator/frontend/nginx/:/etc/nginx/templates/ depends_on: backend: condition: "service_started" diff --git a/docs/source/operations-guide/dev.md b/docs/source/operations-guide/dev.md index 47cf443d..f9246551 100644 --- a/docs/source/operations-guide/dev.md +++ b/docs/source/operations-guide/dev.md @@ -87,7 +87,7 @@ Ensure you have the following installed on your system: user@host:~$ git@github.com:mozilla-ai/lumigator.git ``` -1. Navigate to the `frontend` directory: +1. Navigate to the `lumigator/frontend` directory: ```console user@host:~$ cd lumigator/frontend @@ -131,20 +131,20 @@ To build the frontend for production, run: user@host:~/lumigator/frontend$ npm run build ``` -This command will bundle the frontend code into a production-ready, optimized set of static assets located in the `dist` directory. By default `dist` is placed in project's root directory ( `./frontend` in this case). +This command will bundle the frontend code into a production-ready, optimized set of static assets located in the `dist` directory. By default `dist` is placed in project's root directory ( `./lumigator/frontend` in this case). ### Linting and Code Formatting For consistent code formatting and linting across multiple contributors, ESLint and Prettier are configured. To run linting: ```console -user@host:~/lumigator/frontend$ npm run lint +user@host:~/lumigator/lumigator/frontend$ npm run lint ``` To fix linting issues automatically: ```console -user@host:~/lumigator/frontend$ npm run lint:fix +user@host:~/lumigator/lumigator/frontend$ npm run lint:fix ``` diff --git a/lumigator/frontend/Dockerfile b/lumigator/frontend/Dockerfile index 5479575c..804afcd4 100644 --- a/lumigator/frontend/Dockerfile +++ b/lumigator/frontend/Dockerfile @@ -3,19 +3,19 @@ ARG NODE_VERSION=18.20.0 FROM node:${NODE_VERSION}-alpine AS base # Copy the project into the image -COPY . /mzai/frontend +COPY . /mzai/lumigator/frontend WORKDIR /mzai/ # Install dependencies -RUN npm --prefix /mzai/frontend install +RUN npm --prefix /mzai/lumigator/frontend install # Build static files -RUN npm --prefix /mzai/frontend run build +RUN npm --prefix /mzai/lumigator/frontend run build FROM nginx:1.27.2-alpine-slim AS server # Copy built files to the Nginx image -COPY --from=base /mzai/frontend/dist /usr/share/nginx/html +COPY --from=base /mzai/lumigator/frontend/dist /usr/share/nginx/html EXPOSE 80 From 8aabb914c6ad957e9ceee492d30af1a1d6a04edc Mon Sep 17 00:00:00 2001 From: Nathan Brake Date: Tue, 28 Jan 2025 09:24:20 -0500 Subject: [PATCH 19/21] don't need to change the frontend dockerfile --- lumigator/frontend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lumigator/frontend/Dockerfile b/lumigator/frontend/Dockerfile index 804afcd4..2e7af9a9 100644 --- a/lumigator/frontend/Dockerfile +++ b/lumigator/frontend/Dockerfile @@ -3,7 +3,7 @@ ARG NODE_VERSION=18.20.0 FROM node:${NODE_VERSION}-alpine AS base # Copy the project into the image -COPY . /mzai/lumigator/frontend +COPY ../../ /mzai WORKDIR /mzai/ From b9758016fa9aba1b8324c587163a6486360742d3 Mon Sep 17 00:00:00 2001 From: Nathan Brake <33383515+njbrake@users.noreply.github.com> Date: Wed, 29 Jan 2025 08:23:11 -0500 Subject: [PATCH 20/21] Update .github/workflows/lumigator_pipeline.yaml Signed-off-by: Nathan Brake <33383515+njbrake@users.noreply.github.com> --- .github/workflows/lumigator_pipeline.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lumigator_pipeline.yaml b/.github/workflows/lumigator_pipeline.yaml index 427a1f1d..7092400a 100644 --- a/.github/workflows/lumigator_pipeline.yaml +++ b/.github/workflows/lumigator_pipeline.yaml @@ -199,7 +199,7 @@ jobs: filters: | rebuild_fe: - '.github/workflows/**' - - 'frontend/**' + - 'lumigator/frontend/**' - name: Truncate commit SHA run: echo "GITHUB_SHA_SHORT=$(echo ${{ github.sha }} | cut -c1-7)" >> $GITHUB_ENV From 8953ffc35295f74d32aed364db3d7878c35fd5c6 Mon Sep 17 00:00:00 2001 From: Kyle White Date: Wed, 29 Jan 2025 14:35:07 -0500 Subject: [PATCH 21/21] docs fixes (#767) --- docs/source/get-started/installation.md | 2 +- docs/source/operations-guide/kubernetes.md | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/docs/source/get-started/installation.md b/docs/source/get-started/installation.md index 063a6c84..f27930d6 100644 --- a/docs/source/get-started/installation.md +++ b/docs/source/get-started/installation.md @@ -1,7 +1,7 @@ # Installation You can deploy Lumigator either locally or into a distributed environment using Kubernetes -{{ '[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/{}/lumigator/infra/helm/lumigator/README.md)'.format(commit_id) }}. +{{ '[HELM Charts](https://github.com/mozilla-ai/lumigator/blob/{}/infra/helm/lumigator/README.md)'.format(commit_id) }}. In this guide, we'll show you how to get started with a local deployment. ## Prerequisites diff --git a/docs/source/operations-guide/kubernetes.md b/docs/source/operations-guide/kubernetes.md index c3120c66..374b2e82 100644 --- a/docs/source/operations-guide/kubernetes.md +++ b/docs/source/operations-guide/kubernetes.md @@ -82,12 +82,6 @@ To install Lumigator on a Kubernetes cluster, follow these steps: user@host:~$ git clone git@github.com:mozilla-ai/lumigator.git ``` -1. Change to the Lumigator directory: - - ```console - user@host:~$ cd lumigator - ``` - 1. Install the Lumigator Helm chart: ```console