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.
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/PKG-INFO +8 -3
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/__init__.py +14 -7
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/__init__.py +21 -10
- simplerllm-0.3.3.2/SimplerLLM/voice/live_voice_chat/__init__.py +17 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/audio_player.py +17 -3
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/audio_recorder.py +43 -9
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/PKG-INFO +8 -3
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/requires.txt +8 -2
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/setup.py +4 -3
- simplerllm-0.3.3.1/SimplerLLM/voice/live_voice_chat/__init__.py +0 -11
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/LICENSE +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/README.md +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/base.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/google_image.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/image_response_models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/openai_image.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/stability_image.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/google_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/stability_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/embeddings.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/flow.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/tool_registry.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/base.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/exceptions.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/pii_detection.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/prompt_injection.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/topic_filter.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/content_safety.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/format_validator.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/length_validator.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/pii_detection.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/base.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/reliable.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/anthropic_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/cohere_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/deepseek_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/gemini_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/ollama_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/openrouter_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/perplexity_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_addons.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/recursive_brainstorm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/chunk_store.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/clusterer.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/flat_clusterer.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/persistence.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/tree_builder.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_feedback/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_feedback/feedback_loop.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_feedback/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_judge/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_judge/judge.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_judge/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/provider_router.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/query_classifier.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/anthropic_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/cohere_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/deepseek_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/gemini_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/llm_response_models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/ollama_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/openai_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/openrouter_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/perplexity_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/voyage_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_retrieval/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_retrieval/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_retrieval/retriever.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_router/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_router/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_router/router.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_validator/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_validator/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_validator/validator.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/hub/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/hub/agentic_prompts.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/hub/prompt_manager.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/messages_template.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/prompts/prompt_builder.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/apify_api.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/brainstorm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/email_functions.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/file_functions.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/file_loader.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/generic_loader.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/image_helpers.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/json_helpers.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/pandas_func.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/pattern_helpers.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/python_func.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/rapid_api.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/serp.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/text_chunker.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/tools/youtube.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/utils/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/utils/custom_verbose.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/local_vector_db.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/qdrant_vector_db.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/simpler_vector.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/vector_db.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/vectors/vector_providers.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/audio_merger.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/dialogue_generator.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/live_voice_chat.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/audio_utils.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/base.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/elevenlabs_convai.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/openai_realtime.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/realtime_response_models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/realtime_voice_chat.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/wrappers/elevenlabs_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/base.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/providers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/providers/openai_stt.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/providers/stt_response_models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/base.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/elevenlabs_tts.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/openai_tts.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/tts_response_models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/wrappers/elevenlabs_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/audio_sync.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/base.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/video_processor.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/base.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/caption_generator.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/utils/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/utils/subtitle_formatter.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/utils/video_utils.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/__init__.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/conversation.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/voice_chat.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/SOURCES.txt +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/dependency_links.txt +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/top_level.txt +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/setup.cfg +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_agent.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_agent_full.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_anthropic_web_search.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_arabic_validator.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_cohere.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_cohere_embeddings.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_comprehensive_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_embeddings_comprehensive.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_flow_comprehensive.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_brainstorm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_clustering_retrieval.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_feedback.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_judge.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_provider_router.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_llm_providers.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_nested_models.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_openrouter.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_openrouter_full_response.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pattern_extraction.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pattern_helpers.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_perplexity_pydantic.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_perplexity_web_search.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_production_vector_db.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pydantic_edge_cases.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pydantic_edge_cases_llm.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pydantic_structures.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_pydantic_vision.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_qdrant_comprehensive.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_qdrant_connection.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_qdrant_integration_live.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_real_llm_generation.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_reliable_fix.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_reliable_vision.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_router_simple.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_router_youtube_titles.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_unified_vector_interface.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_vision_anthropic.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_vision_openai.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_vision_quick.py +0 -0
- {simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/tests/test_voyage_embeddings.py +0 -0
- {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.
|
|
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
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
'
|
|
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
|
|
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 =
|
|
266
|
+
self._output_stream = self._ensure_sounddevice().OutputStream(
|
|
253
267
|
samplerate=sample_rate,
|
|
254
268
|
channels=channels,
|
|
255
269
|
dtype=dtype,
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/audio_recorder.py
RENAMED
|
@@ -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 ==
|
|
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 ==
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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.
|
|
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'], #
|
|
14
|
-
'
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/google_image.py
RENAMED
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/openai_image.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/stability_image.py
RENAMED
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/google_wrapper.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/openai_wrapper.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/stability_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/anthropic_wrapper.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/cohere_wrapper.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/deepseek_wrapper.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/gemini_wrapper.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/ollama_wrapper.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/openai_wrapper.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/openrouter_wrapper.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/perplexity_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/recursive_brainstorm.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/flat_clusterer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/tree_builder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/provider_router.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/anthropic_llm.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/llm_response_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/openrouter_llm.py
RENAMED
|
File without changes
|
{simplerllm-0.3.3.1 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/perplexity_llm.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|