narrative-ai-framework 0.1.0__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.
- narrative_ai_framework-0.1.0/LICENSE +21 -0
- narrative_ai_framework-0.1.0/MANIFEST.in +8 -0
- narrative_ai_framework-0.1.0/PKG-INFO +211 -0
- narrative_ai_framework-0.1.0/README.md +55 -0
- narrative_ai_framework-0.1.0/config/__init__.py +31 -0
- narrative_ai_framework-0.1.0/config/env.example.txt +96 -0
- narrative_ai_framework-0.1.0/config/providers.py +454 -0
- narrative_ai_framework-0.1.0/config/providers.yml +621 -0
- narrative_ai_framework-0.1.0/narrative_ai/__init__.py +28 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/__main__.py +6 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/app.py +415 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/dependencies.py +484 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/http_helpers.py +26 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/idempotency.py +89 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/middleware/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/middleware/auth.py +129 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/middleware/correlation_id.py +60 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/middleware/error_handler.py +196 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/middleware/jwt_user_id.py +49 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/middleware/logging.py +51 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/middleware/rate_limit.py +163 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/middleware/security_headers.py +30 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/middleware/tenant.py +1 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/models/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/models/audio.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/models/companion.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/models/entry.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/models/error.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/models/pagination.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/models/search.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/__init__.py +1 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/analytics.py +137 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/auth.py +444 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/companion.py +209 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/entries.py +658 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/export.py +21 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/ingestion.py +170 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/llm.py +408 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/ocr.py +89 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/rag.py +207 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/search.py +20 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/stt.py +274 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/tts.py +324 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/vlm.py +155 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/routes/web_intel.py +79 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/services/__init__.py +1 -0
- narrative_ai_framework-0.1.0/narrative_ai/api/services/entry_processor.py +211 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/__init__.py +6 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/dto/__init__.py +35 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/dto/ingestion_dto.py +52 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/dto/llm_dto.py +83 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/dto/rag_dto.py +101 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/dto/stt_dto.py +56 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/dto/tts_dto.py +61 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/dto/vlm_dto.py +64 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/__init__.py +26 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/companion_chat_pipeline.py +988 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/entry_service.py +475 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/ingestion_service.py +50 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/llm_service.py +79 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/rag_service.py +94 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/stt_service.py +40 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/tts_service.py +59 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/user_profile_service.py +109 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/user_service.py +146 -0
- narrative_ai_framework-0.1.0/narrative_ai/application/services/vlm_service.py +54 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/__init__.py +6 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/domain_services/__init__.py +17 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/domain_services/ingestion_engine.py +36 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/domain_services/llm_engine.py +39 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/domain_services/rag_service.py +41 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/domain_services/stt_engine.py +34 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/domain_services/tts_engine.py +39 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/domain_services/vlm_engine.py +24 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/entities/__init__.py +21 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/entities/analytics.py +24 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/entities/audio_file.py +48 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/entities/conversation.py +95 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/entities/diary_entry.py +77 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/entities/user.py +63 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/events/__init__.py +15 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/events/chat_events.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/events/domain_event.py +17 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/events/entry_events.py +57 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/events/event_bus.py +67 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/events/export_events.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/events/search_events.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/exceptions/__init__.py +31 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/exceptions/chat_exceptions.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/exceptions/domain_exception.py +33 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/exceptions/entry_exceptions.py +44 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/exceptions/export_exceptions.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/exceptions/search_exceptions.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/exceptions/user_exceptions.py +37 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/repositories/__init__.py +20 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/repositories/audio_repository.py +39 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/repositories/conversation_repository.py +46 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/repositories/entry_repository.py +58 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/repositories/search_repository.py +47 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/repositories/user_repository.py +45 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/value_objects/__init__.py +17 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/value_objects/audio_metadata.py +19 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/value_objects/embedding.py +27 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/value_objects/emotion.py +28 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/value_objects/entry_id.py +32 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/value_objects/tenant_id.py +51 -0
- narrative_ai_framework-0.1.0/narrative_ai/domain/value_objects/user_id.py +32 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/__init__.py +95 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/analytics/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/analytics/config.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/analytics/emotion_analytics.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/analytics/metrics_calculator.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/analytics/pattern_detector.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/audio_response_builder.py +11 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/companion_engine.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/config.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/conversation_manager.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/intent_classifier.py +381 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/intent_exemplars.yaml +89 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/llm_client.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/prompt_builder.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/companion/response_processor.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/embeddings/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/embeddings/batch_processor.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/embeddings/chunking.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/embeddings/config.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/embeddings/embedding_engine.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/embeddings/model_loader.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/export/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/export/audiobook_generator.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/export/config.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/export/epub_generator.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/export/export_engine.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/export/pdf_generator.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/__init__.py +130 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/api.py +169 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/assembler.py +334 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/audio_processor.py +339 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/config.py +476 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/document_extractor.py +424 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/factory.py +156 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/image_processor.py +280 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/ingestion_config.yaml +143 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/ingestion_pipeline.py +516 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/input_handler.py +414 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/ocr_processor.py +91 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/stt_processor.py +119 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/input_processor/types.py +436 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/__init__.py +253 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/api.py +230 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/base_llm.py +423 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/claude_llm.py +674 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/config.py +666 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/conversation_manager.py +620 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/conversation_storage.py +853 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/deepseek_llm.py +687 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/error_mapper.py +627 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/gemini_llm.py +867 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/input_processor.py +555 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/llm_engine.py +1212 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/llm_strategy.py +705 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/ollama_llm.py +386 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/openai_llm.py +773 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/response_processor.py +535 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/token_budget.py +116 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/llm/xai_llm.py +650 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/__init__.py +52 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/api.py +318 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/config/config.yaml +41 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/config.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/core/__init__.py +14 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/core/api.py +59 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/core/factory.py +20 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/core/registry.py +46 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/demos/streamlit_app.py +222 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/dewarpnet/__init__.py +5 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/dewarpnet/infer.py +133 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/dewarpnet/models/densenetccnl.py +176 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/dewarpnet/models/unetnc.py +82 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/dewarpnet/utils.py +12 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/filters/__init__.py +18 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/filters/base.py +108 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/filters/dewarpnet_filter.py +218 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/filters/dewarpnet_models/__init__.py +29 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/filters/dewarpnet_models/densenetccnl.py +169 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/filters/dewarpnet_models/unetnc.py +88 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/filters/docres_filter.py +295 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/filters/remote_docres.py +259 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/kaggle_server.py +666 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/pipeline.py +428 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/providers/__init__.py +3 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/providers/remote.py +218 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/requirements.txt +39 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/tests/__init__.py +1 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/tests/debug_server.py +53 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/tests/test_filters.py +22 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/tests/test_functional_api.py +59 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/tests/test_pipeline.py +43 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/tests/test_providers.py +34 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/tests/test_utils.py +39 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/tests/verify_integration.py +60 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/tests/verify_universal_formats.py +51 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/utils/docres_utils.py +109 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/utils/image.py +29 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/ocr/utils/image_processing.py +69 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/__init__.py +49 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/api.py +295 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/augmentation.py +175 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/cache.py +441 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/config.py +185 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/context_builder.py +195 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/hybrid_search.py +203 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/memory_config.yaml +64 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/memory_manager.py +805 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/providers/__init__.py +78 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/providers/base.py +163 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/providers/embeddings/__init__.py +14 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/providers/embeddings/bge_m3.py +226 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/providers/embeddings/cohere_provider.py +103 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/providers/embeddings/openai_provider.py +90 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/providers/rerankers/__init__.py +11 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/providers/rerankers/bge_reranker.py +66 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/providers/rerankers/cohere_reranker.py +81 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/query_processor.py +328 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/ranking.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/retrieval_engine.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/strategies/__init__.py +33 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/strategies/base.py +97 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/strategies/default.py +75 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/strategies/diary.py +111 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/text_splitter.py +389 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/rag/types.py +104 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/storage_interface.py +130 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/__init__.py +251 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/__main__.py +6 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/api.py +266 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/audio_processor.py +612 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/base_stt.py +441 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/config.py +663 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/conformer_model.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/elevenlabs_stt.py +1179 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/emotion_detector.py +717 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/faster_whisper_stt.py +408 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/main.py +98 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/stt_engine.py +1765 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/stt_strategy.py +766 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/vad_processor.py +579 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/stt/whisper_stt.py +706 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/text_enhancement/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/text_enhancement/config.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/text_enhancement/grammar_fixer.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/text_enhancement/llm_enhancer.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/text_enhancement/normalizer.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/text_enhancement/validator.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/__init__.py +254 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/__main__.py +6 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/api.py +194 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/audio_processor.py +640 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/base_tts.py +740 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/config.py +599 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/elevenlabs_tts.py +871 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/emotion_applicator.py +464 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/main.py +113 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/model_loader.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/openai_tts.py +712 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/prosody_engine.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/streaming.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/tts_engine.py +1140 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/tts_strategy.py +755 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/tts/voice_selector.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/__init__.py +5 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/api.py +106 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/base.py +49 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/config.py +70 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/factory.py +49 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/processor.py +306 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/providers/google.py +121 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/providers/ollama_cloud.py +112 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/providers/ollama_local.py +90 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/providers/openai.py +97 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/types.py +38 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/vlm/utils.py +44 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/__init__.py +36 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/agent.py +244 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/api.py +42 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/config.py +177 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/constants.py +22 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/conversation.py +419 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/llm_adapter.py +348 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/main.py +37 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/plugins/__init__.py +23 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/plugins/llm.py +288 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/plugins/stt.py +485 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/plugins/tts.py +286 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/security_hooks.py +277 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/stt_adapter.py +429 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/tts_adapter.py +325 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/voice_agent.py +171 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/webrtc_vad.py +337 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/voice_mode/worker.py +715 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/web_intel/__init__.py +17 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/web_intel/api.py +79 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/web_intel/cache.py +131 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/web_intel/engine.py +326 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/web_intel/models.py +74 -0
- narrative_ai_framework-0.1.0/narrative_ai/engines/web_intel/providers.py +178 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/__init__.py +5 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/cache/__init__.py +37 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/cache/base_cache.py +30 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/cache/config.py +41 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/cache/memcached_cache.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/cache/memory_cache.py +54 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/cache/redis_cache.py +187 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/cache/user_profile_cache.py +129 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/config.py +30 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/__init__.py +21 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/config.py +57 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/connection.py +86 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/migrations/env.py +95 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/migrations/versions/001_initial_schema.py +200 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/migrations/versions/002_add_pgvector.py +76 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/migrations/versions/003_add_indexes.py +67 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/migrations/versions/004_audit_immutability.py +62 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/migrations/versions/005_add_user_preferences.py +55 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/migrations/versions/006_add_entry_media.py +39 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/migrations/versions/007_audit_logs_tenant_timestamp_index.py +29 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/__init__.py +41 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/analytics_event_model.py +23 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/audio_file_model.py +32 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/audit_log_model.py +35 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/base.py +24 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/conversation_message_model.py +26 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/conversation_model.py +29 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/diary_embedding_model.py +34 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/diary_entry_model.py +37 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/entry_media_model.py +25 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/export_job_model.py +22 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/subscription_model.py +21 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/user_model.py +28 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/models/user_preference_model.py +29 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/repositories/__init__.py +17 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/repositories/analytics_event_repository_impl.py +40 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/repositories/audio_repository_impl.py +98 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/repositories/base_repository.py +64 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/repositories/conversation_repository_impl.py +148 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/repositories/entry_media_repository_impl.py +58 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/repositories/entry_repository_impl.py +244 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/repositories/search_repository_impl.py +121 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/repositories/user_repository_impl.py +106 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/schema.py +42 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/database/session.py +64 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/external/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/external/email_client.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/external/llm_client.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/external/notification_client.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/external/stt_client.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/security/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/security/auth_service.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/security/config.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/security/encryption.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/security/jwt_service.py +113 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/security/password_hasher.py +37 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/security/rate_limiter.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/storage/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/storage/azure_storage.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/storage/base_storage.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/storage/config.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/storage/gcs_storage.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/storage/local_storage.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/storage/s3_storage.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/vector/__init__.py +31 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/vector/base_vector_store.py +153 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/vector/config.py +39 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/vector/milvus_store.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/vector/pgvector_store.py +120 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/vector/pinecone_store.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/infrastructure/vector/qdrant_store.py +424 -0
- narrative_ai_framework-0.1.0/narrative_ai/models/__init__.py +10 -0
- narrative_ai_framework-0.1.0/narrative_ai/models/registry.py +268 -0
- narrative_ai_framework-0.1.0/narrative_ai/security/__init__.py +67 -0
- narrative_ai_framework-0.1.0/narrative_ai/security/audit_trail.py +834 -0
- narrative_ai_framework-0.1.0/narrative_ai/security/circuit_breaker.py +179 -0
- narrative_ai_framework-0.1.0/narrative_ai/security/engine_integration.py +251 -0
- narrative_ai_framework-0.1.0/narrative_ai/security/error_handling.py +439 -0
- narrative_ai_framework-0.1.0/narrative_ai/security/input_validation.py +513 -0
- narrative_ai_framework-0.1.0/narrative_ai/security/rate_limiting.py +1069 -0
- narrative_ai_framework-0.1.0/narrative_ai/security/stream_isolation.py +389 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/__init__.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/constants.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/crypto.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/date_utils.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/decorators.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/exceptions.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/jwt_utils.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/logger.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/retry_utils.py +62 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/typing.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai/shared/validators.py +0 -0
- narrative_ai_framework-0.1.0/narrative_ai_framework.egg-info/PKG-INFO +211 -0
- narrative_ai_framework-0.1.0/narrative_ai_framework.egg-info/SOURCES.txt +408 -0
- narrative_ai_framework-0.1.0/narrative_ai_framework.egg-info/dependency_links.txt +1 -0
- narrative_ai_framework-0.1.0/narrative_ai_framework.egg-info/entry_points.txt +6 -0
- narrative_ai_framework-0.1.0/narrative_ai_framework.egg-info/requires.txt +157 -0
- narrative_ai_framework-0.1.0/narrative_ai_framework.egg-info/top_level.txt +2 -0
- narrative_ai_framework-0.1.0/pyproject.toml +246 -0
- narrative_ai_framework-0.1.0/requirements-ml.txt +31 -0
- narrative_ai_framework-0.1.0/requirements.txt +167 -0
- narrative_ai_framework-0.1.0/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Narrative AI Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: narrative-ai-framework
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: AI-powered voice diary framework: STT, TTS, LLM, RAG, and voice-agent engines
|
|
5
|
+
Author: Narrative AI Team
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: ai,voice,diary,stt,tts,llm,rag,arabic
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: PyYAML>=6.0.1
|
|
12
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
13
|
+
Requires-Dist: pydantic>=2.5.0
|
|
14
|
+
Requires-Dist: aiohttp>=3.9.0
|
|
15
|
+
Requires-Dist: aiofiles>=23.2.1
|
|
16
|
+
Requires-Dist: requests>=2.28.0
|
|
17
|
+
Requires-Dist: shortuuid>=1.0.11
|
|
18
|
+
Requires-Dist: pyngrok>=7.0.0
|
|
19
|
+
Requires-Dist: nest-asyncio>=1.5.8
|
|
20
|
+
Requires-Dist: sympy>=1.12
|
|
21
|
+
Provides-Extra: stt
|
|
22
|
+
Requires-Dist: soundfile>=0.12.1; extra == "stt"
|
|
23
|
+
Requires-Dist: scipy>=1.11.0; extra == "stt"
|
|
24
|
+
Requires-Dist: webrtcvad>=2.0.10; extra == "stt"
|
|
25
|
+
Requires-Dist: numpy>=1.24.0; extra == "stt"
|
|
26
|
+
Requires-Dist: elevenlabs>=0.2.0; extra == "stt"
|
|
27
|
+
Requires-Dist: yt-dlp>=2023.11.0; extra == "stt"
|
|
28
|
+
Requires-Dist: pydub>=0.25.1; extra == "stt"
|
|
29
|
+
Requires-Dist: transformers>=4.36.0; extra == "stt"
|
|
30
|
+
Requires-Dist: accelerate>=0.25.0; extra == "stt"
|
|
31
|
+
Requires-Dist: torch>=2.1.0; extra == "stt"
|
|
32
|
+
Requires-Dist: ctranslate2>=4.0.0; extra == "stt"
|
|
33
|
+
Requires-Dist: faster-whisper>=1.0.0; extra == "stt"
|
|
34
|
+
Provides-Extra: tts
|
|
35
|
+
Requires-Dist: aiohttp>=3.9.0; extra == "tts"
|
|
36
|
+
Requires-Dist: numpy>=1.24.0; extra == "tts"
|
|
37
|
+
Provides-Extra: ocr
|
|
38
|
+
Requires-Dist: opencv-python>=4.8.0; extra == "ocr"
|
|
39
|
+
Requires-Dist: scikit-image>=0.21.0; extra == "ocr"
|
|
40
|
+
Requires-Dist: pdf2image>=1.16.3; extra == "ocr"
|
|
41
|
+
Requires-Dist: python-docx>=1.1.0; extra == "ocr"
|
|
42
|
+
Requires-Dist: einops>=0.6.1; extra == "ocr"
|
|
43
|
+
Requires-Dist: torch>=2.0.1; extra == "ocr"
|
|
44
|
+
Requires-Dist: torchvision>=0.15.2; extra == "ocr"
|
|
45
|
+
Requires-Dist: transformers>=4.45.0; extra == "ocr"
|
|
46
|
+
Requires-Dist: accelerate>=0.26.0; extra == "ocr"
|
|
47
|
+
Requires-Dist: qwen-vl-utils>=0.0.4; extra == "ocr"
|
|
48
|
+
Requires-Dist: timm>=0.9.2; extra == "ocr"
|
|
49
|
+
Requires-Dist: basicsr>=1.4.2; extra == "ocr"
|
|
50
|
+
Requires-Dist: realesrgan>=0.3.0; extra == "ocr"
|
|
51
|
+
Provides-Extra: llm
|
|
52
|
+
Requires-Dist: google-generativeai>=0.3.0; extra == "llm"
|
|
53
|
+
Requires-Dist: google-genai>=0.3.0; extra == "llm"
|
|
54
|
+
Requires-Dist: openai>=1.3.0; extra == "llm"
|
|
55
|
+
Requires-Dist: anthropic>=0.18.0; extra == "llm"
|
|
56
|
+
Requires-Dist: tiktoken>=0.5.0; extra == "llm"
|
|
57
|
+
Provides-Extra: voice
|
|
58
|
+
Requires-Dist: livekit>=0.11.0; extra == "voice"
|
|
59
|
+
Requires-Dist: livekit-api>=0.4.0; extra == "voice"
|
|
60
|
+
Requires-Dist: livekit-agents>=0.7.0; extra == "voice"
|
|
61
|
+
Requires-Dist: livekit-plugins-silero>=0.6.0; extra == "voice"
|
|
62
|
+
Requires-Dist: livekit-plugins-elevenlabs>=1.3.0; extra == "voice"
|
|
63
|
+
Requires-Dist: livekit-plugins-turn-detector>=1.3.0; extra == "voice"
|
|
64
|
+
Requires-Dist: livekit-plugins-noise-cancellation>=0.2.0; extra == "voice"
|
|
65
|
+
Requires-Dist: sounddevice>=0.5.0; extra == "voice"
|
|
66
|
+
Provides-Extra: db
|
|
67
|
+
Requires-Dist: SQLAlchemy>=2.0.0; extra == "db"
|
|
68
|
+
Requires-Dist: asyncpg>=0.29.0; extra == "db"
|
|
69
|
+
Requires-Dist: psycopg2-binary>=2.9.0; extra == "db"
|
|
70
|
+
Requires-Dist: alembic>=1.13.0; extra == "db"
|
|
71
|
+
Requires-Dist: redis>=5.0.0; extra == "db"
|
|
72
|
+
Provides-Extra: security
|
|
73
|
+
Requires-Dist: redis>=5.0.0; extra == "security"
|
|
74
|
+
Requires-Dist: SQLAlchemy>=2.0.0; extra == "security"
|
|
75
|
+
Requires-Dist: cryptography>=41.0.0; extra == "security"
|
|
76
|
+
Requires-Dist: PyJWT>=2.8.0; extra == "security"
|
|
77
|
+
Requires-Dist: bcrypt>=4.0.0; extra == "security"
|
|
78
|
+
Provides-Extra: api
|
|
79
|
+
Requires-Dist: fastapi>=0.109.0; extra == "api"
|
|
80
|
+
Requires-Dist: uvicorn[standard]>=0.27.0; extra == "api"
|
|
81
|
+
Requires-Dist: python-multipart>=0.0.6; extra == "api"
|
|
82
|
+
Requires-Dist: email-validator>=2.1.0; extra == "api"
|
|
83
|
+
Provides-Extra: rag
|
|
84
|
+
Requires-Dist: sentence-transformers>=2.2.2; extra == "rag"
|
|
85
|
+
Requires-Dist: FlagEmbedding>=1.3.5; extra == "rag"
|
|
86
|
+
Requires-Dist: pillow>=10.0.0; extra == "rag"
|
|
87
|
+
Requires-Dist: psutil>=5.9.0; extra == "rag"
|
|
88
|
+
Requires-Dist: unstructured[all-docs]>=0.10.0; extra == "rag"
|
|
89
|
+
Requires-Dist: python-magic>=0.4.27; extra == "rag"
|
|
90
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "rag"
|
|
91
|
+
Requires-Dist: pgvector>=0.2.5; extra == "rag"
|
|
92
|
+
Requires-Dist: qdrant-client>=1.7.0; extra == "rag"
|
|
93
|
+
Provides-Extra: web
|
|
94
|
+
Requires-Dist: ddgs>=9.0.0; extra == "web"
|
|
95
|
+
Provides-Extra: vlm
|
|
96
|
+
Requires-Dist: pillow>=10.0.0; extra == "vlm"
|
|
97
|
+
Requires-Dist: numpy>=1.24.0; extra == "vlm"
|
|
98
|
+
Requires-Dist: ollama>=0.1.0; extra == "vlm"
|
|
99
|
+
Provides-Extra: all
|
|
100
|
+
Requires-Dist: soundfile>=0.12.1; extra == "all"
|
|
101
|
+
Requires-Dist: scipy>=1.11.0; extra == "all"
|
|
102
|
+
Requires-Dist: webrtcvad>=2.0.10; extra == "all"
|
|
103
|
+
Requires-Dist: numpy>=1.24.0; extra == "all"
|
|
104
|
+
Requires-Dist: elevenlabs>=0.2.0; extra == "all"
|
|
105
|
+
Requires-Dist: yt-dlp>=2023.11.0; extra == "all"
|
|
106
|
+
Requires-Dist: pydub>=0.25.1; extra == "all"
|
|
107
|
+
Requires-Dist: transformers>=4.36.0; extra == "all"
|
|
108
|
+
Requires-Dist: accelerate>=0.25.0; extra == "all"
|
|
109
|
+
Requires-Dist: torch>=2.1.0; extra == "all"
|
|
110
|
+
Requires-Dist: ctranslate2>=4.0.0; extra == "all"
|
|
111
|
+
Requires-Dist: faster-whisper>=1.0.0; extra == "all"
|
|
112
|
+
Requires-Dist: aiohttp>=3.9.0; extra == "all"
|
|
113
|
+
Requires-Dist: google-generativeai>=0.3.0; extra == "all"
|
|
114
|
+
Requires-Dist: google-genai>=0.3.0; extra == "all"
|
|
115
|
+
Requires-Dist: openai>=1.3.0; extra == "all"
|
|
116
|
+
Requires-Dist: anthropic>=0.18.0; extra == "all"
|
|
117
|
+
Requires-Dist: tiktoken>=0.5.0; extra == "all"
|
|
118
|
+
Requires-Dist: livekit>=0.11.0; extra == "all"
|
|
119
|
+
Requires-Dist: livekit-api>=0.4.0; extra == "all"
|
|
120
|
+
Requires-Dist: livekit-agents>=0.7.0; extra == "all"
|
|
121
|
+
Requires-Dist: livekit-plugins-silero>=0.6.0; extra == "all"
|
|
122
|
+
Requires-Dist: livekit-plugins-elevenlabs>=1.3.0; extra == "all"
|
|
123
|
+
Requires-Dist: livekit-plugins-turn-detector>=1.3.0; extra == "all"
|
|
124
|
+
Requires-Dist: livekit-plugins-noise-cancellation>=0.2.0; extra == "all"
|
|
125
|
+
Requires-Dist: sounddevice>=0.5.0; extra == "all"
|
|
126
|
+
Requires-Dist: SQLAlchemy>=2.0.0; extra == "all"
|
|
127
|
+
Requires-Dist: asyncpg>=0.29.0; extra == "all"
|
|
128
|
+
Requires-Dist: psycopg2-binary>=2.9.0; extra == "all"
|
|
129
|
+
Requires-Dist: alembic>=1.13.0; extra == "all"
|
|
130
|
+
Requires-Dist: redis>=5.0.0; extra == "all"
|
|
131
|
+
Requires-Dist: cryptography>=41.0.0; extra == "all"
|
|
132
|
+
Requires-Dist: PyJWT>=2.8.0; extra == "all"
|
|
133
|
+
Requires-Dist: bcrypt>=4.0.0; extra == "all"
|
|
134
|
+
Requires-Dist: fastapi>=0.109.0; extra == "all"
|
|
135
|
+
Requires-Dist: uvicorn[standard]>=0.27.0; extra == "all"
|
|
136
|
+
Requires-Dist: python-multipart>=0.0.6; extra == "all"
|
|
137
|
+
Requires-Dist: email-validator>=2.1.0; extra == "all"
|
|
138
|
+
Requires-Dist: ddgs>=9.0.0; extra == "all"
|
|
139
|
+
Requires-Dist: opencv-python>=4.8.0; extra == "all"
|
|
140
|
+
Requires-Dist: scikit-image>=0.21.0; extra == "all"
|
|
141
|
+
Requires-Dist: pdf2image>=1.16.3; extra == "all"
|
|
142
|
+
Requires-Dist: python-docx>=1.1.0; extra == "all"
|
|
143
|
+
Requires-Dist: einops>=0.6.1; extra == "all"
|
|
144
|
+
Requires-Dist: qwen-vl-utils>=0.0.4; extra == "all"
|
|
145
|
+
Requires-Dist: pgvector>=0.2.5; extra == "all"
|
|
146
|
+
Requires-Dist: qdrant-client>=1.7.0; extra == "all"
|
|
147
|
+
Requires-Dist: ollama>=0.1.0; extra == "all"
|
|
148
|
+
Provides-Extra: dev
|
|
149
|
+
Requires-Dist: pytest>=7.4.0; extra == "dev"
|
|
150
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
151
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
152
|
+
Requires-Dist: httpx>=0.25.0; extra == "dev"
|
|
153
|
+
Requires-Dist: mypy>=1.7.0; extra == "dev"
|
|
154
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
155
|
+
Dynamic: license-file
|
|
156
|
+
|
|
157
|
+
# Narrative AI SDK 🚀
|
|
158
|
+
|
|
159
|
+
A powerful, production-ready AI framework designed for developers to build multi-engine AI applications with ease. Supporting LLM, OCR, STT, TTS, RAG, and more.
|
|
160
|
+
|
|
161
|
+
## 🌟 Features
|
|
162
|
+
|
|
163
|
+
- **Unified API**: Control multiple AI engines (OpenAI, Gemini, Anthropic, ElevenLabs, etc.) through a single interface.
|
|
164
|
+
- **Arabic-Aware**: Specialized support for Arabic text processing and speech.
|
|
165
|
+
- **Multimodal**: Seamlessly integrate Voice, Text, Images, and Web data.
|
|
166
|
+
- **Production-Ready**: Includes rate limiting, audit logging, and robust error handling.
|
|
167
|
+
|
|
168
|
+
## 📦 Installation
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
pip install narrative-ai-framework
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
To install specific engine requirements (e.g., STT and TTS):
|
|
175
|
+
```bash
|
|
176
|
+
pip install "narrative-ai-framework[stt,tts]"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## 🚀 Quick Start
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
import narrative_ai as nai
|
|
183
|
+
import asyncio
|
|
184
|
+
|
|
185
|
+
async def main():
|
|
186
|
+
# 1. Setup your API keys
|
|
187
|
+
nai.llm.set_api_key("your-openai-key", provider="openai")
|
|
188
|
+
|
|
189
|
+
# 2. Simple Generation
|
|
190
|
+
response = await nai.llm.generate("Tell me a story about a helpful robot.")
|
|
191
|
+
print(response.text)
|
|
192
|
+
|
|
193
|
+
if __name__ == "__main__":
|
|
194
|
+
asyncio.run(main())
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## ⛓️ Supported Integration Workflows
|
|
198
|
+
|
|
199
|
+
The SDK allows you to easily chain multiple engines together:
|
|
200
|
+
|
|
201
|
+
| Workflow Name | Engines Involved | Description |
|
|
202
|
+
| :--- | :--- | :--- |
|
|
203
|
+
| **Voice Chat** | STT ➡️ LLM ➡️ TTS | Full voice-to-voice interaction. |
|
|
204
|
+
| **Doc Analysis** | Input ➡️ OCR ➡️ LLM | Summarize and analyze PDF/Images. |
|
|
205
|
+
| **Smart Memory** | Input ➡️ RAG ➡️ LLM | Knowledge base and Q&A. |
|
|
206
|
+
| **AI Research** | Web ➡️ LLM | Search the web and synthesize reports. |
|
|
207
|
+
| **Visual Chat** | VLM ➡️ LLM | Chat about image contents. |
|
|
208
|
+
|
|
209
|
+
## 🛡️ License
|
|
210
|
+
|
|
211
|
+
This project is licensed under the MIT License.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Narrative AI SDK 🚀
|
|
2
|
+
|
|
3
|
+
A powerful, production-ready AI framework designed for developers to build multi-engine AI applications with ease. Supporting LLM, OCR, STT, TTS, RAG, and more.
|
|
4
|
+
|
|
5
|
+
## 🌟 Features
|
|
6
|
+
|
|
7
|
+
- **Unified API**: Control multiple AI engines (OpenAI, Gemini, Anthropic, ElevenLabs, etc.) through a single interface.
|
|
8
|
+
- **Arabic-Aware**: Specialized support for Arabic text processing and speech.
|
|
9
|
+
- **Multimodal**: Seamlessly integrate Voice, Text, Images, and Web data.
|
|
10
|
+
- **Production-Ready**: Includes rate limiting, audit logging, and robust error handling.
|
|
11
|
+
|
|
12
|
+
## 📦 Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pip install narrative-ai-framework
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
To install specific engine requirements (e.g., STT and TTS):
|
|
19
|
+
```bash
|
|
20
|
+
pip install "narrative-ai-framework[stt,tts]"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 🚀 Quick Start
|
|
24
|
+
|
|
25
|
+
```python
|
|
26
|
+
import narrative_ai as nai
|
|
27
|
+
import asyncio
|
|
28
|
+
|
|
29
|
+
async def main():
|
|
30
|
+
# 1. Setup your API keys
|
|
31
|
+
nai.llm.set_api_key("your-openai-key", provider="openai")
|
|
32
|
+
|
|
33
|
+
# 2. Simple Generation
|
|
34
|
+
response = await nai.llm.generate("Tell me a story about a helpful robot.")
|
|
35
|
+
print(response.text)
|
|
36
|
+
|
|
37
|
+
if __name__ == "__main__":
|
|
38
|
+
asyncio.run(main())
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## ⛓️ Supported Integration Workflows
|
|
42
|
+
|
|
43
|
+
The SDK allows you to easily chain multiple engines together:
|
|
44
|
+
|
|
45
|
+
| Workflow Name | Engines Involved | Description |
|
|
46
|
+
| :--- | :--- | :--- |
|
|
47
|
+
| **Voice Chat** | STT ➡️ LLM ➡️ TTS | Full voice-to-voice interaction. |
|
|
48
|
+
| **Doc Analysis** | Input ➡️ OCR ➡️ LLM | Summarize and analyze PDF/Images. |
|
|
49
|
+
| **Smart Memory** | Input ➡️ RAG ➡️ LLM | Knowledge base and Q&A. |
|
|
50
|
+
| **AI Research** | Web ➡️ LLM | Search the web and synthesize reports. |
|
|
51
|
+
| **Visual Chat** | VLM ➡️ LLM | Chat about image contents. |
|
|
52
|
+
|
|
53
|
+
## 🛡️ License
|
|
54
|
+
|
|
55
|
+
This project is licensed under the MIT License.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Configuration module for Narrative AI Framework.
|
|
3
|
+
|
|
4
|
+
This module provides centralized configuration management for all
|
|
5
|
+
providers and services.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .providers import (
|
|
9
|
+
ProvidersConfig,
|
|
10
|
+
ProviderInfo,
|
|
11
|
+
ProviderType,
|
|
12
|
+
get_providers_config,
|
|
13
|
+
get_llm_provider,
|
|
14
|
+
get_stt_provider,
|
|
15
|
+
get_tts_provider,
|
|
16
|
+
get_web_provider,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
__all__ = [
|
|
20
|
+
# Classes
|
|
21
|
+
"ProvidersConfig",
|
|
22
|
+
"ProviderInfo",
|
|
23
|
+
"ProviderType",
|
|
24
|
+
|
|
25
|
+
# Functions
|
|
26
|
+
"get_providers_config",
|
|
27
|
+
"get_llm_provider",
|
|
28
|
+
"get_stt_provider",
|
|
29
|
+
"get_tts_provider",
|
|
30
|
+
"get_web_provider",
|
|
31
|
+
]
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# NARRATIVE AI - ENVIRONMENT VARIABLES
|
|
3
|
+
# =============================================================================
|
|
4
|
+
#
|
|
5
|
+
# Instructions:
|
|
6
|
+
# 1. Copy this file to .env in the project root (the directory that contains
|
|
7
|
+
# framework/ and config/). The API loads .env from the project root.
|
|
8
|
+
# 2. Fill in your API keys
|
|
9
|
+
# 3. The providers.yml file references these variables
|
|
10
|
+
#
|
|
11
|
+
# =============================================================================
|
|
12
|
+
|
|
13
|
+
# =============================================================================
|
|
14
|
+
# LLM PROVIDERS
|
|
15
|
+
# =============================================================================
|
|
16
|
+
|
|
17
|
+
# ------------- GEMINI (Google) - FREE -------------
|
|
18
|
+
# Get your key: https://aistudio.google.com/apikey
|
|
19
|
+
GEMINI_API_KEY=your_gemini_api_key_here
|
|
20
|
+
|
|
21
|
+
# ------------- OPENAI (GPT) - Paid -------------
|
|
22
|
+
# Get your key: https://platform.openai.com/api-keys
|
|
23
|
+
OPENAI_API_KEY=your_openai_api_key_here
|
|
24
|
+
OPENAI_ORG_ID= # Optional
|
|
25
|
+
|
|
26
|
+
# ------------- WEB INTELLIGENCE (Optional) -------------
|
|
27
|
+
# Default provider is DuckDuckGo (no key required)
|
|
28
|
+
WEB_INTEL_ENABLED=1
|
|
29
|
+
WEB_INTEL_MODE=auto # off | auto | force
|
|
30
|
+
# For Google Custom Search (optional)
|
|
31
|
+
# GOOGLE_SEARCH_API_KEY=your_google_search_api_key
|
|
32
|
+
# GOOGLE_SEARCH_CX=your_google_search_engine_id
|
|
33
|
+
|
|
34
|
+
# ------------- ANTHROPIC (Claude) - Paid -------------
|
|
35
|
+
# Get your key: https://console.anthropic.com/
|
|
36
|
+
ANTHROPIC_API_KEY=your_anthropic_api_key_here
|
|
37
|
+
|
|
38
|
+
# =============================================================================
|
|
39
|
+
# STT/TTS PROVIDERS
|
|
40
|
+
# =============================================================================
|
|
41
|
+
|
|
42
|
+
# ------------- ELEVENLABS - FREE tier: 10K chars/month -------------
|
|
43
|
+
# Get your key: https://elevenlabs.io/app/settings/api-keys
|
|
44
|
+
ELEVENLABS_API_KEY=your_elevenlabs_api_key_here
|
|
45
|
+
ELEVENLABS_VOICE_ID= # Optional: Custom voice ID
|
|
46
|
+
|
|
47
|
+
# ------------- GOOGLE CLOUD (Optional) -------------
|
|
48
|
+
# Download credentials JSON from Google Cloud Console
|
|
49
|
+
GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
|
|
50
|
+
|
|
51
|
+
# =============================================================================
|
|
52
|
+
# REAL-TIME (LIVEKIT)
|
|
53
|
+
# =============================================================================
|
|
54
|
+
|
|
55
|
+
# ------------- LIVEKIT - FREE tier available -------------
|
|
56
|
+
# Get credentials: https://cloud.livekit.io
|
|
57
|
+
LIVEKIT_URL=wss://your-project.livekit.cloud
|
|
58
|
+
LIVEKIT_API_KEY=your_livekit_api_key
|
|
59
|
+
LIVEKIT_API_SECRET=your_livekit_api_secret
|
|
60
|
+
|
|
61
|
+
# =============================================================================
|
|
62
|
+
# CUSTOM/LOCAL MODELS
|
|
63
|
+
# =============================================================================
|
|
64
|
+
|
|
65
|
+
# Fine-tuned Whisper server
|
|
66
|
+
WHISPER_MODEL_PATH= # Local path or HuggingFace ID
|
|
67
|
+
WHISPER_SERVER_URL=http://localhost:8000 # If using server mode
|
|
68
|
+
|
|
69
|
+
# Fine-tuned Conformer model
|
|
70
|
+
CONFORMER_MODEL_PATH= # Local path or HuggingFace ID
|
|
71
|
+
|
|
72
|
+
# Custom TTS server
|
|
73
|
+
CUSTOM_TTS_SERVER_URL=http://localhost:8001
|
|
74
|
+
|
|
75
|
+
# =============================================================================
|
|
76
|
+
# INFRASTRUCTURE
|
|
77
|
+
# =============================================================================
|
|
78
|
+
|
|
79
|
+
# Database (PostgreSQL)
|
|
80
|
+
DATABASE_URL=postgresql://narrative:narrative_dev_password@localhost:5432/narrative_ai
|
|
81
|
+
|
|
82
|
+
# Redis (Caching & Rate Limiting)
|
|
83
|
+
REDIS_URL=redis://localhost:6379/0
|
|
84
|
+
|
|
85
|
+
# Environment
|
|
86
|
+
ENV=development # development, staging, production
|
|
87
|
+
|
|
88
|
+
# =============================================================================
|
|
89
|
+
# SECURITY
|
|
90
|
+
# =============================================================================
|
|
91
|
+
|
|
92
|
+
# JWT Secret (generate with: openssl rand -hex 32)
|
|
93
|
+
JWT_SECRET=your_jwt_secret_here
|
|
94
|
+
|
|
95
|
+
# Encryption Key (generate with: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())")
|
|
96
|
+
ENCRYPTION_KEY=your_encryption_key_here
|