realtimex-deeptutor 0.5.0.post4__tar.gz → 0.5.0.post7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/PKG-INFO +1 -1
  2. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/pyproject.toml +1 -1
  3. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/realtimex_deeptutor.egg-info/PKG-INFO +1 -1
  4. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/scripts/start_web.py +78 -2
  5. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/co_writer/narrator_agent.py +44 -20
  6. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/realtimex.py +18 -2
  7. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/config/unified_config.py +50 -9
  8. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/tts/config.py +1 -0
  9. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/utils/realtimex.py +39 -6
  10. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/LICENSE +0 -0
  11. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/README.md +0 -0
  12. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/realtimex_deeptutor/__init__.py +0 -0
  13. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/realtimex_deeptutor.egg-info/SOURCES.txt +0 -0
  14. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/realtimex_deeptutor.egg-info/dependency_links.txt +0 -0
  15. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/realtimex_deeptutor.egg-info/entry_points.txt +0 -0
  16. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/realtimex_deeptutor.egg-info/requires.txt +0 -0
  17. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/realtimex_deeptutor.egg-info/top_level.txt +0 -0
  18. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/scripts/__init__.py +0 -0
  19. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/scripts/audit_prompts.py +0 -0
  20. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/scripts/check_install.py +0 -0
  21. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/scripts/generate_roster.py +0 -0
  22. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/scripts/install_all.py +0 -0
  23. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/scripts/migrate_kb.py +0 -0
  24. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/scripts/start.py +0 -0
  25. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/scripts/sync_prompts_from_en.py +0 -0
  26. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/setup.cfg +0 -0
  27. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/__init__.py +0 -0
  28. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/__init__.py +0 -0
  29. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/base_agent.py +0 -0
  30. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/chat/__init__.py +0 -0
  31. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/chat/chat_agent.py +0 -0
  32. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/chat/prompts/en/chat_agent.yaml +0 -0
  33. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/chat/prompts/zh/chat_agent.yaml +0 -0
  34. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/chat/session_manager.py +0 -0
  35. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/co_writer/__init__.py +0 -0
  36. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/co_writer/edit_agent.py +0 -0
  37. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/co_writer/prompts/en/edit_agent.yaml +0 -0
  38. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/co_writer/prompts/en/narrator_agent.yaml +0 -0
  39. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/co_writer/prompts/zh/edit_agent.yaml +0 -0
  40. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/co_writer/prompts/zh/narrator_agent.yaml +0 -0
  41. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/__init__.py +0 -0
  42. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/agents/__init__.py +0 -0
  43. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/agents/chat_agent.py +0 -0
  44. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/agents/interactive_agent.py +0 -0
  45. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/agents/locate_agent.py +0 -0
  46. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/agents/summary_agent.py +0 -0
  47. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/guide_manager.py +0 -0
  48. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/prompts/en/chat_agent.yaml +0 -0
  49. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/prompts/en/interactive_agent.yaml +0 -0
  50. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/prompts/en/locate_agent.yaml +0 -0
  51. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/prompts/en/summary_agent.yaml +0 -0
  52. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/prompts/zh/chat_agent.yaml +0 -0
  53. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/prompts/zh/interactive_agent.yaml +0 -0
  54. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/prompts/zh/locate_agent.yaml +0 -0
  55. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/guide/prompts/zh/summary_agent.yaml +0 -0
  56. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/ideagen/__init__.py +0 -0
  57. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/ideagen/idea_generation_workflow.py +0 -0
  58. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/ideagen/material_organizer_agent.py +0 -0
  59. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/ideagen/prompts/en/idea_generation.yaml +0 -0
  60. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/ideagen/prompts/en/material_organizer.yaml +0 -0
  61. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/ideagen/prompts/zh/idea_generation.yaml +0 -0
  62. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/ideagen/prompts/zh/material_organizer.yaml +0 -0
  63. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/__init__.py +0 -0
  64. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/agents/__init__.py +0 -0
  65. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/agents/generate_agent.py +0 -0
  66. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/agents/relevance_analyzer.py +0 -0
  67. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/agents/retrieve_agent.py +0 -0
  68. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/coordinator.py +0 -0
  69. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/example.py +0 -0
  70. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/prompts/en/coordinator.yaml +0 -0
  71. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/prompts/en/generate_agent.yaml +0 -0
  72. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/prompts/en/relevance_analyzer.yaml +0 -0
  73. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/prompts/en/retrieve_agent.yaml +0 -0
  74. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/prompts/zh/coordinator.yaml +0 -0
  75. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/prompts/zh/generate_agent.yaml +0 -0
  76. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/prompts/zh/relevance_analyzer.yaml +0 -0
  77. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/question/prompts/zh/retrieve_agent.yaml +0 -0
  78. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/agents/__init__.py +0 -0
  79. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/agents/decompose_agent.py +0 -0
  80. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/agents/manager_agent.py +0 -0
  81. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/agents/note_agent.py +0 -0
  82. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/agents/rephrase_agent.py +0 -0
  83. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/agents/reporting_agent.py +0 -0
  84. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/agents/research_agent.py +0 -0
  85. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/data_structures.py +0 -0
  86. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/main.py +0 -0
  87. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/en/decompose_agent.yaml +0 -0
  88. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/en/manager_agent.yaml +0 -0
  89. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/en/note_agent.yaml +0 -0
  90. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/en/rephrase_agent.yaml +0 -0
  91. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/en/reporting_agent.yaml +0 -0
  92. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/en/research_agent.yaml +0 -0
  93. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/zh/decompose_agent.yaml +0 -0
  94. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/zh/manager_agent.yaml +0 -0
  95. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/zh/note_agent.yaml +0 -0
  96. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/zh/rephrase_agent.yaml +0 -0
  97. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/zh/reporting_agent.yaml +0 -0
  98. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/prompts/zh/research_agent.yaml +0 -0
  99. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/research_pipeline.py +0 -0
  100. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/utils/__init__.py +0 -0
  101. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/utils/citation_manager.py +0 -0
  102. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/utils/json_utils.py +0 -0
  103. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/research/utils/token_tracker.py +0 -0
  104. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/__init__.py +0 -0
  105. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/analysis_loop/__init__.py +0 -0
  106. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/analysis_loop/investigate_agent.py +0 -0
  107. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/analysis_loop/note_agent.py +0 -0
  108. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/main_solver.py +0 -0
  109. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/memory/__init__.py +0 -0
  110. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/memory/citation_memory.py +0 -0
  111. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/memory/investigate_memory.py +0 -0
  112. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/memory/solve_memory.py +0 -0
  113. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/en/analysis_loop/investigate_agent.yaml +0 -0
  114. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/en/analysis_loop/note_agent.yaml +0 -0
  115. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/en/solve_loop/manager_agent.yaml +0 -0
  116. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/en/solve_loop/precision_answer_agent.yaml +0 -0
  117. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/en/solve_loop/response_agent.yaml +0 -0
  118. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/en/solve_loop/solve_agent.yaml +0 -0
  119. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/en/solve_loop/tool_agent.yaml +0 -0
  120. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/zh/analysis_loop/investigate_agent.yaml +0 -0
  121. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/zh/analysis_loop/note_agent.yaml +0 -0
  122. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/zh/solve_loop/manager_agent.yaml +0 -0
  123. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/zh/solve_loop/precision_answer_agent.yaml +0 -0
  124. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/zh/solve_loop/response_agent.yaml +0 -0
  125. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/zh/solve_loop/solve_agent.yaml +0 -0
  126. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/prompts/zh/solve_loop/tool_agent.yaml +0 -0
  127. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/session_manager.py +0 -0
  128. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/solve_loop/__init__.py +0 -0
  129. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/solve_loop/citation_manager.py +0 -0
  130. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/solve_loop/manager_agent.py +0 -0
  131. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/solve_loop/precision_answer_agent.py +0 -0
  132. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/solve_loop/response_agent.py +0 -0
  133. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/solve_loop/solve_agent.py +0 -0
  134. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/solve_loop/tool_agent.py +0 -0
  135. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/utils/__init__.py +0 -0
  136. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/utils/config_validator.py +0 -0
  137. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/utils/display_manager.py +0 -0
  138. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/utils/error_handler.py +0 -0
  139. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/utils/json_utils.py +0 -0
  140. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/utils/performance_monitor.py +0 -0
  141. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/agents/solve/utils/token_tracker.py +0 -0
  142. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/__init__.py +0 -0
  143. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/main.py +0 -0
  144. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/__init__.py +0 -0
  145. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/agent_config.py +0 -0
  146. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/chat.py +0 -0
  147. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/co_writer.py +0 -0
  148. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/config.py +0 -0
  149. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/dashboard.py +0 -0
  150. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/guide.py +0 -0
  151. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/ideagen.py +0 -0
  152. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/knowledge.py +0 -0
  153. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/notebook.py +0 -0
  154. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/question.py +0 -0
  155. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/research.py +0 -0
  156. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/settings.py +0 -0
  157. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/solve.py +0 -0
  158. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/routers/system.py +0 -0
  159. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/run_server.py +0 -0
  160. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/utils/history.py +0 -0
  161. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/utils/log_interceptor.py +0 -0
  162. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/utils/notebook_manager.py +0 -0
  163. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/utils/progress_broadcaster.py +0 -0
  164. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/api/utils/task_id_manager.py +0 -0
  165. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/cli/__init__.py +0 -0
  166. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/cli/start.py +0 -0
  167. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/config/__init__.py +0 -0
  168. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/config/accessors.py +0 -0
  169. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/config/constants.py +0 -0
  170. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/config/defaults.py +0 -0
  171. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/config/schema.py +0 -0
  172. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/config/settings.py +0 -0
  173. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/core/errors.py +0 -0
  174. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/__init__.py +0 -0
  175. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/add_documents.py +0 -0
  176. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/config.py +0 -0
  177. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/example_add_documents.py +0 -0
  178. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/extract_numbered_items.py +0 -0
  179. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/initializer.py +0 -0
  180. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/kb.py +0 -0
  181. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/manager.py +0 -0
  182. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/progress_tracker.py +0 -0
  183. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/knowledge/start_kb.py +0 -0
  184. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/__init__.py +0 -0
  185. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/adapters/__init__.py +0 -0
  186. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/adapters/lightrag.py +0 -0
  187. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/adapters/llamaindex.py +0 -0
  188. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/config.py +0 -0
  189. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/handlers/__init__.py +0 -0
  190. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/handlers/console.py +0 -0
  191. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/handlers/file.py +0 -0
  192. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/handlers/websocket.py +0 -0
  193. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/logger.py +0 -0
  194. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/stats/__init__.py +0 -0
  195. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/logging/stats/llm_stats.py +0 -0
  196. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/__init__.py +0 -0
  197. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/config/__init__.py +0 -0
  198. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/config/knowledge_base_config.py +0 -0
  199. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/config/loader.py +0 -0
  200. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/__init__.py +0 -0
  201. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/adapters/__init__.py +0 -0
  202. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/adapters/base.py +0 -0
  203. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/adapters/cohere.py +0 -0
  204. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/adapters/jina.py +0 -0
  205. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/adapters/ollama.py +0 -0
  206. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/adapters/openai_compatible.py +0 -0
  207. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/adapters/realtimex.py +0 -0
  208. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/client.py +0 -0
  209. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/config.py +0 -0
  210. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/embedding/provider.py +0 -0
  211. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/__init__.py +0 -0
  212. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/capabilities.py +0 -0
  213. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/client.py +0 -0
  214. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/cloud_provider.py +0 -0
  215. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/config.py +0 -0
  216. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/error_mapping.py +0 -0
  217. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/exceptions.py +0 -0
  218. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/factory.py +0 -0
  219. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/local_provider.py +0 -0
  220. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/providers/anthropic.py +0 -0
  221. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/providers/base_provider.py +0 -0
  222. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/providers/open_ai.py +0 -0
  223. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/realtimex_provider.py +0 -0
  224. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/registry.py +0 -0
  225. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/telemetry.py +0 -0
  226. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/types.py +0 -0
  227. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/llm/utils.py +0 -0
  228. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/prompt/__init__.py +0 -0
  229. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/prompt/manager.py +0 -0
  230. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/__init__.py +0 -0
  231. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/__init__.py +0 -0
  232. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/base.py +0 -0
  233. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/chunkers/__init__.py +0 -0
  234. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/chunkers/base.py +0 -0
  235. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/chunkers/fixed.py +0 -0
  236. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/chunkers/numbered_item.py +0 -0
  237. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/chunkers/semantic.py +0 -0
  238. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/embedders/__init__.py +0 -0
  239. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/embedders/base.py +0 -0
  240. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/embedders/openai.py +0 -0
  241. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/indexers/__init__.py +0 -0
  242. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/indexers/base.py +0 -0
  243. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/indexers/graph.py +0 -0
  244. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/indexers/lightrag.py +0 -0
  245. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/indexers/vector.py +0 -0
  246. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/parsers/__init__.py +0 -0
  247. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/parsers/base.py +0 -0
  248. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/parsers/markdown.py +0 -0
  249. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/parsers/pdf.py +0 -0
  250. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/parsers/text.py +0 -0
  251. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/retrievers/__init__.py +0 -0
  252. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/retrievers/base.py +0 -0
  253. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/retrievers/dense.py +0 -0
  254. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/retrievers/hybrid.py +0 -0
  255. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/retrievers/lightrag.py +0 -0
  256. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/components/routing.py +0 -0
  257. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/factory.py +0 -0
  258. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/pipeline.py +0 -0
  259. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/pipelines/__init__.py +0 -0
  260. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/pipelines/lightrag.py +0 -0
  261. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/pipelines/llamaindex.py +0 -0
  262. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/pipelines/raganything.py +0 -0
  263. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/pipelines/raganything_docling.py +0 -0
  264. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/service.py +0 -0
  265. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/types.py +0 -0
  266. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/utils/__init__.py +0 -0
  267. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/rag/utils/image_migration.py +0 -0
  268. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/__init__.py +0 -0
  269. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/base.py +0 -0
  270. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/consolidation.py +0 -0
  271. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/providers/__init__.py +0 -0
  272. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/providers/baidu.py +0 -0
  273. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/providers/exa.py +0 -0
  274. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/providers/jina.py +0 -0
  275. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/providers/perplexity.py +0 -0
  276. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/providers/serper.py +0 -0
  277. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/providers/tavily.py +0 -0
  278. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/search/types.py +0 -0
  279. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/settings/__init__.py +0 -0
  280. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/settings/interface_settings.py +0 -0
  281. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/setup/__init__.py +0 -0
  282. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/setup/init.py +0 -0
  283. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/services/tts/__init__.py +0 -0
  284. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/__init__.py +0 -0
  285. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/code_executor.py +0 -0
  286. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/paper_search_tool.py +0 -0
  287. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/query_item_tool.py +0 -0
  288. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/question/__init__.py +0 -0
  289. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/question/exam_mimic.py +0 -0
  290. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/question/pdf_parser.py +0 -0
  291. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/question/question_extractor.py +0 -0
  292. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/rag_tool.py +0 -0
  293. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/tex_chunker.py +0 -0
  294. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/tex_downloader.py +0 -0
  295. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/tools/web_search.py +0 -0
  296. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/utils/config_manager.py +0 -0
  297. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/utils/document_validator.py +0 -0
  298. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/utils/error_rate_tracker.py +0 -0
  299. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/utils/error_utils.py +0 -0
  300. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/utils/json_parser.py +0 -0
  301. {realtimex_deeptutor-0.5.0.post4 → realtimex_deeptutor-0.5.0.post7}/src/utils/network/circuit_breaker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: realtimex-deeptutor
3
- Version: 0.5.0.post4
3
+ Version: 0.5.0.post7
4
4
  Summary: RealTimeX DeepTutor - Intelligent learning companion with multi-agent collaboration and LightRAG
5
5
  License: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "realtimex-deeptutor"
10
- version = "0.5.0.post4"
10
+ version = "0.5.0.post7"
11
11
  description = "RealTimeX DeepTutor - Intelligent learning companion with multi-agent collaboration and LightRAG"
12
12
  requires-python = ">=3.10"
13
13
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: realtimex-deeptutor
3
- Version: 0.5.0.post4
3
+ Version: 0.5.0.post7
4
4
  Summary: RealTimeX DeepTutor - Intelligent learning companion with multi-agent collaboration and LightRAG
5
5
  License: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -20,6 +20,80 @@ if hasattr(sys.stdout, "reconfigure"):
20
20
  sys.stdout.reconfigure(line_buffering=True)
21
21
 
22
22
 
23
+ class ExecutableResolver:
24
+ """
25
+ Resolves bundled executables (uvx, uv, npx) to their actual paths.
26
+ Ported from ExecutableResolver.js
27
+ """
28
+
29
+ def __init__(self):
30
+ self._resources_root = None
31
+
32
+ def get_resources_root(self) -> Path | None:
33
+ """
34
+ Get the resources root directory (~/.realtimex.ai)
35
+ Returns path to resources root or None if not found
36
+ """
37
+ if self._resources_root:
38
+ return self._resources_root
39
+
40
+ try:
41
+ home = Path.home()
42
+ self._resources_root = home / ".realtimex.ai"
43
+ return self._resources_root
44
+ except Exception as e:
45
+ print_flush(f"⚠️ [ExecutableResolver] Failed to resolve resources directory: {e}")
46
+ return None
47
+
48
+ def resolve_from_candidates(
49
+ self, env_var: str | None, candidates: list[Path | str]
50
+ ) -> str | None:
51
+ """
52
+ Find a valid executable from a list of candidate paths
53
+ """
54
+ search_paths = []
55
+ if env_var:
56
+ search_paths.append(Path(env_var))
57
+
58
+ search_paths.extend([Path(c) for c in candidates])
59
+
60
+ for candidate in search_paths:
61
+ if not candidate:
62
+ continue
63
+ try:
64
+ if candidate.exists() and candidate.is_file():
65
+ return str(candidate)
66
+ except Exception:
67
+ pass
68
+ return None
69
+
70
+ def resolve_npx(self) -> str | None:
71
+ """
72
+ Resolve npx to bundled executable
73
+ """
74
+ resources_dir = self.get_resources_root()
75
+ if not resources_dir:
76
+ return None
77
+
78
+ node_version = os.environ.get("REALTIMEX_NPX_NODE_VERSION", "v22.16.0")
79
+ home = Path.home()
80
+
81
+ candidates = [
82
+ # User's NVM installation (most common case)
83
+ home / ".nvm" / "versions" / "node" / node_version / "bin" / "npx",
84
+ # NVM-installed node in resources dir (bundled)
85
+ resources_dir / ".nvm" / "versions" / "node" / node_version / "bin" / "npx",
86
+ # Windows NVM
87
+ Path("C:/nvm") / node_version / "npx.cmd",
88
+ # Bundled in Resources
89
+ resources_dir / "Resources" / "envs" / "Scripts" / "npx.cmd",
90
+ ]
91
+
92
+ return self.resolve_from_candidates(
93
+ env_var=os.environ.get("REALTIMEX_NPX_PATH"), candidates=candidates
94
+ )
95
+
96
+
23
97
  def print_flush(*args, **kwargs):
24
98
  """Print with flush=True by default"""
25
99
  kwargs.setdefault("flush", True)
@@ -625,7 +699,9 @@ def _start_frontend_npx(frontend_port, backend_port):
625
699
  """Start frontend using published package via npx (production mode)"""
626
700
 
627
701
  # Check if npx is available
628
- npx_path = shutil.which("npx")
702
+ resolver = ExecutableResolver()
703
+ npx_path = resolver.resolve_npx() or shutil.which("npx")
704
+
629
705
  if not npx_path:
630
706
  print_flush("❌ Error: 'npx' command not found!")
631
707
  print_flush(" Please install Node.js and npm first.")
@@ -653,7 +729,7 @@ def _start_frontend_npx(frontend_port, backend_port):
653
729
  if os.name == "nt":
654
730
  env["PYTHONLEGACYWINDOWSSTDIO"] = "0"
655
731
 
656
- npx_cmd = shutil.which("npx") or "npx"
732
+ npx_cmd = npx_path or "npx"
657
733
 
658
734
  # Process group configuration
659
735
  popen_kwargs = {
@@ -315,30 +315,54 @@ class NarratorAgent(BaseAgent):
315
315
  self.logger.info(f"Starting TTS audio generation - ID: {audio_id}, Voice: {voice}")
316
316
 
317
317
  try:
318
- binding = os.getenv("TTS_BINDING", "openai")
319
- api_version = self.tts_config.get("api_version")
320
-
321
- # Only use Azure client if binding is explicitly Azure,
322
- # OR if binding is generic 'openai' but an Azure-specific api_version is present.
323
- if binding == "azure_openai" or (binding == "openai" and api_version):
324
- client = AsyncAzureOpenAI(
325
- api_key=self.tts_config["api_key"],
326
- azure_endpoint=self.tts_config["base_url"],
327
- api_version=api_version,
318
+ # Check if using RealTimeX SDK
319
+ if self.tts_config.get("source") == "realtimex":
320
+ from src.utils.realtimex import get_realtimex_sdk
321
+
322
+ sdk = get_realtimex_sdk()
323
+
324
+ # Use SDK to generate audio
325
+ audio_bytes = await sdk.tts.speak(
326
+ text=script,
327
+ voice=voice,
328
+ model=self.tts_config.get("model"),
329
+ provider=self.tts_config.get("provider")
330
+ if self.tts_config.get("provider") != "realtimexai"
331
+ else None,
332
+ speed=self.tts_config.get("speed"),
333
+ num_inference_steps=self.tts_config.get("quality"),
328
334
  )
335
+
336
+ # Save bytes to file
337
+ with open(audio_path, "wb") as f:
338
+ f.write(audio_bytes)
339
+
329
340
  else:
330
- # Create OpenAI client with custom base_url
331
- client = AsyncOpenAI(
332
- base_url=self.tts_config["base_url"], api_key=self.tts_config["api_key"]
341
+ # Standard OpenAI/Azure implementation
342
+ binding = os.getenv("TTS_BINDING", "openai")
343
+ api_version = self.tts_config.get("api_version")
344
+
345
+ # Only use Azure client if binding is explicitly Azure,
346
+ # OR if binding is generic 'openai' but an Azure-specific api_version is present.
347
+ if binding == "azure_openai" or (binding == "openai" and api_version):
348
+ client = AsyncAzureOpenAI(
349
+ api_key=self.tts_config["api_key"],
350
+ azure_endpoint=self.tts_config["base_url"],
351
+ api_version=api_version,
352
+ )
353
+ else:
354
+ # Create OpenAI client with custom base_url
355
+ client = AsyncOpenAI(
356
+ base_url=self.tts_config["base_url"], api_key=self.tts_config["api_key"]
357
+ )
358
+
359
+ # Call OpenAI TTS API
360
+ response = await client.audio.speech.create(
361
+ model=self.tts_config["model"], voice=voice, input=script
333
362
  )
334
363
 
335
- # Call OpenAI TTS API
336
- response = await client.audio.speech.create(
337
- model=self.tts_config["model"], voice=voice, input=script
338
- )
339
-
340
- # Save audio to file
341
- await response.stream_to_file(audio_path)
364
+ # Save audio to file
365
+ await response.stream_to_file(audio_path)
342
366
 
343
367
  self.logger.info(f"Audio saved to: {audio_path}")
344
368
 
@@ -83,12 +83,16 @@ async def get_providers():
83
83
 
84
84
 
85
85
  from pydantic import BaseModel
86
+ from typing import Optional
86
87
 
87
88
 
88
89
  class RTXConfigApplyRequest(BaseModel):
89
- config_type: str # "llm" or "embedding"
90
+ config_type: str # "llm", "embedding" or "tts"
90
91
  provider: str
91
92
  model: str
93
+ voice: Optional[str] = None
94
+ speed: Optional[float] = None
95
+ quality: Optional[int] = None
92
96
 
93
97
 
94
98
  @router.post("/realtimex/config/apply")
@@ -113,11 +117,20 @@ async def apply_rtx_config(request: RTXConfigApplyRequest):
113
117
  config_type_enum = ConfigType.LLM
114
118
  elif request.config_type == "embedding":
115
119
  config_type_enum = ConfigType.EMBEDDING
120
+ elif request.config_type == "tts":
121
+ config_type_enum = ConfigType.TTS
116
122
  else:
117
123
  raise HTTPException(400, f"Invalid config type: {request.config_type}")
118
124
 
119
125
  # Save RTX selection to rtx_active.json
120
- if not set_rtx_active_config(request.config_type, request.provider, request.model):
126
+ if not set_rtx_active_config(
127
+ request.config_type,
128
+ request.provider,
129
+ request.model,
130
+ request.voice,
131
+ request.speed,
132
+ request.quality,
133
+ ):
121
134
  raise HTTPException(500, "Failed to save RTX configuration")
122
135
 
123
136
  # Set 'rtx' as the active config in unified config manager
@@ -129,6 +142,9 @@ async def apply_rtx_config(request: RTXConfigApplyRequest):
129
142
  "config_type": request.config_type,
130
143
  "provider": request.provider,
131
144
  "model": request.model,
145
+ "voice": request.voice,
146
+ "speed": request.speed,
147
+ "quality": request.quality,
132
148
  }
133
149
 
134
150
  except HTTPException:
@@ -190,6 +190,22 @@ class UnifiedConfigManager:
190
190
  self.set_active_config(ConfigType.EMBEDDING, "rtx")
191
191
  logger.info("Auto-activated RealTimeX for Embedding")
192
192
 
193
+ # Auto-activate for TTS
194
+ tts_data = self._load_configs(ConfigType.TTS)
195
+ tts_active_id = tts_data.get("active_id", "default")
196
+
197
+ # Only auto-activate if still using default
198
+ if tts_active_id == "default":
199
+ rtx_tts_config = get_rtx_active_config("tts")
200
+ if not rtx_tts_config:
201
+ # Set default RTX TTS config
202
+ set_rtx_active_config("tts", "realtimexai", "tts-1")
203
+ logger.info("Auto-configured RealTimeX TTS with default model: tts-1")
204
+
205
+ # Activate RTX for TTS
206
+ self.set_active_config(ConfigType.TTS, "rtx")
207
+ logger.info("Auto-activated RealTimeX for TTS")
208
+
193
209
  except ImportError:
194
210
  # RTX utilities not available
195
211
  pass
@@ -472,8 +488,8 @@ class UnifiedConfigManager:
472
488
  if not should_use_realtimex_sdk():
473
489
  return None
474
490
 
475
- # Only LLM and Embedding are supported via RTX
476
- if config_type not in (ConfigType.LLM, ConfigType.EMBEDDING):
491
+ # Only LLM, Embedding, and TTS are supported via RTX
492
+ if config_type not in (ConfigType.LLM, ConfigType.EMBEDDING, ConfigType.TTS):
477
493
  return None
478
494
 
479
495
  # Get user's active selection (or use defaults)
@@ -482,15 +498,23 @@ class UnifiedConfigManager:
482
498
  if active:
483
499
  provider = active.get("provider", "realtimexai")
484
500
  model = active.get("model", "")
501
+ voice = active.get("voice")
502
+ speed = active.get("speed")
503
+ quality = active.get("quality")
485
504
  else:
486
505
  # Use defaults
487
506
  provider = "realtimexai"
507
+ voice = None
508
+ speed = None
509
+ quality = None
488
510
  if config_type == ConfigType.LLM:
489
511
  model = "gpt-4o-mini"
490
- else: # Embedding
512
+ elif config_type == ConfigType.EMBEDDING:
491
513
  model = "text-embedding-3-small"
514
+ elif config_type == ConfigType.TTS:
515
+ model = "tts-1"
492
516
 
493
- return {
517
+ config = {
494
518
  "id": "rtx",
495
519
  "name": "RealTimeX",
496
520
  "is_default": False,
@@ -500,6 +524,16 @@ class UnifiedConfigManager:
500
524
  "api_key": "—", # No API key needed
501
525
  "base_url": "—", # Uses SDK proxy
502
526
  }
527
+
528
+ # Add TTS-specific fields if present
529
+ if voice:
530
+ config["voice"] = voice
531
+ if speed is not None:
532
+ config["speed"] = speed
533
+ if quality is not None:
534
+ config["quality"] = quality
535
+
536
+ return config
503
537
 
504
538
  except ImportError:
505
539
  return None
@@ -602,15 +636,22 @@ class UnifiedConfigManager:
602
636
  "id": "rtx",
603
637
  "provider": rtx_active.get("provider", "realtimexai"),
604
638
  "model": rtx_active.get("model", ""),
639
+ "voice": rtx_active.get("voice"), # Include voice for TTS
640
+ "speed": rtx_active.get("speed"), # Include speed for TTS
641
+ "quality": rtx_active.get("quality"), # Include quality for TTS
605
642
  "source": "realtimex", # This tells services to use SDK
606
643
  }
607
644
  else:
608
645
  # Return defaults when no selection exists yet
609
- default_model = (
610
- "gpt-4o-mini"
611
- if config_type == ConfigType.LLM
612
- else "text-embedding-3-small"
613
- )
646
+ if config_type == ConfigType.LLM:
647
+ default_model = "gpt-4o-mini"
648
+ elif config_type == ConfigType.EMBEDDING:
649
+ default_model = "text-embedding-3-small"
650
+ elif config_type == ConfigType.TTS:
651
+ default_model = "tts-1"
652
+ else:
653
+ default_model = ""
654
+
614
655
  return {
615
656
  "id": "rtx",
616
657
  "provider": "realtimexai",
@@ -60,6 +60,7 @@ def get_tts_config() -> dict:
60
60
  "base_url": config.get("base_url", ""),
61
61
  "api_version": config.get("api_version"),
62
62
  "voice": config.get("voice", "alloy"),
63
+ "source": config.get("source"), # "realtimex" when using RTX
63
64
  }
64
65
  except ImportError:
65
66
  # Unified config service not yet available, fall back to env
@@ -45,6 +45,8 @@ def get_realtimex_sdk() -> "RealtimeXSDK":
45
45
  "llm.chat", # For LLM completions
46
46
  "llm.providers", # For listing available providers
47
47
  "llm.embed", # For embeddings
48
+ "tts.speak", # For TTS
49
+ "tts.providers", # For listing TTS providers
48
50
  ]
49
51
  )
50
52
  )
@@ -160,21 +162,34 @@ async def get_cached_providers() -> dict:
160
162
  try:
161
163
  sdk = get_realtimex_sdk()
162
164
 
163
- # Fetch both in parallel (conceptually, though await is sequential here)
164
- # In a real async environment we might use asyncio.gather, but sequential is safe
165
+ # Fetch all providers in parallel (conceptually)
165
166
  llm_result = await sdk.llm.chat_providers()
166
167
  embed_result = await sdk.llm.embed_providers()
168
+ tts_result = await sdk.tts.list_providers()
167
169
 
168
170
  def serialize_provider(p):
169
- return {
171
+ # Handle both object and dict responses (SDK might return dicts for TTS)
172
+ if isinstance(p, dict):
173
+ # Normalize: ensure 'provider' key exists (SDK uses 'id' for TTS)
174
+ if "provider" not in p and "id" in p:
175
+ p["provider"] = p["id"]
176
+ return p
177
+
178
+ data = {
170
179
  "provider": p.provider,
171
180
  "models": [{"id": m.id, "name": m.name} for m in p.models],
172
181
  }
182
+ # Add config metadata if available (for TTS advanced options)
183
+ if hasattr(p, "config"):
184
+ data["config"] = p.config
185
+
186
+ return data
173
187
 
174
188
  _providers_cache = {
175
189
  "rtx_enabled": True,
176
190
  "llm": [serialize_provider(p) for p in llm_result.providers],
177
191
  "embedding": [serialize_provider(p) for p in embed_result.providers],
192
+ "tts": [serialize_provider(p) for p in tts_result],
178
193
  }
179
194
  _providers_cache_time = time.time()
180
195
 
@@ -247,23 +262,41 @@ def get_rtx_active_config(config_type: str) -> Optional[dict]:
247
262
  return data.get(config_type)
248
263
 
249
264
 
250
- def set_rtx_active_config(config_type: str, provider: str, model: str) -> bool:
265
+ def set_rtx_active_config(
266
+ config_type: str,
267
+ provider: str,
268
+ model: str,
269
+ voice: Optional[str] = None,
270
+ speed: Optional[float] = None,
271
+ quality: Optional[int] = None,
272
+ ) -> bool:
251
273
  """
252
274
  Set the active RTX config for a specific config type.
253
275
 
254
276
  Args:
255
- config_type: "llm" or "embedding"
277
+ config_type: "llm", "embedding" or "tts"
256
278
  provider: Provider name (e.g., "openai")
257
279
  model: Model ID (e.g., "gpt-4o")
280
+ voice: Optional voice ID (for TTS)
281
+ speed: Optional speed multiplier (for TTS)
282
+ quality: Optional quality/inference steps (for TTS)
258
283
 
259
284
  Returns:
260
285
  True if saved successfully
261
286
  """
262
287
  data = _load_rtx_active_config()
263
- data[config_type] = {
288
+ config = {
264
289
  "provider": provider,
265
290
  "model": model,
266
291
  }
292
+ if voice:
293
+ config["voice"] = voice
294
+ if speed is not None:
295
+ config["speed"] = speed
296
+ if quality is not None:
297
+ config["quality"] = quality
298
+
299
+ data[config_type] = config
267
300
  return _save_rtx_active_config(data)
268
301
 
269
302