ai-pipeline-core 0.4.4__tar.gz → 0.4.5__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.4 → ai_pipeline_core-0.4.5}/PKG-INFO +1 -1
  2. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/__init__.py +1 -1
  3. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/deployment/deploy.py +43 -8
  4. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/deployment/remote.py +1 -1
  5. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/pyproject.toml +1 -1
  6. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/.gitignore +0 -0
  7. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/LICENSE +0 -0
  8. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/README.md +0 -0
  9. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/deployment/__init__.py +0 -0
  10. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/deployment/base.py +0 -0
  11. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/deployment/contract.py +0 -0
  12. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/deployment/helpers.py +0 -0
  13. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/deployment/progress.py +0 -0
  14. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/docs_generator/__init__.py +0 -0
  15. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/docs_generator/__main__.py +0 -0
  16. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/docs_generator/cli.py +0 -0
  17. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/docs_generator/extractor.py +0 -0
  18. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/docs_generator/guide_builder.py +0 -0
  19. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/docs_generator/trimmer.py +0 -0
  20. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/docs_generator/validator.py +0 -0
  21. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/document_store/__init__.py +0 -0
  22. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/document_store/_summary.py +0 -0
  23. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/document_store/_summary_worker.py +0 -0
  24. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/document_store/clickhouse.py +0 -0
  25. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/document_store/factory.py +0 -0
  26. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/document_store/local.py +0 -0
  27. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/document_store/memory.py +0 -0
  28. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/document_store/protocol.py +0 -0
  29. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/documents/__init__.py +0 -0
  30. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/documents/_context_vars.py +0 -0
  31. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/documents/_hashing.py +0 -0
  32. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/documents/attachment.py +0 -0
  33. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/documents/context.py +0 -0
  34. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/documents/document.py +0 -0
  35. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/documents/mime_type.py +0 -0
  36. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/documents/utils.py +0 -0
  37. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/exceptions.py +0 -0
  38. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/images/__init__.py +0 -0
  39. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/images/_processing.py +0 -0
  40. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/llm/__init__.py +0 -0
  41. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/llm/ai_messages.py +0 -0
  42. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/llm/client.py +0 -0
  43. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/llm/model_options.py +0 -0
  44. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/llm/model_response.py +0 -0
  45. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/llm/model_types.py +0 -0
  46. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/logging/__init__.py +0 -0
  47. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/logging/logging.yml +0 -0
  48. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/logging/logging_config.py +0 -0
  49. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/logging/logging_mixin.py +0 -0
  50. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/__init__.py +0 -0
  51. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_debug/__init__.py +0 -0
  52. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_debug/_auto_summary.py +0 -0
  53. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_debug/_config.py +0 -0
  54. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_debug/_content.py +0 -0
  55. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_debug/_processor.py +0 -0
  56. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_debug/_summary.py +0 -0
  57. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_debug/_types.py +0 -0
  58. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_debug/_writer.py +0 -0
  59. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_document_tracking.py +0 -0
  60. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_initialization.py +0 -0
  61. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_logging_bridge.py +0 -0
  62. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_summary.py +0 -0
  63. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_tracking/__init__.py +0 -0
  64. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_tracking/_client.py +0 -0
  65. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_tracking/_internal.py +0 -0
  66. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_tracking/_models.py +0 -0
  67. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_tracking/_processor.py +0 -0
  68. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_tracking/_service.py +0 -0
  69. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/_tracking/_writer.py +0 -0
  70. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/observability/tracing.py +0 -0
  71. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/pipeline/__init__.py +0 -0
  72. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/pipeline/decorators.py +0 -0
  73. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/pipeline/options.py +0 -0
  74. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/prompt_manager.py +0 -0
  75. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/py.typed +0 -0
  76. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/ai_pipeline_core/settings.py +0 -0
  77. {ai_pipeline_core-0.4.4 → ai_pipeline_core-0.4.5}/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.4
3
+ Version: 0.4.5
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.4"
67
+ __version__ = "0.4.5"
68
68
 
69
69
  __all__ = [
70
70
  "AIMessageType",
@@ -312,6 +312,28 @@ class Deployer:
312
312
 
313
313
  return builds
314
314
 
315
+ def _build_vendor_packages(self) -> list[Path]:
316
+ """Build vendor wheels from [tool.deploy].vendor_packages paths.
317
+
318
+ Returns:
319
+ List of built wheel paths, deduplicated by filename.
320
+ """
321
+ vendor_paths: list[str] = self._pyproject_data.get("tool", {}).get("deploy", {}).get("vendor_packages", [])
322
+ if not vendor_paths:
323
+ return []
324
+
325
+ self._info(f"Building {len(vendor_paths)} vendor package(s)")
326
+ wheels: list[Path] = []
327
+ seen: set[str] = set()
328
+ for vendor_path_str in vendor_paths:
329
+ vendor_dir = Path(vendor_path_str).resolve()
330
+ wheel = self._build_wheel_from_source(vendor_dir)
331
+ if wheel.name not in seen:
332
+ wheels.append(wheel)
333
+ seen.add(wheel.name)
334
+ self._success(f"Built vendor wheel: {wheel.name}")
335
+ return wheels
336
+
315
337
  def _create_gcs_bucket(self, bucket_folder: str) -> Any:
316
338
  """Create a GcsBucket instance for uploading files.
317
339
 
@@ -457,6 +479,14 @@ class Deployer:
457
479
  paused=False,
458
480
  )
459
481
 
482
+ # Populate parameter schema from flow function signature
483
+ deployment._set_defaults_from_flow(flow) # pyright: ignore[reportPossiblyUnboundVariable]
484
+
485
+ # Inject result type schema so consumers can discover the response shape
486
+ return_type = getattr(flow.fn, "__annotations__", {}).get("return") # pyright: ignore[reportPossiblyUnboundVariable]
487
+ if return_type is not None and hasattr(return_type, "model_json_schema"):
488
+ deployment._parameter_openapi_schema.definitions["_ResultSchema"] = return_type.model_json_schema()
489
+
460
490
  # Verify work pool exists before deploying
461
491
  async with get_client() as client:
462
492
  try:
@@ -494,21 +524,26 @@ class Deployer:
494
524
  # Phase 2: Build agent bundles (if configured)
495
525
  agent_builds = self._build_agents()
496
526
 
497
- # Phase 3: Upload flow package (include private dependency wheels from agent builds)
498
- vendor_wheels: list[Path] = []
527
+ # Phase 3: Build vendor packages from [tool.deploy].vendor_packages
528
+ vendor_wheels = self._build_vendor_packages()
529
+
530
+ # Also include cli_agents wheels from agent builds
499
531
  if agent_builds:
500
- seen: set[str] = set()
532
+ seen_agent: set[str] = set()
501
533
  for build_info in agent_builds.values():
502
534
  for filename, filepath in build_info["files"].items():
503
- if filename.endswith(".whl") and filename not in seen and "cli_agents" in filename:
504
- vendor_wheels.append(filepath)
505
- seen.add(filename)
535
+ if filename.endswith(".whl") and filename not in seen_agent and "cli_agents" in filename:
536
+ if filename not in {w.name for w in vendor_wheels}:
537
+ vendor_wheels.append(filepath)
538
+ seen_agent.add(filename)
539
+
540
+ # Phase 4: Upload flow package + vendor wheels
506
541
  await self._upload_package(tarball, vendor_wheels)
507
542
 
508
- # Phase 4: Upload agent bundles
543
+ # Phase 5: Upload agent bundles
509
544
  await self._upload_agents(agent_builds)
510
545
 
511
- # Phase 5: Create/update Prefect deployment
546
+ # Phase 6: Create/update Prefect deployment
512
547
  await self._deploy_via_api(agent_builds)
513
548
 
514
549
  print()
@@ -93,7 +93,7 @@ def remote_deployment(
93
93
  else:
94
94
  parameters[pname] = value
95
95
 
96
- full_name = f"{deployment_class.name}/{deployment_name or deployment_class.name}"
96
+ full_name = f"{deployment_class.name}/{deployment_name or deployment_class.name.replace('-', '_')}"
97
97
 
98
98
  result = await run_remote_deployment(full_name, parameters)
99
99
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ai-pipeline-core"
3
- version = "0.4.4"
3
+ version = "0.4.5"
4
4
  description = "Core utilities for AI-powered processing pipelines using prefect"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}