SimplerLLM 0.3.3.3__tar.gz → 0.3.3.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 (222) hide show
  1. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/PKG-INFO +1 -1
  2. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/__init__.py +2 -0
  3. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/base.py +21 -2
  4. simplerllm-0.3.3.4/SimplerLLM/image/generation/providers/seedream_image.py +342 -0
  5. simplerllm-0.3.3.4/SimplerLLM/image/generation/wrappers/seedream_wrapper.py +517 -0
  6. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/flow/flow.py +76 -15
  7. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM.egg-info/PKG-INFO +1 -1
  8. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM.egg-info/SOURCES.txt +2 -0
  9. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/setup.py +1 -1
  10. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/LICENSE +0 -0
  11. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/README.md +0 -0
  12. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/__init__.py +0 -0
  13. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/__init__.py +0 -0
  14. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/providers/__init__.py +0 -0
  15. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/providers/google_image.py +0 -0
  16. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/providers/image_response_models.py +0 -0
  17. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/providers/openai_image.py +0 -0
  18. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/providers/stability_image.py +0 -0
  19. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/wrappers/__init__.py +0 -0
  20. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/wrappers/google_wrapper.py +0 -0
  21. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/wrappers/openai_wrapper.py +0 -0
  22. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/image/generation/wrappers/stability_wrapper.py +0 -0
  23. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/__init__.py +0 -0
  24. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/embeddings.py +0 -0
  25. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/flow/__init__.py +0 -0
  26. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/flow/models.py +0 -0
  27. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/flow/tool_registry.py +0 -0
  28. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/__init__.py +0 -0
  29. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/base.py +0 -0
  30. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/exceptions.py +0 -0
  31. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/input_guardrails/__init__.py +0 -0
  32. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/input_guardrails/pii_detection.py +0 -0
  33. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/input_guardrails/prompt_injection.py +0 -0
  34. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/input_guardrails/topic_filter.py +0 -0
  35. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/output_guardrails/__init__.py +0 -0
  36. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/output_guardrails/content_safety.py +0 -0
  37. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/output_guardrails/format_validator.py +0 -0
  38. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/output_guardrails/length_validator.py +0 -0
  39. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/output_guardrails/pii_detection.py +0 -0
  40. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/guardrails/wrapper.py +0 -0
  41. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/__init__.py +0 -0
  42. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/base.py +0 -0
  43. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/reliable.py +0 -0
  44. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/wrappers/__init__.py +0 -0
  45. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/wrappers/anthropic_wrapper.py +0 -0
  46. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/wrappers/cohere_wrapper.py +0 -0
  47. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/wrappers/deepseek_wrapper.py +0 -0
  48. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/wrappers/gemini_wrapper.py +0 -0
  49. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/wrappers/ollama_wrapper.py +0 -0
  50. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/wrappers/openai_wrapper.py +0 -0
  51. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/wrappers/openrouter_wrapper.py +0 -0
  52. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm/wrappers/perplexity_wrapper.py +0 -0
  53. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_addons.py +0 -0
  54. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_brainstorm/__init__.py +0 -0
  55. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_brainstorm/models.py +0 -0
  56. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_brainstorm/recursive_brainstorm.py +0 -0
  57. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_clustering/__init__.py +0 -0
  58. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_clustering/chunk_store.py +0 -0
  59. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_clustering/clusterer.py +0 -0
  60. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_clustering/flat_clusterer.py +0 -0
  61. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_clustering/models.py +0 -0
  62. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_clustering/persistence.py +0 -0
  63. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_clustering/tree_builder.py +0 -0
  64. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_feedback/__init__.py +0 -0
  65. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_feedback/feedback_loop.py +0 -0
  66. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_feedback/models.py +0 -0
  67. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_judge/__init__.py +0 -0
  68. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_judge/judge.py +0 -0
  69. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_judge/models.py +0 -0
  70. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_provider_router/__init__.py +0 -0
  71. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_provider_router/models.py +0 -0
  72. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_provider_router/provider_router.py +0 -0
  73. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_provider_router/query_classifier.py +0 -0
  74. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/__init__.py +0 -0
  75. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/anthropic_llm.py +0 -0
  76. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/cohere_llm.py +0 -0
  77. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/deepseek_llm.py +0 -0
  78. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/gemini_llm.py +0 -0
  79. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/llm_response_models.py +0 -0
  80. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/ollama_llm.py +0 -0
  81. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/openai_llm.py +0 -0
  82. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/openrouter_llm.py +0 -0
  83. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/perplexity_llm.py +0 -0
  84. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_providers/voyage_llm.py +0 -0
  85. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_retrieval/__init__.py +0 -0
  86. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_retrieval/models.py +0 -0
  87. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_retrieval/retriever.py +0 -0
  88. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_router/__init__.py +0 -0
  89. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_router/models.py +0 -0
  90. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_router/router.py +0 -0
  91. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_validator/__init__.py +0 -0
  92. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_validator/models.py +0 -0
  93. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/language/llm_validator/validator.py +0 -0
  94. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/prompts/__init__.py +0 -0
  95. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/prompts/hub/__init__.py +0 -0
  96. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/prompts/hub/agentic_prompts.py +0 -0
  97. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/prompts/hub/prompt_manager.py +0 -0
  98. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/prompts/messages_template.py +0 -0
  99. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/prompts/prompt_builder.py +0 -0
  100. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/__init__.py +0 -0
  101. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/apify_api.py +0 -0
  102. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/brainstorm.py +0 -0
  103. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/email_functions.py +0 -0
  104. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/file_functions.py +0 -0
  105. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/file_loader.py +0 -0
  106. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/generic_loader.py +0 -0
  107. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/image_helpers.py +0 -0
  108. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/json_helpers.py +0 -0
  109. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/pandas_func.py +0 -0
  110. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/pattern_helpers.py +0 -0
  111. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/python_func.py +0 -0
  112. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/rapid_api.py +0 -0
  113. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/serp.py +0 -0
  114. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/text_chunker.py +0 -0
  115. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/tools/youtube.py +0 -0
  116. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/utils/__init__.py +0 -0
  117. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/utils/custom_verbose.py +0 -0
  118. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/vectors/__init__.py +0 -0
  119. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/vectors/local_vector_db.py +0 -0
  120. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/vectors/qdrant_vector_db.py +0 -0
  121. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/vectors/simpler_vector.py +0 -0
  122. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/vectors/vector_db.py +0 -0
  123. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/vectors/vector_providers.py +0 -0
  124. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/__init__.py +0 -0
  125. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/dialogue_generator/__init__.py +0 -0
  126. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/dialogue_generator/audio_merger.py +0 -0
  127. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/dialogue_generator/dialogue_generator.py +0 -0
  128. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/dialogue_generator/models.py +0 -0
  129. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/live_voice_chat/__init__.py +0 -0
  130. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/live_voice_chat/audio_player.py +0 -0
  131. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/live_voice_chat/audio_recorder.py +0 -0
  132. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/live_voice_chat/live_voice_chat.py +0 -0
  133. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/live_voice_chat/models.py +0 -0
  134. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/__init__.py +0 -0
  135. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/audio_utils.py +0 -0
  136. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/base.py +0 -0
  137. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/models.py +0 -0
  138. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/providers/__init__.py +0 -0
  139. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/providers/elevenlabs_convai.py +0 -0
  140. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/providers/openai_realtime.py +0 -0
  141. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/providers/realtime_response_models.py +0 -0
  142. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/realtime_voice_chat.py +0 -0
  143. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/wrappers/__init__.py +0 -0
  144. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/wrappers/elevenlabs_wrapper.py +0 -0
  145. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/realtime_voice/wrappers/openai_wrapper.py +0 -0
  146. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/stt/__init__.py +0 -0
  147. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/stt/base.py +0 -0
  148. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/stt/providers/__init__.py +0 -0
  149. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/stt/providers/openai_stt.py +0 -0
  150. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/stt/providers/stt_response_models.py +0 -0
  151. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/stt/wrappers/__init__.py +0 -0
  152. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/stt/wrappers/openai_wrapper.py +0 -0
  153. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/tts/__init__.py +0 -0
  154. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/tts/base.py +0 -0
  155. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/tts/providers/__init__.py +0 -0
  156. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/tts/providers/elevenlabs_tts.py +0 -0
  157. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/tts/providers/openai_tts.py +0 -0
  158. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/tts/providers/tts_response_models.py +0 -0
  159. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/tts/wrappers/__init__.py +0 -0
  160. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/tts/wrappers/elevenlabs_wrapper.py +0 -0
  161. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/tts/wrappers/openai_wrapper.py +0 -0
  162. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_dubbing/__init__.py +0 -0
  163. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_dubbing/audio_sync.py +0 -0
  164. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_dubbing/base.py +0 -0
  165. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_dubbing/models.py +0 -0
  166. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_dubbing/video_processor.py +0 -0
  167. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_transcription/__init__.py +0 -0
  168. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_transcription/base.py +0 -0
  169. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_transcription/caption_generator.py +0 -0
  170. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_transcription/models.py +0 -0
  171. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_transcription/utils/__init__.py +0 -0
  172. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_transcription/utils/subtitle_formatter.py +0 -0
  173. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/video_transcription/utils/video_utils.py +0 -0
  174. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/voice_chat/__init__.py +0 -0
  175. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/voice_chat/conversation.py +0 -0
  176. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/voice_chat/models.py +0 -0
  177. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM/voice/voice_chat/voice_chat.py +0 -0
  178. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM.egg-info/dependency_links.txt +0 -0
  179. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM.egg-info/requires.txt +0 -0
  180. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/SimplerLLM.egg-info/top_level.txt +0 -0
  181. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/setup.cfg +0 -0
  182. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_agent.py +0 -0
  183. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_agent_full.py +0 -0
  184. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_anthropic_web_search.py +0 -0
  185. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_arabic_validator.py +0 -0
  186. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_cohere.py +0 -0
  187. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_cohere_embeddings.py +0 -0
  188. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_comprehensive_llm.py +0 -0
  189. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_embeddings_comprehensive.py +0 -0
  190. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_flow_comprehensive.py +0 -0
  191. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_llm_brainstorm.py +0 -0
  192. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_llm_clustering_retrieval.py +0 -0
  193. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_llm_feedback.py +0 -0
  194. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_llm_judge.py +0 -0
  195. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_llm_provider_router.py +0 -0
  196. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_llm_providers.py +0 -0
  197. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_nested_models.py +0 -0
  198. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_openrouter.py +0 -0
  199. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_openrouter_full_response.py +0 -0
  200. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_pattern_extraction.py +0 -0
  201. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_pattern_helpers.py +0 -0
  202. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_perplexity_pydantic.py +0 -0
  203. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_perplexity_web_search.py +0 -0
  204. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_production_vector_db.py +0 -0
  205. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_pydantic_edge_cases.py +0 -0
  206. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_pydantic_edge_cases_llm.py +0 -0
  207. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_pydantic_structures.py +0 -0
  208. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_pydantic_vision.py +0 -0
  209. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_qdrant_comprehensive.py +0 -0
  210. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_qdrant_connection.py +0 -0
  211. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_qdrant_integration_live.py +0 -0
  212. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_real_llm_generation.py +0 -0
  213. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_reliable_fix.py +0 -0
  214. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_reliable_vision.py +0 -0
  215. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_router_simple.py +0 -0
  216. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_router_youtube_titles.py +0 -0
  217. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_unified_vector_interface.py +0 -0
  218. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_vision_anthropic.py +0 -0
  219. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_vision_openai.py +0 -0
  220. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_vision_quick.py +0 -0
  221. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_voyage_embeddings.py +0 -0
  222. {simplerllm-0.3.3.3 → simplerllm-0.3.3.4}/tests/test_web_search_pydantic.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SimplerLLM
3
- Version: 0.3.3.3
3
+ Version: 0.3.3.4
4
4
  Summary: An easy-to-use Library for interacting with language models.
5
5
  Home-page: https://github.com/hassancs91/SimplerLLM
6
6
  Author: Hasan Aboul Hasan
@@ -8,6 +8,7 @@ from .base import ImageGenerator, ImageProvider, ImageSize
8
8
  from .wrappers.openai_wrapper import OpenAIImageGenerator
9
9
  from .wrappers.stability_wrapper import StabilityImageGenerator
10
10
  from .wrappers.google_wrapper import GoogleImageGenerator
11
+ from .wrappers.seedream_wrapper import SeedreamImageGenerator
11
12
  from .providers.image_response_models import ImageGenerationResponse
12
13
 
13
14
  __all__ = [
@@ -17,5 +18,6 @@ __all__ = [
17
18
  'OpenAIImageGenerator',
18
19
  'StabilityImageGenerator',
19
20
  'GoogleImageGenerator',
21
+ 'SeedreamImageGenerator',
20
22
  'ImageGenerationResponse',
21
23
  ]
@@ -8,9 +8,10 @@ class ImageProvider(Enum):
8
8
  OPENAI_DALL_E = 1
9
9
  STABILITY_AI = 2
10
10
  GOOGLE_GEMINI = 3
11
+ SEEDREAM = 4
11
12
  # Future providers can be added here:
12
- # MIDJOURNEY = 4
13
- # REPLICATE = 5
13
+ # MIDJOURNEY = 5
14
+ # REPLICATE = 6
14
15
 
15
16
 
16
17
  class ImageSize(Enum):
@@ -97,6 +98,14 @@ class ImageGenerator:
97
98
  api_key=api_key,
98
99
  verbose=verbose,
99
100
  )
101
+ elif provider == ImageProvider.SEEDREAM:
102
+ from .wrappers.seedream_wrapper import SeedreamImageGenerator
103
+ return SeedreamImageGenerator(
104
+ provider=provider,
105
+ model_name=model_name or "seedream-4-5-251128",
106
+ api_key=api_key,
107
+ verbose=verbose,
108
+ )
100
109
  # Future providers can be added here
101
110
  # elif provider == ImageProvider.MIDJOURNEY:
102
111
  # from .wrappers.midjourney_wrapper import MidjourneyImageGenerator
@@ -180,6 +189,16 @@ class ImageGenerator:
180
189
  }
181
190
  return size_map.get(size, "1:1")
182
191
 
192
+ elif provider == ImageProvider.SEEDREAM:
193
+ # Seedream uses resolution presets (2K, 4K) rather than aspect ratios
194
+ size_map = {
195
+ ImageSize.SQUARE: "2K",
196
+ ImageSize.HORIZONTAL: "2K",
197
+ ImageSize.VERTICAL: "2K",
198
+ ImageSize.PORTRAIT_3_4: "2K",
199
+ }
200
+ return size_map.get(size, "2K")
201
+
183
202
  # Default fallback
184
203
  return "1024x1024"
185
204
 
@@ -0,0 +1,342 @@
1
+ from dotenv import load_dotenv
2
+ import os
3
+ import time
4
+ import requests
5
+ import base64
6
+ from .image_response_models import ImageGenerationResponse
7
+
8
+ # Load environment variables
9
+ load_dotenv(override=True)
10
+
11
+ MAX_RETRIES = int(os.getenv("MAX_RETRIES", 3))
12
+ RETRY_DELAY = int(os.getenv("RETRY_DELAY", 2))
13
+
14
+ # BytePlus Seedream API endpoint
15
+ SEEDREAM_API_ENDPOINT = "https://ark.ap-southeast.bytepluses.com/api/v3/images/generations"
16
+
17
+
18
+ def generate_image(
19
+ prompt,
20
+ model_name="seedream-4-5-251128",
21
+ size="2K",
22
+ watermark=False,
23
+ response_format="url",
24
+ output_path=None,
25
+ full_response=False,
26
+ api_key=None,
27
+ verbose=False,
28
+ image=None,
29
+ ):
30
+ """
31
+ Generate image from text prompt using BytePlus Seedream API.
32
+
33
+ Args:
34
+ prompt: Text description of the desired image
35
+ model_name: Model to use (default: seedream-4-5-251128)
36
+ size: Image size - "2K", "4K", or custom dimensions (e.g., "2048x2048")
37
+ watermark: If True, adds "AI generated" watermark to bottom-right corner
38
+ response_format: "url" for image URL, "b64_json" for base64 encoded data
39
+ output_path: Optional file path to save image
40
+ full_response: If True, returns ImageGenerationResponse with metadata
41
+ api_key: BytePlus ARK API key (uses ARK_API_KEY env var if not provided)
42
+ verbose: If True, prints progress information
43
+ image: Optional URL of reference image for image-to-image generation
44
+
45
+ Returns:
46
+ If full_response=True: ImageGenerationResponse object
47
+ If output_path provided: file path string
48
+ If response_format="url": image URL string
49
+ Otherwise: image bytes
50
+ """
51
+ start_time = time.time() if full_response else None
52
+
53
+ # Get API key from parameter or environment
54
+ api_key = api_key or os.getenv("ARK_API_KEY", "")
55
+ if not api_key:
56
+ raise ValueError("ARK_API_KEY not found in environment variables or parameters")
57
+
58
+ if verbose:
59
+ print(f"[Seedream] Generating image with model={model_name}, size={size}")
60
+ if image:
61
+ print(f"[Seedream] Using reference image: {image}")
62
+
63
+ for attempt in range(MAX_RETRIES):
64
+ try:
65
+ # Build request headers
66
+ headers = {
67
+ "Content-Type": "application/json",
68
+ "Authorization": f"Bearer {api_key}",
69
+ }
70
+
71
+ # Build request data
72
+ data = {
73
+ "model": model_name,
74
+ "prompt": prompt,
75
+ "size": size,
76
+ "watermark": watermark,
77
+ }
78
+
79
+ # Add reference image for image-to-image generation
80
+ if image:
81
+ data["image"] = image
82
+
83
+ # Make API request
84
+ response = requests.post(
85
+ SEEDREAM_API_ENDPOINT,
86
+ headers=headers,
87
+ json=data,
88
+ timeout=120
89
+ )
90
+
91
+ # Check for errors
92
+ if response.status_code != 200:
93
+ error_msg = f"Seedream API error (status {response.status_code})"
94
+ try:
95
+ error_data = response.json()
96
+ error_msg += f": {error_data}"
97
+ except:
98
+ error_msg += f": {response.text}"
99
+ raise Exception(error_msg)
100
+
101
+ # Parse response
102
+ response_data = response.json()
103
+
104
+ if verbose:
105
+ print(f"[Seedream] Response received: {response_data.get('model', 'unknown model')}")
106
+
107
+ # Extract image data from response
108
+ if "data" not in response_data or len(response_data["data"]) == 0:
109
+ raise Exception("No image data found in Seedream response")
110
+
111
+ image_info = response_data["data"][0]
112
+ image_url = image_info.get("url")
113
+ image_size_str = image_info.get("size", size)
114
+
115
+ if not image_url:
116
+ raise Exception("No image URL found in Seedream response")
117
+
118
+ # Handle output based on format and output_path
119
+ if output_path or response_format == "b64_json":
120
+ # Download the image
121
+ img_response = requests.get(image_url, timeout=60)
122
+ img_response.raise_for_status()
123
+ image_bytes = img_response.content
124
+
125
+ if output_path:
126
+ # Save to file
127
+ os.makedirs(os.path.dirname(output_path), exist_ok=True) if os.path.dirname(output_path) else None
128
+ with open(output_path, 'wb') as f:
129
+ f.write(image_bytes)
130
+ image_data = output_path
131
+ file_size = len(image_bytes)
132
+ if verbose:
133
+ print(f"[Seedream] Image saved to: {output_path} ({file_size} bytes)")
134
+ else:
135
+ image_data = image_bytes
136
+ file_size = len(image_bytes)
137
+ if verbose:
138
+ print(f"[Seedream] Image downloaded ({file_size} bytes)")
139
+ else:
140
+ # Return URL
141
+ image_data = image_url
142
+ file_size = None
143
+ if verbose:
144
+ print(f"[Seedream] Image URL received: {image_url[:50]}...")
145
+
146
+ # Return full response with metadata if requested
147
+ if full_response:
148
+ end_time = time.time()
149
+ process_time = end_time - start_time
150
+
151
+ # Extract usage info
152
+ usage = response_data.get("usage", {})
153
+
154
+ return ImageGenerationResponse(
155
+ image_data=image_data,
156
+ model=model_name,
157
+ prompt=prompt,
158
+ revised_prompt=None,
159
+ size=image_size_str,
160
+ quality=None,
161
+ style=None,
162
+ process_time=process_time,
163
+ provider="SEEDREAM",
164
+ file_size=file_size,
165
+ output_path=output_path,
166
+ llm_provider_response=response_data,
167
+ )
168
+
169
+ return image_data
170
+
171
+ except Exception as e:
172
+ if attempt < MAX_RETRIES - 1:
173
+ if verbose:
174
+ print(f"[Seedream] Attempt {attempt + 1} failed: {e}. Retrying...")
175
+ time.sleep(RETRY_DELAY * (2**attempt))
176
+ else:
177
+ error_msg = f"Failed to generate image after {MAX_RETRIES} attempts due to: {e}"
178
+ raise Exception(error_msg)
179
+
180
+
181
+ async def generate_image_async(
182
+ prompt,
183
+ model_name="seedream-4-5-251128",
184
+ size="2K",
185
+ watermark=False,
186
+ response_format="url",
187
+ output_path=None,
188
+ full_response=False,
189
+ api_key=None,
190
+ verbose=False,
191
+ image=None,
192
+ ):
193
+ """
194
+ Async version: Generate image from text prompt using BytePlus Seedream API.
195
+
196
+ Args:
197
+ prompt: Text description of the desired image
198
+ model_name: Model to use (default: seedream-4-5-251128)
199
+ size: Image size - "2K", "4K", or custom dimensions (e.g., "2048x2048")
200
+ watermark: If True, adds "AI generated" watermark to bottom-right corner
201
+ response_format: "url" for image URL, "b64_json" for base64 encoded data
202
+ output_path: Optional file path to save image
203
+ full_response: If True, returns ImageGenerationResponse with metadata
204
+ api_key: BytePlus ARK API key (uses ARK_API_KEY env var if not provided)
205
+ verbose: If True, prints progress information
206
+ image: Optional URL of reference image for image-to-image generation
207
+
208
+ Returns:
209
+ If full_response=True: ImageGenerationResponse object
210
+ If output_path provided: file path string
211
+ If response_format="url": image URL string
212
+ Otherwise: image bytes
213
+ """
214
+ import asyncio
215
+
216
+ loop = asyncio.get_event_loop()
217
+ return await loop.run_in_executor(
218
+ None,
219
+ lambda: generate_image(
220
+ prompt=prompt,
221
+ model_name=model_name,
222
+ size=size,
223
+ watermark=watermark,
224
+ response_format=response_format,
225
+ output_path=output_path,
226
+ full_response=full_response,
227
+ api_key=api_key,
228
+ verbose=verbose,
229
+ image=image,
230
+ )
231
+ )
232
+
233
+
234
+ def edit_image(
235
+ image_source,
236
+ edit_prompt,
237
+ model_name="seedream-4-5-251128",
238
+ size="2K",
239
+ watermark=False,
240
+ response_format="url",
241
+ output_path=None,
242
+ full_response=False,
243
+ api_key=None,
244
+ verbose=False,
245
+ ):
246
+ """
247
+ Edit an existing image using text instructions with BytePlus Seedream API.
248
+
249
+ Args:
250
+ image_source: URL of the source image to edit
251
+ edit_prompt: Text instructions for how to edit the image
252
+ model_name: Model to use (default: seedream-4-5-251128)
253
+ size: Image size - "2K", "4K", or custom dimensions (e.g., "2048x2048")
254
+ watermark: If True, adds "AI generated" watermark to bottom-right corner
255
+ response_format: "url" for image URL, "b64_json" for base64 encoded data
256
+ output_path: Optional file path to save edited image
257
+ full_response: If True, returns ImageGenerationResponse with metadata
258
+ api_key: BytePlus ARK API key (uses ARK_API_KEY env var if not provided)
259
+ verbose: If True, prints progress information
260
+
261
+ Returns:
262
+ If full_response=True: ImageGenerationResponse object
263
+ If output_path provided: file path string
264
+ If response_format="url": image URL string
265
+ Otherwise: edited image bytes
266
+
267
+ Example:
268
+ >>> edited_url = edit_image(
269
+ ... image_source="https://example.com/original.jpg",
270
+ ... edit_prompt="Change the background to a sunset sky",
271
+ ... size="2K"
272
+ ... )
273
+ """
274
+ if verbose:
275
+ print(f"[Seedream] Editing image with prompt: {edit_prompt[:50]}...")
276
+
277
+ # Use generate_image with the image parameter for image-to-image editing
278
+ return generate_image(
279
+ prompt=edit_prompt,
280
+ model_name=model_name,
281
+ size=size,
282
+ watermark=watermark,
283
+ response_format=response_format,
284
+ output_path=output_path,
285
+ full_response=full_response,
286
+ api_key=api_key,
287
+ verbose=verbose,
288
+ image=image_source,
289
+ )
290
+
291
+
292
+ async def edit_image_async(
293
+ image_source,
294
+ edit_prompt,
295
+ model_name="seedream-4-5-251128",
296
+ size="2K",
297
+ watermark=False,
298
+ response_format="url",
299
+ output_path=None,
300
+ full_response=False,
301
+ api_key=None,
302
+ verbose=False,
303
+ ):
304
+ """
305
+ Async version: Edit an existing image using text instructions with BytePlus Seedream API.
306
+
307
+ Args:
308
+ image_source: URL of the source image to edit
309
+ edit_prompt: Text instructions for how to edit the image
310
+ model_name: Model to use (default: seedream-4-5-251128)
311
+ size: Image size - "2K", "4K", or custom dimensions (e.g., "2048x2048")
312
+ watermark: If True, adds "AI generated" watermark to bottom-right corner
313
+ response_format: "url" for image URL, "b64_json" for base64 encoded data
314
+ output_path: Optional file path to save edited image
315
+ full_response: If True, returns ImageGenerationResponse with metadata
316
+ api_key: BytePlus ARK API key (uses ARK_API_KEY env var if not provided)
317
+ verbose: If True, prints progress information
318
+
319
+ Returns:
320
+ If full_response=True: ImageGenerationResponse object
321
+ If output_path provided: file path string
322
+ If response_format="url": image URL string
323
+ Otherwise: edited image bytes
324
+ """
325
+ import asyncio
326
+
327
+ loop = asyncio.get_event_loop()
328
+ return await loop.run_in_executor(
329
+ None,
330
+ lambda: edit_image(
331
+ image_source=image_source,
332
+ edit_prompt=edit_prompt,
333
+ model_name=model_name,
334
+ size=size,
335
+ watermark=watermark,
336
+ response_format=response_format,
337
+ output_path=output_path,
338
+ full_response=full_response,
339
+ api_key=api_key,
340
+ verbose=verbose,
341
+ )
342
+ )