databricks-tellr-app 0.4.3.dev39__tar.gz → 0.4.3.dev40__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 (167) hide show
  1. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/PKG-INFO +1 -1
  2. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/databricks_tellr_app.egg-info/PKG-INFO +1 -1
  3. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/pyproject.toml +1 -1
  4. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/main.py +19 -2
  5. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/export.py +2 -8
  6. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/services/export_job_queue.py +31 -0
  7. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/README.md +0 -0
  8. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/databricks_tellr_app/__init__.py +0 -0
  9. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/databricks_tellr_app/run.py +0 -0
  10. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/databricks_tellr_app.egg-info/SOURCES.txt +0 -0
  11. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
  12. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/databricks_tellr_app.egg-info/requires.txt +0 -0
  13. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/databricks_tellr_app.egg-info/top_level.txt +0 -0
  14. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/setup.cfg +0 -0
  15. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/setup.py +0 -0
  16. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/__init__.py +0 -0
  17. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/__init__.py +0 -0
  18. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/_otel_bootstrap.py +0 -0
  19. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/fixtures/tour_demo_deck.json +0 -0
  20. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/mcp_auth.py +0 -0
  21. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/mcp_server.py +0 -0
  22. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/middleware/__init__.py +0 -0
  23. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/middleware/csrf.py +0 -0
  24. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/middleware/request_logging.py +0 -0
  25. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/middleware/security_headers.py +0 -0
  26. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/__init__.py +0 -0
  27. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/_authz.py +0 -0
  28. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/admin.py +0 -0
  29. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/admin_usage.py +0 -0
  30. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/agent_config.py +0 -0
  31. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/chat.py +0 -0
  32. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/deck_contributors.py +0 -0
  33. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/feedback.py +0 -0
  34. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/google_slides.py +0 -0
  35. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/images.py +0 -0
  36. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/local_version.py +0 -0
  37. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/profiles.py +0 -0
  38. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/sessions.py +0 -0
  39. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/settings/__init__.py +0 -0
  40. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/settings/contributors.py +0 -0
  41. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/settings/deck_prompts.py +0 -0
  42. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/settings/design_systems.py +0 -0
  43. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/settings/identities.py +0 -0
  44. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/settings/slide_styles.py +0 -0
  45. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/setup.py +0 -0
  46. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/slides.py +0 -0
  47. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/tools.py +0 -0
  48. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/tour.py +0 -0
  49. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/verification.py +0 -0
  50. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/routes/version.py +0 -0
  51. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/schemas/__init__.py +0 -0
  52. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/schemas/agent_config.py +0 -0
  53. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/schemas/feedback.py +0 -0
  54. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/schemas/requests.py +0 -0
  55. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/schemas/responses.py +0 -0
  56. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/schemas/settings/__init__.py +0 -0
  57. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/schemas/settings/requests.py +0 -0
  58. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/schemas/settings/responses.py +0 -0
  59. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/schemas/streaming.py +0 -0
  60. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/services/__init__.py +0 -0
  61. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/services/chat_service.py +0 -0
  62. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/services/feedback_service.py +0 -0
  63. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/services/job_queue.py +0 -0
  64. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/services/session_manager.py +0 -0
  65. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/services/session_naming.py +0 -0
  66. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/services/usage_events.py +0 -0
  67. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/services/usage_service.py +0 -0
  68. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/utils/__init__.py +0 -0
  69. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/api/utils/validation.py +0 -0
  70. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/__init__.py +0 -0
  71. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/config_loader.py +0 -0
  72. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/context_utils.py +0 -0
  73. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/database.py +0 -0
  74. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/databricks_client.py +0 -0
  75. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/defaults.py +0 -0
  76. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/encryption.py +0 -0
  77. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/init_default_profile.py +0 -0
  78. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/lakebase.py +0 -0
  79. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/migrate_profiles_to_agent_config.py +0 -0
  80. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/mlflow_agent_spans.py +0 -0
  81. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/mlflow_tracing.py +0 -0
  82. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/otel_logging.py +0 -0
  83. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/permission_context.py +0 -0
  84. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/prompt_modules.py +0 -0
  85. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/settings_db.py +0 -0
  86. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/core/user_context.py +0 -0
  87. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/__init__.py +0 -0
  88. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/__init__.py +0 -0
  89. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/deck_contributor.py +0 -0
  90. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/design_system.py +0 -0
  91. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/encryption_key.py +0 -0
  92. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/feedback.py +0 -0
  93. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/genie_space.py +0 -0
  94. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/google_global_credentials.py +0 -0
  95. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/google_oauth_token.py +0 -0
  96. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/identity.py +0 -0
  97. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/image.py +0 -0
  98. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/profile.py +0 -0
  99. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/profile_contributor.py +0 -0
  100. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/prompts.py +0 -0
  101. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/request_log.py +0 -0
  102. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/session.py +0 -0
  103. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/slide_deck_prompt.py +0 -0
  104. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/slide_style_library.py +0 -0
  105. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/usage_event.py +0 -0
  106. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/models/user_preference.py +0 -0
  107. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/database/types.py +0 -0
  108. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/domain/__init__.py +0 -0
  109. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/domain/slide.py +0 -0
  110. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/domain/slide_deck.py +0 -0
  111. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/__init__.py +0 -0
  112. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/agent.py +0 -0
  113. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/agent_factory.py +0 -0
  114. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/config_service.py +0 -0
  115. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/config_validator.py +0 -0
  116. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/converter_jail/__init__.py +0 -0
  117. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/converter_jail/ast_guard.py +0 -0
  118. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/converter_jail/codeprep.py +0 -0
  119. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/converter_jail/gslides_runner.py +0 -0
  120. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/converter_jail/jail.py +0 -0
  121. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/converter_jail/pptx_runner.py +0 -0
  122. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/converter_jail/protocol.py +0 -0
  123. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/design_system_compiler.py +0 -0
  124. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/design_system_service.py +0 -0
  125. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/design_system_templates.py +0 -0
  126. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/drive_uploader.py +0 -0
  127. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/evaluation/__init__.py +0 -0
  128. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/evaluation/llm_judge.py +0 -0
  129. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/genie_service.py +0 -0
  130. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/google_slides_auth.py +0 -0
  131. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/google_slides_prompts_defaults.py +0 -0
  132. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/html_to_google_slides.py +0 -0
  133. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/html_to_pptx.py +0 -0
  134. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/identity_provider.py +0 -0
  135. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/identity_providers/__init__.py +0 -0
  136. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/identity_providers/account_provider.py +0 -0
  137. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/identity_providers/local_provider.py +0 -0
  138. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/identity_providers/workspace_provider.py +0 -0
  139. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/image_service.py +0 -0
  140. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/image_tools.py +0 -0
  141. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/permission_service.py +0 -0
  142. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/pptx_from_html_huashu.py +0 -0
  143. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/pptx_from_records.py +0 -0
  144. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/pptx_prompts_defaults.py +0 -0
  145. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/profile_service.py +0 -0
  146. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/streaming_callback.py +0 -0
  147. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/tools/__init__.py +0 -0
  148. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/tools/agent_bricks_tool.py +0 -0
  149. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/tools/ds_asset_tool.py +0 -0
  150. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/tools/genie_tool.py +0 -0
  151. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/tools/mcp_tool.py +0 -0
  152. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/tools/model_endpoint_tool.py +0 -0
  153. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/tools/vector_tool.py +0 -0
  154. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/services/validator.py +0 -0
  155. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/__init__.py +0 -0
  156. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/css_utils.py +0 -0
  157. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/ds_asset_utils.py +0 -0
  158. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/error_handling.py +0 -0
  159. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/html_safety.py +0 -0
  160. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/html_utils.py +0 -0
  161. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/image_utils.py +0 -0
  162. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/js_validator.py +0 -0
  163. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/logging_config.py +0 -0
  164. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/pi_filter.py +0 -0
  165. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/slide_hash.py +0 -0
  166. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/spotlight.py +0 -0
  167. {databricks_tellr_app-0.4.3.dev39 → databricks_tellr_app-0.4.3.dev40}/src/utils/text_caps.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-tellr-app
3
- Version: 0.4.3.dev39
3
+ Version: 0.4.3.dev40
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-tellr-app
3
- Version: 0.4.3.dev39
3
+ Version: 0.4.3.dev40
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "databricks-tellr-app"
7
- version = "0.4.3.dev39"
7
+ version = "0.4.3.dev40"
8
8
  description = "Tellr application package for Databricks Apps"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -31,7 +31,10 @@ from src.api.routes.settings import (
31
31
  identities_router,
32
32
  slide_styles_router,
33
33
  )
34
- from src.api.services.export_job_queue import start_export_worker
34
+ from src.api.services.export_job_queue import (
35
+ start_export_cleanup_worker,
36
+ start_export_worker,
37
+ )
35
38
  from src.api.services.job_queue import recover_stuck_requests, start_worker
36
39
  from src.core.database import (
37
40
  is_lakebase_environment,
@@ -49,6 +52,7 @@ IS_TESTING = ENVIRONMENT == "test"
49
52
  # Worker task references for cleanup
50
53
  _worker_task = None
51
54
  _export_worker_task = None
55
+ _export_cleanup_task: asyncio.Task | None = None
52
56
  _cleanup_task = None
53
57
  _timeout_task = None
54
58
  _frontend_assets_stack: ExitStack | None = None
@@ -57,7 +61,8 @@ _frontend_assets_stack: ExitStack | None = None
57
61
  @asynccontextmanager
58
62
  async def lifespan(app: FastAPI):
59
63
  """Lifespan context manager for startup/shutdown events."""
60
- global _worker_task, _export_worker_task, _cleanup_task, _timeout_task, _frontend_assets_stack
64
+ global _worker_task, _export_worker_task, _export_cleanup_task
65
+ global _cleanup_task, _timeout_task, _frontend_assets_stack
61
66
 
62
67
  # Startup
63
68
  logger.info(f"Starting AI Slide Generator API (environment: {ENVIRONMENT})")
@@ -124,6 +129,10 @@ async def lifespan(app: FastAPI):
124
129
  _export_worker_task = await start_export_worker()
125
130
  logger.info("Export job queue worker started")
126
131
 
132
+ # Start the export job TTL cleanup worker
133
+ _export_cleanup_task = await start_export_cleanup_worker()
134
+ logger.info("Export job cleanup worker started")
135
+
127
136
  # Start the MCP job timeout sweeper
128
137
  from src.api.services.job_queue import mark_timed_out_jobs_loop
129
138
  _timeout_task = asyncio.create_task(mark_timed_out_jobs_loop())
@@ -169,6 +178,14 @@ async def lifespan(app: FastAPI):
169
178
  pass
170
179
  logger.info("Export job queue worker stopped")
171
180
 
181
+ if _export_cleanup_task:
182
+ _export_cleanup_task.cancel()
183
+ try:
184
+ await _export_cleanup_task
185
+ except asyncio.CancelledError:
186
+ pass
187
+ logger.info("Export job cleanup worker stopped")
188
+
172
189
  if _cleanup_task:
173
190
  _cleanup_task.cancel()
174
191
  try:
@@ -807,13 +807,11 @@ async def poll_pptx_export(job_id: str):
807
807
 
808
808
 
809
809
  @router.get("/pptx/download/{job_id}")
810
- async def download_pptx_export(job_id: str, background_tasks: BackgroundTasks):
810
+ async def download_pptx_export(job_id: str):
811
811
  """Download completed PPTX export.
812
812
 
813
813
  Args:
814
814
  job_id: Job ID from start_pptx_export_async
815
- background_tasks: FastAPI background tasks for cleanup
816
-
817
815
  Returns:
818
816
  FileResponse with PPTX file
819
817
 
@@ -824,7 +822,6 @@ async def download_pptx_export(job_id: str, background_tasks: BackgroundTasks):
824
822
  _require_export_job_access(job_id)
825
823
  from src.api.services.export_job_queue import (
826
824
  get_export_job_status,
827
- cleanup_export_job,
828
825
  )
829
826
 
830
827
  job = get_export_job_status(job_id)
@@ -852,9 +849,6 @@ async def download_pptx_export(job_id: str, background_tasks: BackgroundTasks):
852
849
  extra={"job_id": job_id, "pptx_filename": filename},
853
850
  )
854
851
 
855
- # Schedule cleanup after download
856
- background_tasks.add_task(cleanup_export_job, job_id)
857
-
858
852
  return FileResponse(
859
853
  path=output_path,
860
854
  filename=filename,
@@ -1295,4 +1289,4 @@ async def export_pptx_huashu_from_html(request: ExportPPTXEditableRequest):
1295
1289
  content=pptx_bytes,
1296
1290
  media_type="application/vnd.openxmlformats-officedocument.presentationml.presentation",
1297
1291
  headers=headers,
1298
- )
1292
+ )
@@ -29,6 +29,9 @@ logger = logging.getLogger(__name__)
29
29
  # Only needs to work within a single process.
30
30
  export_queue: asyncio.Queue = asyncio.Queue()
31
31
 
32
+ EXPORT_CLEANUP_INTERVAL_SECONDS = 300
33
+ EXPORT_JOB_MAX_AGE_MINUTES = 30
34
+
32
35
 
33
36
  def generate_job_id() -> str:
34
37
  """Generate a unique job ID."""
@@ -510,6 +513,34 @@ async def start_export_worker() -> asyncio.Task:
510
513
  return asyncio.create_task(export_worker())
511
514
 
512
515
 
516
+ async def export_cleanup_loop() -> None:
517
+ """Periodically remove terminal export jobs that have exceeded their TTL."""
518
+ logger.info("Export job cleanup worker started")
519
+ while True:
520
+ try:
521
+ await asyncio.sleep(EXPORT_CLEANUP_INTERVAL_SECONDS)
522
+ cleaned = await asyncio.to_thread(
523
+ cleanup_stale_jobs,
524
+ EXPORT_JOB_MAX_AGE_MINUTES,
525
+ )
526
+ if cleaned:
527
+ logger.info("Cleaned up %d stale export job(s)", cleaned)
528
+ except asyncio.CancelledError:
529
+ logger.info("Export job cleanup worker shutting down")
530
+ raise
531
+ except Exception as e:
532
+ logger.warning(
533
+ "Export job cleanup iteration failed",
534
+ exc_info=True,
535
+ extra={"error": str(e)},
536
+ )
537
+
538
+
539
+ async def start_export_cleanup_worker() -> asyncio.Task:
540
+ """Start the background export job cleanup task."""
541
+ return asyncio.create_task(export_cleanup_loop())
542
+
543
+
513
544
  def cleanup_export_job(job_id: str) -> None:
514
545
  """Clean up job data and temporary files.
515
546