batchalign 0.8.0.post2__tar.gz → 0.8.0.post4__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.

Potentially problematic release.


This version of batchalign might be problematic. Click here for more details.

Files changed (144) hide show
  1. {batchalign-0.8.0.post2/batchalign.egg-info → batchalign-0.8.0.post4}/PKG-INFO +1 -1
  2. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/cli/dispatch.py +97 -2
  3. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/utils.py +6 -2
  4. batchalign-0.8.0.post4/batchalign/version +3 -0
  5. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4/batchalign.egg-info}/PKG-INFO +1 -1
  6. batchalign-0.8.0.post2/batchalign/version +0 -3
  7. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/LICENSE +0 -0
  8. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/MANIFEST.in +0 -0
  9. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/README.md +0 -0
  10. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/__init__.py +0 -0
  11. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/__main__.py +0 -0
  12. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/cli/__init__.py +0 -0
  13. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/cli/cli.py +0 -0
  14. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/constants.py +0 -0
  15. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/document.py +0 -0
  16. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/errors.py +0 -0
  17. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/__init__.py +0 -0
  18. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/base.py +0 -0
  19. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/chat/__init__.py +0 -0
  20. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/chat/file.py +0 -0
  21. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/chat/generator.py +0 -0
  22. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/chat/lexer.py +0 -0
  23. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/chat/parser.py +0 -0
  24. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/chat/utils.py +0 -0
  25. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/textgrid/__init__.py +0 -0
  26. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/textgrid/file.py +0 -0
  27. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/textgrid/generator.py +0 -0
  28. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/formats/textgrid/parser.py +0 -0
  29. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/__init__.py +0 -0
  30. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/resolve.py +0 -0
  31. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/speaker/__init__.py +0 -0
  32. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/speaker/config.yaml +0 -0
  33. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/speaker/infer.py +0 -0
  34. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/speaker/utils.py +0 -0
  35. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/training/__init__.py +0 -0
  36. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/training/run.py +0 -0
  37. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/training/utils.py +0 -0
  38. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/utils.py +0 -0
  39. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/utterance/__init__.py +0 -0
  40. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/utterance/cantonese_infer.py +0 -0
  41. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/utterance/dataset.py +0 -0
  42. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/utterance/execute.py +0 -0
  43. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/utterance/infer.py +0 -0
  44. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/utterance/prep.py +0 -0
  45. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/utterance/train.py +0 -0
  46. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/wave2vec/__init__.py +0 -0
  47. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/wave2vec/infer_fa.py +0 -0
  48. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/whisper/__init__.py +0 -0
  49. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/whisper/infer_asr.py +0 -0
  50. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/models/whisper/infer_fa.py +0 -0
  51. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/__init__.py +0 -0
  52. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/analysis/__init__.py +0 -0
  53. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/analysis/eval.py +0 -0
  54. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/__init__.py +0 -0
  55. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2chinese.py +0 -0
  56. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/__init__.py +0 -0
  57. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/deu.py +0 -0
  58. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/ell.py +0 -0
  59. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/eng.py +0 -0
  60. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/eus.py +0 -0
  61. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/fra.py +0 -0
  62. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/hrv.py +0 -0
  63. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/ind.py +0 -0
  64. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/jpn.py +0 -0
  65. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/nld.py +0 -0
  66. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/por.py +0 -0
  67. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/spa.py +0 -0
  68. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/num2lang/tha.py +0 -0
  69. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/oai_whisper.py +0 -0
  70. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/rev.py +0 -0
  71. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/whisper.py +0 -0
  72. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/asr/whisperx.py +0 -0
  73. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/avqi/__init__.py +0 -0
  74. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/avqi/engine.py +0 -0
  75. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/base.py +0 -0
  76. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/cleanup/__init__.py +0 -0
  77. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/cleanup/cleanup.py +0 -0
  78. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/cleanup/disfluencies.py +0 -0
  79. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/cleanup/parse_support.py +0 -0
  80. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/cleanup/retrace.py +0 -0
  81. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/cleanup/support/filled_pauses.eng +0 -0
  82. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/cleanup/support/replacements.eng +0 -0
  83. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/cleanup/support/test.test +0 -0
  84. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/diarization/__init__.py +0 -0
  85. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/diarization/pyannote.py +0 -0
  86. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/dispatch.py +0 -0
  87. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/fa/__init__.py +0 -0
  88. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/fa/wave2vec_fa.py +0 -0
  89. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/fa/whisper_fa.py +0 -0
  90. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/morphosyntax/__init__.py +0 -0
  91. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/morphosyntax/coref.py +0 -0
  92. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/morphosyntax/en/irr.py +0 -0
  93. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/morphosyntax/fr/apm.py +0 -0
  94. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/morphosyntax/fr/apmn.py +0 -0
  95. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/morphosyntax/fr/case.py +0 -0
  96. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/morphosyntax/ja/verbforms.py +0 -0
  97. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/morphosyntax/ud.py +0 -0
  98. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/opensmile/__init__.py +0 -0
  99. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/opensmile/engine.py +0 -0
  100. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/pipeline.py +0 -0
  101. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/speaker/__init__.py +0 -0
  102. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/speaker/nemo_speaker.py +0 -0
  103. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/translate/__init__.py +0 -0
  104. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/translate/gtrans.py +0 -0
  105. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/translate/seamless.py +0 -0
  106. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/translate/utils.py +0 -0
  107. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/utr/__init__.py +0 -0
  108. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/utr/rev_utr.py +0 -0
  109. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/utr/utils.py +0 -0
  110. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/utr/whisper_utr.py +0 -0
  111. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/utterance/__init__.py +0 -0
  112. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/pipelines/utterance/ud_utterance.py +0 -0
  113. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/__init__.py +0 -0
  114. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/conftest.py +0 -0
  115. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/formats/chat/test_chat_file.py +0 -0
  116. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/formats/chat/test_chat_generator.py +0 -0
  117. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/formats/chat/test_chat_lexer.py +0 -0
  118. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/formats/chat/test_chat_parser.py +0 -0
  119. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/formats/chat/test_chat_utils.py +0 -0
  120. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/formats/textgrid/test_textgrid.py +0 -0
  121. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/pipelines/analysis/test_eval.py +0 -0
  122. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/pipelines/asr/test_asr_pipeline.py +0 -0
  123. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/pipelines/asr/test_asr_utils.py +0 -0
  124. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/pipelines/cleanup/test_disfluency.py +0 -0
  125. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/pipelines/cleanup/test_parse_support.py +0 -0
  126. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/pipelines/fa/test_fa_pipeline.py +0 -0
  127. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/pipelines/fixures.py +0 -0
  128. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/pipelines/test_pipeline.py +0 -0
  129. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/pipelines/test_pipeline_models.py +0 -0
  130. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/tests/test_document.py +0 -0
  131. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/utils/__init__.py +0 -0
  132. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/utils/abbrev.py +0 -0
  133. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/utils/compounds.py +0 -0
  134. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/utils/config.py +0 -0
  135. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/utils/dp.py +0 -0
  136. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/utils/names.py +0 -0
  137. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign/utils/utils.py +0 -0
  138. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign.egg-info/SOURCES.txt +0 -0
  139. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign.egg-info/dependency_links.txt +0 -0
  140. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign.egg-info/entry_points.txt +0 -0
  141. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign.egg-info/requires.txt +0 -0
  142. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/batchalign.egg-info/top_level.txt +0 -0
  143. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/setup.cfg +0 -0
  144. {batchalign-0.8.0.post2 → batchalign-0.8.0.post4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: batchalign
3
- Version: 0.8.0.post2
3
+ Version: 0.8.0.post4
4
4
  Summary: Python Speech Language Sample Analysis
5
5
  Author: Brian MacWhinney, Houjun Liu
6
6
  Author-email: macw@cmu.edu, houjun@cmu.edu
@@ -157,8 +157,87 @@ def _worker_task(file_info, command, lang, num_speakers, loader_info, writer_inf
157
157
  doc = pipeline(doc, callback=progress_callback, **kw)
158
158
  CHATFile(doc=doc).write(output, write_wor=kwargs.get("wor", True))
159
159
 
160
+ elif command in ["transcribe", "transcribe_s"]:
161
+ from batchalign.document import CustomLine, CustomLineType
162
+ # For transcribe, the "loader" just passes the file path
163
+ doc = file
164
+
165
+ # Process through pipeline
166
+ doc = pipeline(doc, callback=progress_callback)
167
+
168
+ # Write output with ASR comment
169
+ asr = kwargs.get("asr", "rev")
170
+ with open(Path(__file__).parent.parent / "version", 'r') as df:
171
+ VERSION_NUMBER = df.readline().strip()
172
+ doc.content.insert(0, CustomLine(id="Comment", type=CustomLineType.INDEPENDENT,
173
+ content=f"Batchalign {VERSION_NUMBER}, ASR Engine {asr}. Unchecked output of ASR model."))
174
+ CHATFile(doc=doc).write(output
175
+ .replace(".wav", ".cha")
176
+ .replace(".WAV", ".cha")
177
+ .replace(".mp4", ".cha")
178
+ .replace(".MP4", ".cha")
179
+ .replace(".mp3", ".cha")
180
+ .replace(".MP3", ".cha"),
181
+ write_wor=kwargs.get("wor", False))
182
+
183
+ elif command == "translate":
184
+ cf = CHATFile(path=os.path.abspath(file), special_mor_=True)
185
+ doc = cf.doc
186
+ doc = pipeline(doc, callback=progress_callback)
187
+ CHATFile(doc=doc).write(output)
188
+
189
+ elif command == "utseg":
190
+ doc = CHATFile(path=os.path.abspath(file)).doc
191
+ doc = pipeline(doc, callback=progress_callback)
192
+ CHATFile(doc=doc).write(output)
193
+
194
+ elif command == "coref":
195
+ cf = CHATFile(path=os.path.abspath(file))
196
+ doc = cf.doc
197
+ doc = pipeline(doc, callback=progress_callback)
198
+ CHATFile(doc=doc).write(output)
199
+
200
+ elif command == "benchmark":
201
+ # Find gold transcript
202
+ from pathlib import Path as P
203
+ p = P(file)
204
+ cha = p.with_suffix(".cha")
205
+ if not cha.exists():
206
+ raise FileNotFoundError(f"No gold .cha transcript found for benchmarking. audio: {p.name}, desired cha: {cha.name}, looked in: {str(cha)}")
207
+
208
+ gold_doc = CHATFile(path=str(cha), special_mor_=True).doc
209
+ doc = pipeline(file, callback=progress_callback, gold=gold_doc)
210
+
211
+ # Write benchmark results
212
+ import os
213
+ os.remove(P(output).with_suffix(".cha"))
214
+ with open(P(output).with_suffix(".wer.txt"), 'w') as df:
215
+ df.write(str(doc["wer"]))
216
+ with open(P(output).with_suffix(".diff"), 'w') as df:
217
+ df.write(str(doc["diff"]))
218
+ CHATFile(doc=doc["doc"]).write(str(P(output).with_suffix(".asr.cha")),
219
+ write_wor=kwargs.get("wor", False))
220
+
221
+ elif command == "opensmile":
222
+ from batchalign.document import Document
223
+ doc = Document.new(media_path=file, lang=lang)
224
+ results = pipeline(doc, callback=progress_callback, feature_set=kwargs.get("feature_set", "eGeMAPSv02"))
225
+
226
+ # Write opensmile results
227
+ if results.get('success', False):
228
+ output_csv = Path(output).with_suffix('.opensmile.csv')
229
+ features_df = results.get('features_df')
230
+ if features_df is not None:
231
+ features_df.to_csv(output_csv, header=['value'], index_label='feature')
232
+ else:
233
+ error_file = Path(output).with_suffix('.error.txt')
234
+ with open(error_file, 'w') as f:
235
+ f.write(f"OpenSMILE extraction failed: {results.get('error', 'Unknown error')}\n")
236
+
160
237
  else:
161
238
  loader, writer = loader_info, writer_info
239
+ if loader is None or writer is None:
240
+ raise ValueError(f"Command '{command}' requires loader and writer functions, but they are None. This may indicate an unimplemented command or configuration issue.")
162
241
  doc = loader(os.path.abspath(file))
163
242
  kw = {}
164
243
  if isinstance(doc, tuple) and len(doc) > 1:
@@ -232,6 +311,22 @@ def _dispatch(command, lang, num_speakers,
232
311
  **kwargs):
233
312
 
234
313
  C = console
314
+ worker_handled = {
315
+ "align",
316
+ "transcribe",
317
+ "transcribe_s",
318
+ "translate",
319
+ "morphotag",
320
+ "utseg",
321
+ "coref",
322
+ "benchmark",
323
+ "opensmile",
324
+ }
325
+ if command in worker_handled:
326
+ # Avoid pickling CLI-local loader/writer functions when the worker
327
+ # implements the command-specific IO logic.
328
+ loader = None
329
+ writer = None
235
330
  from batchalign.constants import FORCED_CONVERSION
236
331
  from batchalign.document import TaskFriendlyName
237
332
 
@@ -430,8 +525,8 @@ def _dispatch(command, lang, num_speakers,
430
525
  command=command,
431
526
  lang=lang,
432
527
  num_speakers=num_speakers,
433
- loader_info=None,
434
- writer_info=None,
528
+ loader_info=loader,
529
+ writer_info=writer,
435
530
  progress_queue=progress_queue,
436
531
  verbose=ctx.obj["verbose"],
437
532
  **kwargs)
@@ -93,11 +93,15 @@ def retokenize_with_engine(intermediate_output, engine):
93
93
  ----------
94
94
  intermediate_output : List
95
95
  Rev.AI style output.
96
-
96
+
97
97
  engine : UtteranceEngine
98
98
  The utterance Engine to use.
99
99
  """
100
-
100
+
101
+ # Safety check: if engine is None or not callable, fall back to regular retokenize
102
+ if engine is None or not callable(engine):
103
+ return retokenize(intermediate_output)
104
+
101
105
  final_outputs = []
102
106
 
103
107
  for speaker, utterance in intermediate_output:
@@ -0,0 +1,3 @@
1
+ 0.8.0-post.4
2
+ Jan 16th, 2025
3
+ Patch regression?
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: batchalign
3
- Version: 0.8.0.post2
3
+ Version: 0.8.0.post4
4
4
  Summary: Python Speech Language Sample Analysis
5
5
  Author: Brian MacWhinney, Houjun Liu
6
6
  Author-email: macw@cmu.edu, houjun@cmu.edu
@@ -1,3 +0,0 @@
1
- 0.8.0-post.2
2
- Jan 15th, 2025
3
- Memory Safegaurds