ai-pipeline-core 0.4.2__tar.gz → 0.4.3__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.
Files changed (77) hide show
  1. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/PKG-INFO +1 -1
  2. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/__init__.py +1 -1
  3. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/deployment/base.py +34 -10
  4. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/pyproject.toml +1 -1
  5. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/.gitignore +0 -0
  6. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/LICENSE +0 -0
  7. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/README.md +0 -0
  8. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/deployment/__init__.py +0 -0
  9. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/deployment/contract.py +0 -0
  10. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/deployment/deploy.py +0 -0
  11. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/deployment/helpers.py +0 -0
  12. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/deployment/progress.py +0 -0
  13. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/deployment/remote.py +0 -0
  14. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/docs_generator/__init__.py +0 -0
  15. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/docs_generator/__main__.py +0 -0
  16. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/docs_generator/cli.py +0 -0
  17. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/docs_generator/extractor.py +0 -0
  18. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/docs_generator/guide_builder.py +0 -0
  19. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/docs_generator/trimmer.py +0 -0
  20. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/docs_generator/validator.py +0 -0
  21. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/document_store/__init__.py +0 -0
  22. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/document_store/_summary.py +0 -0
  23. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/document_store/_summary_worker.py +0 -0
  24. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/document_store/clickhouse.py +0 -0
  25. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/document_store/factory.py +0 -0
  26. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/document_store/local.py +0 -0
  27. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/document_store/memory.py +0 -0
  28. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/document_store/protocol.py +0 -0
  29. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/documents/__init__.py +0 -0
  30. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/documents/_context_vars.py +0 -0
  31. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/documents/_hashing.py +0 -0
  32. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/documents/attachment.py +0 -0
  33. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/documents/context.py +0 -0
  34. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/documents/document.py +0 -0
  35. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/documents/mime_type.py +0 -0
  36. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/documents/utils.py +0 -0
  37. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/exceptions.py +0 -0
  38. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/images/__init__.py +0 -0
  39. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/images/_processing.py +0 -0
  40. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/llm/__init__.py +0 -0
  41. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/llm/ai_messages.py +0 -0
  42. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/llm/client.py +0 -0
  43. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/llm/model_options.py +0 -0
  44. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/llm/model_response.py +0 -0
  45. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/llm/model_types.py +0 -0
  46. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/logging/__init__.py +0 -0
  47. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/logging/logging.yml +0 -0
  48. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/logging/logging_config.py +0 -0
  49. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/logging/logging_mixin.py +0 -0
  50. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/__init__.py +0 -0
  51. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_debug/__init__.py +0 -0
  52. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_debug/_auto_summary.py +0 -0
  53. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_debug/_config.py +0 -0
  54. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_debug/_content.py +0 -0
  55. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_debug/_processor.py +0 -0
  56. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_debug/_summary.py +0 -0
  57. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_debug/_types.py +0 -0
  58. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_debug/_writer.py +0 -0
  59. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_document_tracking.py +0 -0
  60. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_initialization.py +0 -0
  61. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_logging_bridge.py +0 -0
  62. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_summary.py +0 -0
  63. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_tracking/__init__.py +0 -0
  64. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_tracking/_client.py +0 -0
  65. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_tracking/_internal.py +0 -0
  66. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_tracking/_models.py +0 -0
  67. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_tracking/_processor.py +0 -0
  68. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_tracking/_service.py +0 -0
  69. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/_tracking/_writer.py +0 -0
  70. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/observability/tracing.py +0 -0
  71. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/pipeline/__init__.py +0 -0
  72. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/pipeline/decorators.py +0 -0
  73. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/pipeline/options.py +0 -0
  74. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/prompt_manager.py +0 -0
  75. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/py.typed +0 -0
  76. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/settings.py +0 -0
  77. {ai_pipeline_core-0.4.2 → ai_pipeline_core-0.4.3}/ai_pipeline_core/testing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-pipeline-core
3
- Version: 0.4.2
3
+ Version: 0.4.3
4
4
  Summary: Core utilities for AI-powered processing pipelines using prefect
5
5
  Project-URL: Homepage, https://github.com/bbarwik/ai-pipeline-core
6
6
  Project-URL: Repository, https://github.com/bbarwik/ai-pipeline-core
@@ -64,7 +64,7 @@ from .prompt_manager import PromptManager
64
64
  from .settings import Settings
65
65
  from .testing import disable_run_logger, prefect_test_harness
66
66
 
67
- __version__ = "0.4.1"
67
+ __version__ = "0.4.3"
68
68
 
69
69
  __all__ = [
70
70
  "AIMessageType",
@@ -51,6 +51,7 @@ from .helpers import (
51
51
  send_webhook,
52
52
  upload_documents,
53
53
  )
54
+ from .progress import flow_context, webhook_worker
54
55
 
55
56
  logger = get_pipeline_logger(__name__)
56
57
 
@@ -518,16 +519,39 @@ class PipelineDeployment(Generic[TOptions, TResult]):
518
519
  else:
519
520
  current_docs = input_docs
520
521
 
521
- try:
522
- await active_flow(project_name, current_docs, options.model_dump())
523
- except Exception as e:
524
- # Upload partial results on failure
525
- if context.output_documents_urls and store:
526
- all_docs = await store.load(run_scope, self._all_document_types())
527
- await upload_documents(all_docs, context.output_documents_urls)
528
- await self._send_completion(context, flow_run_id, project_name, result=None, error=str(e))
529
- completion_sent = True
530
- raise
522
+ # Set up intra-flow progress context so progress_update() works inside flows
523
+ flow_minutes = tuple(getattr(f, "estimated_minutes", 1) for f in self.flows)
524
+ completed_mins = sum(flow_minutes[: max(step - 1, 0)])
525
+ progress_queue: asyncio.Queue[ProgressRun | None] = asyncio.Queue()
526
+ wh_url = context.progress_webhook_url or ""
527
+ worker = asyncio.create_task(webhook_worker(progress_queue, wh_url)) if wh_url else None
528
+
529
+ with flow_context(
530
+ webhook_url=wh_url,
531
+ project_name=project_name,
532
+ run_id=flow_run_id,
533
+ flow_run_id=flow_run_id,
534
+ flow_name=flow_name,
535
+ step=step,
536
+ total_steps=total_steps,
537
+ flow_minutes=flow_minutes,
538
+ completed_minutes=completed_mins,
539
+ queue=progress_queue,
540
+ ):
541
+ try:
542
+ await active_flow(project_name, current_docs, options.model_dump())
543
+ except Exception as e:
544
+ # Upload partial results on failure
545
+ if context.output_documents_urls and store:
546
+ all_docs = await store.load(run_scope, self._all_document_types())
547
+ await upload_documents(all_docs, context.output_documents_urls)
548
+ await self._send_completion(context, flow_run_id, project_name, result=None, error=str(e))
549
+ completion_sent = True
550
+ raise
551
+ finally:
552
+ progress_queue.put_nowait(None)
553
+ if worker:
554
+ await worker
531
555
 
532
556
  # Per-flow upload (load from store since @pipeline_flow saves there)
533
557
  if context.output_documents_urls and store and output_types:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ai-pipeline-core"
3
- version = "0.4.2"
3
+ version = "0.4.3"
4
4
  description = "Core utilities for AI-powered processing pipelines using prefect"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}