SimplerLLM 0.3.3.0__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.0 → simplerllm-0.3.3.2}/PKG-INFO +8 -3
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/__init__.py +14 -7
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/__init__.py +6 -0
- simplerllm-0.3.3.2/SimplerLLM/language/llm_validator/__init__.py +51 -0
- simplerllm-0.3.3.2/SimplerLLM/language/llm_validator/models.py +112 -0
- simplerllm-0.3.3.2/SimplerLLM/language/llm_validator/validator.py +475 -0
- {simplerllm-0.3.3.0 → 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.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/audio_player.py +17 -3
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/audio_recorder.py +43 -9
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/PKG-INFO +8 -3
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/SOURCES.txt +4 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/requires.txt +8 -2
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/setup.py +4 -3
- simplerllm-0.3.3.2/tests/test_arabic_validator.py +128 -0
- simplerllm-0.3.3.0/SimplerLLM/voice/live_voice_chat/__init__.py +0 -11
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/LICENSE +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/README.md +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/base.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/google_image.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/image_response_models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/openai_image.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/providers/stability_image.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/google_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/image/generation/wrappers/stability_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/embeddings.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/flow.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/flow/tool_registry.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/base.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/exceptions.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/pii_detection.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/prompt_injection.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/input_guardrails/topic_filter.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/content_safety.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/format_validator.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/length_validator.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/output_guardrails/pii_detection.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/guardrails/wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/base.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/reliable.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/anthropic_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/cohere_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/deepseek_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/gemini_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/ollama_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/openrouter_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm/wrappers/perplexity_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_addons.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_brainstorm/recursive_brainstorm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/chunk_store.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/clusterer.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/flat_clusterer.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/persistence.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_clustering/tree_builder.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_feedback/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_feedback/feedback_loop.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_feedback/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_judge/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_judge/judge.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_judge/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/provider_router.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_provider_router/query_classifier.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/anthropic_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/cohere_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/deepseek_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/gemini_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/llm_response_models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/ollama_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/openai_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/openrouter_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/perplexity_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_providers/voyage_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_retrieval/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_retrieval/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_retrieval/retriever.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_router/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_router/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/language/llm_router/router.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/prompts/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/prompts/hub/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/prompts/hub/agentic_prompts.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/prompts/hub/prompt_manager.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/prompts/messages_template.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/prompts/prompt_builder.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/apify_api.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/brainstorm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/email_functions.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/file_functions.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/file_loader.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/generic_loader.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/image_helpers.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/json_helpers.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/pandas_func.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/pattern_helpers.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/python_func.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/rapid_api.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/serp.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/text_chunker.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/tools/youtube.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/utils/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/utils/custom_verbose.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/vectors/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/vectors/local_vector_db.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/vectors/qdrant_vector_db.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/vectors/simpler_vector.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/vectors/vector_db.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/vectors/vector_providers.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/audio_merger.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/dialogue_generator.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/dialogue_generator/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/live_voice_chat.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/live_voice_chat/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/audio_utils.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/base.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/elevenlabs_convai.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/openai_realtime.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/providers/realtime_response_models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/realtime_voice_chat.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/wrappers/elevenlabs_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/realtime_voice/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/base.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/providers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/providers/openai_stt.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/providers/stt_response_models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/stt/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/base.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/elevenlabs_tts.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/openai_tts.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/providers/tts_response_models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/wrappers/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/wrappers/elevenlabs_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/tts/wrappers/openai_wrapper.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/audio_sync.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/base.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_dubbing/video_processor.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/base.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/caption_generator.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/utils/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/utils/subtitle_formatter.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/video_transcription/utils/video_utils.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/__init__.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/conversation.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM/voice/voice_chat/voice_chat.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/dependency_links.txt +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/SimplerLLM.egg-info/top_level.txt +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/setup.cfg +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_agent.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_agent_full.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_anthropic_web_search.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_cohere.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_cohere_embeddings.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_comprehensive_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_embeddings_comprehensive.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_flow_comprehensive.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_llm_brainstorm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_llm_clustering_retrieval.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_llm_feedback.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_llm_judge.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_llm_provider_router.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_llm_providers.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_nested_models.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_openrouter.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_openrouter_full_response.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_pattern_extraction.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_pattern_helpers.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_perplexity_pydantic.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_perplexity_web_search.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_production_vector_db.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_pydantic_edge_cases.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_pydantic_edge_cases_llm.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_pydantic_structures.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_pydantic_vision.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_qdrant_comprehensive.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_qdrant_connection.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_qdrant_integration_live.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_real_llm_generation.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_reliable_fix.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_reliable_vision.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_router_simple.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_router_youtube_titles.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_unified_vector_interface.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_vision_anthropic.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_vision_openai.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_vision_quick.py +0 -0
- {simplerllm-0.3.3.0 → simplerllm-0.3.3.2}/tests/test_voyage_embeddings.py +0 -0
- {simplerllm-0.3.3.0 → 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'])
|
|
@@ -3,6 +3,7 @@ from .llm.reliable import ReliableLLM
|
|
|
3
3
|
from .llm.wrappers import OpenAILLM, GeminiLLM, AnthropicLLM, OllamaLLM, DeepSeekLLM
|
|
4
4
|
from .flow import MiniAgent, StepResult, FlowResult
|
|
5
5
|
from .llm_judge import LLMJudge, JudgeMode, JudgeResult, ProviderResponse, ProviderEvaluation, EvaluationReport
|
|
6
|
+
from .llm_validator import LLMValidator, ValidationResult, ValidatorScore, AggregationMethod
|
|
6
7
|
from .llm_feedback import LLMFeedbackLoop, FeedbackResult, IterationResult, Critique
|
|
7
8
|
from .llm_provider_router import LLMProviderRouter, ProviderConfig, RoutingResult, QueryClassification
|
|
8
9
|
from .llm_clustering import (
|
|
@@ -71,6 +72,11 @@ __all__ = [
|
|
|
71
72
|
'ProviderResponse',
|
|
72
73
|
'ProviderEvaluation',
|
|
73
74
|
'EvaluationReport',
|
|
75
|
+
# LLM Validator
|
|
76
|
+
'LLMValidator',
|
|
77
|
+
'ValidationResult',
|
|
78
|
+
'ValidatorScore',
|
|
79
|
+
'AggregationMethod',
|
|
74
80
|
'LLMFeedbackLoop',
|
|
75
81
|
'FeedbackResult',
|
|
76
82
|
'IterationResult',
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""
|
|
2
|
+
LLM Validator - Multi-provider validation system for AI-generated content.
|
|
3
|
+
|
|
4
|
+
This module provides tools for validating AI-generated content using multiple
|
|
5
|
+
LLM providers, with configurable aggregation methods and consensus detection.
|
|
6
|
+
|
|
7
|
+
Main Classes:
|
|
8
|
+
- LLMValidator: Validates content using multiple LLM providers
|
|
9
|
+
- AggregationMethod: Enum for score aggregation methods
|
|
10
|
+
- ValidationResult: Complete validation result with scores and metadata
|
|
11
|
+
- ValidatorScore: Individual validator's score and explanation
|
|
12
|
+
|
|
13
|
+
Example:
|
|
14
|
+
```python
|
|
15
|
+
from SimplerLLM.language import LLM, LLMProvider
|
|
16
|
+
from SimplerLLM.language.llm_validator import LLMValidator
|
|
17
|
+
|
|
18
|
+
# Create validators
|
|
19
|
+
validators = [
|
|
20
|
+
LLM.create(LLMProvider.OPENAI, model_name="gpt-4o"),
|
|
21
|
+
LLM.create(LLMProvider.ANTHROPIC, model_name="claude-3-5-sonnet-20241022"),
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
# Initialize validator
|
|
25
|
+
validator = LLMValidator(validators=validators)
|
|
26
|
+
|
|
27
|
+
# Validate content
|
|
28
|
+
result = validator.validate(
|
|
29
|
+
content="Paris is the capital of France.",
|
|
30
|
+
validation_prompt="Check if the facts are accurate.",
|
|
31
|
+
original_question="What is the capital of France?",
|
|
32
|
+
)
|
|
33
|
+
print(f"Score: {result.overall_score}")
|
|
34
|
+
print(f"Valid: {result.is_valid}")
|
|
35
|
+
print(f"Consensus: {result.consensus}")
|
|
36
|
+
```
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
from .validator import LLMValidator
|
|
40
|
+
from .models import (
|
|
41
|
+
AggregationMethod,
|
|
42
|
+
ValidationResult,
|
|
43
|
+
ValidatorScore,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
__all__ = [
|
|
47
|
+
"LLMValidator",
|
|
48
|
+
"AggregationMethod",
|
|
49
|
+
"ValidationResult",
|
|
50
|
+
"ValidatorScore",
|
|
51
|
+
]
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pydantic models for the LLM Validator system.
|
|
3
|
+
|
|
4
|
+
This module defines the data structures used for multi-provider validation
|
|
5
|
+
of AI-generated content, including scoring, confidence, and aggregation.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Dict, List, Optional, Any
|
|
9
|
+
from pydantic import BaseModel, Field
|
|
10
|
+
from datetime import datetime
|
|
11
|
+
from enum import Enum
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class AggregationMethod(str, Enum):
|
|
15
|
+
"""Method for aggregating scores from multiple validators."""
|
|
16
|
+
AVERAGE = "average" # Simple mean of all scores
|
|
17
|
+
WEIGHTED = "weighted" # Weighted average (provider weights)
|
|
18
|
+
MEDIAN = "median" # Median score
|
|
19
|
+
CONSENSUS = "consensus" # Majority agreement threshold
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ValidatorScoreOutput(BaseModel):
|
|
23
|
+
"""Internal model for structured validator output from LLM."""
|
|
24
|
+
score: float = Field(
|
|
25
|
+
description="Validation score from 0.0 to 1.0 (0 = completely invalid, 1 = perfectly valid)",
|
|
26
|
+
ge=0.0,
|
|
27
|
+
le=1.0
|
|
28
|
+
)
|
|
29
|
+
confidence: float = Field(
|
|
30
|
+
description="How confident you are in this score from 0.0 to 1.0",
|
|
31
|
+
ge=0.0,
|
|
32
|
+
le=1.0
|
|
33
|
+
)
|
|
34
|
+
explanation: str = Field(
|
|
35
|
+
description="Detailed explanation of why you gave this score"
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class ValidatorScore(BaseModel):
|
|
40
|
+
"""Individual validator's score for the content."""
|
|
41
|
+
provider_name: str = Field(description="Name of the LLM provider (e.g., 'OPENAI', 'ANTHROPIC')")
|
|
42
|
+
model_name: str = Field(description="Specific model used (e.g., 'gpt-4o', 'claude-3-5-sonnet')")
|
|
43
|
+
score: float = Field(
|
|
44
|
+
description="Validation score from 0.0 to 1.0",
|
|
45
|
+
ge=0.0,
|
|
46
|
+
le=1.0
|
|
47
|
+
)
|
|
48
|
+
confidence: float = Field(
|
|
49
|
+
description="How confident the validator is in its score (0.0 to 1.0)",
|
|
50
|
+
ge=0.0,
|
|
51
|
+
le=1.0
|
|
52
|
+
)
|
|
53
|
+
explanation: str = Field(description="Explanation for the score")
|
|
54
|
+
is_valid: bool = Field(description="Whether the content passes validation (score >= threshold)")
|
|
55
|
+
execution_time: float = Field(description="Time taken to validate in seconds")
|
|
56
|
+
error: Optional[str] = Field(default=None, description="Error message if validation failed")
|
|
57
|
+
|
|
58
|
+
class Config:
|
|
59
|
+
json_schema_extra = {
|
|
60
|
+
"example": {
|
|
61
|
+
"provider_name": "OPENAI",
|
|
62
|
+
"model_name": "gpt-4o",
|
|
63
|
+
"score": 0.85,
|
|
64
|
+
"confidence": 0.92,
|
|
65
|
+
"explanation": "The content is factually accurate and well-structured.",
|
|
66
|
+
"is_valid": True,
|
|
67
|
+
"execution_time": 1.5,
|
|
68
|
+
"error": None
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class ValidationResult(BaseModel):
|
|
74
|
+
"""Complete result from LLM Validator."""
|
|
75
|
+
overall_score: float = Field(
|
|
76
|
+
description="Aggregated validation score (0.0 to 1.0)",
|
|
77
|
+
ge=0.0,
|
|
78
|
+
le=1.0
|
|
79
|
+
)
|
|
80
|
+
overall_confidence: float = Field(
|
|
81
|
+
description="Aggregated confidence score (0.0 to 1.0)",
|
|
82
|
+
ge=0.0,
|
|
83
|
+
le=1.0
|
|
84
|
+
)
|
|
85
|
+
is_valid: bool = Field(description="Overall pass/fail based on threshold")
|
|
86
|
+
validators: List[ValidatorScore] = Field(description="Individual validator scores")
|
|
87
|
+
consensus: bool = Field(description="Whether validators agreed on the result")
|
|
88
|
+
consensus_details: str = Field(description="Explanation of validator agreement")
|
|
89
|
+
aggregation_method: AggregationMethod = Field(description="Method used for aggregation")
|
|
90
|
+
content_validated: str = Field(description="The content that was validated")
|
|
91
|
+
validation_prompt: str = Field(description="The validation instructions used")
|
|
92
|
+
original_question: Optional[str] = Field(default=None, description="The original question if provided")
|
|
93
|
+
total_execution_time: float = Field(description="Total time for all validators in seconds")
|
|
94
|
+
timestamp: datetime = Field(default_factory=datetime.now, description="When validation completed")
|
|
95
|
+
|
|
96
|
+
class Config:
|
|
97
|
+
json_schema_extra = {
|
|
98
|
+
"example": {
|
|
99
|
+
"overall_score": 0.85,
|
|
100
|
+
"overall_confidence": 0.90,
|
|
101
|
+
"is_valid": True,
|
|
102
|
+
"validators": [],
|
|
103
|
+
"consensus": True,
|
|
104
|
+
"consensus_details": "All validators scored within 0.15 of each other",
|
|
105
|
+
"aggregation_method": "average",
|
|
106
|
+
"content_validated": "Paris is the capital of France.",
|
|
107
|
+
"validation_prompt": "Check if the facts are accurate.",
|
|
108
|
+
"original_question": "What is the capital of France?",
|
|
109
|
+
"total_execution_time": 3.2,
|
|
110
|
+
"timestamp": "2025-01-15T10:30:00"
|
|
111
|
+
}
|
|
112
|
+
}
|