databricks-tellr-app 0.3.11.dev6__tar.gz → 0.3.11.dev7__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 (151) hide show
  1. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/PKG-INFO +1 -1
  2. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/databricks_tellr_app.egg-info/PKG-INFO +1 -1
  3. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/databricks_tellr_app.egg-info/SOURCES.txt +14 -0
  4. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/pyproject.toml +1 -1
  5. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/main.py +2 -0
  6. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/agent_config.py +56 -3
  7. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/export.py +4 -2
  8. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/google_slides.py +5 -1
  9. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/sessions.py +2 -0
  10. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/settings/__init__.py +2 -0
  11. databricks_tellr_app-0.3.11.dev7/src/api/routes/settings/design_systems.py +847 -0
  12. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/schemas/agent_config.py +8 -0
  13. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/services/chat_service.py +38 -5
  14. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/services/export_job_queue.py +4 -2
  15. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/services/session_manager.py +3 -1
  16. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/database.py +117 -0
  17. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/prompt_modules.py +53 -3
  18. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/__init__.py +12 -1
  19. databricks_tellr_app-0.3.11.dev7/src/database/models/design_system.py +357 -0
  20. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/agent_factory.py +95 -5
  21. databricks_tellr_app-0.3.11.dev7/src/services/design_system_compiler.py +603 -0
  22. databricks_tellr_app-0.3.11.dev7/src/services/design_system_service.py +1004 -0
  23. databricks_tellr_app-0.3.11.dev7/src/services/design_system_templates.py +641 -0
  24. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/tools/__init__.py +4 -0
  25. databricks_tellr_app-0.3.11.dev7/src/services/tools/ds_asset_tool.py +105 -0
  26. databricks_tellr_app-0.3.11.dev7/src/utils/ds_asset_utils.py +76 -0
  27. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/README.md +0 -0
  28. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/databricks_tellr_app/__init__.py +0 -0
  29. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/databricks_tellr_app/run.py +0 -0
  30. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
  31. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/databricks_tellr_app.egg-info/requires.txt +0 -0
  32. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/databricks_tellr_app.egg-info/top_level.txt +0 -0
  33. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/setup.cfg +0 -0
  34. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/setup.py +0 -0
  35. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/__init__.py +0 -0
  36. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/__init__.py +0 -0
  37. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/_otel_bootstrap.py +0 -0
  38. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/fixtures/tour_demo_deck.json +0 -0
  39. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/mcp_auth.py +0 -0
  40. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/mcp_server.py +0 -0
  41. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/middleware/__init__.py +0 -0
  42. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/middleware/request_logging.py +0 -0
  43. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/__init__.py +0 -0
  44. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/admin.py +0 -0
  45. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/chat.py +0 -0
  46. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/deck_contributors.py +0 -0
  47. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/feedback.py +0 -0
  48. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/images.py +0 -0
  49. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/local_version.py +0 -0
  50. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/profiles.py +0 -0
  51. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/settings/contributors.py +0 -0
  52. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/settings/deck_prompts.py +0 -0
  53. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/settings/identities.py +0 -0
  54. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/settings/slide_styles.py +0 -0
  55. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/setup.py +0 -0
  56. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/slides.py +0 -0
  57. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/tools.py +0 -0
  58. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/tour.py +0 -0
  59. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/verification.py +0 -0
  60. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/routes/version.py +0 -0
  61. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/schemas/__init__.py +0 -0
  62. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/schemas/feedback.py +0 -0
  63. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/schemas/requests.py +0 -0
  64. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/schemas/responses.py +0 -0
  65. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/schemas/settings/__init__.py +0 -0
  66. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/schemas/settings/requests.py +0 -0
  67. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/schemas/settings/responses.py +0 -0
  68. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/schemas/streaming.py +0 -0
  69. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/services/__init__.py +0 -0
  70. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/services/feedback_service.py +0 -0
  71. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/services/job_queue.py +0 -0
  72. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/services/session_naming.py +0 -0
  73. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/utils/__init__.py +0 -0
  74. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/api/utils/validation.py +0 -0
  75. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/__init__.py +0 -0
  76. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/config_loader.py +0 -0
  77. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/context_utils.py +0 -0
  78. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/databricks_client.py +0 -0
  79. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/defaults.py +0 -0
  80. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/encryption.py +0 -0
  81. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/init_default_profile.py +0 -0
  82. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/lakebase.py +0 -0
  83. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/migrate_profiles_to_agent_config.py +0 -0
  84. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/mlflow_agent_spans.py +0 -0
  85. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/mlflow_tracing.py +0 -0
  86. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/otel_logging.py +0 -0
  87. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/permission_context.py +0 -0
  88. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/settings_db.py +0 -0
  89. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/core/user_context.py +0 -0
  90. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/__init__.py +0 -0
  91. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/deck_contributor.py +0 -0
  92. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/feedback.py +0 -0
  93. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/genie_space.py +0 -0
  94. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/google_global_credentials.py +0 -0
  95. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/google_oauth_token.py +0 -0
  96. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/identity.py +0 -0
  97. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/image.py +0 -0
  98. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/profile.py +0 -0
  99. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/profile_contributor.py +0 -0
  100. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/prompts.py +0 -0
  101. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/request_log.py +0 -0
  102. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/session.py +0 -0
  103. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/slide_deck_prompt.py +0 -0
  104. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/slide_style_library.py +0 -0
  105. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/database/models/user_preference.py +0 -0
  106. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/domain/__init__.py +0 -0
  107. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/domain/slide.py +0 -0
  108. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/domain/slide_deck.py +0 -0
  109. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/__init__.py +0 -0
  110. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/agent.py +0 -0
  111. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/config_service.py +0 -0
  112. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/config_validator.py +0 -0
  113. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/drive_uploader.py +0 -0
  114. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/evaluation/__init__.py +0 -0
  115. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/evaluation/llm_judge.py +0 -0
  116. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/genie_service.py +0 -0
  117. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/google_slides_auth.py +0 -0
  118. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/google_slides_prompts_defaults.py +0 -0
  119. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/html_to_google_slides.py +0 -0
  120. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/html_to_pptx.py +0 -0
  121. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/identity_provider.py +0 -0
  122. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/identity_providers/__init__.py +0 -0
  123. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/identity_providers/account_provider.py +0 -0
  124. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/identity_providers/local_provider.py +0 -0
  125. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/identity_providers/workspace_provider.py +0 -0
  126. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/image_service.py +0 -0
  127. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/image_tools.py +0 -0
  128. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/permission_service.py +0 -0
  129. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/pptx_from_html_huashu.py +0 -0
  130. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/pptx_from_records.py +0 -0
  131. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/pptx_prompts_defaults.py +0 -0
  132. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/profile_service.py +0 -0
  133. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/streaming_callback.py +0 -0
  134. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/tools/agent_bricks_tool.py +0 -0
  135. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/tools/genie_tool.py +0 -0
  136. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/tools/mcp_tool.py +0 -0
  137. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/tools/model_endpoint_tool.py +0 -0
  138. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/tools/vector_tool.py +0 -0
  139. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/services/validator.py +0 -0
  140. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/__init__.py +0 -0
  141. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/css_utils.py +0 -0
  142. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/error_handling.py +0 -0
  143. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/html_safety.py +0 -0
  144. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/html_utils.py +0 -0
  145. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/image_utils.py +0 -0
  146. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/js_validator.py +0 -0
  147. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/logging_config.py +0 -0
  148. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/pi_filter.py +0 -0
  149. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/slide_hash.py +0 -0
  150. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/src/utils/spotlight.py +0 -0
  151. {databricks_tellr_app-0.3.11.dev6 → databricks_tellr_app-0.3.11.dev7}/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.dev6
3
+ Version: 0.3.11.dev7
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.dev6
3
+ Version: 0.3.11.dev7
4
4
  Summary: Tellr application package for Databricks Apps
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -33,6 +33,7 @@ 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
36
37
  ./src/api/routes/settings/identities.py
37
38
  ./src/api/routes/settings/slide_styles.py
38
39
  ./src/api/schemas/__init__.py
@@ -73,6 +74,7 @@ setup.py
73
74
  ./src/database/__init__.py
74
75
  ./src/database/models/__init__.py
75
76
  ./src/database/models/deck_contributor.py
77
+ ./src/database/models/design_system.py
76
78
  ./src/database/models/feedback.py
77
79
  ./src/database/models/genie_space.py
78
80
  ./src/database/models/google_global_credentials.py
@@ -95,6 +97,9 @@ setup.py
95
97
  ./src/services/agent_factory.py
96
98
  ./src/services/config_service.py
97
99
  ./src/services/config_validator.py
100
+ ./src/services/design_system_compiler.py
101
+ ./src/services/design_system_service.py
102
+ ./src/services/design_system_templates.py
98
103
  ./src/services/drive_uploader.py
99
104
  ./src/services/genie_service.py
100
105
  ./src/services/google_slides_auth.py
@@ -119,12 +124,14 @@ setup.py
119
124
  ./src/services/identity_providers/workspace_provider.py
120
125
  ./src/services/tools/__init__.py
121
126
  ./src/services/tools/agent_bricks_tool.py
127
+ ./src/services/tools/ds_asset_tool.py
122
128
  ./src/services/tools/genie_tool.py
123
129
  ./src/services/tools/mcp_tool.py
124
130
  ./src/services/tools/model_endpoint_tool.py
125
131
  ./src/services/tools/vector_tool.py
126
132
  ./src/utils/__init__.py
127
133
  ./src/utils/css_utils.py
134
+ ./src/utils/ds_asset_utils.py
128
135
  ./src/utils/error_handling.py
129
136
  ./src/utils/html_safety.py
130
137
  ./src/utils/html_utils.py
@@ -172,6 +179,7 @@ src/api/routes/version.py
172
179
  src/api/routes/settings/__init__.py
173
180
  src/api/routes/settings/contributors.py
174
181
  src/api/routes/settings/deck_prompts.py
182
+ src/api/routes/settings/design_systems.py
175
183
  src/api/routes/settings/identities.py
176
184
  src/api/routes/settings/slide_styles.py
177
185
  src/api/schemas/__init__.py
@@ -212,6 +220,7 @@ src/core/user_context.py
212
220
  src/database/__init__.py
213
221
  src/database/models/__init__.py
214
222
  src/database/models/deck_contributor.py
223
+ src/database/models/design_system.py
215
224
  src/database/models/feedback.py
216
225
  src/database/models/genie_space.py
217
226
  src/database/models/google_global_credentials.py
@@ -234,6 +243,9 @@ src/services/agent.py
234
243
  src/services/agent_factory.py
235
244
  src/services/config_service.py
236
245
  src/services/config_validator.py
246
+ src/services/design_system_compiler.py
247
+ src/services/design_system_service.py
248
+ src/services/design_system_templates.py
237
249
  src/services/drive_uploader.py
238
250
  src/services/genie_service.py
239
251
  src/services/google_slides_auth.py
@@ -258,12 +270,14 @@ src/services/identity_providers/local_provider.py
258
270
  src/services/identity_providers/workspace_provider.py
259
271
  src/services/tools/__init__.py
260
272
  src/services/tools/agent_bricks_tool.py
273
+ src/services/tools/ds_asset_tool.py
261
274
  src/services/tools/genie_tool.py
262
275
  src/services/tools/mcp_tool.py
263
276
  src/services/tools/model_endpoint_tool.py
264
277
  src/services/tools/vector_tool.py
265
278
  src/utils/__init__.py
266
279
  src/utils/css_utils.py
280
+ src/utils/ds_asset_utils.py
267
281
  src/utils/error_handling.py
268
282
  src/utils/html_safety.py
269
283
  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.dev6"
7
+ version = "0.3.11.dev7"
8
8
  description = "Tellr application package for Databricks Apps"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -27,6 +27,7 @@ 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,
30
31
  identities_router,
31
32
  slide_styles_router,
32
33
  )
@@ -434,6 +435,7 @@ app.include_router(contributors_router, prefix="/api/settings", tags=["settings"
434
435
  app.include_router(deck_prompts_router, prefix="/api/settings", tags=["settings"])
435
436
  app.include_router(identities_router, prefix="/api/settings", tags=["settings"])
436
437
  app.include_router(slide_styles_router, prefix="/api/settings", tags=["settings"])
438
+ app.include_router(design_systems_router, prefix="/api/settings", tags=["settings"])
437
439
 
438
440
  # MCP server — mount the FastMCP streamable-HTTP ASGI app at /mcp.
439
441
  # Must be registered before the SPA catch-all (which is added lazily by
@@ -21,10 +21,61 @@ 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 slide_style_id and deck_prompt_id reference existing library entries."""
25
- from src.database.models import SlideStyleLibrary, SlideDeckPromptLibrary
24
+ """Validate the library references and SANITIZE the template pin, in place.
25
+
26
+ ``design_system_id``, ``slide_style_id`` and ``deck_prompt_id`` stay STRICT
27
+ (422 on a missing/inactive entry — the existing convention). The template
28
+ pin is SELF-HEALING instead: template ids are re-minted by the sanctioned
29
+ delete+re-upload workflow, so a persisted config can legitimately hold a
30
+ stale pin — rejecting it would wedge EVERY later config update. When
31
+ ``template_id`` does not resolve to a template belonging to the selected
32
+ design system (pin with no design system, another system's template, or a
33
+ missing/re-materialized template), it is cleared in place with a warning;
34
+ the caller persists and returns the sanitized config so the frontend state
35
+ syncs. This mirrors the deliberately lenient generation path.
36
+ """
37
+ from src.database.models import (
38
+ DesignSystem,
39
+ DesignSystemTemplate,
40
+ SlideDeckPromptLibrary,
41
+ SlideStyleLibrary,
42
+ )
26
43
 
27
44
  with get_db_session() as db:
45
+ if config.design_system_id is not None:
46
+ design_system = (
47
+ db.query(DesignSystem)
48
+ .filter(
49
+ DesignSystem.id == config.design_system_id,
50
+ DesignSystem.is_active == True, # noqa: E712
51
+ )
52
+ .first()
53
+ )
54
+ if not design_system:
55
+ raise HTTPException(
56
+ status_code=422,
57
+ detail=f"design_system_id {config.design_system_id} not found",
58
+ )
59
+ if config.template_id is not None:
60
+ template = None
61
+ if config.design_system_id is not None:
62
+ template = (
63
+ db.query(DesignSystemTemplate)
64
+ .filter(
65
+ DesignSystemTemplate.id == config.template_id,
66
+ DesignSystemTemplate.design_system_id == config.design_system_id,
67
+ )
68
+ .first()
69
+ )
70
+ if template is None:
71
+ logger.warning(
72
+ "Clearing stale template pin %s (design_system_id=%s): the "
73
+ "template does not exist or does not belong to the selected "
74
+ "design system; saving the config without it",
75
+ config.template_id,
76
+ config.design_system_id,
77
+ )
78
+ config.template_id = None
28
79
  if config.slide_style_id is not None:
29
80
  style = (
30
81
  db.query(SlideStyleLibrary)
@@ -100,7 +151,9 @@ async def get_agent_config(session_id: str):
100
151
  async def put_agent_config(session_id: str, config: AgentConfig):
101
152
  """Replace the full agent config for a session."""
102
153
  # Pydantic already validated duplicates via model_validator.
103
- # Now validate foreign-key references.
154
+ # Now validate foreign-key references; a stale template pin is sanitized
155
+ # (cleared in place) rather than rejected, so what is persisted and
156
+ # returned below is the effective config.
104
157
  _validate_references(config)
105
158
 
106
159
  try:
@@ -405,12 +405,14 @@ 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}} placeholders with base64 data URIs
409
- # so the PPTX converter can extract and embed the actual images
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
410
411
  from src.utils.image_utils import substitute_deck_dict_images
411
412
  from src.core.database import get_db_session
412
413
  with get_db_session() as db:
413
414
  substitute_deck_dict_images(slide_deck, db)
415
+ substitute_deck_dict_ds_assets(slide_deck, db)
414
416
 
415
417
  slide_count = len(slide_deck.get("slides", []))
416
418
  log_msg = (
@@ -276,11 +276,13 @@ 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}} placeholders with base64 data URIs
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
280
281
  from src.utils.image_utils import substitute_deck_dict_images
281
282
  from src.core.database import get_db_session
282
283
  with get_db_session() as db:
283
284
  substitute_deck_dict_images(slide_deck, db)
285
+ substitute_deck_dict_ds_assets(slide_deck, db)
284
286
 
285
287
  slides_data = slide_deck.get("slides", [])
286
288
  total = len(slides_data)
@@ -502,9 +504,11 @@ async def export_google_slides_from_huashu(
502
504
  # legacy /export route). Use a fresh session because the request's `db`
503
505
  # is held by the route's transaction context.
504
506
  from src.core.database import get_db_session
507
+ from src.utils.ds_asset_utils import substitute_deck_dict_ds_assets
505
508
  from src.utils.image_utils import substitute_deck_dict_images
506
509
  with get_db_session() as imdb:
507
510
  substitute_deck_dict_images(slide_deck, imdb)
511
+ substitute_deck_dict_ds_assets(slide_deck, imdb)
508
512
 
509
513
  title = slide_deck.get("title") or "Presentation"
510
514
  slides_data = slide_deck.get("slides") or []
@@ -149,10 +149,12 @@ 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
152
153
  from src.utils.image_utils import substitute_deck_dict_images
153
154
 
154
155
  with get_db_session() as db:
155
156
  substitute_deck_dict_images(deck_dict, db)
157
+ substitute_deck_dict_ds_assets(deck_dict, db)
156
158
 
157
159
 
158
160
  @router.post("")
@@ -1,12 +1,14 @@
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
4
5
  from src.api.routes.settings.identities import router as identities_router
5
6
  from src.api.routes.settings.slide_styles import router as slide_styles_router
6
7
 
7
8
  __all__ = [
8
9
  "contributors_router",
9
10
  "deck_prompts_router",
11
+ "design_systems_router",
10
12
  "identities_router",
11
13
  "slide_styles_router",
12
14
  ]