diff --git a/README.md b/README.md index 31a1aa2..22bd29c 100644 --- a/README.md +++ b/README.md @@ -61,11 +61,11 @@ The compatible application versions are selected through these variables: | Variable | Default | | --- | --- | -| `dnd_pipeline_audita_version` | `v0.9.1` | -| `dnd_pipeline_narratio_version` | `v2.2.0` | -| `dnd_pipeline_notarius_version` | `v0.7.1` | +| `dnd_pipeline_audita_version` | `v2.0.1` | +| `dnd_pipeline_narratio_version` | `v3.0.0` | +| `dnd_pipeline_notarius_version` | `v0.8.1` | | `dnd_pipeline_seriatim_version` | `v1.5.0` | -| `dnd_pipeline_scriptorium_version` | `v0.13.0` | +| `dnd_pipeline_scriptorium_version` | `v0.15.0` | | `dnd_pipeline_manage_build_dependencies` | `true` | | `dnd_pipeline_go_snap_channel` | `1.26/stable` | | `dnd_pipeline_go_binary` | `/snap/bin/go` | @@ -119,20 +119,31 @@ chosen policy value when their deployment requires it. | --- | --- | | `dnd_pipeline_audita_pipeline_modules` | `glossary`, `homophones`, `glossary`, `spoken_word`, `grammar` | | `dnd_pipeline_audita_output_schema` | `audita-v1` | -| `dnd_pipeline_audita_llm_proposal_*` | `https://inference.ai.rakestrawhome.com/v1`, `google/gemma-4-31b-it`, `AUDITA_LLM_API_KEY`, `900s`, `3` | -| `dnd_pipeline_audita_llm_validation_*` | `https://inference.ai.rakestrawhome.com/v1`, `google/gemma-4-31b-it`, `AUDITA_LLM_API_KEY`, `900s`, `3` | -| `dnd_pipeline_audita_concurrency_*` | total, proposal, and validation concurrency of `4` | +| `dnd_pipeline_audita_backends` | Native `dnd` backend at `https://inference.ai.rakestrawhome.com/v1`, credential `AUDITA_LLM_API_KEY`, shared concurrency `4` | +| `dnd_pipeline_audita_profiles` | Complete native `dnd-proposal` and `dnd-validation` mappings using `google/gemma-4-31b-it` and 900-second attempt timeouts | +| `dnd_pipeline_audita_llm_proposal_profile` | `dnd-proposal` | +| `dnd_pipeline_audita_llm_validation_profile` | `dnd-validation` | +| `dnd_pipeline_audita_llm_transient_retries`, `dnd_pipeline_audita_llm_repair_attempts`, `dnd_pipeline_audita_llm_operation_timeout` | `null`; omit overrides and use native defaults | | `dnd_pipeline_audita_chunking_*` | `8` target sections, `6144` maximum and `2048` minimum section tokens | -| `dnd_pipeline_audita_normalization_*` | `3s` maximum and ellipsis gaps, `240s` maximum duration, `2048` maximum tokens | +| `dnd_pipeline_audita_normalization_*` | `3.0` maximum and ellipsis gaps, `240.0` maximum duration, `2048` maximum tokens | | `dnd_pipeline_audita_thresholds_*` | `0.8` for glossary, homophones, spoken word, and grammar | | `dnd_pipeline_audita_context_description` | D&D-game transcript context, including possible pre- and post-session banter | -| `dnd_pipeline_audita_diagnostics_*` | `/tmp/audita`, retained automatically | +| `dnd_pipeline_audita_diagnostics_work_dir` | `/tmp/audita` | -Audita's proposal and validation settings independently remain overrideable, -but both default to the one typed `AUDITA_LLM_API_KEY` reference Narratio can -forward. Audita owns its endpoint, model, tuning, and diagnostics configuration; -Narratio receives its managed Audita configuration path and supplies the -run-specific output path. +Audita owns its backend and LLM policy. The suite writes each complete profile +mapping to `/usr/local/etc/audita/profiles/.yml`; keys must be filename-safe +IDs matching each mapping's `id`. Inventory may replace the mappings and selected +IDs. Narratio forwards the configured credential names, while Audita's native +configuration resolves them. The role does not remove old profile files. + +For inventories upgrading from the prior suite, replace the separate Audita +proposal/validation endpoint, model, key, timeout, and concurrency variables +with `dnd_pipeline_audita_backends` and `dnd_pipeline_audita_profiles`, then +select profile IDs with the two `dnd_pipeline_audita_llm_*_profile` variables. +Replace `dnd_pipeline_narratio_notarius_llm_api_key` with +`dnd_pipeline_narratio_notarius_credentials`, and use +`dnd_pipeline_narratio_audita_credentials` for Audita's backend credential +names. The old diagnostics retention variable is no longer forwarded. | Variable | Default | | --- | --- | @@ -148,6 +159,10 @@ run-specific output path. | `dnd_pipeline_narratio_render_format` | `markdown` | | `dnd_pipeline_narratio_testing_scriptorium_profile` | `gemini-flash-latest` | | `dnd_pipeline_notarius_testing_llm_profile` | `gpt-luna-latest` | +| `dnd_pipeline_notarius_promptkit_transient_retries` | `null`; native default | +| `dnd_pipeline_scriptorium_transient_retries` | `null`; native default | +| `dnd_pipeline_narratio_audita_credentials` | `[AUDITA_LLM_API_KEY]` | +| `dnd_pipeline_narratio_notarius_credentials` | `[OPENROUTER_API_KEY]` | `dnd_pipeline_audita_output_schema` is also the Narratio Audita-adapter schema; it is the shared cross-application boundary. Other Narratio-local controls, @@ -221,7 +236,7 @@ suite-owned base fragments in this fixed order: ├── artifacts/deranged-rumors.yml ├── artifacts/scene-map.yml ├── artifact-families/character-meta-analysis.yml -└── profiles/testing.yml +└── overlays/testing.yml ``` Notarius follows the corresponding base-and-overlay layout: @@ -230,10 +245,10 @@ Notarius follows the corresponding base-and-overlay layout: /usr/local/etc/notarius/ ├── config.yml ├── pipelines/dnd-session.yml -└── profiles/testing.yml +└── overlays/testing.yml ``` -The `testing` profile is an overlay, not a second configuration tree. It sets +The `testing` overlay is not a second configuration tree. It sets the Scriptorium `profile_id` for the four artifact sources and the one family, and explicitly selects Notarius's separately managed `testing` overlay. The Scriptorium default, `gemini-flash-latest`, is an inexpensive development @@ -250,7 +265,7 @@ dnd_pipeline_notarius_testing_llm_profile: alternate-economy-profile The Notarius root configuration imports the fixed `pipelines/dnd-session.yml` fragment. The suite owns that fragment at `/usr/local/etc/notarius/pipelines/dnd-session.yml`; callers do not edit it. -The separate `/usr/local/etc/notarius/profiles/testing.yml` overlay changes only +The separate `/usr/local/etc/notarius/overlays/testing.yml` overlay changes only the selected suite pipeline's LLM profile. | Variable | Default policy | @@ -261,7 +276,7 @@ the selected suite pipeline's LLM profile. | `dnd_pipeline_notarius_cache_checkpoints_enabled` | `true` | | `dnd_pipeline_notarius_testing_llm_profile` | `gpt-luna-latest` | | `dnd_pipeline_narratio_notarius_pipeline_id` | `dnd-session` | -| `dnd_pipeline_narratio_notarius_llm_api_key` | `OPENROUTER_API_KEY` | +| `dnd_pipeline_narratio_notarius_credentials` | `[OPENROUTER_API_KEY]` | | `dnd_pipeline_narratio_notarius_resume` | `true` | | `dnd_pipeline_narratio_notarius_references` | `party`, `players`, and `glossary` prepared sources | | `dnd_pipeline_narratio_notarius_outputs` | Complete native map of ten accepted D&D lanes | @@ -290,7 +305,7 @@ Notarius profile and ordinary extraction requests checkpoint reuse with `resume: true`. Chunk plans use Notarius's root-owned `auto` policy; the pipeline deliberately leaves Narratio's optional `chunk_cache` override unset. The `chunk-plans` and `checkpoints` paths derive from the cache root and are -created by Notarius during use. Notarius v0.7.1 selects PromptKit v0.10.0 and +created by Notarius during use. Notarius v0.8.1 selects PromptKit v0.10.0 and OpenRouter catalog v2.20260922.1, which supplies both suite-selected IDs. Existing checkpoints with the previous profile-source identity are not reused; source-keyed chunk plans and output artifacts remain compatible. No cache @@ -308,7 +323,7 @@ the party-driven character family: sudo -u narratio narratio config validate \ --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs sudo -u narratio narratio config validate \ - --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs --profile testing + --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs --overlay testing sudo -u narratio narratio config artifacts \ --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs sudo -u narratio narratio config diff default testing \ diff --git a/defaults/main.yml b/defaults/main.yml index aea4243..cb19f30 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,9 +1,9 @@ --- -dnd_pipeline_audita_version: v0.9.1 -dnd_pipeline_narratio_version: v2.2.0 -dnd_pipeline_notarius_version: v0.7.1 +dnd_pipeline_audita_version: v2.0.1 +dnd_pipeline_narratio_version: v3.0.0 +dnd_pipeline_notarius_version: v0.8.1 dnd_pipeline_seriatim_version: v1.5.0 -dnd_pipeline_scriptorium_version: v0.13.0 +dnd_pipeline_scriptorium_version: v0.15.0 dnd_pipeline_manage_build_dependencies: true dnd_pipeline_go_snap_channel: 1.26/stable dnd_pipeline_go_binary: /snap/bin/go @@ -26,25 +26,33 @@ dnd_pipeline_audita_pipeline_modules: - spoken_word - grammar dnd_pipeline_audita_output_schema: audita-v1 -dnd_pipeline_audita_llm_proposal_base_url: https://inference.ai.rakestrawhome.com/v1 -dnd_pipeline_audita_llm_proposal_model: google/gemma-4-31b-it -dnd_pipeline_audita_llm_proposal_api_key_env: AUDITA_LLM_API_KEY -dnd_pipeline_audita_llm_proposal_timeout: 900s -dnd_pipeline_audita_llm_proposal_max_retries: 3 -dnd_pipeline_audita_llm_validation_base_url: https://inference.ai.rakestrawhome.com/v1 -dnd_pipeline_audita_llm_validation_model: google/gemma-4-31b-it -dnd_pipeline_audita_llm_validation_api_key_env: AUDITA_LLM_API_KEY -dnd_pipeline_audita_llm_validation_timeout: 900s -dnd_pipeline_audita_llm_validation_max_retries: 3 -dnd_pipeline_audita_concurrency_total_llm: 4 -dnd_pipeline_audita_concurrency_proposal_llm: 4 -dnd_pipeline_audita_concurrency_validation_llm: 4 +dnd_pipeline_audita_backends: + dnd: + endpoint: https://inference.ai.rakestrawhome.com/v1 + credential: AUDITA_LLM_API_KEY + concurrency: 4 +dnd_pipeline_audita_profiles: + dnd-proposal: + id: dnd-proposal + backend: dnd + model: google/gemma-4-31b-it + timeout_seconds: 900 + dnd-validation: + id: dnd-validation + backend: dnd + model: google/gemma-4-31b-it + timeout_seconds: 900 +dnd_pipeline_audita_llm_proposal_profile: dnd-proposal +dnd_pipeline_audita_llm_validation_profile: dnd-validation +dnd_pipeline_audita_llm_transient_retries: null +dnd_pipeline_audita_llm_repair_attempts: null +dnd_pipeline_audita_llm_operation_timeout: null dnd_pipeline_audita_chunking_target_sections: 8 dnd_pipeline_audita_chunking_max_section_tokens: 6144 dnd_pipeline_audita_chunking_min_section_tokens: 2048 -dnd_pipeline_audita_normalization_max_segment_gap: 3s -dnd_pipeline_audita_normalization_ellipsis_gap: 3s -dnd_pipeline_audita_normalization_max_segment_duration: 240s +dnd_pipeline_audita_normalization_max_segment_gap: 3.0 +dnd_pipeline_audita_normalization_ellipsis_gap: 3.0 +dnd_pipeline_audita_normalization_max_segment_duration: 240.0 dnd_pipeline_audita_normalization_max_segment_tokens: 2048 dnd_pipeline_audita_thresholds_glossary: 0.8 dnd_pipeline_audita_thresholds_homophones: 0.8 @@ -55,7 +63,6 @@ dnd_pipeline_audita_context_description: >- It may contain some unrelated pre-session or post-session banter, in addition to actual D&D gameplay. dnd_pipeline_audita_diagnostics_work_dir: /tmp/audita -dnd_pipeline_audita_diagnostics_retention: auto dnd_pipeline_notarius_pipelines: dnd-session: llm_profile: gpt-terra-latest @@ -208,6 +215,8 @@ dnd_pipeline_notarius_cache_root: /var/cache/notarius dnd_pipeline_notarius_cache_chunk_plans_mode: auto dnd_pipeline_notarius_cache_checkpoints_enabled: true dnd_pipeline_notarius_testing_llm_profile: gpt-luna-latest +dnd_pipeline_notarius_promptkit_transient_retries: null +dnd_pipeline_scriptorium_transient_retries: null dnd_pipeline_narratio_workspace_cleanup_after_publish: true dnd_pipeline_narratio_storage_backend: s3 dnd_pipeline_narratio_storage_s3_bucket: rakestraw-assets @@ -244,7 +253,10 @@ dnd_pipeline_narratio_trim_bounds_prompt_id: dnd.session_bounds dnd_pipeline_narratio_trim_bounds_transcript_input_name: transcript dnd_pipeline_narratio_trim_bounds_output_path: artifacts/session_bounds.json dnd_pipeline_narratio_notarius_pipeline_id: dnd-session -dnd_pipeline_narratio_notarius_llm_api_key: OPENROUTER_API_KEY +dnd_pipeline_narratio_audita_credentials: + - AUDITA_LLM_API_KEY +dnd_pipeline_narratio_notarius_credentials: + - OPENROUTER_API_KEY dnd_pipeline_narratio_notarius_resume: true dnd_pipeline_narratio_notarius_references: party: narratio.input.party diff --git a/meta/argument_specs.yml b/meta/argument_specs.yml index c740e28..16ed6e8 100644 --- a/meta/argument_specs.yml +++ b/meta/argument_specs.yml @@ -97,58 +97,34 @@ argument_specs: type: str required: true description: Audita output schema shared with Narratio. - dnd_pipeline_audita_llm_proposal_base_url: + dnd_pipeline_audita_backends: + type: dict + required: true + description: Native Audita backend definitions. + dnd_pipeline_audita_profiles: + type: dict + required: true + description: Native Audita profiles keyed by filename-safe IDs matching each mapping's id. + dnd_pipeline_audita_llm_proposal_profile: type: str required: true - description: Audita proposal LLM endpoint. - dnd_pipeline_audita_llm_proposal_model: + description: Audita proposal profile ID. + dnd_pipeline_audita_llm_validation_profile: type: str required: true - description: Audita proposal LLM model. - dnd_pipeline_audita_llm_proposal_api_key_env: - type: str - required: true - description: Proposal LLM API-key environment variable name. - dnd_pipeline_audita_llm_proposal_timeout: - type: str - required: true - description: Proposal LLM timeout. - dnd_pipeline_audita_llm_proposal_max_retries: + description: Audita validation profile ID. + dnd_pipeline_audita_llm_transient_retries: type: int - required: true - description: Proposal LLM retry count. - dnd_pipeline_audita_llm_validation_base_url: - type: str - required: true - description: Audita validation LLM endpoint. - dnd_pipeline_audita_llm_validation_model: - type: str - required: true - description: Audita validation LLM model. - dnd_pipeline_audita_llm_validation_api_key_env: - type: str - required: true - description: Validation LLM API-key environment variable name. - dnd_pipeline_audita_llm_validation_timeout: - type: str - required: true - description: Validation LLM timeout. - dnd_pipeline_audita_llm_validation_max_retries: + required: false + description: Optional Audita transient retry override. + dnd_pipeline_audita_llm_repair_attempts: type: int - required: true - description: Validation LLM retry count. - dnd_pipeline_audita_concurrency_total_llm: - type: int - required: true - description: Total Audita LLM concurrency. - dnd_pipeline_audita_concurrency_proposal_llm: - type: int - required: true - description: Proposal Audita LLM concurrency. - dnd_pipeline_audita_concurrency_validation_llm: - type: int - required: true - description: Validation Audita LLM concurrency. + required: false + description: Optional Audita repair attempt override. + dnd_pipeline_audita_llm_operation_timeout: + type: str + required: false + description: Optional Audita whole-operation deadline override. dnd_pipeline_audita_chunking_target_sections: type: int required: true @@ -162,15 +138,15 @@ argument_specs: required: true description: Audita minimum section tokens. dnd_pipeline_audita_normalization_max_segment_gap: - type: str + type: float required: true description: Audita maximum segment gap. dnd_pipeline_audita_normalization_ellipsis_gap: - type: str + type: float required: true description: Audita ellipsis gap. dnd_pipeline_audita_normalization_max_segment_duration: - type: str + type: float required: true description: Audita maximum segment duration. dnd_pipeline_audita_normalization_max_segment_tokens: @@ -201,10 +177,6 @@ argument_specs: type: str required: true description: Audita diagnostics work directory. - dnd_pipeline_audita_diagnostics_retention: - type: str - required: true - description: Audita diagnostics retention policy. dnd_pipeline_notarius_pipelines: type: dict required: true @@ -225,6 +197,14 @@ argument_specs: type: str required: true description: Notarius LLM profile selected by the testing overlay. + dnd_pipeline_notarius_promptkit_transient_retries: + type: int + required: false + description: Optional Notarius PromptKit transient retry override. + dnd_pipeline_scriptorium_transient_retries: + type: int + required: false + description: Optional Scriptorium transient retry override. dnd_pipeline_narratio_workspace_cleanup_after_publish: type: bool required: true @@ -313,10 +293,16 @@ argument_specs: type: str required: true description: Notarius pipeline selected by Narratio. - dnd_pipeline_narratio_notarius_llm_api_key: - type: str + dnd_pipeline_narratio_audita_credentials: + type: list + elements: str required: true - description: Environment-variable name forwarded by Narratio to Notarius. + description: Credential names forwarded by Narratio to Audita. + dnd_pipeline_narratio_notarius_credentials: + type: list + elements: str + required: true + description: Credential names forwarded by Narratio to Notarius. dnd_pipeline_narratio_notarius_resume: type: bool required: true diff --git a/meta/main.yml b/meta/main.yml index e20aaab..f80f1bb 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -55,13 +55,13 @@ dependencies: narratio_seriatim_binary: /usr/local/bin/seriatim narratio_audita_binary: /usr/local/bin/audita narratio_audita_config_path: /usr/local/etc/audita/config.yml - narratio_audita_llm_api_key: "{{ dnd_pipeline_audita_llm_proposal_api_key_env }}" + narratio_audita_credentials: "{{ dnd_pipeline_narratio_audita_credentials }}" narratio_notarius_binary: /usr/local/bin/notarius narratio_notarius_config_path: /usr/local/etc/notarius/config.yml narratio_notarius_enabled: true narratio_notarius_pipeline_id: "{{ dnd_pipeline_narratio_notarius_pipeline_id }}" narratio_notarius_working_directory: /usr/local/etc/notarius - narratio_notarius_llm_api_key: "{{ dnd_pipeline_narratio_notarius_llm_api_key }}" + narratio_notarius_credentials: "{{ dnd_pipeline_narratio_notarius_credentials }}" narratio_notarius_resume: "{{ dnd_pipeline_narratio_notarius_resume }}" narratio_notarius_references: "{{ dnd_pipeline_narratio_notarius_references }}" narratio_notarius_outputs: "{{ dnd_pipeline_narratio_notarius_outputs }}" @@ -85,19 +85,13 @@ dependencies: audita_config_file_mode: "{{ dnd_pipeline_config_file_mode }}" audita_pipeline_modules: "{{ dnd_pipeline_audita_pipeline_modules }}" audita_output_schema: "{{ dnd_pipeline_audita_output_schema }}" - audita_llm_proposal_base_url: "{{ dnd_pipeline_audita_llm_proposal_base_url }}" - audita_llm_proposal_model: "{{ dnd_pipeline_audita_llm_proposal_model }}" - audita_llm_proposal_api_key_env: "{{ dnd_pipeline_audita_llm_proposal_api_key_env }}" - audita_llm_proposal_timeout: "{{ dnd_pipeline_audita_llm_proposal_timeout }}" - audita_llm_proposal_max_retries: "{{ dnd_pipeline_audita_llm_proposal_max_retries }}" - audita_llm_validation_base_url: "{{ dnd_pipeline_audita_llm_validation_base_url }}" - audita_llm_validation_model: "{{ dnd_pipeline_audita_llm_validation_model }}" - audita_llm_validation_api_key_env: "{{ dnd_pipeline_audita_llm_validation_api_key_env }}" - audita_llm_validation_timeout: "{{ dnd_pipeline_audita_llm_validation_timeout }}" - audita_llm_validation_max_retries: "{{ dnd_pipeline_audita_llm_validation_max_retries }}" - audita_concurrency_total_llm: "{{ dnd_pipeline_audita_concurrency_total_llm }}" - audita_concurrency_proposal_llm: "{{ dnd_pipeline_audita_concurrency_proposal_llm }}" - audita_concurrency_validation_llm: "{{ dnd_pipeline_audita_concurrency_validation_llm }}" + audita_backends: "{{ dnd_pipeline_audita_backends }}" + audita_profiles_dir: /usr/local/etc/audita/profiles + audita_llm_proposal_profile: "{{ dnd_pipeline_audita_llm_proposal_profile }}" + audita_llm_validation_profile: "{{ dnd_pipeline_audita_llm_validation_profile }}" + audita_llm_transient_retries: "{{ dnd_pipeline_audita_llm_transient_retries }}" + audita_llm_repair_attempts: "{{ dnd_pipeline_audita_llm_repair_attempts }}" + audita_llm_operation_timeout: "{{ dnd_pipeline_audita_llm_operation_timeout }}" audita_chunking_target_sections: "{{ dnd_pipeline_audita_chunking_target_sections }}" audita_chunking_max_section_tokens: "{{ dnd_pipeline_audita_chunking_max_section_tokens }}" audita_chunking_min_section_tokens: "{{ dnd_pipeline_audita_chunking_min_section_tokens }}" @@ -111,7 +105,6 @@ dependencies: audita_thresholds_grammar: "{{ dnd_pipeline_audita_thresholds_grammar }}" audita_context_description: "{{ dnd_pipeline_audita_context_description }}" audita_diagnostics_work_dir: "{{ dnd_pipeline_audita_diagnostics_work_dir }}" - audita_diagnostics_retention: "{{ dnd_pipeline_audita_diagnostics_retention }}" - role: rakestraw.notarius vars: notarius_version: "{{ dnd_pipeline_notarius_version }}" @@ -128,6 +121,7 @@ dependencies: notarius_cache_chunk_plans_directory: "{{ dnd_pipeline_notarius_cache_root ~ '/chunk-plans' }}" notarius_cache_checkpoints_enabled: "{{ dnd_pipeline_notarius_cache_checkpoints_enabled }}" notarius_cache_checkpoints_directory: "{{ dnd_pipeline_notarius_cache_root ~ '/checkpoints' }}" + notarius_promptkit_transient_retries: "{{ dnd_pipeline_notarius_promptkit_transient_retries }}" - role: rakestraw.scriptorium vars: scriptorium_version: "{{ dnd_pipeline_scriptorium_version }}" @@ -140,3 +134,4 @@ dependencies: scriptorium_config_file_mode: "{{ dnd_pipeline_config_file_mode }}" scriptorium_prompt_dir: "{{ dnd_pipeline_prompt_library_root ~ '/prompts' }}" scriptorium_schema_dir: "{{ dnd_pipeline_prompt_library_root ~ '/schemas' }}" + scriptorium_transient_retries: "{{ dnd_pipeline_scriptorium_transient_retries }}" diff --git a/requirements.yml b/requirements.yml index 5082424..7c769f4 100644 --- a/requirements.yml +++ b/requirements.yml @@ -7,16 +7,16 @@ roles: - name: rakestraw.audita src: https://gitea.maximumdirect.net/eric/ansible-role-audita.git scm: git - version: v0.1.0 + version: c3dd59f5ac9b942306ffe540ae9e71d493998137 - name: rakestraw.notarius src: https://gitea.maximumdirect.net/eric/ansible-role-notarius.git scm: git - version: a82a83dfc23bb80a59f45f94f78d6754c47285e7 + version: 6aef48b7e12e3651971444b8c224d96ff1879e6c - name: rakestraw.scriptorium src: https://gitea.maximumdirect.net/eric/ansible-role-scriptorium.git scm: git - version: v0.1.0 + version: b174c8c2990bb79f8149d8f288c5e06ccb42bd73 - name: rakestraw.narratio src: https://gitea.maximumdirect.net/eric/ansible-role-narratio.git scm: git - version: 330afe7856da94b2402a75447f4b60aba767843f + version: 3c0700b5323293d44e3b1e67a50074d82d7a3bff diff --git a/tasks/main.yml b/tasks/main.yml index 4e3ebea..8a15e8c 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -144,7 +144,7 @@ - conf.d - artifacts - artifact-families - - profiles + - overlays - name: Create Notarius configuration directories become: true @@ -156,7 +156,26 @@ mode: "{{ dnd_pipeline_config_directory_mode }}" loop: - pipelines - - profiles + - overlays + +- name: Create the Audita profile directory + become: true + ansible.builtin.file: + path: /usr/local/etc/audita/profiles + state: directory + owner: "{{ dnd_pipeline_runtime_user }}" + group: "{{ dnd_pipeline_runtime_group }}" + mode: "{{ dnd_pipeline_config_directory_mode }}" + +- name: Deploy Audita profiles + become: true + ansible.builtin.template: + src: audita-profile.yml.j2 + dest: "/usr/local/etc/audita/profiles/{{ item.key }}.yml" + owner: "{{ dnd_pipeline_runtime_user }}" + group: "{{ dnd_pipeline_runtime_group }}" + mode: "{{ dnd_pipeline_config_file_mode }}" + loop: "{{ dnd_pipeline_audita_profiles | dict2items }}" - name: Deploy the Notarius D&D pipeline configuration become: true @@ -171,7 +190,7 @@ become: true ansible.builtin.template: src: notarius-testing.yml.j2 - dest: /usr/local/etc/notarius/profiles/testing.yml + dest: /usr/local/etc/notarius/overlays/testing.yml owner: "{{ dnd_pipeline_runtime_user }}" group: "{{ dnd_pipeline_runtime_group }}" mode: "{{ dnd_pipeline_config_file_mode }}" @@ -198,4 +217,4 @@ - src: character-meta-analysis.yml.j2 dest: artifact-families/character-meta-analysis.yml - src: testing.yml.j2 - dest: profiles/testing.yml + dest: overlays/testing.yml diff --git a/templates/audita-profile.yml.j2 b/templates/audita-profile.yml.j2 new file mode 100644 index 0000000..660dd43 --- /dev/null +++ b/templates/audita-profile.yml.j2 @@ -0,0 +1 @@ +{{ item.value | to_nice_yaml }} diff --git a/templates/testing.yml.j2 b/templates/testing.yml.j2 index 33aaea9..6f0836e 100644 --- a/templates/testing.yml.j2 +++ b/templates/testing.yml.j2 @@ -1,5 +1,5 @@ notarius: - config_profile: testing + config_overlay: testing scriptorium: artifacts: session_recap: diff --git a/tests/integration b/tests/integration index d242c17..ced365e 100755 --- a/tests/integration +++ b/tests/integration @@ -90,19 +90,21 @@ printf '%s\n' \ baseline_log="$test_tmp/baseline.log" run_converge "$baseline_log" "${baseline_args[@]}" /usr/local/bin/seriatim --version -/usr/local/bin/audita config validate --config /usr/local/etc/audita/config.yml +AUDITA_LLM_API_KEY="$synthetic_audita_api_key" \ + /usr/local/bin/audita config validate --config /usr/local/etc/audita/config.yml /usr/local/bin/notarius config validate --config /usr/local/etc/notarius/config.yml \ --pipeline dnd-session /usr/local/bin/notarius config validate --config /usr/local/etc/notarius/config.yml \ - --config-profile testing --pipeline dnd-session + --config-overlay testing --pipeline dnd-session notarius_effective_config="$test_tmp/notarius-effective.yml" /usr/local/bin/notarius config effective --config /usr/local/etc/notarius/config.yml \ > "$notarius_effective_config" notarius_testing_effective_config="$test_tmp/notarius-testing-effective.yml" /usr/local/bin/notarius config effective --config /usr/local/etc/notarius/config.yml \ - --config-profile testing > "$notarius_testing_effective_config" + --config-overlay testing > "$notarius_testing_effective_config" grep -Fq 'mode: auto' "$notarius_effective_config" grep -Fq 'step: describe-session' "$notarius_effective_config" +/usr/local/bin/scriptorium config validate --config /usr/local/etc/scriptorium/config.yml /usr/local/bin/scriptorium inspect profile --config /usr/local/etc/scriptorium/config.yml \ --profile-dir "$profile_dir" --profile endpoint-profile /usr/bin/sudo -u narratio /usr/local/bin/narratio config validate \ @@ -110,19 +112,17 @@ grep -Fq 'step: describe-session' "$notarius_effective_config" /usr/bin/sudo -u narratio /usr/local/bin/narratio config validate \ --config /usr/local/etc/narratio/pipeline.yml --campaign dilfs /usr/bin/sudo -u narratio /usr/local/bin/narratio config validate \ - --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs --profile testing + --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs --overlay testing narratio_effective_config="$test_tmp/narratio-effective.yml" /usr/bin/sudo -u narratio /usr/local/bin/narratio config show \ --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs \ > "$narratio_effective_config" narratio_testing_effective_config="$test_tmp/narratio-testing-effective.yml" /usr/bin/sudo -u narratio /usr/local/bin/narratio config show \ - --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs --profile testing \ + --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs --overlay testing \ > "$narratio_testing_effective_config" grep -Fq 'enabled: true' "$narratio_effective_config" -grep -Fq 'llm_api_key: AUDITA_LLM_API_KEY' "$narratio_effective_config" grep -Fq 'pipeline_id: dnd-session' "$narratio_effective_config" -grep -Fq 'llm_api_key: OPENROUTER_API_KEY' "$narratio_effective_config" grep -Fq 'resume: true' "$narratio_effective_config" ! grep -Fq 'chunk_cache:' "$narratio_effective_config" grep -Fq 'party: narratio.input.party' "$narratio_effective_config" @@ -152,6 +152,8 @@ assert config["storage"] == { }, } assert config["cache"]["s3_audio"] is False +assert config["audita"]["credentials"] == ["AUDITA_LLM_API_KEY"] +assert config["notarius"]["credentials"] == ["OPENROUTER_API_KEY"] assert config["publish"] == { "enabled": True, "upload_run": True, @@ -168,8 +170,8 @@ assert config["publish"] == { }, ], } -assert "config_profile" not in config["notarius"] -assert testing_config["notarius"]["config_profile"] == "testing" +assert "config_overlay" not in config["notarius"] +assert testing_config["notarius"]["config_overlay"] == "testing" assert all( artifact["profile_id"] == "endpoint-profile" for artifact in testing_config["scriptorium"]["artifacts"].values() @@ -256,7 +258,7 @@ run_converge "$alternate_log" "${baseline_args[@]}" -e "$alternate_config" /usr/local/bin/notarius config validate --config /usr/local/etc/notarius/config.yml \ --pipeline archive-session /usr/local/bin/notarius config validate --config /usr/local/etc/notarius/config.yml \ - --config-profile testing --pipeline archive-session + --config-overlay testing --pipeline archive-session alternate_narratio_config="$test_tmp/alternate-narratio.yml" /usr/bin/sudo -u narratio /usr/local/bin/narratio config show \ --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs \ @@ -264,14 +266,14 @@ alternate_narratio_config="$test_tmp/alternate-narratio.yml" grep -Fq 'pipeline_id: archive-session' "$alternate_narratio_config" alternate_testing_narratio_config="$test_tmp/alternate-testing-narratio.yml" /usr/bin/sudo -u narratio /usr/local/bin/narratio config show \ - --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs --profile testing \ + --config /usr/local/etc/narratio/pipeline.yml --campaign centaurs --overlay testing \ > "$alternate_testing_narratio_config" alternate_effective_config="$test_tmp/alternate-effective.yml" /usr/local/bin/notarius config effective --config /usr/local/etc/notarius/config.yml \ > "$alternate_effective_config" alternate_testing_effective_config="$test_tmp/alternate-testing-effective.yml" /usr/local/bin/notarius config effective --config /usr/local/etc/notarius/config.yml \ - --config-profile testing > "$alternate_testing_effective_config" + --config-overlay testing > "$alternate_testing_effective_config" "$workspace_venv/bin/python" - \ "$alternate_narratio_config" "$alternate_testing_narratio_config" \ "$alternate_effective_config" "$alternate_testing_effective_config" <<'PY' @@ -289,9 +291,9 @@ with open(sys.argv[4], encoding="utf-8") as config_file: notarius_testing = yaml.safe_load(config_file) assert narratio_base["notarius"]["pipeline_id"] == "archive-session" -assert "config_profile" not in narratio_base["notarius"] +assert "config_overlay" not in narratio_base["notarius"] assert narratio_testing["notarius"]["pipeline_id"] == "archive-session" -assert narratio_testing["notarius"]["config_profile"] == "testing" +assert narratio_testing["notarius"]["config_overlay"] == "testing" assert notarius_base["pipelines"]["archive-session"]["llm_profile"] == "gpt-luna-latest" assert notarius_testing["pipelines"]["archive-session"]["llm_profile"] == "gpt-terra-latest" assert notarius_testing["pipelines"]["research-session"]["llm_profile"] == "gpt-luna-latest"