cjm-transcript-segment-align 0.0.32__tar.gz → 0.0.34__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cjm_transcript_segment_align-0.0.32/cjm_transcript_segment_align.egg-info → cjm_transcript_segment_align-0.0.34}/PKG-INFO +29 -21
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/README.md +19 -11
- cjm_transcript_segment_align-0.0.34/cjm_transcript_segment_align/__init__.py +1 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/routes/init.py +47 -70
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34/cjm_transcript_segment_align.egg-info}/PKG-INFO +29 -21
- cjm_transcript_segment_align-0.0.34/cjm_transcript_segment_align.egg-info/requires.txt +10 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/pyproject.toml +1 -1
- cjm_transcript_segment_align-0.0.32/cjm_transcript_segment_align/__init__.py +0 -1
- cjm_transcript_segment_align-0.0.32/cjm_transcript_segment_align.egg-info/requires.txt +0 -10
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/LICENSE +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/MANIFEST.in +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/_modidx.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/components/__init__.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/components/handlers.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/components/helpers.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/components/keyboard_config.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/components/step_renderer.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/components/sync_controls.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/components/toolbar_state.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/html_ids.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/models.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/routes/__init__.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/routes/chrome.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/routes/forced_alignment.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/services/__init__.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align/services/forced_alignment.py +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align.egg-info/SOURCES.txt +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align.egg-info/dependency_links.txt +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align.egg-info/entry_points.txt +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/cjm_transcript_segment_align.egg-info/top_level.txt +0 -0
- {cjm_transcript_segment_align-0.0.32 → cjm_transcript_segment_align-0.0.34}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cjm-transcript-segment-align
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.34
|
|
4
4
|
Summary: FastHTML dual-column text segmentation & VAD alignment UI for transcript decomposition workflows with forced alignment-based text splitting for aligning text segments with VAD chunks.
|
|
5
5
|
Author-email: "Christian J. Mills" <9126128+cj-mills@users.noreply.github.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -16,15 +16,15 @@ Requires-Python: >=3.12
|
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: python-fasthtml
|
|
19
|
-
Requires-Dist: cjm-fasthtml-app-core>=0.0.
|
|
20
|
-
Requires-Dist: cjm-plugin-system
|
|
21
|
-
Requires-Dist: cjm_transcription_plugin_system
|
|
22
|
-
Requires-Dist: cjm_transcript_segmentation>=0.0.
|
|
23
|
-
Requires-Dist: cjm_transcript_vad_align>=0.0.
|
|
24
|
-
Requires-Dist: cjm_fasthtml_keyboard_navigation>=0.0.
|
|
25
|
-
Requires-Dist: cjm_fasthtml_job_monitor>=0.0.
|
|
26
|
-
Requires-Dist: cjm_fasthtml_web_audio>=0.0.
|
|
27
|
-
Requires-Dist: cjm_fasthtml_design_system>=0.0.
|
|
19
|
+
Requires-Dist: cjm-fasthtml-app-core>=0.0.19
|
|
20
|
+
Requires-Dist: cjm-plugin-system>=0.0.30
|
|
21
|
+
Requires-Dist: cjm_transcription_plugin_system>=0.0.15
|
|
22
|
+
Requires-Dist: cjm_transcript_segmentation>=0.0.25
|
|
23
|
+
Requires-Dist: cjm_transcript_vad_align>=0.0.30
|
|
24
|
+
Requires-Dist: cjm_fasthtml_keyboard_navigation>=0.0.25
|
|
25
|
+
Requires-Dist: cjm_fasthtml_job_monitor>=0.0.14
|
|
26
|
+
Requires-Dist: cjm_fasthtml_web_audio>=0.0.14
|
|
27
|
+
Requires-Dist: cjm_fasthtml_design_system>=0.0.11
|
|
28
28
|
Dynamic: license-file
|
|
29
29
|
|
|
30
30
|
# cjm-transcript-segment-align
|
|
@@ -77,35 +77,35 @@ graph LR
|
|
|
77
77
|
services_forced_alignment[services.forced_alignment<br/>forced_alignment]
|
|
78
78
|
|
|
79
79
|
components_handlers --> components_step_renderer
|
|
80
|
-
components_handlers --> services_forced_alignment
|
|
81
|
-
components_handlers --> html_ids
|
|
82
80
|
components_handlers --> components_keyboard_config
|
|
81
|
+
components_handlers --> services_forced_alignment
|
|
83
82
|
components_handlers --> components_sync_controls
|
|
83
|
+
components_handlers --> html_ids
|
|
84
84
|
components_handlers --> routes_forced_alignment
|
|
85
85
|
components_keyboard_config --> components_sync_controls
|
|
86
86
|
components_keyboard_config --> html_ids
|
|
87
|
-
components_step_renderer --> html_ids
|
|
88
87
|
components_step_renderer --> components_keyboard_config
|
|
89
|
-
components_step_renderer --> components_sync_controls
|
|
90
|
-
components_step_renderer --> components_toolbar_state
|
|
91
88
|
components_step_renderer --> components_helpers
|
|
89
|
+
components_step_renderer --> components_toolbar_state
|
|
90
|
+
components_step_renderer --> components_sync_controls
|
|
91
|
+
components_step_renderer --> html_ids
|
|
92
92
|
components_toolbar_state --> components_sync_controls
|
|
93
93
|
routes_chrome --> components_step_renderer
|
|
94
94
|
routes_chrome --> components_handlers
|
|
95
|
-
routes_chrome --> html_ids
|
|
96
95
|
routes_chrome --> components_sync_controls
|
|
96
|
+
routes_chrome --> html_ids
|
|
97
97
|
routes_forced_alignment --> components_step_renderer
|
|
98
|
-
routes_forced_alignment --> html_ids
|
|
99
98
|
routes_forced_alignment --> components_sync_controls
|
|
99
|
+
routes_forced_alignment --> html_ids
|
|
100
|
+
routes_init --> components_keyboard_config
|
|
101
|
+
routes_init --> components_step_renderer
|
|
100
102
|
routes_init --> components_handlers
|
|
103
|
+
routes_init --> routes_forced_alignment
|
|
101
104
|
routes_init --> components_sync_controls
|
|
102
|
-
routes_init --> services_forced_alignment
|
|
103
105
|
routes_init --> html_ids
|
|
104
|
-
routes_init --> routes_forced_alignment
|
|
105
|
-
routes_init --> components_keyboard_config
|
|
106
106
|
routes_init --> models
|
|
107
107
|
routes_init --> routes_chrome
|
|
108
|
-
routes_init -->
|
|
108
|
+
routes_init --> services_forced_alignment
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
*30 cross-module dependencies detected*
|
|
@@ -666,6 +666,14 @@ def init_segment_align_routers(
|
|
|
666
666
|
Internally creates services, initializes sub-library routers,
|
|
667
667
|
wires mutation wrappers, chrome switching, forced alignment,
|
|
668
668
|
and job monitor integration.
|
|
669
|
+
|
|
670
|
+
Routes the wrapped segmentation handlers (init + mutations) through
|
|
671
|
+
segmentation's `wrapped_handlers` parameter — not via duplicate-route
|
|
672
|
+
overrides — so segmentation registers each URL exactly once and the
|
|
673
|
+
wrappers fire deterministically. `compute_segmentation_urls` resolves
|
|
674
|
+
the chicken-and-egg dependency between URL bundle and wrapper construction
|
|
675
|
+
(FA, JM, chrome need seg_urls; wrappers need fa_toggle_url + switch_chrome_url;
|
|
676
|
+
segmentation needs wrappers).
|
|
669
677
|
"""
|
|
670
678
|
```
|
|
671
679
|
|
|
@@ -48,35 +48,35 @@ graph LR
|
|
|
48
48
|
services_forced_alignment[services.forced_alignment<br/>forced_alignment]
|
|
49
49
|
|
|
50
50
|
components_handlers --> components_step_renderer
|
|
51
|
-
components_handlers --> services_forced_alignment
|
|
52
|
-
components_handlers --> html_ids
|
|
53
51
|
components_handlers --> components_keyboard_config
|
|
52
|
+
components_handlers --> services_forced_alignment
|
|
54
53
|
components_handlers --> components_sync_controls
|
|
54
|
+
components_handlers --> html_ids
|
|
55
55
|
components_handlers --> routes_forced_alignment
|
|
56
56
|
components_keyboard_config --> components_sync_controls
|
|
57
57
|
components_keyboard_config --> html_ids
|
|
58
|
-
components_step_renderer --> html_ids
|
|
59
58
|
components_step_renderer --> components_keyboard_config
|
|
60
|
-
components_step_renderer --> components_sync_controls
|
|
61
|
-
components_step_renderer --> components_toolbar_state
|
|
62
59
|
components_step_renderer --> components_helpers
|
|
60
|
+
components_step_renderer --> components_toolbar_state
|
|
61
|
+
components_step_renderer --> components_sync_controls
|
|
62
|
+
components_step_renderer --> html_ids
|
|
63
63
|
components_toolbar_state --> components_sync_controls
|
|
64
64
|
routes_chrome --> components_step_renderer
|
|
65
65
|
routes_chrome --> components_handlers
|
|
66
|
-
routes_chrome --> html_ids
|
|
67
66
|
routes_chrome --> components_sync_controls
|
|
67
|
+
routes_chrome --> html_ids
|
|
68
68
|
routes_forced_alignment --> components_step_renderer
|
|
69
|
-
routes_forced_alignment --> html_ids
|
|
70
69
|
routes_forced_alignment --> components_sync_controls
|
|
70
|
+
routes_forced_alignment --> html_ids
|
|
71
|
+
routes_init --> components_keyboard_config
|
|
72
|
+
routes_init --> components_step_renderer
|
|
71
73
|
routes_init --> components_handlers
|
|
74
|
+
routes_init --> routes_forced_alignment
|
|
72
75
|
routes_init --> components_sync_controls
|
|
73
|
-
routes_init --> services_forced_alignment
|
|
74
76
|
routes_init --> html_ids
|
|
75
|
-
routes_init --> routes_forced_alignment
|
|
76
|
-
routes_init --> components_keyboard_config
|
|
77
77
|
routes_init --> models
|
|
78
78
|
routes_init --> routes_chrome
|
|
79
|
-
routes_init -->
|
|
79
|
+
routes_init --> services_forced_alignment
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
*30 cross-module dependencies detected*
|
|
@@ -637,6 +637,14 @@ def init_segment_align_routers(
|
|
|
637
637
|
Internally creates services, initializes sub-library routers,
|
|
638
638
|
wires mutation wrappers, chrome switching, forced alignment,
|
|
639
639
|
and job monitor integration.
|
|
640
|
+
|
|
641
|
+
Routes the wrapped segmentation handlers (init + mutations) through
|
|
642
|
+
segmentation's `wrapped_handlers` parameter — not via duplicate-route
|
|
643
|
+
overrides — so segmentation registers each URL exactly once and the
|
|
644
|
+
wrappers fire deterministically. `compute_segmentation_urls` resolves
|
|
645
|
+
the chicken-and-egg dependency between URL bundle and wrapper construction
|
|
646
|
+
(FA, JM, chrome need seg_urls; wrappers need fa_toggle_url + switch_chrome_url;
|
|
647
|
+
segmentation needs wrappers).
|
|
640
648
|
"""
|
|
641
649
|
```
|
|
642
650
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.34"
|
|
@@ -17,7 +17,9 @@ from cjm_workflow_state.state_store import SQLiteWorkflowStateStore
|
|
|
17
17
|
from cjm_fasthtml_interactions.core.state_store import get_session_id
|
|
18
18
|
|
|
19
19
|
# Sub-library route init
|
|
20
|
-
from cjm_transcript_segmentation.routes.init import
|
|
20
|
+
from cjm_transcript_segmentation.routes.init import (
|
|
21
|
+
init_segmentation_routers, compute_segmentation_urls,
|
|
22
|
+
)
|
|
21
23
|
from cjm_transcript_segmentation.services.segmentation import SegmentationService
|
|
22
24
|
from cjm_transcript_segmentation.models import SegmentationUrls
|
|
23
25
|
from cjm_transcript_vad_align.routes.init import init_alignment_routers
|
|
@@ -79,6 +81,14 @@ def init_segment_align_routers(
|
|
|
79
81
|
Internally creates services, initializes sub-library routers,
|
|
80
82
|
wires mutation wrappers, chrome switching, forced alignment,
|
|
81
83
|
and job monitor integration.
|
|
84
|
+
|
|
85
|
+
Routes the wrapped segmentation handlers (init + mutations) through
|
|
86
|
+
segmentation's `wrapped_handlers` parameter — not via duplicate-route
|
|
87
|
+
overrides — so segmentation registers each URL exactly once and the
|
|
88
|
+
wrappers fire deterministically. `compute_segmentation_urls` resolves
|
|
89
|
+
the chicken-and-egg dependency between URL bundle and wrapper construction
|
|
90
|
+
(FA, JM, chrome need seg_urls; wrappers need fa_toggle_url + switch_chrome_url;
|
|
91
|
+
segmentation needs wrappers).
|
|
82
92
|
"""
|
|
83
93
|
# -----------------------------------------------------------------
|
|
84
94
|
# 1. Create services
|
|
@@ -87,9 +97,15 @@ def init_segment_align_routers(
|
|
|
87
97
|
alignment_service = AlignmentService(plugin_manager, vad_plugin)
|
|
88
98
|
|
|
89
99
|
# -----------------------------------------------------------------
|
|
90
|
-
# 2.
|
|
100
|
+
# 2. Compute segmentation URLs upfront (without registering routes).
|
|
101
|
+
# Lets FA / JM / chrome receive populated URLs at construction time
|
|
102
|
+
# and lets wrappers be built before init_segmentation_routers runs.
|
|
103
|
+
# -----------------------------------------------------------------
|
|
104
|
+
seg_urls = compute_segmentation_urls(prefix=f"{prefix}/seg")
|
|
105
|
+
|
|
106
|
+
# -----------------------------------------------------------------
|
|
107
|
+
# 3. Alignment routers (with combined init wrapper via wrapped_init parameter)
|
|
91
108
|
# -----------------------------------------------------------------
|
|
92
|
-
# Alignment routers (with combined init wrapper)
|
|
93
109
|
wrapped_align_init = create_align_init_chrome_wrapper(should_play_fn=SHOULD_PLAY_FN)
|
|
94
110
|
|
|
95
111
|
align_routers, align_urls, align_routes = init_alignment_routers(
|
|
@@ -102,18 +118,8 @@ def init_segment_align_routers(
|
|
|
102
118
|
wrapped_init=wrapped_align_init,
|
|
103
119
|
)
|
|
104
120
|
|
|
105
|
-
# Segmentation routers (without mutation wrappers — need FA URLs first)
|
|
106
|
-
seg_routers, seg_urls, seg_routes = init_segmentation_routers(
|
|
107
|
-
state_store=state_store,
|
|
108
|
-
workflow_id=workflow_id,
|
|
109
|
-
source_service=source_service,
|
|
110
|
-
segmentation_service=segmentation_service,
|
|
111
|
-
prefix=f"{prefix}/seg",
|
|
112
|
-
max_history_depth=max_history_depth,
|
|
113
|
-
)
|
|
114
|
-
|
|
115
121
|
# -----------------------------------------------------------------
|
|
116
|
-
#
|
|
122
|
+
# 4. Forced alignment service + toggle route
|
|
117
123
|
# -----------------------------------------------------------------
|
|
118
124
|
fa_is_available = False
|
|
119
125
|
fa_toggle_url = ""
|
|
@@ -142,9 +148,9 @@ def init_segment_align_routers(
|
|
|
142
148
|
fa_routers = [fa_router]
|
|
143
149
|
fa_toggle_url = fa_routes["toggle"].to()
|
|
144
150
|
|
|
145
|
-
#
|
|
146
|
-
#
|
|
147
|
-
#
|
|
151
|
+
# -----------------------------------------------------------------
|
|
152
|
+
# 5. Job monitor routes for FA
|
|
153
|
+
# -----------------------------------------------------------------
|
|
148
154
|
monitor_service = JobMonitorService(
|
|
149
155
|
queue=job_queue,
|
|
150
156
|
manager=plugin_manager,
|
|
@@ -189,7 +195,7 @@ def init_segment_align_routers(
|
|
|
189
195
|
sse_headers = list(get_sse_headers())
|
|
190
196
|
|
|
191
197
|
# -----------------------------------------------------------------
|
|
192
|
-
#
|
|
198
|
+
# 6. Chrome switching router
|
|
193
199
|
# -----------------------------------------------------------------
|
|
194
200
|
chrome_router, chrome_routes = init_chrome_router(
|
|
195
201
|
state_store=state_store,
|
|
@@ -204,53 +210,14 @@ def init_segment_align_routers(
|
|
|
204
210
|
switch_chrome_url = chrome_routes["switch_chrome"].to()
|
|
205
211
|
|
|
206
212
|
# -----------------------------------------------------------------
|
|
207
|
-
#
|
|
213
|
+
# 7. Build wrapped handlers (init + mutations) for segmentation
|
|
208
214
|
# -----------------------------------------------------------------
|
|
209
|
-
|
|
215
|
+
wrapped_mutation_handlers = create_seg_mutation_wrappers(
|
|
210
216
|
jm_trigger=jm_trigger_el,
|
|
211
217
|
fa_toggle_url=fa_toggle_url,
|
|
212
218
|
fa_available=fa_is_available,
|
|
213
219
|
)
|
|
214
220
|
|
|
215
|
-
seg_mutation_router = APIRouter(prefix=f"{prefix}/seg/workflow")
|
|
216
|
-
|
|
217
|
-
@seg_mutation_router
|
|
218
|
-
async def split(request, sess, segment_index: int):
|
|
219
|
-
return await wrapped_handlers["split"](
|
|
220
|
-
state_store, workflow_id, request, sess, segment_index,
|
|
221
|
-
urls=seg_urls, max_history_depth=max_history_depth,
|
|
222
|
-
)
|
|
223
|
-
|
|
224
|
-
@seg_mutation_router
|
|
225
|
-
async def merge(request, sess, segment_index: int):
|
|
226
|
-
return await wrapped_handlers["merge"](
|
|
227
|
-
state_store, workflow_id, request, sess, segment_index,
|
|
228
|
-
urls=seg_urls, max_history_depth=max_history_depth,
|
|
229
|
-
)
|
|
230
|
-
|
|
231
|
-
@seg_mutation_router
|
|
232
|
-
async def undo(request, sess):
|
|
233
|
-
return await wrapped_handlers["undo"](
|
|
234
|
-
state_store, workflow_id, request, sess, urls=seg_urls,
|
|
235
|
-
)
|
|
236
|
-
|
|
237
|
-
@seg_mutation_router
|
|
238
|
-
async def reset(request, sess):
|
|
239
|
-
return await wrapped_handlers["reset"](
|
|
240
|
-
state_store, workflow_id, request, sess,
|
|
241
|
-
urls=seg_urls, max_history_depth=max_history_depth,
|
|
242
|
-
)
|
|
243
|
-
|
|
244
|
-
@seg_mutation_router
|
|
245
|
-
async def ai_split(request, sess):
|
|
246
|
-
return await wrapped_handlers["ai_split"](
|
|
247
|
-
state_store, workflow_id, segmentation_service, request, sess,
|
|
248
|
-
urls=seg_urls, max_history_depth=max_history_depth,
|
|
249
|
-
)
|
|
250
|
-
|
|
251
|
-
# -----------------------------------------------------------------
|
|
252
|
-
# 7. Seg init wrapper (combined KB system + shared chrome)
|
|
253
|
-
# -----------------------------------------------------------------
|
|
254
221
|
wrapped_seg_init = create_seg_init_chrome_wrapper(
|
|
255
222
|
align_urls=align_urls,
|
|
256
223
|
switch_chrome_url=switch_chrome_url,
|
|
@@ -259,17 +226,29 @@ def init_segment_align_routers(
|
|
|
259
226
|
fa_available=fa_is_available,
|
|
260
227
|
)
|
|
261
228
|
|
|
262
|
-
|
|
229
|
+
seg_wrapped_handlers = {
|
|
230
|
+
"init": wrapped_seg_init,
|
|
231
|
+
**wrapped_mutation_handlers,
|
|
232
|
+
}
|
|
263
233
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
234
|
+
# -----------------------------------------------------------------
|
|
235
|
+
# 8. Initialize segmentation routers WITH wrapped handlers + pre-computed URLs.
|
|
236
|
+
# Segmentation registers each URL exactly once, binding wrapped handlers
|
|
237
|
+
# natively — no duplicate-route override pattern, no resolution-order fragility.
|
|
238
|
+
# -----------------------------------------------------------------
|
|
239
|
+
seg_routers, seg_urls, seg_routes = init_segmentation_routers(
|
|
240
|
+
state_store=state_store,
|
|
241
|
+
workflow_id=workflow_id,
|
|
242
|
+
source_service=source_service,
|
|
243
|
+
segmentation_service=segmentation_service,
|
|
244
|
+
prefix=f"{prefix}/seg",
|
|
245
|
+
max_history_depth=max_history_depth,
|
|
246
|
+
wrapped_handlers=seg_wrapped_handlers,
|
|
247
|
+
urls=seg_urls,
|
|
248
|
+
)
|
|
270
249
|
|
|
271
250
|
# -----------------------------------------------------------------
|
|
272
|
-
#
|
|
251
|
+
# 9. Build render closure (checks for in-flight jobs on each render)
|
|
273
252
|
# -----------------------------------------------------------------
|
|
274
253
|
def _render_step(ctx):
|
|
275
254
|
"""Pre-configured render callable for the combined step."""
|
|
@@ -311,11 +290,10 @@ def init_segment_align_routers(
|
|
|
311
290
|
)
|
|
312
291
|
|
|
313
292
|
# -----------------------------------------------------------------
|
|
314
|
-
#
|
|
293
|
+
# 10. Assemble and return
|
|
315
294
|
# -----------------------------------------------------------------
|
|
316
295
|
all_routers = (
|
|
317
296
|
[chrome_router] + fa_routers + jm_routers +
|
|
318
|
-
[seg_mutation_router, seg_init_router] +
|
|
319
297
|
seg_routers + align_routers
|
|
320
298
|
)
|
|
321
299
|
|
|
@@ -333,4 +311,3 @@ def init_segment_align_routers(
|
|
|
333
311
|
)
|
|
334
312
|
|
|
335
313
|
return all_routers, result
|
|
336
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cjm-transcript-segment-align
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.34
|
|
4
4
|
Summary: FastHTML dual-column text segmentation & VAD alignment UI for transcript decomposition workflows with forced alignment-based text splitting for aligning text segments with VAD chunks.
|
|
5
5
|
Author-email: "Christian J. Mills" <9126128+cj-mills@users.noreply.github.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -16,15 +16,15 @@ Requires-Python: >=3.12
|
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: python-fasthtml
|
|
19
|
-
Requires-Dist: cjm-fasthtml-app-core>=0.0.
|
|
20
|
-
Requires-Dist: cjm-plugin-system
|
|
21
|
-
Requires-Dist: cjm_transcription_plugin_system
|
|
22
|
-
Requires-Dist: cjm_transcript_segmentation>=0.0.
|
|
23
|
-
Requires-Dist: cjm_transcript_vad_align>=0.0.
|
|
24
|
-
Requires-Dist: cjm_fasthtml_keyboard_navigation>=0.0.
|
|
25
|
-
Requires-Dist: cjm_fasthtml_job_monitor>=0.0.
|
|
26
|
-
Requires-Dist: cjm_fasthtml_web_audio>=0.0.
|
|
27
|
-
Requires-Dist: cjm_fasthtml_design_system>=0.0.
|
|
19
|
+
Requires-Dist: cjm-fasthtml-app-core>=0.0.19
|
|
20
|
+
Requires-Dist: cjm-plugin-system>=0.0.30
|
|
21
|
+
Requires-Dist: cjm_transcription_plugin_system>=0.0.15
|
|
22
|
+
Requires-Dist: cjm_transcript_segmentation>=0.0.25
|
|
23
|
+
Requires-Dist: cjm_transcript_vad_align>=0.0.30
|
|
24
|
+
Requires-Dist: cjm_fasthtml_keyboard_navigation>=0.0.25
|
|
25
|
+
Requires-Dist: cjm_fasthtml_job_monitor>=0.0.14
|
|
26
|
+
Requires-Dist: cjm_fasthtml_web_audio>=0.0.14
|
|
27
|
+
Requires-Dist: cjm_fasthtml_design_system>=0.0.11
|
|
28
28
|
Dynamic: license-file
|
|
29
29
|
|
|
30
30
|
# cjm-transcript-segment-align
|
|
@@ -77,35 +77,35 @@ graph LR
|
|
|
77
77
|
services_forced_alignment[services.forced_alignment<br/>forced_alignment]
|
|
78
78
|
|
|
79
79
|
components_handlers --> components_step_renderer
|
|
80
|
-
components_handlers --> services_forced_alignment
|
|
81
|
-
components_handlers --> html_ids
|
|
82
80
|
components_handlers --> components_keyboard_config
|
|
81
|
+
components_handlers --> services_forced_alignment
|
|
83
82
|
components_handlers --> components_sync_controls
|
|
83
|
+
components_handlers --> html_ids
|
|
84
84
|
components_handlers --> routes_forced_alignment
|
|
85
85
|
components_keyboard_config --> components_sync_controls
|
|
86
86
|
components_keyboard_config --> html_ids
|
|
87
|
-
components_step_renderer --> html_ids
|
|
88
87
|
components_step_renderer --> components_keyboard_config
|
|
89
|
-
components_step_renderer --> components_sync_controls
|
|
90
|
-
components_step_renderer --> components_toolbar_state
|
|
91
88
|
components_step_renderer --> components_helpers
|
|
89
|
+
components_step_renderer --> components_toolbar_state
|
|
90
|
+
components_step_renderer --> components_sync_controls
|
|
91
|
+
components_step_renderer --> html_ids
|
|
92
92
|
components_toolbar_state --> components_sync_controls
|
|
93
93
|
routes_chrome --> components_step_renderer
|
|
94
94
|
routes_chrome --> components_handlers
|
|
95
|
-
routes_chrome --> html_ids
|
|
96
95
|
routes_chrome --> components_sync_controls
|
|
96
|
+
routes_chrome --> html_ids
|
|
97
97
|
routes_forced_alignment --> components_step_renderer
|
|
98
|
-
routes_forced_alignment --> html_ids
|
|
99
98
|
routes_forced_alignment --> components_sync_controls
|
|
99
|
+
routes_forced_alignment --> html_ids
|
|
100
|
+
routes_init --> components_keyboard_config
|
|
101
|
+
routes_init --> components_step_renderer
|
|
100
102
|
routes_init --> components_handlers
|
|
103
|
+
routes_init --> routes_forced_alignment
|
|
101
104
|
routes_init --> components_sync_controls
|
|
102
|
-
routes_init --> services_forced_alignment
|
|
103
105
|
routes_init --> html_ids
|
|
104
|
-
routes_init --> routes_forced_alignment
|
|
105
|
-
routes_init --> components_keyboard_config
|
|
106
106
|
routes_init --> models
|
|
107
107
|
routes_init --> routes_chrome
|
|
108
|
-
routes_init -->
|
|
108
|
+
routes_init --> services_forced_alignment
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
*30 cross-module dependencies detected*
|
|
@@ -666,6 +666,14 @@ def init_segment_align_routers(
|
|
|
666
666
|
Internally creates services, initializes sub-library routers,
|
|
667
667
|
wires mutation wrappers, chrome switching, forced alignment,
|
|
668
668
|
and job monitor integration.
|
|
669
|
+
|
|
670
|
+
Routes the wrapped segmentation handlers (init + mutations) through
|
|
671
|
+
segmentation's `wrapped_handlers` parameter — not via duplicate-route
|
|
672
|
+
overrides — so segmentation registers each URL exactly once and the
|
|
673
|
+
wrappers fire deterministically. `compute_segmentation_urls` resolves
|
|
674
|
+
the chicken-and-egg dependency between URL bundle and wrapper construction
|
|
675
|
+
(FA, JM, chrome need seg_urls; wrappers need fa_toggle_url + switch_chrome_url;
|
|
676
|
+
segmentation needs wrappers).
|
|
669
677
|
"""
|
|
670
678
|
```
|
|
671
679
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
python-fasthtml
|
|
2
|
+
cjm-fasthtml-app-core>=0.0.19
|
|
3
|
+
cjm-plugin-system>=0.0.30
|
|
4
|
+
cjm_transcription_plugin_system>=0.0.15
|
|
5
|
+
cjm_transcript_segmentation>=0.0.25
|
|
6
|
+
cjm_transcript_vad_align>=0.0.30
|
|
7
|
+
cjm_fasthtml_keyboard_navigation>=0.0.25
|
|
8
|
+
cjm_fasthtml_job_monitor>=0.0.14
|
|
9
|
+
cjm_fasthtml_web_audio>=0.0.14
|
|
10
|
+
cjm_fasthtml_design_system>=0.0.11
|
|
@@ -12,7 +12,7 @@ license = {text = "Apache-2.0"}
|
|
|
12
12
|
authors = [{name = "Christian J. Mills", email = "9126128+cj-mills@users.noreply.github.com"}]
|
|
13
13
|
keywords = ['nbdev', 'jupyter', 'notebook', 'python']
|
|
14
14
|
classifiers = ["Natural Language :: English", "Intended Audience :: Developers", "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only"]
|
|
15
|
-
dependencies = ['python-fasthtml', 'cjm-fasthtml-app-core>=0.0.
|
|
15
|
+
dependencies = ['python-fasthtml', 'cjm-fasthtml-app-core>=0.0.19', 'cjm-plugin-system>=0.0.30', 'cjm_transcription_plugin_system>=0.0.15', 'cjm_transcript_segmentation>=0.0.25', 'cjm_transcript_vad_align>=0.0.30', 'cjm_fasthtml_keyboard_navigation>=0.0.25', 'cjm_fasthtml_job_monitor>=0.0.14', 'cjm_fasthtml_web_audio>=0.0.14', 'cjm_fasthtml_design_system>=0.0.11']
|
|
16
16
|
|
|
17
17
|
[project.urls]
|
|
18
18
|
Repository = "https://github.com/cj-mills/cjm-transcript-segment-align"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.0.32"
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
python-fasthtml
|
|
2
|
-
cjm-fasthtml-app-core>=0.0.17
|
|
3
|
-
cjm-plugin-system
|
|
4
|
-
cjm_transcription_plugin_system
|
|
5
|
-
cjm_transcript_segmentation>=0.0.22
|
|
6
|
-
cjm_transcript_vad_align>=0.0.28
|
|
7
|
-
cjm_fasthtml_keyboard_navigation>=0.0.22
|
|
8
|
-
cjm_fasthtml_job_monitor>=0.0.11
|
|
9
|
-
cjm_fasthtml_web_audio>=0.0.11
|
|
10
|
-
cjm_fasthtml_design_system>=0.0.8
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|