ai_api_unified 2.5.3__tar.gz → 2.5.4__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 (61) hide show
  1. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/PKG-INFO +1 -1
  2. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/pyproject.toml +1 -1
  3. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/__version__.py +1 -1
  4. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/videos/ai_google_gemini_videos.py +14 -7
  5. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/LICENSE +0 -0
  6. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/README.md +0 -0
  7. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/__init__.py +0 -0
  8. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/ai_base.py +0 -0
  9. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/ai_bedrock_base.py +0 -0
  10. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/ai_completions_exceptions.py +0 -0
  11. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/ai_factory.py +0 -0
  12. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/ai_google_base.py +0 -0
  13. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/ai_openai_base.py +0 -0
  14. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/ai_provider_exceptions.py +0 -0
  15. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/ai_provider_loader.py +0 -0
  16. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/ai_provider_registry.py +0 -0
  17. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/completions/__init__.py +0 -0
  18. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/completions/ai_bedrock_completions.py +0 -0
  19. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/completions/ai_google_gemini_capabilities.py +0 -0
  20. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/completions/ai_google_gemini_completions.py +0 -0
  21. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/completions/ai_openai_completions.py +0 -0
  22. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/embeddings/__init__.py +0 -0
  23. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/embeddings/ai_google_gemini_embeddings.py +0 -0
  24. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/embeddings/ai_openai_embeddings.py +0 -0
  25. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/embeddings/ai_titan_embeddings.py +0 -0
  26. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/images/__init__.py +0 -0
  27. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/images/ai_bedrock_images.py +0 -0
  28. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/images/ai_google_gemini_images.py +0 -0
  29. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/images/ai_openai_images.py +0 -0
  30. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/__init__.py +0 -0
  31. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/impl/__init__.py +0 -0
  32. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/impl/_presidio_redactor.py +0 -0
  33. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/impl/base_redactor.py +0 -0
  34. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/impl/custom_recognizer_factory.py +0 -0
  35. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/impl/middleware_extensibility_poc.py +0 -0
  36. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/impl/noop_redactor.py +0 -0
  37. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/impl/presidio_log_control.py +0 -0
  38. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/middleware.py +0 -0
  39. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/middleware_config.py +0 -0
  40. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/observability.py +0 -0
  41. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/observability_runtime.py +0 -0
  42. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/pii_redactor.py +0 -0
  43. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/middleware/redaction_exceptions.py +0 -0
  44. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/util/__init__.py +0 -0
  45. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/util/_lazy_pydub.py +0 -0
  46. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/util/env_settings.py +0 -0
  47. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/util/package_metadata_validation.py +0 -0
  48. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/util/utils.py +0 -0
  49. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/videos/__init__.py +0 -0
  50. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/videos/ai_bedrock_videos.py +0 -0
  51. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/videos/ai_openai_videos.py +0 -0
  52. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/videos/frame_helpers.py +0 -0
  53. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/voice/__init__.py +0 -0
  54. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/voice/ai_voice_azure.py +0 -0
  55. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/voice/ai_voice_base.py +0 -0
  56. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/voice/ai_voice_elevenlabs.py +0 -0
  57. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/voice/ai_voice_factory.py +0 -0
  58. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/voice/ai_voice_google.py +0 -0
  59. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/voice/ai_voice_google_gemini_voices.py +0 -0
  60. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/voice/ai_voice_openai.py +0 -0
  61. {ai_api_unified-2.5.3 → ai_api_unified-2.5.4}/src/ai_api_unified/voice/audio_models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ai_api_unified
3
- Version: 2.5.3
3
+ Version: 2.5.4
4
4
  Summary: Unified access layer for AI completions (LLM), embedding (semantic), image, video, and voice services
5
5
  License: MIT
6
6
  Keywords: llm,openai,bedrock,gemini,vertex,embeddings,completion,video,voice,api
@@ -36,7 +36,7 @@
36
36
  [project]
37
37
  name = "ai_api_unified"
38
38
 
39
- version = "2.5.3" # keep in sync with src/ai_api_unified/__version__.py
39
+ version = "2.5.4" # keep in sync with src/ai_api_unified/__version__.py
40
40
  description = "Unified access layer for AI completions (LLM), embedding (semantic), image, video, and voice services"
41
41
  authors = [{ name = "Dave Thomas", email = "davidcthomas@gmail.com" }]
42
42
  license = "MIT"
@@ -9,4 +9,4 @@ from __future__ import annotations
9
9
 
10
10
  __all__: list[str] = ["__version__"]
11
11
 
12
- __version__: str = "2.5.3"
12
+ __version__: str = "2.5.4"
@@ -57,42 +57,49 @@ class AIGoogleGeminiVideoProperties(AIBaseVideoProperties):
57
57
  def _validate_google_video_properties(self) -> "AIGoogleGeminiVideoProperties":
58
58
  if self.fps is not None:
59
59
  raise ValueError(
60
- "Google Gemini (Veo) does not support the 'fps' parameter. "
61
- "Remove fps from your video properties for this provider."
60
+ f"Google Gemini (Veo) does not support the 'fps' parameter "
61
+ f"(received fps={self.fps!r}). Remove fps from your video "
62
+ f"properties for this provider."
62
63
  )
63
64
  if (
64
65
  self.aspect_ratio is not None
65
66
  and self.aspect_ratio not in self._ALLOWED_ASPECT_RATIOS
66
67
  ):
67
68
  raise ValueError(
68
- "Google Gemini video aspect_ratio must be '16:9' or '9:16'."
69
+ f"Google Gemini video aspect_ratio={self.aspect_ratio!r} is "
70
+ f"not supported. Must be one of '16:9' or '9:16'."
69
71
  )
70
72
  if (
71
73
  self.resolution is not None
72
74
  and self.resolution not in self._ALLOWED_RESOLUTIONS
73
75
  ):
74
76
  raise ValueError(
75
- "Google Gemini video resolution must be one of 720p or 1080p."
77
+ f"Google Gemini video resolution={self.resolution!r} is not "
78
+ f"supported. Must be one of 720p or 1080p."
76
79
  )
77
80
  if (
78
81
  self.person_generation is not None
79
82
  and self.person_generation not in self._ALLOWED_PERSON_GENERATION
80
83
  ):
81
84
  raise ValueError(
82
- "Google Gemini person_generation must be one of dont_allow or allow_adult."
85
+ f"Google Gemini person_generation={self.person_generation!r} "
86
+ f"is not supported. Must be one of dont_allow or allow_adult."
83
87
  )
84
88
  if self.compression_quality is not None:
85
89
  normalized: str = self.compression_quality.upper()
86
90
  if normalized not in self._ALLOWED_COMPRESSION_QUALITY:
87
91
  raise ValueError(
88
- "Google Gemini compression_quality must be 'OPTIMIZED' or 'LOSSLESS'."
92
+ f"Google Gemini compression_quality="
93
+ f"{self.compression_quality!r} is not supported. "
94
+ f"Must be 'OPTIMIZED' or 'LOSSLESS'."
89
95
  )
90
96
  self.compression_quality = normalized
91
97
  if self.output_gcs_uri is not None and not self.output_gcs_uri.startswith(
92
98
  "gs://"
93
99
  ):
94
100
  raise ValueError(
95
- "Google Gemini output_gcs_uri must be a gs:// URI."
101
+ f"Google Gemini output_gcs_uri={self.output_gcs_uri!r} is "
102
+ f"not supported. Must be a gs:// URI."
96
103
  )
97
104
  return self
98
105
 
File without changes
File without changes