SimplerLLM 0.3.3.1__tar.gz → 0.3.3.2__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 (221) hide show
  1. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/PKG-INFO +8 -3
  2. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/__init__.py +14 -7
  3. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/__init__.py +21 -10
  4. simplerllm-0.3.3.2/SimplerLLM/voice/live_voice_chat/__init__.py +17 -0
  5. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/audio_player.py +17 -3
  6. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/audio_recorder.py +43 -9
  7. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/PKG-INFO +8 -3
  8. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/requires.txt +8 -2
  9. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/setup.py +4 -3
  10. simplerllm-0.3.3.1/SimplerLLM/voice/live_voice_chat/__init__.py +0 -11
  11. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/LICENSE +0 -0
  12. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/README.md +0 -0
  13. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/__init__.py +0 -0
  14. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/__init__.py +0 -0
  15. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/base.py +0 -0
  16. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/__init__.py +0 -0
  17. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/google_image.py +0 -0
  18. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/image_response_models.py +0 -0
  19. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/openai_image.py +0 -0
  20. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/stability_image.py +0 -0
  21. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/__init__.py +0 -0
  22. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/google_wrapper.py +0 -0
  23. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/openai_wrapper.py +0 -0
  24. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/stability_wrapper.py +0 -0
  25. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/__init__.py +0 -0
  26. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/embeddings.py +0 -0
  27. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/__init__.py +0 -0
  28. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/flow.py +0 -0
  29. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/models.py +0 -0
  30. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/tool_registry.py +0 -0
  31. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/__init__.py +0 -0
  32. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/base.py +0 -0
  33. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/exceptions.py +0 -0
  34. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/__init__.py +0 -0
  35. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/pii_detection.py +0 -0
  36. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/prompt_injection.py +0 -0
  37. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/topic_filter.py +0 -0
  38. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/__init__.py +0 -0
  39. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/content_safety.py +0 -0
  40. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/format_validator.py +0 -0
  41. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/length_validator.py +0 -0
  42. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/pii_detection.py +0 -0
  43. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/wrapper.py +0 -0
  44. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/__init__.py +0 -0
  45. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/base.py +0 -0
  46. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/reliable.py +0 -0
  47. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/__init__.py +0 -0
  48. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/anthropic_wrapper.py +0 -0
  49. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/cohere_wrapper.py +0 -0
  50. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/deepseek_wrapper.py +0 -0
  51. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/gemini_wrapper.py +0 -0
  52. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/ollama_wrapper.py +0 -0
  53. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/openai_wrapper.py +0 -0
  54. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/openrouter_wrapper.py +0 -0
  55. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/perplexity_wrapper.py +0 -0
  56. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_addons.py +0 -0
  57. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/__init__.py +0 -0
  58. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/models.py +0 -0
  59. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/recursive_brainstorm.py +0 -0
  60. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/__init__.py +0 -0
  61. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/chunk_store.py +0 -0
  62. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/clusterer.py +0 -0
  63. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/flat_clusterer.py +0 -0
  64. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/models.py +0 -0
  65. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/persistence.py +0 -0
  66. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/tree_builder.py +0 -0
  67. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_feedback/__init__.py +0 -0
  68. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_feedback/feedback_loop.py +0 -0
  69. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_feedback/models.py +0 -0
  70. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_judge/__init__.py +0 -0
  71. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_judge/judge.py +0 -0
  72. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_judge/models.py +0 -0
  73. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/__init__.py +0 -0
  74. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/models.py +0 -0
  75. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/provider_router.py +0 -0
  76. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/query_classifier.py +0 -0
  77. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/__init__.py +0 -0
  78. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/anthropic_llm.py +0 -0
  79. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/cohere_llm.py +0 -0
  80. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/deepseek_llm.py +0 -0
  81. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/gemini_llm.py +0 -0
  82. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/llm_response_models.py +0 -0
  83. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/ollama_llm.py +0 -0
  84. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/openai_llm.py +0 -0
  85. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/openrouter_llm.py +0 -0
  86. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/perplexity_llm.py +0 -0
  87. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/voyage_llm.py +0 -0
  88. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_retrieval/__init__.py +0 -0
  89. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_retrieval/models.py +0 -0
  90. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_retrieval/retriever.py +0 -0
  91. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_router/__init__.py +0 -0
  92. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_router/models.py +0 -0
  93. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_router/router.py +0 -0
  94. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_validator/__init__.py +0 -0
  95. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_validator/models.py +0 -0
  96. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_validator/validator.py +0 -0
  97. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/__init__.py +0 -0
  98. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/hub/__init__.py +0 -0
  99. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/hub/agentic_prompts.py +0 -0
  100. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/hub/prompt_manager.py +0 -0
  101. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/messages_template.py +0 -0
  102. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/prompt_builder.py +0 -0
  103. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/__init__.py +0 -0
  104. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/apify_api.py +0 -0
  105. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/brainstorm.py +0 -0
  106. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/email_functions.py +0 -0
  107. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/file_functions.py +0 -0
  108. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/file_loader.py +0 -0
  109. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/generic_loader.py +0 -0
  110. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/image_helpers.py +0 -0
  111. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/json_helpers.py +0 -0
  112. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/pandas_func.py +0 -0
  113. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/pattern_helpers.py +0 -0
  114. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/python_func.py +0 -0
  115. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/rapid_api.py +0 -0
  116. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/serp.py +0 -0
  117. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/text_chunker.py +0 -0
  118. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/youtube.py +0 -0
  119. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/utils/__init__.py +0 -0
  120. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/utils/custom_verbose.py +0 -0
  121. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/__init__.py +0 -0
  122. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/local_vector_db.py +0 -0
  123. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/qdrant_vector_db.py +0 -0
  124. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/simpler_vector.py +0 -0
  125. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/vector_db.py +0 -0
  126. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/vector_providers.py +0 -0
  127. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/__init__.py +0 -0
  128. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/audio_merger.py +0 -0
  129. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/dialogue_generator.py +0 -0
  130. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/models.py +0 -0
  131. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/live_voice_chat.py +0 -0
  132. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/models.py +0 -0
  133. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/__init__.py +0 -0
  134. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/audio_utils.py +0 -0
  135. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/base.py +0 -0
  136. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/models.py +0 -0
  137. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/__init__.py +0 -0
  138. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/elevenlabs_convai.py +0 -0
  139. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/openai_realtime.py +0 -0
  140. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/realtime_response_models.py +0 -0
  141. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/realtime_voice_chat.py +0 -0
  142. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/wrappers/__init__.py +0 -0
  143. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/wrappers/elevenlabs_wrapper.py +0 -0
  144. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/wrappers/openai_wrapper.py +0 -0
  145. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/__init__.py +0 -0
  146. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/base.py +0 -0
  147. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/providers/__init__.py +0 -0
  148. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/providers/openai_stt.py +0 -0
  149. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/providers/stt_response_models.py +0 -0
  150. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/wrappers/__init__.py +0 -0
  151. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/wrappers/openai_wrapper.py +0 -0
  152. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/__init__.py +0 -0
  153. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/base.py +0 -0
  154. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/__init__.py +0 -0
  155. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/elevenlabs_tts.py +0 -0
  156. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/openai_tts.py +0 -0
  157. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/tts_response_models.py +0 -0
  158. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/wrappers/__init__.py +0 -0
  159. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/wrappers/elevenlabs_wrapper.py +0 -0
  160. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/wrappers/openai_wrapper.py +0 -0
  161. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/__init__.py +0 -0
  162. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/audio_sync.py +0 -0
  163. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/base.py +0 -0
  164. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/models.py +0 -0
  165. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/video_processor.py +0 -0
  166. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/__init__.py +0 -0
  167. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/base.py +0 -0
  168. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/caption_generator.py +0 -0
  169. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/models.py +0 -0
  170. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/utils/__init__.py +0 -0
  171. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/utils/subtitle_formatter.py +0 -0
  172. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/utils/video_utils.py +0 -0
  173. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/__init__.py +0 -0
  174. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/conversation.py +0 -0
  175. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/models.py +0 -0
  176. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/voice_chat.py +0 -0
  177. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/SOURCES.txt +0 -0
  178. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/dependency_links.txt +0 -0
  179. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/top_level.txt +0 -0
  180. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/setup.cfg +0 -0
  181. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_agent.py +0 -0
  182. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_agent_full.py +0 -0
  183. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_anthropic_web_search.py +0 -0
  184. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_arabic_validator.py +0 -0
  185. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_cohere.py +0 -0
  186. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_cohere_embeddings.py +0 -0
  187. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_comprehensive_llm.py +0 -0
  188. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_embeddings_comprehensive.py +0 -0
  189. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_flow_comprehensive.py +0 -0
  190. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_brainstorm.py +0 -0
  191. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_clustering_retrieval.py +0 -0
  192. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_feedback.py +0 -0
  193. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_judge.py +0 -0
  194. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_provider_router.py +0 -0
  195. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_providers.py +0 -0
  196. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_nested_models.py +0 -0
  197. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_openrouter.py +0 -0
  198. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_openrouter_full_response.py +0 -0
  199. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pattern_extraction.py +0 -0
  200. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pattern_helpers.py +0 -0
  201. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_perplexity_pydantic.py +0 -0
  202. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_perplexity_web_search.py +0 -0
  203. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_production_vector_db.py +0 -0
  204. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pydantic_edge_cases.py +0 -0
  205. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pydantic_edge_cases_llm.py +0 -0
  206. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pydantic_structures.py +0 -0
  207. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pydantic_vision.py +0 -0
  208. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_qdrant_comprehensive.py +0 -0
  209. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_qdrant_connection.py +0 -0
  210. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_qdrant_integration_live.py +0 -0
  211. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_real_llm_generation.py +0 -0
  212. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_reliable_fix.py +0 -0
  213. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_reliable_vision.py +0 -0
  214. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_router_simple.py +0 -0
  215. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_router_youtube_titles.py +0 -0
  216. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_unified_vector_interface.py +0 -0
  217. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_vision_anthropic.py +0 -0
  218. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_vision_openai.py +0 -0
  219. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_vision_quick.py +0 -0
  220. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_voyage_embeddings.py +0 -0
  221. {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/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.1
3
+ Version: 0.3.3.2
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
@@ -45,14 +45,19 @@ Requires-Dist: qdrant-client==1.14.3
45
45
  Requires-Dist: voyageai==0.3.3
46
46
  Requires-Dist: pydub>=0.25.1
47
47
  Requires-Dist: elevenlabs>=2.22.0
48
- Requires-Dist: sounddevice>=0.4.6
49
- Requires-Dist: pynput>=1.7.6
50
48
  Requires-Dist: moviepy>=1.0.3
51
49
  Requires-Dist: yt-dlp>=2023.3.4
52
50
  Provides-Extra: voice
53
51
  Requires-Dist: pygame>=2.5.0; extra == "voice"
52
+ Requires-Dist: sounddevice>=0.4.6; extra == "voice"
53
+ Requires-Dist: pynput>=1.7.6; extra == "voice"
54
+ Provides-Extra: live-voice
55
+ Requires-Dist: sounddevice>=0.4.6; extra == "live-voice"
56
+ Requires-Dist: pynput>=1.7.6; extra == "live-voice"
54
57
  Provides-Extra: all
55
58
  Requires-Dist: pygame>=2.5.0; extra == "all"
59
+ Requires-Dist: sounddevice>=0.4.6; extra == "all"
60
+ Requires-Dist: pynput>=1.7.6; extra == "all"
56
61
  Dynamic: author
57
62
  Dynamic: author-email
58
63
  Dynamic: classifier
@@ -82,10 +82,8 @@ from .voice import (
82
82
  VoiceTurnResult,
83
83
  VoiceChatSession,
84
84
  ConversationManager,
85
- LiveVoiceChat,
86
85
  LiveVoiceChatConfig,
87
- AudioRecorder,
88
- AudioPlayer,
86
+ _LIVE_VOICE_AVAILABLE,
89
87
  DialogueGenerator,
90
88
  Dialogue,
91
89
  DialogueLine,
@@ -115,6 +113,14 @@ from .voice import (
115
113
  RealtimeVoiceChatConfig,
116
114
  )
117
115
 
116
+ # LiveVoiceChat requires PortAudio - import conditionally
117
+ if _LIVE_VOICE_AVAILABLE:
118
+ from .voice import LiveVoiceChat, AudioRecorder, AudioPlayer
119
+ else:
120
+ LiveVoiceChat = None
121
+ AudioRecorder = None
122
+ AudioPlayer = None
123
+
118
124
  # Image module exports
119
125
  from .image import (
120
126
  ImageGenerator,
@@ -208,11 +214,8 @@ __all__ = [
208
214
  'VoiceTurnResult',
209
215
  'VoiceChatSession',
210
216
  'ConversationManager',
211
- # Voice module - LiveVoiceChat
212
- 'LiveVoiceChat',
217
+ # Voice module - LiveVoiceChat (config always available, others require PortAudio)
213
218
  'LiveVoiceChatConfig',
214
- 'AudioRecorder',
215
- 'AudioPlayer',
216
219
  # Voice module - Dialogue
217
220
  'DialogueGenerator',
218
221
  'Dialogue',
@@ -253,3 +256,7 @@ __all__ = [
253
256
  'GoogleImageGenerator',
254
257
  'ImageGenerationResponse',
255
258
  ]
259
+
260
+ # Conditionally add LiveVoiceChat exports if PortAudio is available
261
+ if _LIVE_VOICE_AVAILABLE:
262
+ __all__.extend(['LiveVoiceChat', 'AudioRecorder', 'AudioPlayer'])
@@ -9,12 +9,21 @@ from .voice_chat import (
9
9
  VoiceChatSession,
10
10
  ConversationManager
11
11
  )
12
- from .live_voice_chat import (
13
- LiveVoiceChat,
14
- LiveVoiceChatConfig,
15
- AudioRecorder,
16
- AudioPlayer
17
- )
12
+ from .live_voice_chat import LiveVoiceChatConfig
13
+
14
+ # LiveVoiceChat requires sounddevice/pynput which need PortAudio
15
+ try:
16
+ from .live_voice_chat import (
17
+ LiveVoiceChat,
18
+ AudioRecorder,
19
+ AudioPlayer
20
+ )
21
+ _LIVE_VOICE_AVAILABLE = True
22
+ except (ImportError, OSError):
23
+ LiveVoiceChat = None
24
+ AudioRecorder = None
25
+ AudioPlayer = None
26
+ _LIVE_VOICE_AVAILABLE = False
18
27
  from .dialogue_generator import (
19
28
  DialogueGenerator,
20
29
  Dialogue,
@@ -71,11 +80,9 @@ __all__ = [
71
80
  'VoiceTurnResult',
72
81
  'VoiceChatSession',
73
82
  'ConversationManager',
74
- # LiveVoiceChat
75
- 'LiveVoiceChat',
83
+ # LiveVoiceChat (config always available, others require PortAudio)
76
84
  'LiveVoiceChatConfig',
77
- 'AudioRecorder',
78
- 'AudioPlayer',
85
+ '_LIVE_VOICE_AVAILABLE',
79
86
  # Dialogue Generator
80
87
  'DialogueGenerator',
81
88
  'Dialogue',
@@ -108,3 +115,7 @@ __all__ = [
108
115
  'RealtimeVoiceChat',
109
116
  'RealtimeVoiceChatConfig',
110
117
  ]
118
+
119
+ # Conditionally add LiveVoiceChat exports if available
120
+ if _LIVE_VOICE_AVAILABLE:
121
+ __all__.extend(['LiveVoiceChat', 'AudioRecorder', 'AudioPlayer'])
@@ -0,0 +1,17 @@
1
+ from .models import LiveVoiceChatConfig
2
+
3
+ # These imports may fail if sounddevice/pynput not available (requires PortAudio)
4
+ try:
5
+ from .live_voice_chat import LiveVoiceChat
6
+ from .audio_recorder import AudioRecorder
7
+ from .audio_player import AudioPlayer
8
+ _LIVE_VOICE_AVAILABLE = True
9
+ except (ImportError, OSError):
10
+ LiveVoiceChat = None
11
+ AudioRecorder = None
12
+ AudioPlayer = None
13
+ _LIVE_VOICE_AVAILABLE = False
14
+
15
+ __all__ = ['LiveVoiceChatConfig', '_LIVE_VOICE_AVAILABLE']
16
+ if _LIVE_VOICE_AVAILABLE:
17
+ __all__.extend(['LiveVoiceChat', 'AudioRecorder', 'AudioPlayer'])
@@ -1,7 +1,6 @@
1
1
  import os
2
2
  import time
3
3
  from typing import Optional
4
- import sounddevice as sd
5
4
  import numpy as np
6
5
  from SimplerLLM.utils.custom_verbose import verbose_print
7
6
 
@@ -14,8 +13,9 @@ class AudioPlayer:
14
13
  both blocking and non-blocking playback modes.
15
14
  """
16
15
 
17
- # Class variable to store pygame module after lazy import
16
+ # Class variables for lazy-loaded modules
18
17
  _pygame = None
18
+ _sounddevice = None
19
19
 
20
20
  def __init__(self, verbose: bool = False):
21
21
  """
@@ -62,6 +62,20 @@ class AudioPlayer:
62
62
  verbose_print(f"Error initializing pygame mixer: {e}", "error")
63
63
  raise
64
64
 
65
+ def _ensure_sounddevice(self):
66
+ """Ensure sounddevice is available for streaming."""
67
+ if AudioPlayer._sounddevice is None:
68
+ try:
69
+ import sounddevice as sd
70
+ AudioPlayer._sounddevice = sd
71
+ except (ImportError, OSError) as e:
72
+ raise ImportError(
73
+ "sounddevice is required for audio streaming but not available. "
74
+ "Install with: pip install sounddevice>=0.4.6 "
75
+ "Also ensure PortAudio is installed on your system."
76
+ ) from e
77
+ return AudioPlayer._sounddevice
78
+
65
79
  def play(
66
80
  self,
67
81
  audio_path: str,
@@ -249,7 +263,7 @@ class AudioPlayer:
249
263
  )
250
264
 
251
265
  # Create output stream
252
- self._output_stream = sd.OutputStream(
266
+ self._output_stream = self._ensure_sounddevice().OutputStream(
253
267
  samplerate=sample_rate,
254
268
  channels=channels,
255
269
  dtype=dtype,
@@ -1,12 +1,45 @@
1
- import sounddevice as sd
2
1
  import numpy as np
3
2
  from scipy.io import wavfile
4
3
  import tempfile
5
4
  import os
6
5
  from typing import Optional
7
- from pynput import keyboard
8
6
  from SimplerLLM.utils.custom_verbose import verbose_print
9
7
 
8
+ # Lazy-loaded dependencies (for optional audio hardware support)
9
+ _sounddevice = None
10
+ _pynput_keyboard = None
11
+
12
+
13
+ def _ensure_sounddevice():
14
+ """Lazily import sounddevice when actually needed."""
15
+ global _sounddevice
16
+ if _sounddevice is None:
17
+ try:
18
+ import sounddevice as sd
19
+ _sounddevice = sd
20
+ except (ImportError, OSError) as e:
21
+ raise ImportError(
22
+ "sounddevice is required for audio recording but not available. "
23
+ "Install with: pip install sounddevice>=0.4.6 "
24
+ "Also ensure PortAudio is installed on your system."
25
+ ) from e
26
+ return _sounddevice
27
+
28
+
29
+ def _ensure_pynput():
30
+ """Lazily import pynput keyboard when actually needed."""
31
+ global _pynput_keyboard
32
+ if _pynput_keyboard is None:
33
+ try:
34
+ from pynput import keyboard
35
+ _pynput_keyboard = keyboard
36
+ except ImportError as e:
37
+ raise ImportError(
38
+ "pynput is required for push-to-talk but not installed. "
39
+ "Install with: pip install pynput>=1.7.6"
40
+ ) from e
41
+ return _pynput_keyboard
42
+
10
43
 
11
44
  class AudioRecorder:
12
45
  """
@@ -105,7 +138,7 @@ class AudioRecorder:
105
138
  self.is_recording = True
106
139
  if self.verbose:
107
140
  verbose_print("Recording started...", "info")
108
- elif k == keyboard.KeyCode.from_char(key):
141
+ elif k == _ensure_pynput().KeyCode.from_char(key):
109
142
  key_pressed = True
110
143
  if not self.is_recording:
111
144
  self.is_recording = True
@@ -123,7 +156,7 @@ class AudioRecorder:
123
156
  if self.verbose:
124
157
  verbose_print("Recording stopped", "info")
125
158
  return False # Stop listener
126
- elif k == keyboard.KeyCode.from_char(key):
159
+ elif k == _ensure_pynput().KeyCode.from_char(key):
127
160
  key_pressed = False
128
161
  self.is_recording = False
129
162
  if self.verbose:
@@ -133,14 +166,14 @@ class AudioRecorder:
133
166
  pass
134
167
 
135
168
  # Start audio stream
136
- with sd.InputStream(
169
+ with _ensure_sounddevice().InputStream(
137
170
  samplerate=self.sample_rate,
138
171
  channels=self.channels,
139
172
  dtype=self.dtype,
140
173
  callback=self._audio_callback
141
174
  ):
142
175
  # Start keyboard listener
143
- with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
176
+ with _ensure_pynput().Listener(on_press=on_press, on_release=on_release) as listener:
144
177
  listener.join() # Wait for key release
145
178
 
146
179
  if not self.recording_data:
@@ -203,6 +236,7 @@ class AudioRecorder:
203
236
  verbose_print(f"Recording for {duration} seconds...", "info")
204
237
 
205
238
  # Record for specified duration
239
+ sd = _ensure_sounddevice()
206
240
  audio_data = sd.rec(
207
241
  int(duration * self.sample_rate),
208
242
  samplerate=self.sample_rate,
@@ -234,12 +268,12 @@ class AudioRecorder:
234
268
  Returns:
235
269
  List of device information
236
270
  """
237
- return sd.query_devices()
271
+ return _ensure_sounddevice().query_devices()
238
272
 
239
273
  @staticmethod
240
274
  def get_default_device():
241
275
  """Get default input device."""
242
- return sd.query_devices(kind='input')
276
+ return _ensure_sounddevice().query_devices(kind='input')
243
277
 
244
278
  # ========================================================================
245
279
  # Streaming methods for Realtime API
@@ -290,7 +324,7 @@ class AudioRecorder:
290
324
  )
291
325
 
292
326
  # Create input stream
293
- self._input_stream = sd.InputStream(
327
+ self._input_stream = _ensure_sounddevice().InputStream(
294
328
  samplerate=self._stream_sample_rate,
295
329
  channels=self.channels,
296
330
  dtype=self.dtype,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SimplerLLM
3
- Version: 0.3.3.1
3
+ Version: 0.3.3.2
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
@@ -45,14 +45,19 @@ Requires-Dist: qdrant-client==1.14.3
45
45
  Requires-Dist: voyageai==0.3.3
46
46
  Requires-Dist: pydub>=0.25.1
47
47
  Requires-Dist: elevenlabs>=2.22.0
48
- Requires-Dist: sounddevice>=0.4.6
49
- Requires-Dist: pynput>=1.7.6
50
48
  Requires-Dist: moviepy>=1.0.3
51
49
  Requires-Dist: yt-dlp>=2023.3.4
52
50
  Provides-Extra: voice
53
51
  Requires-Dist: pygame>=2.5.0; extra == "voice"
52
+ Requires-Dist: sounddevice>=0.4.6; extra == "voice"
53
+ Requires-Dist: pynput>=1.7.6; extra == "voice"
54
+ Provides-Extra: live-voice
55
+ Requires-Dist: sounddevice>=0.4.6; extra == "live-voice"
56
+ Requires-Dist: pynput>=1.7.6; extra == "live-voice"
54
57
  Provides-Extra: all
55
58
  Requires-Dist: pygame>=2.5.0; extra == "all"
59
+ Requires-Dist: sounddevice>=0.4.6; extra == "all"
60
+ Requires-Dist: pynput>=1.7.6; extra == "all"
56
61
  Dynamic: author
57
62
  Dynamic: author-email
58
63
  Dynamic: classifier
@@ -21,13 +21,19 @@ qdrant-client==1.14.3
21
21
  voyageai==0.3.3
22
22
  pydub>=0.25.1
23
23
  elevenlabs>=2.22.0
24
- sounddevice>=0.4.6
25
- pynput>=1.7.6
26
24
  moviepy>=1.0.3
27
25
  yt-dlp>=2023.3.4
28
26
 
29
27
  [all]
30
28
  pygame>=2.5.0
29
+ sounddevice>=0.4.6
30
+ pynput>=1.7.6
31
+
32
+ [live_voice]
33
+ sounddevice>=0.4.6
34
+ pynput>=1.7.6
31
35
 
32
36
  [voice]
33
37
  pygame>=2.5.0
38
+ sounddevice>=0.4.6
39
+ pynput>=1.7.6
@@ -10,8 +10,9 @@ with open("requirements.txt") as f:
10
10
 
11
11
  # Optional dependencies for specific features
12
12
  extras_require = {
13
- 'voice': ['pygame>=2.5.0'], # For AudioPlayer file playback
14
- 'all': ['pygame>=2.5.0'] # Install all optional dependencies
13
+ 'voice': ['pygame>=2.5.0', 'sounddevice>=0.4.6', 'pynput>=1.7.6'], # Full voice support
14
+ 'live_voice': ['sounddevice>=0.4.6', 'pynput>=1.7.6'], # LiveVoiceChat (requires PortAudio)
15
+ 'all': ['pygame>=2.5.0', 'sounddevice>=0.4.6', 'pynput>=1.7.6'] # Install all optional dependencies
15
16
  }
16
17
 
17
18
  # Read the long description from the README file
@@ -20,7 +21,7 @@ with open("README.md", encoding="utf-8") as f:
20
21
 
21
22
  setup(
22
23
  name="SimplerLLM",
23
- version="0.3.3.1",
24
+ version="0.3.3.2",
24
25
  author="Hasan Aboul Hasan",
25
26
  author_email="hasan@learnwithhasan.com",
26
27
  description="An easy-to-use Library for interacting with language models.",
@@ -1,11 +0,0 @@
1
- from .live_voice_chat import LiveVoiceChat
2
- from .models import LiveVoiceChatConfig
3
- from .audio_recorder import AudioRecorder
4
- from .audio_player import AudioPlayer
5
-
6
- __all__ = [
7
- 'LiveVoiceChat',
8
- 'LiveVoiceChatConfig',
9
- 'AudioRecorder',
10
- 'AudioPlayer',
11
- ]
File without changes
File without changes