databricks-tellr-app 0.3.11.dev4__tar.gz → 0.3.11.dev6__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 (149) hide show
  1. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/PKG-INFO +1 -1
  2. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/databricks_tellr_app.egg-info/PKG-INFO +1 -1
  3. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/databricks_tellr_app.egg-info/SOURCES.txt +0 -10
  4. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/pyproject.toml +1 -1
  5. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/main.py +0 -2
  6. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/agent_config.py +2 -17
  7. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/export.py +2 -4
  8. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/google_slides.py +1 -5
  9. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/sessions.py +0 -2
  10. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/settings/__init__.py +0 -2
  11. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/schemas/agent_config.py +0 -3
  12. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/services/chat_service.py +5 -29
  13. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/services/export_job_queue.py +2 -4
  14. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/services/session_manager.py +1 -3
  15. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/database.py +0 -71
  16. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/__init__.py +1 -8
  17. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/agent_factory.py +3 -42
  18. databricks_tellr_app-0.3.11.dev4/src/api/routes/settings/design_systems.py +0 -517
  19. databricks_tellr_app-0.3.11.dev4/src/database/models/design_system.py +0 -193
  20. databricks_tellr_app-0.3.11.dev4/src/services/design_system_compiler.py +0 -277
  21. databricks_tellr_app-0.3.11.dev4/src/services/design_system_service.py +0 -482
  22. databricks_tellr_app-0.3.11.dev4/src/utils/ds_asset_utils.py +0 -58
  23. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/README.md +0 -0
  24. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/databricks_tellr_app/__init__.py +0 -0
  25. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/databricks_tellr_app/run.py +0 -0
  26. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
  27. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/databricks_tellr_app.egg-info/requires.txt +0 -0
  28. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/databricks_tellr_app.egg-info/top_level.txt +0 -0
  29. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/setup.cfg +0 -0
  30. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/setup.py +0 -0
  31. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/__init__.py +0 -0
  32. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/__init__.py +0 -0
  33. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/_otel_bootstrap.py +0 -0
  34. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/fixtures/tour_demo_deck.json +0 -0
  35. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/mcp_auth.py +0 -0
  36. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/mcp_server.py +0 -0
  37. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/middleware/__init__.py +0 -0
  38. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/middleware/request_logging.py +0 -0
  39. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/__init__.py +0 -0
  40. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/admin.py +0 -0
  41. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/chat.py +0 -0
  42. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/deck_contributors.py +0 -0
  43. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/feedback.py +0 -0
  44. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/images.py +0 -0
  45. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/local_version.py +0 -0
  46. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/profiles.py +0 -0
  47. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/settings/contributors.py +0 -0
  48. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/settings/deck_prompts.py +0 -0
  49. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/settings/identities.py +0 -0
  50. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/settings/slide_styles.py +0 -0
  51. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/setup.py +0 -0
  52. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/slides.py +0 -0
  53. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/tools.py +0 -0
  54. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/tour.py +0 -0
  55. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/verification.py +0 -0
  56. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/routes/version.py +0 -0
  57. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/schemas/__init__.py +0 -0
  58. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/schemas/feedback.py +0 -0
  59. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/schemas/requests.py +0 -0
  60. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/schemas/responses.py +0 -0
  61. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/schemas/settings/__init__.py +0 -0
  62. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/schemas/settings/requests.py +0 -0
  63. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/schemas/settings/responses.py +0 -0
  64. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/schemas/streaming.py +0 -0
  65. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/services/__init__.py +0 -0
  66. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/services/feedback_service.py +0 -0
  67. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/services/job_queue.py +0 -0
  68. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/services/session_naming.py +0 -0
  69. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/utils/__init__.py +0 -0
  70. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/api/utils/validation.py +0 -0
  71. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/__init__.py +0 -0
  72. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/config_loader.py +0 -0
  73. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/context_utils.py +0 -0
  74. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/databricks_client.py +0 -0
  75. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/defaults.py +0 -0
  76. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/encryption.py +0 -0
  77. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/init_default_profile.py +0 -0
  78. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/lakebase.py +0 -0
  79. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/migrate_profiles_to_agent_config.py +0 -0
  80. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/mlflow_agent_spans.py +0 -0
  81. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/mlflow_tracing.py +0 -0
  82. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/otel_logging.py +0 -0
  83. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/permission_context.py +0 -0
  84. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/prompt_modules.py +0 -0
  85. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/settings_db.py +0 -0
  86. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/core/user_context.py +0 -0
  87. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/__init__.py +0 -0
  88. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/deck_contributor.py +0 -0
  89. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/feedback.py +0 -0
  90. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/genie_space.py +0 -0
  91. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/google_global_credentials.py +0 -0
  92. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/google_oauth_token.py +0 -0
  93. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/identity.py +0 -0
  94. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/image.py +0 -0
  95. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/profile.py +0 -0
  96. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/profile_contributor.py +0 -0
  97. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/prompts.py +0 -0
  98. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/request_log.py +0 -0
  99. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/session.py +0 -0
  100. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/slide_deck_prompt.py +0 -0
  101. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/slide_style_library.py +0 -0
  102. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/database/models/user_preference.py +0 -0
  103. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/domain/__init__.py +0 -0
  104. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/domain/slide.py +0 -0
  105. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/domain/slide_deck.py +0 -0
  106. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/__init__.py +0 -0
  107. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/agent.py +0 -0
  108. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/config_service.py +0 -0
  109. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/config_validator.py +0 -0
  110. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/drive_uploader.py +0 -0
  111. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/evaluation/__init__.py +0 -0
  112. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/evaluation/llm_judge.py +0 -0
  113. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/genie_service.py +0 -0
  114. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/google_slides_auth.py +0 -0
  115. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/google_slides_prompts_defaults.py +0 -0
  116. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/html_to_google_slides.py +0 -0
  117. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/html_to_pptx.py +0 -0
  118. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/identity_provider.py +0 -0
  119. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/identity_providers/__init__.py +0 -0
  120. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/identity_providers/account_provider.py +0 -0
  121. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/identity_providers/local_provider.py +0 -0
  122. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/identity_providers/workspace_provider.py +0 -0
  123. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/image_service.py +0 -0
  124. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/image_tools.py +0 -0
  125. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/permission_service.py +0 -0
  126. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/pptx_from_html_huashu.py +0 -0
  127. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/pptx_from_records.py +0 -0
  128. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/pptx_prompts_defaults.py +0 -0
  129. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/profile_service.py +0 -0
  130. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/streaming_callback.py +0 -0
  131. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/tools/__init__.py +0 -0
  132. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/tools/agent_bricks_tool.py +0 -0
  133. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/tools/genie_tool.py +0 -0
  134. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/tools/mcp_tool.py +0 -0
  135. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/tools/model_endpoint_tool.py +0 -0
  136. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/tools/vector_tool.py +0 -0
  137. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/services/validator.py +0 -0
  138. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/__init__.py +0 -0
  139. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/css_utils.py +0 -0
  140. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/error_handling.py +0 -0
  141. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/html_safety.py +0 -0
  142. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/html_utils.py +0 -0
  143. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/image_utils.py +0 -0
  144. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/js_validator.py +0 -0
  145. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/logging_config.py +0 -0
  146. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/pi_filter.py +0 -0
  147. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/slide_hash.py +0 -0
  148. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/src/utils/spotlight.py +0 -0
  149. {databricks_tellr_app-0.3.11.dev4 → databricks_tellr_app-0.3.11.dev6}/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.3.11.dev4
3
+ Version: 0.3.11.dev6
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.3.11.dev4
3
+ Version: 0.3.11.dev6
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -33,7 +33,6 @@ setup.py
33
33
  ./src/api/routes/settings/__init__.py
34
34
  ./src/api/routes/settings/contributors.py
35
35
  ./src/api/routes/settings/deck_prompts.py
36
- ./src/api/routes/settings/design_systems.py
37
36
  ./src/api/routes/settings/identities.py
38
37
  ./src/api/routes/settings/slide_styles.py
39
38
  ./src/api/schemas/__init__.py
@@ -74,7 +73,6 @@ setup.py
74
73
  ./src/database/__init__.py
75
74
  ./src/database/models/__init__.py
76
75
  ./src/database/models/deck_contributor.py
77
- ./src/database/models/design_system.py
78
76
  ./src/database/models/feedback.py
79
77
  ./src/database/models/genie_space.py
80
78
  ./src/database/models/google_global_credentials.py
@@ -97,8 +95,6 @@ setup.py
97
95
  ./src/services/agent_factory.py
98
96
  ./src/services/config_service.py
99
97
  ./src/services/config_validator.py
100
- ./src/services/design_system_compiler.py
101
- ./src/services/design_system_service.py
102
98
  ./src/services/drive_uploader.py
103
99
  ./src/services/genie_service.py
104
100
  ./src/services/google_slides_auth.py
@@ -129,7 +125,6 @@ setup.py
129
125
  ./src/services/tools/vector_tool.py
130
126
  ./src/utils/__init__.py
131
127
  ./src/utils/css_utils.py
132
- ./src/utils/ds_asset_utils.py
133
128
  ./src/utils/error_handling.py
134
129
  ./src/utils/html_safety.py
135
130
  ./src/utils/html_utils.py
@@ -177,7 +172,6 @@ src/api/routes/version.py
177
172
  src/api/routes/settings/__init__.py
178
173
  src/api/routes/settings/contributors.py
179
174
  src/api/routes/settings/deck_prompts.py
180
- src/api/routes/settings/design_systems.py
181
175
  src/api/routes/settings/identities.py
182
176
  src/api/routes/settings/slide_styles.py
183
177
  src/api/schemas/__init__.py
@@ -218,7 +212,6 @@ src/core/user_context.py
218
212
  src/database/__init__.py
219
213
  src/database/models/__init__.py
220
214
  src/database/models/deck_contributor.py
221
- src/database/models/design_system.py
222
215
  src/database/models/feedback.py
223
216
  src/database/models/genie_space.py
224
217
  src/database/models/google_global_credentials.py
@@ -241,8 +234,6 @@ src/services/agent.py
241
234
  src/services/agent_factory.py
242
235
  src/services/config_service.py
243
236
  src/services/config_validator.py
244
- src/services/design_system_compiler.py
245
- src/services/design_system_service.py
246
237
  src/services/drive_uploader.py
247
238
  src/services/genie_service.py
248
239
  src/services/google_slides_auth.py
@@ -273,7 +264,6 @@ src/services/tools/model_endpoint_tool.py
273
264
  src/services/tools/vector_tool.py
274
265
  src/utils/__init__.py
275
266
  src/utils/css_utils.py
276
- src/utils/ds_asset_utils.py
277
267
  src/utils/error_handling.py
278
268
  src/utils/html_safety.py
279
269
  src/utils/html_utils.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "databricks-tellr-app"
7
- version = "0.3.11.dev4"
7
+ version = "0.3.11.dev6"
8
8
  description = "Tellr application package for Databricks Apps"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -27,7 +27,6 @@ from src.core.permission_context import (
27
27
  from src.api.routes.settings import (
28
28
  contributors_router,
29
29
  deck_prompts_router,
30
- design_systems_router,
31
30
  identities_router,
32
31
  slide_styles_router,
33
32
  )
@@ -435,7 +434,6 @@ app.include_router(contributors_router, prefix="/api/settings", tags=["settings"
435
434
  app.include_router(deck_prompts_router, prefix="/api/settings", tags=["settings"])
436
435
  app.include_router(identities_router, prefix="/api/settings", tags=["settings"])
437
436
  app.include_router(slide_styles_router, prefix="/api/settings", tags=["settings"])
438
- app.include_router(design_systems_router, prefix="/api/settings", tags=["settings"])
439
437
 
440
438
  # MCP server — mount the FastMCP streamable-HTTP ASGI app at /mcp.
441
439
  # Must be registered before the SPA catch-all (which is added lazily by
@@ -21,25 +21,10 @@ router = APIRouter(prefix="/api/sessions/{session_id}/agent-config", tags=["agen
21
21
 
22
22
 
23
23
  def _validate_references(config: AgentConfig) -> None:
24
- """Validate that design_system_id, slide_style_id and deck_prompt_id reference
25
- existing (active) library entries."""
26
- from src.database.models import DesignSystem, SlideDeckPromptLibrary, SlideStyleLibrary
24
+ """Validate that slide_style_id and deck_prompt_id reference existing library entries."""
25
+ from src.database.models import SlideStyleLibrary, SlideDeckPromptLibrary
27
26
 
28
27
  with get_db_session() as db:
29
- if config.design_system_id is not None:
30
- design_system = (
31
- db.query(DesignSystem)
32
- .filter(
33
- DesignSystem.id == config.design_system_id,
34
- DesignSystem.is_active == True, # noqa: E712
35
- )
36
- .first()
37
- )
38
- if not design_system:
39
- raise HTTPException(
40
- status_code=422,
41
- detail=f"design_system_id {config.design_system_id} not found",
42
- )
43
28
  if config.slide_style_id is not None:
44
29
  style = (
45
30
  db.query(SlideStyleLibrary)
@@ -405,14 +405,12 @@ async def export_to_pptx(request: ExportPPTXRequest):
405
405
  if not slide_deck or not slide_deck.get("slides"):
406
406
  raise HTTPException(status_code=404, detail="No slides available")
407
407
 
408
- # Substitute {{image:ID}} + {{ds-asset:ID}} placeholders with base64 data URIs
409
- # so the PPTX converter can extract and embed the actual images/brand assets
410
- from src.utils.ds_asset_utils import substitute_deck_dict_ds_assets
408
+ # Substitute {{image:ID}} placeholders with base64 data URIs
409
+ # so the PPTX converter can extract and embed the actual images
411
410
  from src.utils.image_utils import substitute_deck_dict_images
412
411
  from src.core.database import get_db_session
413
412
  with get_db_session() as db:
414
413
  substitute_deck_dict_images(slide_deck, db)
415
- substitute_deck_dict_ds_assets(slide_deck, db)
416
414
 
417
415
  slide_count = len(slide_deck.get("slides", []))
418
416
  log_msg = (
@@ -276,13 +276,11 @@ async def start_google_slides_export(
276
276
  if not slide_deck or not slide_deck.get("slides"):
277
277
  raise HTTPException(status_code=404, detail="No slides available")
278
278
 
279
- # Substitute {{image:ID}} + {{ds-asset:ID}} placeholders with base64 data URIs
280
- from src.utils.ds_asset_utils import substitute_deck_dict_ds_assets
279
+ # Substitute {{image:ID}} placeholders with base64 data URIs
281
280
  from src.utils.image_utils import substitute_deck_dict_images
282
281
  from src.core.database import get_db_session
283
282
  with get_db_session() as db:
284
283
  substitute_deck_dict_images(slide_deck, db)
285
- substitute_deck_dict_ds_assets(slide_deck, db)
286
284
 
287
285
  slides_data = slide_deck.get("slides", [])
288
286
  total = len(slides_data)
@@ -504,11 +502,9 @@ async def export_google_slides_from_huashu(
504
502
  # legacy /export route). Use a fresh session because the request's `db`
505
503
  # is held by the route's transaction context.
506
504
  from src.core.database import get_db_session
507
- from src.utils.ds_asset_utils import substitute_deck_dict_ds_assets
508
505
  from src.utils.image_utils import substitute_deck_dict_images
509
506
  with get_db_session() as imdb:
510
507
  substitute_deck_dict_images(slide_deck, imdb)
511
- substitute_deck_dict_ds_assets(slide_deck, imdb)
512
508
 
513
509
  title = slide_deck.get("title") or "Presentation"
514
510
  slides_data = slide_deck.get("slides") or []
@@ -149,12 +149,10 @@ def _check_deck_permission_for_session(
149
149
  def _substitute_deck_images(deck_dict: dict) -> None:
150
150
  """Substitute {{image:ID}} placeholders in a deck dict with base64 data URIs."""
151
151
  from src.core.database import get_db_session
152
- from src.utils.ds_asset_utils import substitute_deck_dict_ds_assets
153
152
  from src.utils.image_utils import substitute_deck_dict_images
154
153
 
155
154
  with get_db_session() as db:
156
155
  substitute_deck_dict_images(deck_dict, db)
157
- substitute_deck_dict_ds_assets(deck_dict, db)
158
156
 
159
157
 
160
158
  @router.post("")
@@ -1,14 +1,12 @@
1
1
  """Configuration API routes."""
2
2
  from src.api.routes.settings.contributors import router as contributors_router
3
3
  from src.api.routes.settings.deck_prompts import router as deck_prompts_router
4
- from src.api.routes.settings.design_systems import router as design_systems_router
5
4
  from src.api.routes.settings.identities import router as identities_router
6
5
  from src.api.routes.settings.slide_styles import router as slide_styles_router
7
6
 
8
7
  __all__ = [
9
8
  "contributors_router",
10
9
  "deck_prompts_router",
11
- "design_systems_router",
12
10
  "identities_router",
13
11
  "slide_styles_router",
14
12
  ]
@@ -59,9 +59,6 @@ class AgentConfig(BaseModel):
59
59
  """Agent configuration stored as JSON on sessions and profiles."""
60
60
  tools: list[ToolEntry] = Field(default_factory=list)
61
61
  slide_style_id: Optional[int] = None
62
- # A selected design system compiles to prompt text and, when set, takes
63
- # precedence over slide_style_id (see agent_factory._get_prompt_content).
64
- design_system_id: Optional[int] = None
65
62
  deck_prompt_id: Optional[int] = None
66
63
  system_prompt: Optional[str] = None
67
64
  slide_editing_instructions: Optional[str] = None
@@ -35,10 +35,6 @@ from src.utils.html_utils import (
35
35
  extract_canvas_ids_from_html,
36
36
  split_script_by_canvas,
37
37
  )
38
- from src.utils.ds_asset_utils import (
39
- substitute_deck_dict_ds_assets,
40
- substitute_ds_asset_placeholders,
41
- )
42
38
  from src.utils.image_utils import substitute_deck_dict_images, substitute_image_placeholders
43
39
 
44
40
  logger = logging.getLogger(__name__)
@@ -87,13 +83,11 @@ class ChatService:
87
83
  logger.info("ChatService initialized successfully")
88
84
 
89
85
  def _substitute_images_for_response(self, deck_dict, raw_html=None):
90
- """Apply image + design-system asset substitution before sending to client.
86
+ """Apply image placeholder substitution before sending to client.
91
87
 
92
- Converts {{image:ID}} placeholders (image_assets) and {{ds-asset:ID}}
93
- placeholders (design_system_asset) to base64 data URIs in deck dicts and
94
- raw HTML. Called at API response boundaries so that stored/cached HTML
95
- keeps lightweight placeholders (avoiding LLM context bloat). The two
96
- namespaces are resolved independently.
88
+ Converts {{image:ID}} placeholders to base64 data URIs in deck dicts
89
+ and raw HTML. Called at API response boundaries so that stored/cached
90
+ HTML keeps lightweight placeholders (avoiding LLM context bloat).
97
91
  """
98
92
  from src.core.database import get_db_session
99
93
 
@@ -103,30 +97,12 @@ class ChatService:
103
97
  needs_html = raw_html and "{{image:" in raw_html
104
98
  needs_deck_html = deck_dict and deck_dict.get("html_content") and "{{image:" in deck_dict.get("html_content", "")
105
99
 
106
- # Design-system brand assets ({{ds-asset:ID}}) — parallel, orthogonal namespace.
107
- ds_needs_deck = deck_dict and any(
108
- "{{ds-asset:" in s.get("html", "") for s in deck_dict.get("slides", [])
109
- )
110
- ds_needs_html = raw_html and "{{ds-asset:" in raw_html
111
- ds_needs_deck_html = bool(
112
- deck_dict
113
- and deck_dict.get("html_content")
114
- and "{{ds-asset:" in deck_dict.get("html_content", "")
115
- )
116
-
117
- if (
118
- needs_deck or needs_html or needs_deck_html
119
- or ds_needs_deck or ds_needs_html or ds_needs_deck_html
120
- ):
100
+ if needs_deck or needs_html or needs_deck_html:
121
101
  with get_db_session() as db:
122
102
  if needs_deck or needs_deck_html:
123
103
  substitute_deck_dict_images(deck_dict, db)
124
104
  if needs_html:
125
105
  raw_html = substitute_image_placeholders(raw_html, db)
126
- if ds_needs_deck or ds_needs_deck_html:
127
- substitute_deck_dict_ds_assets(deck_dict, db)
128
- if ds_needs_html:
129
- raw_html = substitute_ds_asset_placeholders(raw_html, db)
130
106
  return deck_dict, raw_html
131
107
 
132
108
  def _build_agent_for_session(
@@ -203,14 +203,12 @@ async def process_export_job(job_id: str, payload: dict) -> None:
203
203
  if not slide_deck or not slide_deck.get("slides"):
204
204
  raise ValueError("No slides available")
205
205
 
206
- # Substitute {{image:ID}} + {{ds-asset:ID}} placeholders with base64 data URIs
207
- # so the PPTX converter can extract and embed the actual images/brand assets
208
- from src.utils.ds_asset_utils import substitute_deck_dict_ds_assets
206
+ # Substitute {{image:ID}} placeholders with base64 data URIs
207
+ # so the PPTX converter can extract and embed the actual images
209
208
  from src.utils.image_utils import substitute_deck_dict_images
210
209
  from src.core.database import get_db_session
211
210
  with get_db_session() as db:
212
211
  substitute_deck_dict_images(slide_deck, db)
213
- substitute_deck_dict_ds_assets(slide_deck, db)
214
212
 
215
213
  slides = slide_deck.get("slides", [])
216
214
  total_slides = len(slides)
@@ -1142,12 +1142,10 @@ class SessionManager:
1142
1142
  slide["verification"] = verification_map.get(content_hash)
1143
1143
  slide["content_hash"] = content_hash
1144
1144
 
1145
- # Substitute {{image:ID}} + {{ds-asset:ID}} placeholders with base64 for client
1146
- from src.utils.ds_asset_utils import substitute_deck_dict_ds_assets
1145
+ # Substitute {{image:ID}} placeholders with base64 for client
1147
1146
  from src.utils.image_utils import substitute_deck_dict_images
1148
1147
 
1149
1148
  substitute_deck_dict_images(deck_dict, db)
1150
- substitute_deck_dict_ds_assets(deck_dict, db)
1151
1149
 
1152
1150
  # Parse chat history for preview
1153
1151
  chat_history = (
@@ -524,81 +524,10 @@ def _run_migrations(engine, schema: str | None = None):
524
524
  # --- image_assets.tags: json → jsonb (PostgreSQL) for native @> queries ---
525
525
  _migrate_image_assets_tags_json_to_jsonb(conn, schema, _qual, is_sqlite)
526
526
 
527
- # --- design system library: additive design_system(+asset/+token) tables ---
528
- _migrate_design_system_tables(conn, schema)
529
-
530
- # --- design system: add is_active (soft-delete) to pre-existing tables ---
531
- _migrate_design_system_soft_delete(conn, inspector, schema, _qual, is_sqlite)
532
-
533
527
  # --- keep newly created objects owned by the shared role (prod forks) ---
534
528
  _reassign_new_objects_to_shared_owner(conn, is_sqlite)
535
529
 
536
530
 
537
- def _migrate_design_system_tables(conn, schema: str | None = None) -> None:
538
- """Create the additive design-system tables (idempotent, dialect-safe).
539
-
540
- Phase 1 of the Design System Library. Adds three NEW tables — ``design_system``,
541
- ``design_system_asset``, ``design_system_token`` — without touching
542
- ``slide_style_library`` or any existing table, so the current slide-style
543
- prompt path is unaffected.
544
-
545
- ``Base.metadata.create_all()`` (run first in ``init_db``) already creates these
546
- on fresh installs; this hand-rolled step guarantees they also exist on
547
- already-provisioned Lakebase/Postgres databases and lets the migration be
548
- exercised on its own. Creation is driven from the ORM metadata via
549
- ``Table.create(checkfirst=True)`` — a single source of truth for the schema,
550
- idempotent (a no-op when the table exists) and correctly compiled for both
551
- PostgreSQL/Lakebase and the SQLite used in tests. Parent table is created
552
- first so the child foreign keys resolve.
553
- """
554
- from src.database.models.design_system import (
555
- DesignSystem,
556
- DesignSystemAsset,
557
- DesignSystemToken,
558
- )
559
-
560
- for model in (DesignSystem, DesignSystemAsset, DesignSystemToken):
561
- table = model.__table__
562
- # Match init_db()'s schema handling so a qualified deployment creates the
563
- # tables in the Lakebase schema; guarded so it stays a no-op on repeat.
564
- # NOTE: this mutates the module-global Table.schema on the shared ORM
565
- # metadata — intentional, and identical to what init_db() already does.
566
- if schema and table.schema is None:
567
- table.schema = schema
568
- table.create(bind=conn, checkfirst=True)
569
-
570
- logger.info("Migration: design_system tables ensured")
571
-
572
-
573
- def _migrate_design_system_soft_delete(conn, inspector, schema, _qual, is_sqlite) -> None:
574
- """Add ``is_active`` to ``design_system`` for Phase-3 soft-delete (idempotent).
575
-
576
- Phase 3 introduces soft-delete on design systems, mirroring
577
- ``slide_style_library.is_active``. ``Base.metadata.create_all()`` adds the
578
- column on fresh installs, but it does NOT alter an already-provisioned
579
- ``design_system`` table (created by an earlier Phase 1/2 deploy). This
580
- hand-rolled ALTER backfills it. Defaults to TRUE so every existing design
581
- system remains visible/usable. Column existence is probed with the inspector
582
- passed from ``_run_migrations`` (or a fresh one when called standalone);
583
- ``get_columns`` reflects the live table even when it was created earlier in
584
- this same migration transaction.
585
- """
586
- from sqlalchemy import inspect, text
587
-
588
- insp = inspector or inspect(conn)
589
- try:
590
- cols = {c["name"] for c in insp.get_columns("design_system", schema=schema)}
591
- except Exception:
592
- return
593
- if not cols or "is_active" in cols:
594
- return
595
-
596
- logger.info("Migration: adding is_active column to design_system")
597
- conn.execute(text(
598
- f"ALTER TABLE {_qual('design_system')} ADD COLUMN is_active BOOLEAN DEFAULT TRUE NOT NULL"
599
- ))
600
-
601
-
602
531
  def _reassign_new_objects_to_shared_owner(
603
532
  conn, is_sqlite: bool, owning_role: str = "tellr_app_owners"
604
533
  ) -> None:
@@ -1,11 +1,6 @@
1
1
  """Database models."""
2
2
 
3
3
  from src.database.models.deck_contributor import DeckContributor
4
- from src.database.models.design_system import (
5
- DesignSystem,
6
- DesignSystemAsset,
7
- DesignSystemToken,
8
- )
9
4
  from src.database.models.feedback import FeedbackConversation, SurveyResponse
10
5
  from src.database.models.genie_space import ConfigGenieSpace
11
6
  from src.database.models.google_global_credentials import GoogleGlobalCredentials
@@ -41,9 +36,6 @@ __all__ = [
41
36
  "ConfigProfile",
42
37
  "ConfigProfileContributor",
43
38
  "ConfigPrompts",
44
- "DesignSystem",
45
- "DesignSystemAsset",
46
- "DesignSystemToken",
47
39
  "ExportJob",
48
40
  "FeedbackConversation",
49
41
  "GoogleGlobalCredentials",
@@ -62,3 +54,4 @@ __all__ = [
62
54
  "UserProfilePreference",
63
55
  "UserSession",
64
56
  ]
57
+
@@ -89,18 +89,10 @@ def _get_prompt_content(
89
89
 
90
90
  Resolution order for each prompt field:
91
91
  1. Explicit value in config (system_prompt, slide_editing_instructions)
92
- 2. Library lookup by ID (design_system_id / slide_style_id, deck_prompt_id)
92
+ 2. Library lookup by ID (slide_style_id, deck_prompt_id)
93
93
  3. Modular assembly via prompt_modules (mode-aware)
94
94
  4. Backend defaults from DEFAULT_CONFIG / DEFAULT_SLIDE_STYLE (legacy)
95
95
 
96
- Slide-style source precedence (Design System Library, spec §8):
97
- design_system_id (if set) -> slide_style_id -> DEFAULT_SLIDE_STYLE.
98
- A selected design system contributes its ``compiled_style_content`` — the
99
- serialized artifact produced by ``design_system_compiler`` — which flows
100
- through the identical ``build_generation_system_prompt`` seam as a legacy
101
- ``style_content`` blob. When no design system is selected the legacy
102
- slide_style_id path is used unchanged, so the feature is backward compatible.
103
-
104
96
  Args:
105
97
  config: The AgentConfig for this request
106
98
  mode: ``"generate"`` or ``"edit"``
@@ -113,38 +105,8 @@ def _get_prompt_content(
113
105
  deck_prompt: Optional[str] = None
114
106
  image_guidelines: Optional[str] = None
115
107
 
116
- # Resolve the slide-style source. A design system (if selected) takes
117
- # precedence over a legacy slide style; each degrades to DEFAULT_SLIDE_STYLE
118
- # on lookup failure rather than crashing generation.
119
- if config.design_system_id is not None:
120
- try:
121
- from src.core.database import get_db_session
122
- from src.database.models import DesignSystem
123
-
124
- with get_db_session() as db:
125
- design_system = (
126
- db.query(DesignSystem)
127
- .filter_by(id=config.design_system_id, is_active=True)
128
- .first()
129
- )
130
- if (
131
- design_system
132
- and design_system.compiled_style_content
133
- and design_system.compiled_style_content.strip()
134
- ):
135
- # compiled_style_content is the design system's drop-in
136
- # equivalent of slide_style_library.style_content.
137
- slide_style = design_system.compiled_style_content
138
- else:
139
- logger.warning(
140
- "Design system not found or not compiled, using default",
141
- extra={"design_system_id": config.design_system_id},
142
- )
143
- except Exception as e:
144
- logger.error(f"Failed to resolve design_system_id: {e}")
145
- # Resolve slide_style_id from library (legacy path — unchanged; used only when
146
- # no design system is selected).
147
- elif config.slide_style_id is not None:
108
+ # Resolve slide_style_id from library
109
+ if config.slide_style_id is not None:
148
110
  try:
149
111
  from src.core.database import get_db_session
150
112
  from src.database.models import SlideStyleLibrary
@@ -369,7 +331,6 @@ def build_agent_for_request(
369
331
  "has_custom_system_prompt": config.system_prompt is not None,
370
332
  "has_custom_editing_instructions": config.slide_editing_instructions is not None,
371
333
  "slide_style_id": config.slide_style_id,
372
- "design_system_id": config.design_system_id,
373
334
  "deck_prompt_id": config.deck_prompt_id,
374
335
  "mode": mode,
375
336
  },