diff --git a/defaults/main.yml b/defaults/main.yml index 43088a4..40760d4 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -50,3 +50,64 @@ dnd_pipeline_audita_context_description: >- to actual D&D gameplay. dnd_pipeline_audita_diagnostics_work_dir: /tmp/audita dnd_pipeline_audita_diagnostics_retention: auto +dnd_pipeline_narratio_seriatim_output_schema: seriatim-intermediate +dnd_pipeline_narratio_normalize_output_path: transcripts/final.json +dnd_pipeline_narratio_normalize_output_schema: seriatim-intermediate +dnd_pipeline_narratio_trim_enabled: true +dnd_pipeline_narratio_trim_output_path: transcripts/final.trimmed.json +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_render_enabled: true +dnd_pipeline_narratio_render_format: markdown +dnd_pipeline_narratio_session_recap_artifact: + enabled: true + prompt_id: dnd.session_recap + output_path: artifacts/session_recap.md + inputs: + transcript: + source: narratio.transcript.final_trimmed + required: true + recap: + source: narratio.previous_session.artifact.session_recap + required: false +dnd_pipeline_narratio_hostile_rumors_artifact: + enabled: true + prompt_id: dnd.hostile_rumors + output_path: artifacts/hostile_rumors.md + inputs: + recap: + source: narratio.artifact.session_recap + required: true +dnd_pipeline_narratio_deranged_rumors_artifact: + enabled: true + prompt_id: dnd.deranged_rumors + output_path: artifacts/deranged_rumors.md + inputs: + recap: + source: narratio.artifact.session_recap + required: true +dnd_pipeline_narratio_scene_map_artifact: + enabled: false + prompt_id: dnd.scene_map + output_path: artifacts/scene_map.json + inputs: + transcript: + source: narratio.transcript.final_trimmed + required: true +dnd_pipeline_narratio_character_analysis_family: + enabled: false + for_each: party.characters + prompt_id: dnd.character_meta_analysis + output_path_pattern: artifacts/character_meta_analysis/{character_id}.md + inputs: + transcript: + source: narratio.transcript.final_trimmed + required: true + recap: + source: narratio.previous_session.artifact.session_recap + required: false + member_vars: + character_name: character.name + character_class: character.class_summary +dnd_pipeline_narratio_testing_scriptorium_profile: gemini-flash-latest diff --git a/meta/argument_specs.yml b/meta/argument_specs.yml index 3cfb768..84e17c0 100644 --- a/meta/argument_specs.yml +++ b/meta/argument_specs.yml @@ -180,3 +180,67 @@ argument_specs: type: str required: true description: Audita diagnostics retention policy. + dnd_pipeline_narratio_seriatim_output_schema: + type: str + required: true + description: Seriatim schema consumed by the D&D processing workflow. + dnd_pipeline_narratio_normalize_output_path: + type: str + required: true + description: Canonical normalized transcript output path. + dnd_pipeline_narratio_normalize_output_schema: + type: str + required: true + description: Schema for the normalized transcript output. + dnd_pipeline_narratio_trim_enabled: + type: bool + required: true + description: Whether D&D transcript trimming is enabled. + dnd_pipeline_narratio_trim_output_path: + type: str + required: true + description: Canonical trimmed transcript output path. + dnd_pipeline_narratio_trim_bounds_prompt_id: + type: str + required: true + description: Prompt that identifies D&D session bounds. + dnd_pipeline_narratio_trim_bounds_transcript_input_name: + type: str + required: true + description: Bounds prompt input receiving the transcript. + dnd_pipeline_narratio_trim_bounds_output_path: + type: str + required: true + description: Canonical session-bounds artifact output path. + dnd_pipeline_narratio_render_enabled: + type: bool + required: true + description: Whether transcript rendering is enabled. + dnd_pipeline_narratio_render_format: + type: str + required: true + description: Format for rendered D&D transcripts. + dnd_pipeline_narratio_session_recap_artifact: + type: dict + required: true + description: Complete native mapping for the session recap artifact. + dnd_pipeline_narratio_hostile_rumors_artifact: + type: dict + required: true + description: Complete native mapping for the hostile rumors artifact. + dnd_pipeline_narratio_deranged_rumors_artifact: + type: dict + required: true + description: Complete native mapping for the deranged rumors artifact. + dnd_pipeline_narratio_scene_map_artifact: + type: dict + required: true + description: Complete native mapping for the scene map artifact. + dnd_pipeline_narratio_character_analysis_family: + type: dict + required: true + description: Complete native mapping for the character analysis family. + dnd_pipeline_narratio_testing_scriptorium_profile: + type: str + required: true + description: Scriptorium profile selected by the testing overlay. diff --git a/meta/main.yml b/meta/main.yml index facbcae..5b34b67 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -80,6 +80,13 @@ dependencies: narratio_go_binary: "{{ dnd_pipeline_go_binary }}" narratio_whisperx_transcribe_url: "{{ dnd_pipeline_whisperx_transcribe_url }}" narratio_campaigns_root: "{{ dnd_pipeline_campaigns_root }}" + narratio_configkit_imports: + - path: conf.d/processing.yml + - path: artifacts/session-recap.yml + - path: artifacts/hostile-rumors.yml + - path: artifacts/deranged-rumors.yml + - path: artifacts/scene-map.yml + - path: artifact-families/character-meta-analysis.yml narratio_seriatim_binary: /usr/local/bin/seriatim narratio_audita_binary: /usr/local/bin/audita narratio_audita_config_path: /usr/local/etc/audita/config.yml diff --git a/tasks/main.yml b/tasks/main.yml index 87b10b1..c86ebd2 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -25,3 +25,41 @@ version: "{{ dnd_pipeline_prompt_library_revision }}" update: true force: true + +- name: Create Narratio configuration directories + become: true + ansible.builtin.file: + path: "/usr/local/etc/narratio/{{ item }}" + state: directory + owner: root + group: narratio + mode: "0750" + loop: + - conf.d + - artifacts + - artifact-families + - profiles + +- name: Deploy Narratio D&D configuration fragments + become: true + ansible.builtin.template: + src: "{{ item.src }}" + dest: "/usr/local/etc/narratio/{{ item.dest }}" + owner: root + group: narratio + mode: "0640" + loop: + - src: processing.yml.j2 + dest: conf.d/processing.yml + - src: session-recap.yml.j2 + dest: artifacts/session-recap.yml + - src: hostile-rumors.yml.j2 + dest: artifacts/hostile-rumors.yml + - src: deranged-rumors.yml.j2 + dest: artifacts/deranged-rumors.yml + - src: scene-map.yml.j2 + dest: artifacts/scene-map.yml + - src: character-meta-analysis.yml.j2 + dest: artifact-families/character-meta-analysis.yml + - src: testing.yml.j2 + dest: profiles/testing.yml diff --git a/templates/character-meta-analysis.yml.j2 b/templates/character-meta-analysis.yml.j2 new file mode 100644 index 0000000..2c9d666 --- /dev/null +++ b/templates/character-meta-analysis.yml.j2 @@ -0,0 +1,4 @@ +scriptorium: + artifact_families: + character_meta_analysis: +{{ dnd_pipeline_narratio_character_analysis_family | to_nice_yaml(indent=2) | indent(6, true) }} diff --git a/templates/deranged-rumors.yml.j2 b/templates/deranged-rumors.yml.j2 new file mode 100644 index 0000000..f99dafe --- /dev/null +++ b/templates/deranged-rumors.yml.j2 @@ -0,0 +1,4 @@ +scriptorium: + artifacts: + deranged_rumors: +{{ dnd_pipeline_narratio_deranged_rumors_artifact | to_nice_yaml(indent=2) | indent(6, true) }} diff --git a/templates/hostile-rumors.yml.j2 b/templates/hostile-rumors.yml.j2 new file mode 100644 index 0000000..95d2456 --- /dev/null +++ b/templates/hostile-rumors.yml.j2 @@ -0,0 +1,4 @@ +scriptorium: + artifacts: + hostile_rumors: +{{ dnd_pipeline_narratio_hostile_rumors_artifact | to_nice_yaml(indent=2) | indent(6, true) }} diff --git a/templates/processing.yml.j2 b/templates/processing.yml.j2 new file mode 100644 index 0000000..514ecdc --- /dev/null +++ b/templates/processing.yml.j2 @@ -0,0 +1,17 @@ +audita: + output_schema: {{ dnd_pipeline_audita_output_schema | to_json }} +seriatim: + output_schema: {{ dnd_pipeline_narratio_seriatim_output_schema | to_json }} +normalize: + output_path: {{ dnd_pipeline_narratio_normalize_output_path | to_json }} + output_schema: {{ dnd_pipeline_narratio_normalize_output_schema | to_json }} +trim: + enabled: {{ dnd_pipeline_narratio_trim_enabled | to_json }} + output_path: {{ dnd_pipeline_narratio_trim_output_path | to_json }} + bounds: + prompt_id: {{ dnd_pipeline_narratio_trim_bounds_prompt_id | to_json }} + transcript_input_name: {{ dnd_pipeline_narratio_trim_bounds_transcript_input_name | to_json }} + output_path: {{ dnd_pipeline_narratio_trim_bounds_output_path | to_json }} +render: + enabled: {{ dnd_pipeline_narratio_render_enabled | to_json }} + format: {{ dnd_pipeline_narratio_render_format | to_json }} diff --git a/templates/scene-map.yml.j2 b/templates/scene-map.yml.j2 new file mode 100644 index 0000000..c5f5cd0 --- /dev/null +++ b/templates/scene-map.yml.j2 @@ -0,0 +1,4 @@ +scriptorium: + artifacts: + scene_map: +{{ dnd_pipeline_narratio_scene_map_artifact | to_nice_yaml(indent=2) | indent(6, true) }} diff --git a/templates/session-recap.yml.j2 b/templates/session-recap.yml.j2 new file mode 100644 index 0000000..1ee818f --- /dev/null +++ b/templates/session-recap.yml.j2 @@ -0,0 +1,4 @@ +scriptorium: + artifacts: + session_recap: +{{ dnd_pipeline_narratio_session_recap_artifact | to_nice_yaml(indent=2) | indent(6, true) }} diff --git a/templates/testing.yml.j2 b/templates/testing.yml.j2 new file mode 100644 index 0000000..51dacc7 --- /dev/null +++ b/templates/testing.yml.j2 @@ -0,0 +1,13 @@ +scriptorium: + artifacts: + session_recap: + profile_id: {{ dnd_pipeline_narratio_testing_scriptorium_profile | to_json }} + hostile_rumors: + profile_id: {{ dnd_pipeline_narratio_testing_scriptorium_profile | to_json }} + deranged_rumors: + profile_id: {{ dnd_pipeline_narratio_testing_scriptorium_profile | to_json }} + scene_map: + profile_id: {{ dnd_pipeline_narratio_testing_scriptorium_profile | to_json }} + artifact_families: + character_meta_analysis: + profile_id: {{ dnd_pipeline_narratio_testing_scriptorium_profile | to_json }}