databricks-tellr-app 0.4.3.dev25__tar.gz → 0.4.3.dev27__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.
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/PKG-INFO +8 -10
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/databricks_tellr_app/run.py +0 -45
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/databricks_tellr_app.egg-info/PKG-INFO +8 -10
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/databricks_tellr_app.egg-info/SOURCES.txt +0 -62
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/databricks_tellr_app.egg-info/requires.txt +7 -9
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/pyproject.toml +8 -17
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/fixtures/tour_demo_deck.json +1 -52
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/main.py +15 -22
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/mcp_auth.py +36 -25
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/chat.py +5 -80
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/export.py +107 -220
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/sessions.py +5 -74
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/settings/design_systems.py +22 -2
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/slides.py +4 -133
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/tour.py +0 -28
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/verification.py +9 -9
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/version.py +6 -2
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/schemas/agent_config.py +10 -4
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/schemas/settings/requests.py +11 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/schemas/settings/responses.py +2 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/schemas/streaming.py +0 -23
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/services/chat_service.py +14 -1035
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/services/job_queue.py +0 -15
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/services/session_manager.py +47 -1282
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/config_loader.py +11 -4
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/database.py +0 -375
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/databricks_client.py +50 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/defaults.py +0 -9
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/encryption.py +54 -32
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/init_default_profile.py +5 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/migrate_profiles_to_agent_config.py +28 -4
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/settings_db.py +2 -3
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/__init__.py +0 -8
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/encryption_key.py +6 -2
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/prompts.py +6 -7
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/session.py +1 -127
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/domain/slide_deck.py +4 -10
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/agent.py +5 -24
- databricks_tellr_app-0.4.3.dev25/src/services/agent_resolution.py → databricks_tellr_app-0.4.3.dev27/src/services/agent_factory.py +168 -260
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/config_service.py +12 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/design_system_compiler.py +20 -1
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/html_to_google_slides.py +92 -48
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/html_to_pptx.py +2 -2
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/profile_service.py +7 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/validator.py +10 -6
- databricks_tellr_app-0.4.3.dev27/src/utils/css_utils.py +78 -0
- databricks_tellr_app-0.4.3.dev25/src/api/services/deck_level_writer.py +0 -407
- databricks_tellr_app-0.4.3.dev25/src/api/services/slide_repository.py +0 -378
- databricks_tellr_app-0.4.3.dev25/src/core/backfill_session_slides_startup.py +0 -315
- databricks_tellr_app-0.4.3.dev25/src/core/checkpointer.py +0 -488
- databricks_tellr_app-0.4.3.dev25/src/core/skills/__init__.py +0 -225
- databricks_tellr_app-0.4.3.dev25/src/core/skills/architect.py +0 -64
- databricks_tellr_app-0.4.3.dev25/src/core/skills/build_reviewer.py +0 -80
- databricks_tellr_app-0.4.3.dev25/src/core/skills/builder.py +0 -54
- databricks_tellr_app-0.4.3.dev25/src/core/skills/data_analyst.py +0 -38
- databricks_tellr_app-0.4.3.dev25/src/core/skills/deck_reviewer.py +0 -24
- databricks_tellr_app-0.4.3.dev25/src/core/skills/fix_reviewer.py +0 -22
- databricks_tellr_app-0.4.3.dev25/src/core/skills/fixer.py +0 -52
- databricks_tellr_app-0.4.3.dev25/src/core/strip_retired_prompt_keys.py +0 -210
- databricks_tellr_app-0.4.3.dev25/src/database/models/deck_review.py +0 -77
- databricks_tellr_app-0.4.3.dev25/src/database/models/graph_checkpoint.py +0 -104
- databricks_tellr_app-0.4.3.dev25/src/domain/deck_spec.py +0 -166
- databricks_tellr_app-0.4.3.dev25/src/domain/finding.py +0 -313
- databricks_tellr_app-0.4.3.dev25/src/domain/skill_io.py +0 -259
- databricks_tellr_app-0.4.3.dev25/src/services/agent_factory.py +0 -150
- databricks_tellr_app-0.4.3.dev25/src/services/deck_css_aggregator.py +0 -211
- databricks_tellr_app-0.4.3.dev25/src/services/deck_review_store.py +0 -263
- databricks_tellr_app-0.4.3.dev25/src/services/foreman_service.py +0 -307
- databricks_tellr_app-0.4.3.dev25/src/services/graph/__init__.py +0 -6
- databricks_tellr_app-0.4.3.dev25/src/services/graph/builder.py +0 -282
- databricks_tellr_app-0.4.3.dev25/src/services/graph/event_emitter.py +0 -226
- databricks_tellr_app-0.4.3.dev25/src/services/graph/nodes.py +0 -2795
- databricks_tellr_app-0.4.3.dev25/src/services/graph/routers.py +0 -203
- databricks_tellr_app-0.4.3.dev25/src/services/graph/state.py +0 -307
- databricks_tellr_app-0.4.3.dev25/src/services/spec_sync.py +0 -756
- databricks_tellr_app-0.4.3.dev25/src/services/template_sections.py +0 -512
- databricks_tellr_app-0.4.3.dev25/src/utils/css_utils.py +0 -289
- databricks_tellr_app-0.4.3.dev25/src/utils/graph_safety.py +0 -100
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/README.md +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/databricks_tellr_app/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/databricks_tellr_app.egg-info/top_level.txt +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/setup.cfg +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/setup.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/_otel_bootstrap.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/mcp_server.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/middleware/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/middleware/csrf.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/middleware/request_logging.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/middleware/security_headers.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/_authz.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/admin.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/admin_usage.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/agent_config.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/deck_contributors.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/feedback.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/google_slides.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/images.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/local_version.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/profiles.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/settings/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/settings/contributors.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/settings/deck_prompts.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/settings/identities.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/settings/slide_styles.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/setup.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/routes/tools.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/schemas/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/schemas/feedback.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/schemas/requests.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/schemas/responses.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/schemas/settings/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/services/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/services/export_job_queue.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/services/feedback_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/services/session_naming.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/services/usage_events.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/services/usage_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/utils/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/api/utils/validation.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/context_utils.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/lakebase.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/mlflow_agent_spans.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/mlflow_tracing.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/otel_logging.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/permission_context.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/prompt_modules.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/core/user_context.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/deck_contributor.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/design_system.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/feedback.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/genie_space.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/google_global_credentials.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/google_oauth_token.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/identity.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/image.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/profile.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/profile_contributor.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/request_log.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/slide_deck_prompt.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/slide_style_library.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/usage_event.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/models/user_preference.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/database/types.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/domain/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/domain/slide.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/config_validator.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/converter_jail/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/converter_jail/ast_guard.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/converter_jail/codeprep.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/converter_jail/gslides_runner.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/converter_jail/jail.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/converter_jail/pptx_runner.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/converter_jail/protocol.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/design_system_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/design_system_templates.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/drive_uploader.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/evaluation/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/evaluation/llm_judge.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/genie_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/google_slides_auth.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/google_slides_prompts_defaults.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/identity_provider.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/identity_providers/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/identity_providers/account_provider.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/identity_providers/local_provider.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/identity_providers/workspace_provider.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/image_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/image_tools.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/permission_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/pptx_from_html_huashu.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/pptx_from_records.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/pptx_prompts_defaults.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/streaming_callback.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/tools/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/tools/agent_bricks_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/tools/ds_asset_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/tools/genie_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/tools/mcp_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/tools/model_endpoint_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/services/tools/vector_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/ds_asset_utils.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/error_handling.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/html_safety.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/html_utils.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/image_utils.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/js_validator.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/logging_config.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/pi_filter.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/slide_hash.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/src/utils/spotlight.py +0 -0
- {databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/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.
|
|
3
|
+
Version: 0.4.3.dev27
|
|
4
4
|
Summary: Tellr application package for Databricks Apps
|
|
5
5
|
Requires-Python: >=3.10
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -10,10 +10,10 @@ Requires-Dist: python-multipart==0.0.20
|
|
|
10
10
|
Requires-Dist: pydantic==2.12.4
|
|
11
11
|
Requires-Dist: pydantic-settings==2.12.0
|
|
12
12
|
Requires-Dist: databricks-langchain==0.9.0
|
|
13
|
-
Requires-Dist: langchain==1.
|
|
14
|
-
Requires-Dist: langchain-core==1.
|
|
15
|
-
Requires-Dist: langchain-community==0.4.
|
|
16
|
-
Requires-Dist: langchain-text-splitters==1.
|
|
13
|
+
Requires-Dist: langchain==1.0.5
|
|
14
|
+
Requires-Dist: langchain-core==1.0.4
|
|
15
|
+
Requires-Dist: langchain-community==0.4.1
|
|
16
|
+
Requires-Dist: langchain-text-splitters==1.0.0
|
|
17
17
|
Requires-Dist: litellm==1.80.11
|
|
18
18
|
Requires-Dist: mcp==1.27.0
|
|
19
19
|
Requires-Dist: opentelemetry-api==1.38.0
|
|
@@ -47,11 +47,9 @@ Requires-Dist: databricks-ai-bridge==0.21.0
|
|
|
47
47
|
Requires-Dist: databricks-ai-search==0.76
|
|
48
48
|
Requires-Dist: databricks-connect==16.1.7
|
|
49
49
|
Requires-Dist: databricks-vectorsearch==0.75
|
|
50
|
-
Requires-Dist: langchain-classic==1.0.
|
|
51
|
-
Requires-Dist: langgraph==1.
|
|
52
|
-
Requires-Dist: langgraph-
|
|
53
|
-
Requires-Dist: langgraph-prebuilt==1.1.0
|
|
54
|
-
Requires-Dist: langgraph-sdk==0.4.2
|
|
50
|
+
Requires-Dist: langchain-classic==1.0.0
|
|
51
|
+
Requires-Dist: langgraph==1.0.10
|
|
52
|
+
Requires-Dist: langgraph-prebuilt==1.0.10
|
|
55
53
|
Requires-Dist: langsmith==0.9.5
|
|
56
54
|
Requires-Dist: unitycatalog-ai==0.3.2
|
|
57
55
|
Requires-Dist: unitycatalog-langchain==0.3.0
|
{databricks_tellr_app-0.4.3.dev25 → databricks_tellr_app-0.4.3.dev27}/databricks_tellr_app/run.py
RENAMED
|
@@ -74,29 +74,6 @@ def init_database(seed_databricks_defaults: bool = False) -> None:
|
|
|
74
74
|
logger.error(f"Failed to migrate profiles/sessions to agent_config: {e}\n{tb}")
|
|
75
75
|
raise SystemExit(1) from e
|
|
76
76
|
|
|
77
|
-
# Row-per-slide (PR1): migrate historical deck_json blobs into session_slides
|
|
78
|
-
# rows. Runs HERE, pre-fork, for the same reason as the two migrations above —
|
|
79
|
-
# the uvicorn workers must never execute migration code. It originally lived in
|
|
80
|
-
# the FastAPI lifespan; main moved migrations out of the lifespan while this
|
|
81
|
-
# branch was in flight, so it was relocated on merge rather than dropped.
|
|
82
|
-
#
|
|
83
|
-
# Guarded by a per-deck NOT EXISTS anti-join over session_slides (index-only
|
|
84
|
-
# against its composite PK), so it is a no-op scan once every deck has rows.
|
|
85
|
-
# A deck whose blob will not parse is logged and skipped, never raised — one
|
|
86
|
-
# bad row must not abort startup.
|
|
87
|
-
logger.info("Backfilling session_slides rows...")
|
|
88
|
-
try:
|
|
89
|
-
from src.core.database import get_session_local
|
|
90
|
-
from src.core.backfill_session_slides_startup import backfill_unmigrated_decks
|
|
91
|
-
|
|
92
|
-
slide_decks = backfill_unmigrated_decks(get_session_local())
|
|
93
|
-
if slide_decks:
|
|
94
|
-
logger.info(f"Backfilled {slide_decks} deck(s) into session_slides rows")
|
|
95
|
-
except Exception as e:
|
|
96
|
-
tb = traceback.format_exc()
|
|
97
|
-
logger.error(f"Failed to backfill session_slides rows: {e}\n{tb}")
|
|
98
|
-
raise SystemExit(1) from e
|
|
99
|
-
|
|
100
77
|
# Seed default content
|
|
101
78
|
logger.info(f"Seeding defaults (include_databricks={seed_databricks_defaults})...")
|
|
102
79
|
try:
|
|
@@ -120,28 +97,6 @@ def init_database(seed_databricks_defaults: bool = False) -> None:
|
|
|
120
97
|
logger.error(f"Failed to ensure encryption key: {e}\n{tb}")
|
|
121
98
|
raise SystemExit(1) from e
|
|
122
99
|
|
|
123
|
-
# Retired prompt overrides: strip 'system_prompt' and
|
|
124
|
-
# 'slide_editing_instructions' out of every stored agent_config blob. The
|
|
125
|
-
# physical columns are dropped inside init_db()'s migration chain, early,
|
|
126
|
-
# because a database that still has them cannot insert a profile; the BLOB
|
|
127
|
-
# strip runs LAST, deliberately — it is the one position no later step can
|
|
128
|
-
# undo by writing a fresh blob (seed_defaults above creates profiles).
|
|
129
|
-
# A blob that will not parse is logged and skipped, never raised, so one bad
|
|
130
|
-
# row cannot abort startup; anything else here is SystemExit(1) like the five
|
|
131
|
-
# steps above.
|
|
132
|
-
logger.info("Stripping retired prompt keys from agent_config blobs...")
|
|
133
|
-
try:
|
|
134
|
-
from src.core.database import get_session_local
|
|
135
|
-
from src.core.strip_retired_prompt_keys import strip_retired_prompt_keys
|
|
136
|
-
|
|
137
|
-
stripped = strip_retired_prompt_keys(get_session_local())
|
|
138
|
-
if stripped:
|
|
139
|
-
logger.info(f"Stripped retired prompt keys from {stripped} row(s)")
|
|
140
|
-
except Exception as e:
|
|
141
|
-
tb = traceback.format_exc()
|
|
142
|
-
logger.error(f"Failed to strip retired prompt keys from agent_config: {e}\n{tb}")
|
|
143
|
-
raise SystemExit(1) from e
|
|
144
|
-
|
|
145
100
|
|
|
146
101
|
def main() -> None:
|
|
147
102
|
"""Start the uvicorn server."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: databricks-tellr-app
|
|
3
|
-
Version: 0.4.3.
|
|
3
|
+
Version: 0.4.3.dev27
|
|
4
4
|
Summary: Tellr application package for Databricks Apps
|
|
5
5
|
Requires-Python: >=3.10
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -10,10 +10,10 @@ Requires-Dist: python-multipart==0.0.20
|
|
|
10
10
|
Requires-Dist: pydantic==2.12.4
|
|
11
11
|
Requires-Dist: pydantic-settings==2.12.0
|
|
12
12
|
Requires-Dist: databricks-langchain==0.9.0
|
|
13
|
-
Requires-Dist: langchain==1.
|
|
14
|
-
Requires-Dist: langchain-core==1.
|
|
15
|
-
Requires-Dist: langchain-community==0.4.
|
|
16
|
-
Requires-Dist: langchain-text-splitters==1.
|
|
13
|
+
Requires-Dist: langchain==1.0.5
|
|
14
|
+
Requires-Dist: langchain-core==1.0.4
|
|
15
|
+
Requires-Dist: langchain-community==0.4.1
|
|
16
|
+
Requires-Dist: langchain-text-splitters==1.0.0
|
|
17
17
|
Requires-Dist: litellm==1.80.11
|
|
18
18
|
Requires-Dist: mcp==1.27.0
|
|
19
19
|
Requires-Dist: opentelemetry-api==1.38.0
|
|
@@ -47,11 +47,9 @@ Requires-Dist: databricks-ai-bridge==0.21.0
|
|
|
47
47
|
Requires-Dist: databricks-ai-search==0.76
|
|
48
48
|
Requires-Dist: databricks-connect==16.1.7
|
|
49
49
|
Requires-Dist: databricks-vectorsearch==0.75
|
|
50
|
-
Requires-Dist: langchain-classic==1.0.
|
|
51
|
-
Requires-Dist: langgraph==1.
|
|
52
|
-
Requires-Dist: langgraph-
|
|
53
|
-
Requires-Dist: langgraph-prebuilt==1.1.0
|
|
54
|
-
Requires-Dist: langgraph-sdk==0.4.2
|
|
50
|
+
Requires-Dist: langchain-classic==1.0.0
|
|
51
|
+
Requires-Dist: langgraph==1.0.10
|
|
52
|
+
Requires-Dist: langgraph-prebuilt==1.0.10
|
|
55
53
|
Requires-Dist: langsmith==0.9.5
|
|
56
54
|
Requires-Dist: unitycatalog-ai==0.3.2
|
|
57
55
|
Requires-Dist: unitycatalog-langchain==0.3.0
|
|
@@ -51,20 +51,16 @@ setup.py
|
|
|
51
51
|
./src/api/schemas/settings/responses.py
|
|
52
52
|
./src/api/services/__init__.py
|
|
53
53
|
./src/api/services/chat_service.py
|
|
54
|
-
./src/api/services/deck_level_writer.py
|
|
55
54
|
./src/api/services/export_job_queue.py
|
|
56
55
|
./src/api/services/feedback_service.py
|
|
57
56
|
./src/api/services/job_queue.py
|
|
58
57
|
./src/api/services/session_manager.py
|
|
59
58
|
./src/api/services/session_naming.py
|
|
60
|
-
./src/api/services/slide_repository.py
|
|
61
59
|
./src/api/services/usage_events.py
|
|
62
60
|
./src/api/services/usage_service.py
|
|
63
61
|
./src/api/utils/__init__.py
|
|
64
62
|
./src/api/utils/validation.py
|
|
65
63
|
./src/core/__init__.py
|
|
66
|
-
./src/core/backfill_session_slides_startup.py
|
|
67
|
-
./src/core/checkpointer.py
|
|
68
64
|
./src/core/config_loader.py
|
|
69
65
|
./src/core/context_utils.py
|
|
70
66
|
./src/core/database.py
|
|
@@ -80,28 +76,17 @@ setup.py
|
|
|
80
76
|
./src/core/permission_context.py
|
|
81
77
|
./src/core/prompt_modules.py
|
|
82
78
|
./src/core/settings_db.py
|
|
83
|
-
./src/core/strip_retired_prompt_keys.py
|
|
84
79
|
./src/core/user_context.py
|
|
85
|
-
./src/core/skills/__init__.py
|
|
86
|
-
./src/core/skills/architect.py
|
|
87
|
-
./src/core/skills/build_reviewer.py
|
|
88
|
-
./src/core/skills/builder.py
|
|
89
|
-
./src/core/skills/data_analyst.py
|
|
90
|
-
./src/core/skills/deck_reviewer.py
|
|
91
|
-
./src/core/skills/fix_reviewer.py
|
|
92
|
-
./src/core/skills/fixer.py
|
|
93
80
|
./src/database/__init__.py
|
|
94
81
|
./src/database/types.py
|
|
95
82
|
./src/database/models/__init__.py
|
|
96
83
|
./src/database/models/deck_contributor.py
|
|
97
|
-
./src/database/models/deck_review.py
|
|
98
84
|
./src/database/models/design_system.py
|
|
99
85
|
./src/database/models/encryption_key.py
|
|
100
86
|
./src/database/models/feedback.py
|
|
101
87
|
./src/database/models/genie_space.py
|
|
102
88
|
./src/database/models/google_global_credentials.py
|
|
103
89
|
./src/database/models/google_oauth_token.py
|
|
104
|
-
./src/database/models/graph_checkpoint.py
|
|
105
90
|
./src/database/models/identity.py
|
|
106
91
|
./src/database/models/image.py
|
|
107
92
|
./src/database/models/profile.py
|
|
@@ -114,24 +99,17 @@ setup.py
|
|
|
114
99
|
./src/database/models/usage_event.py
|
|
115
100
|
./src/database/models/user_preference.py
|
|
116
101
|
./src/domain/__init__.py
|
|
117
|
-
./src/domain/deck_spec.py
|
|
118
|
-
./src/domain/finding.py
|
|
119
|
-
./src/domain/skill_io.py
|
|
120
102
|
./src/domain/slide.py
|
|
121
103
|
./src/domain/slide_deck.py
|
|
122
104
|
./src/services/__init__.py
|
|
123
105
|
./src/services/agent.py
|
|
124
106
|
./src/services/agent_factory.py
|
|
125
|
-
./src/services/agent_resolution.py
|
|
126
107
|
./src/services/config_service.py
|
|
127
108
|
./src/services/config_validator.py
|
|
128
|
-
./src/services/deck_css_aggregator.py
|
|
129
|
-
./src/services/deck_review_store.py
|
|
130
109
|
./src/services/design_system_compiler.py
|
|
131
110
|
./src/services/design_system_service.py
|
|
132
111
|
./src/services/design_system_templates.py
|
|
133
112
|
./src/services/drive_uploader.py
|
|
134
|
-
./src/services/foreman_service.py
|
|
135
113
|
./src/services/genie_service.py
|
|
136
114
|
./src/services/google_slides_auth.py
|
|
137
115
|
./src/services/google_slides_prompts_defaults.py
|
|
@@ -145,9 +123,7 @@ setup.py
|
|
|
145
123
|
./src/services/pptx_from_records.py
|
|
146
124
|
./src/services/pptx_prompts_defaults.py
|
|
147
125
|
./src/services/profile_service.py
|
|
148
|
-
./src/services/spec_sync.py
|
|
149
126
|
./src/services/streaming_callback.py
|
|
150
|
-
./src/services/template_sections.py
|
|
151
127
|
./src/services/validator.py
|
|
152
128
|
./src/services/converter_jail/__init__.py
|
|
153
129
|
./src/services/converter_jail/ast_guard.py
|
|
@@ -158,12 +134,6 @@ setup.py
|
|
|
158
134
|
./src/services/converter_jail/protocol.py
|
|
159
135
|
./src/services/evaluation/__init__.py
|
|
160
136
|
./src/services/evaluation/llm_judge.py
|
|
161
|
-
./src/services/graph/__init__.py
|
|
162
|
-
./src/services/graph/builder.py
|
|
163
|
-
./src/services/graph/event_emitter.py
|
|
164
|
-
./src/services/graph/nodes.py
|
|
165
|
-
./src/services/graph/routers.py
|
|
166
|
-
./src/services/graph/state.py
|
|
167
137
|
./src/services/identity_providers/__init__.py
|
|
168
138
|
./src/services/identity_providers/account_provider.py
|
|
169
139
|
./src/services/identity_providers/local_provider.py
|
|
@@ -179,7 +149,6 @@ setup.py
|
|
|
179
149
|
./src/utils/css_utils.py
|
|
180
150
|
./src/utils/ds_asset_utils.py
|
|
181
151
|
./src/utils/error_handling.py
|
|
182
|
-
./src/utils/graph_safety.py
|
|
183
152
|
./src/utils/html_safety.py
|
|
184
153
|
./src/utils/html_utils.py
|
|
185
154
|
./src/utils/image_utils.py
|
|
@@ -244,20 +213,16 @@ src/api/schemas/settings/requests.py
|
|
|
244
213
|
src/api/schemas/settings/responses.py
|
|
245
214
|
src/api/services/__init__.py
|
|
246
215
|
src/api/services/chat_service.py
|
|
247
|
-
src/api/services/deck_level_writer.py
|
|
248
216
|
src/api/services/export_job_queue.py
|
|
249
217
|
src/api/services/feedback_service.py
|
|
250
218
|
src/api/services/job_queue.py
|
|
251
219
|
src/api/services/session_manager.py
|
|
252
220
|
src/api/services/session_naming.py
|
|
253
|
-
src/api/services/slide_repository.py
|
|
254
221
|
src/api/services/usage_events.py
|
|
255
222
|
src/api/services/usage_service.py
|
|
256
223
|
src/api/utils/__init__.py
|
|
257
224
|
src/api/utils/validation.py
|
|
258
225
|
src/core/__init__.py
|
|
259
|
-
src/core/backfill_session_slides_startup.py
|
|
260
|
-
src/core/checkpointer.py
|
|
261
226
|
src/core/config_loader.py
|
|
262
227
|
src/core/context_utils.py
|
|
263
228
|
src/core/database.py
|
|
@@ -273,28 +238,17 @@ src/core/otel_logging.py
|
|
|
273
238
|
src/core/permission_context.py
|
|
274
239
|
src/core/prompt_modules.py
|
|
275
240
|
src/core/settings_db.py
|
|
276
|
-
src/core/strip_retired_prompt_keys.py
|
|
277
241
|
src/core/user_context.py
|
|
278
|
-
src/core/skills/__init__.py
|
|
279
|
-
src/core/skills/architect.py
|
|
280
|
-
src/core/skills/build_reviewer.py
|
|
281
|
-
src/core/skills/builder.py
|
|
282
|
-
src/core/skills/data_analyst.py
|
|
283
|
-
src/core/skills/deck_reviewer.py
|
|
284
|
-
src/core/skills/fix_reviewer.py
|
|
285
|
-
src/core/skills/fixer.py
|
|
286
242
|
src/database/__init__.py
|
|
287
243
|
src/database/types.py
|
|
288
244
|
src/database/models/__init__.py
|
|
289
245
|
src/database/models/deck_contributor.py
|
|
290
|
-
src/database/models/deck_review.py
|
|
291
246
|
src/database/models/design_system.py
|
|
292
247
|
src/database/models/encryption_key.py
|
|
293
248
|
src/database/models/feedback.py
|
|
294
249
|
src/database/models/genie_space.py
|
|
295
250
|
src/database/models/google_global_credentials.py
|
|
296
251
|
src/database/models/google_oauth_token.py
|
|
297
|
-
src/database/models/graph_checkpoint.py
|
|
298
252
|
src/database/models/identity.py
|
|
299
253
|
src/database/models/image.py
|
|
300
254
|
src/database/models/profile.py
|
|
@@ -307,24 +261,17 @@ src/database/models/slide_style_library.py
|
|
|
307
261
|
src/database/models/usage_event.py
|
|
308
262
|
src/database/models/user_preference.py
|
|
309
263
|
src/domain/__init__.py
|
|
310
|
-
src/domain/deck_spec.py
|
|
311
|
-
src/domain/finding.py
|
|
312
|
-
src/domain/skill_io.py
|
|
313
264
|
src/domain/slide.py
|
|
314
265
|
src/domain/slide_deck.py
|
|
315
266
|
src/services/__init__.py
|
|
316
267
|
src/services/agent.py
|
|
317
268
|
src/services/agent_factory.py
|
|
318
|
-
src/services/agent_resolution.py
|
|
319
269
|
src/services/config_service.py
|
|
320
270
|
src/services/config_validator.py
|
|
321
|
-
src/services/deck_css_aggregator.py
|
|
322
|
-
src/services/deck_review_store.py
|
|
323
271
|
src/services/design_system_compiler.py
|
|
324
272
|
src/services/design_system_service.py
|
|
325
273
|
src/services/design_system_templates.py
|
|
326
274
|
src/services/drive_uploader.py
|
|
327
|
-
src/services/foreman_service.py
|
|
328
275
|
src/services/genie_service.py
|
|
329
276
|
src/services/google_slides_auth.py
|
|
330
277
|
src/services/google_slides_prompts_defaults.py
|
|
@@ -338,9 +285,7 @@ src/services/pptx_from_html_huashu.py
|
|
|
338
285
|
src/services/pptx_from_records.py
|
|
339
286
|
src/services/pptx_prompts_defaults.py
|
|
340
287
|
src/services/profile_service.py
|
|
341
|
-
src/services/spec_sync.py
|
|
342
288
|
src/services/streaming_callback.py
|
|
343
|
-
src/services/template_sections.py
|
|
344
289
|
src/services/validator.py
|
|
345
290
|
src/services/converter_jail/__init__.py
|
|
346
291
|
src/services/converter_jail/ast_guard.py
|
|
@@ -351,12 +296,6 @@ src/services/converter_jail/pptx_runner.py
|
|
|
351
296
|
src/services/converter_jail/protocol.py
|
|
352
297
|
src/services/evaluation/__init__.py
|
|
353
298
|
src/services/evaluation/llm_judge.py
|
|
354
|
-
src/services/graph/__init__.py
|
|
355
|
-
src/services/graph/builder.py
|
|
356
|
-
src/services/graph/event_emitter.py
|
|
357
|
-
src/services/graph/nodes.py
|
|
358
|
-
src/services/graph/routers.py
|
|
359
|
-
src/services/graph/state.py
|
|
360
299
|
src/services/identity_providers/__init__.py
|
|
361
300
|
src/services/identity_providers/account_provider.py
|
|
362
301
|
src/services/identity_providers/local_provider.py
|
|
@@ -372,7 +311,6 @@ src/utils/__init__.py
|
|
|
372
311
|
src/utils/css_utils.py
|
|
373
312
|
src/utils/ds_asset_utils.py
|
|
374
313
|
src/utils/error_handling.py
|
|
375
|
-
src/utils/graph_safety.py
|
|
376
314
|
src/utils/html_safety.py
|
|
377
315
|
src/utils/html_utils.py
|
|
378
316
|
src/utils/image_utils.py
|
|
@@ -4,10 +4,10 @@ python-multipart==0.0.20
|
|
|
4
4
|
pydantic==2.12.4
|
|
5
5
|
pydantic-settings==2.12.0
|
|
6
6
|
databricks-langchain==0.9.0
|
|
7
|
-
langchain==1.
|
|
8
|
-
langchain-core==1.
|
|
9
|
-
langchain-community==0.4.
|
|
10
|
-
langchain-text-splitters==1.
|
|
7
|
+
langchain==1.0.5
|
|
8
|
+
langchain-core==1.0.4
|
|
9
|
+
langchain-community==0.4.1
|
|
10
|
+
langchain-text-splitters==1.0.0
|
|
11
11
|
litellm==1.80.11
|
|
12
12
|
mcp==1.27.0
|
|
13
13
|
opentelemetry-api==1.38.0
|
|
@@ -41,11 +41,9 @@ databricks-ai-bridge==0.21.0
|
|
|
41
41
|
databricks-ai-search==0.76
|
|
42
42
|
databricks-connect==16.1.7
|
|
43
43
|
databricks-vectorsearch==0.75
|
|
44
|
-
langchain-classic==1.0.
|
|
45
|
-
langgraph==1.
|
|
46
|
-
langgraph-
|
|
47
|
-
langgraph-prebuilt==1.1.0
|
|
48
|
-
langgraph-sdk==0.4.2
|
|
44
|
+
langchain-classic==1.0.0
|
|
45
|
+
langgraph==1.0.10
|
|
46
|
+
langgraph-prebuilt==1.0.10
|
|
49
47
|
langsmith==0.9.5
|
|
50
48
|
unitycatalog-ai==0.3.2
|
|
51
49
|
unitycatalog-langchain==0.3.0
|
|
@@ -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.
|
|
7
|
+
version = "0.4.3.dev27"
|
|
8
8
|
description = "Tellr application package for Databricks Apps"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -15,10 +15,10 @@ dependencies = [
|
|
|
15
15
|
"pydantic==2.12.4",
|
|
16
16
|
"pydantic-settings==2.12.0",
|
|
17
17
|
"databricks-langchain==0.9.0",
|
|
18
|
-
"langchain==1.
|
|
19
|
-
"langchain-core==1.
|
|
20
|
-
"langchain-community==0.4.
|
|
21
|
-
"langchain-text-splitters==1.
|
|
18
|
+
"langchain==1.0.5",
|
|
19
|
+
"langchain-core==1.0.4",
|
|
20
|
+
"langchain-community==0.4.1",
|
|
21
|
+
"langchain-text-splitters==1.0.0",
|
|
22
22
|
"litellm==1.80.11",
|
|
23
23
|
"mcp==1.27.0",
|
|
24
24
|
"opentelemetry-api==1.38.0",
|
|
@@ -73,13 +73,6 @@ dependencies = [
|
|
|
73
73
|
# `pip install databricks-tellr-app` is safe.
|
|
74
74
|
# SDR-4437 MEDIUM-7 (July 2026): the 7 formerly-ranged direct deps above
|
|
75
75
|
# this block are now exact-pinned too; same refresh discipline.
|
|
76
|
-
# PR2 LangGraph stack bump (August 2026): updated langchain 1.0.5→1.3.14,
|
|
77
|
-
# langchain-core 1.0.4→1.5.3, langchain-community 0.4.1→0.4.2,
|
|
78
|
-
# langchain-text-splitters 1.0.0→1.1.2, langchain-classic 1.0.0→1.0.8,
|
|
79
|
-
# langgraph 1.0.10→1.2.10, added langgraph-checkpoint==4.1.1,
|
|
80
|
-
# langgraph-prebuilt 1.0.10→1.1.0, added langgraph-sdk==0.4.2. These match
|
|
81
|
-
# the repo-root requirements.txt and pyproject.toml. MUST be re-verified via
|
|
82
|
-
# a devloop deploy on db-tellr-dev-pinfix or equivalent before PR3 ships.
|
|
83
76
|
"databricks-sdk==0.120.0",
|
|
84
77
|
"mlflow[databricks]==3.14.0",
|
|
85
78
|
"mlflow-skinny==3.14.0",
|
|
@@ -88,11 +81,9 @@ dependencies = [
|
|
|
88
81
|
"databricks-ai-search==0.76",
|
|
89
82
|
"databricks-connect==16.1.7",
|
|
90
83
|
"databricks-vectorsearch==0.75",
|
|
91
|
-
"langchain-classic==1.0.
|
|
92
|
-
"langgraph==1.
|
|
93
|
-
"langgraph-
|
|
94
|
-
"langgraph-prebuilt==1.1.0",
|
|
95
|
-
"langgraph-sdk==0.4.2",
|
|
84
|
+
"langchain-classic==1.0.0",
|
|
85
|
+
"langgraph==1.0.10",
|
|
86
|
+
"langgraph-prebuilt==1.0.10",
|
|
96
87
|
"langsmith==0.9.5",
|
|
97
88
|
"unitycatalog-ai==0.3.2",
|
|
98
89
|
"unitycatalog-langchain==0.3.0",
|
|
@@ -24,56 +24,5 @@
|
|
|
24
24
|
}
|
|
25
25
|
],
|
|
26
26
|
"chat_prompt": "Create 3 slides about the benefits of AI in modern healthcare, with a title slide, key advantages, and future outlook.",
|
|
27
|
-
"chat_reply": "Here's your deck with 3 slides! I've created:\n\n1. **Title Slide** — introducing AI in healthcare\n2. **Key Advantages** — early detection, personalized treatment, operational efficiency, and drug discovery\n3. **Future Outlook** — predictive monitoring, AI-assisted surgery, and global health equity\n\nFeel free to ask me to refine any slide, add new ones, or change the style."
|
|
28
|
-
"deck_spec": {
|
|
29
|
-
"title": "Example Deck — AI in Healthcare",
|
|
30
|
-
"audience": "A first-time Tellr user taking the product tour: a general business audience, with no clinical or machine-learning background assumed.",
|
|
31
|
-
"purpose": "Show a new user what a finished Tellr deck looks like, on a subject that needs no domain briefing, so they can see structure and styling before they write their own prompt.",
|
|
32
|
-
"argument": "AI already delivers concrete benefits across diagnosis, treatment and research, and its near-term trajectory points at prevention and wider access, so it is worth engaging with now rather than watching.",
|
|
33
|
-
"call_to_action": "Ask the assistant to refine a slide, add a new one, or change the style: the next step of the tour.",
|
|
34
|
-
"narrative_arc": [
|
|
35
|
-
"Frame the subject: AI is already changing patient care, diagnostics and medical research, a transformation under way rather than a forecast.",
|
|
36
|
-
"Ground that claim in four advantages visible today: earlier disease detection, personalized treatment, operational efficiency, and faster drug discovery.",
|
|
37
|
-
"Extend today's gains into the near future and land on access: predictive monitoring, AI-assisted surgery, and specialist-level care reaching underserved communities."
|
|
38
|
-
],
|
|
39
|
-
"design_contract": {
|
|
40
|
-
"design_system_id": null,
|
|
41
|
-
"template_id": null,
|
|
42
|
-
"slide_style_id": null
|
|
43
|
-
},
|
|
44
|
-
"resolved_data": {
|
|
45
|
-
"synthesis": "No live data was resolved for this deck. The tour ships fixed illustrative bytes so every user sees the same three slides; the claims are widely reported general benefits of AI in healthcare, not figures drawn from a source system.",
|
|
46
|
-
"figures": [],
|
|
47
|
-
"gaps": [
|
|
48
|
-
"No quantitative source: the deck cites no measured figure, so no claim in it is traceable to a dataset.",
|
|
49
|
-
"No organisation context: the tour deck is deliberately generic and names no customer, hospital or vendor."
|
|
50
|
-
]
|
|
51
|
-
},
|
|
52
|
-
"slides": [
|
|
53
|
-
{
|
|
54
|
-
"position": 0,
|
|
55
|
-
"purpose": "Open the deck: name the subject and frame AI in healthcare as a transformation already under way.",
|
|
56
|
-
"content_brief": "Title slide. Badge reading 'AI & Healthcare', headline 'The Benefits of AI in Modern Healthcare', and a one-line standfirst naming the three areas the deck covers: patient care, diagnostics, and medical research.",
|
|
57
|
-
"assumes": "Nothing. This is the deck's first slide.",
|
|
58
|
-
"hands_off": "The reader knows the subject and expects concrete advantages next.",
|
|
59
|
-
"data_references": []
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
"position": 1,
|
|
63
|
-
"purpose": "Make the case with four concrete present-day advantages, so the benefit claim is specific rather than atmospheric.",
|
|
64
|
-
"content_brief": "Four bolded items, one explanatory clause each: early disease detection (imaging patterns a human reader can miss), personalized treatment plans (genetics, lifestyle, history), operational efficiency (scheduling, documentation, triage), and drug discovery acceleration (molecular simulation at scale).",
|
|
65
|
-
"assumes": "The reader has accepted the framing from the title slide.",
|
|
66
|
-
"hands_off": "The present-tense case is made; the reader is ready to look forward.",
|
|
67
|
-
"data_references": []
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"position": 2,
|
|
71
|
-
"purpose": "Extend the argument from today's gains to the near future and close on access, so the deck ends on consequence rather than a list.",
|
|
72
|
-
"content_brief": "Three bolded forward-looking items: predictive health monitoring (wearables shifting medicine from reactive to proactive), AI-assisted surgery (robotics guided by real-time analysis), and global health equity (mobile diagnostics for underserved communities). Close on the italic line about healthcare becoming intelligent, personalized and accessible to all.",
|
|
73
|
-
"assumes": "The reader accepts the four present-day advantages from the previous slide.",
|
|
74
|
-
"hands_off": "The deck ends; the reader leaves with the equity claim as the takeaway.",
|
|
75
|
-
"data_references": []
|
|
76
|
-
}
|
|
77
|
-
]
|
|
78
|
-
}
|
|
27
|
+
"chat_reply": "Here's your deck with 3 slides! I've created:\n\n1. **Title Slide** — introducing AI in healthcare\n2. **Key Advantages** — early detection, personalized treatment, operational efficiency, and drug discovery\n3. **Future Outlook** — predictive monitoring, AI-assisted surgery, and global health equity\n\nFeel free to ask me to refine any slide, add new ones, or change the style."
|
|
79
28
|
}
|
|
@@ -51,14 +51,13 @@ _worker_task = None
|
|
|
51
51
|
_export_worker_task = None
|
|
52
52
|
_cleanup_task = None
|
|
53
53
|
_timeout_task = None
|
|
54
|
-
_spec_sweeper_task = None
|
|
55
54
|
_frontend_assets_stack: ExitStack | None = None
|
|
56
55
|
|
|
57
56
|
|
|
58
57
|
@asynccontextmanager
|
|
59
58
|
async def lifespan(app: FastAPI):
|
|
60
59
|
"""Lifespan context manager for startup/shutdown events."""
|
|
61
|
-
global _worker_task, _export_worker_task, _cleanup_task, _timeout_task,
|
|
60
|
+
global _worker_task, _export_worker_task, _cleanup_task, _timeout_task, _frontend_assets_stack
|
|
62
61
|
|
|
63
62
|
# Startup
|
|
64
63
|
logger.info(f"Starting AI Slide Generator API (environment: {ENVIRONMENT})")
|
|
@@ -135,16 +134,6 @@ async def lifespan(app: FastAPI):
|
|
|
135
134
|
_cleanup_task = asyncio.create_task(request_log_cleanup_loop())
|
|
136
135
|
logger.info("Request log cleanup task started")
|
|
137
136
|
|
|
138
|
-
# Start the spec-dirty arc-review sweeper. A PERIODIC LOOP, so it belongs
|
|
139
|
-
# here beside the two above and NOT in run.py::init_database: the
|
|
140
|
-
# pre-fork rule there is for migrations and backfills, which must run
|
|
141
|
-
# exactly once, and a loop started in that step would die with it. It
|
|
142
|
-
# runs in every uvicorn worker (UVICORN_WORKERS defaults to 4), which is
|
|
143
|
-
# why claim_due_marker takes an atomic lease rather than trusting a read.
|
|
144
|
-
from src.services.spec_sync import spec_review_sweeper_loop
|
|
145
|
-
_spec_sweeper_task = asyncio.create_task(spec_review_sweeper_loop())
|
|
146
|
-
logger.info("Spec-review arc sweeper started")
|
|
147
|
-
|
|
148
137
|
# Recover any stuck requests from previous crashes
|
|
149
138
|
try:
|
|
150
139
|
recovered = await recover_stuck_requests()
|
|
@@ -196,14 +185,6 @@ async def lifespan(app: FastAPI):
|
|
|
196
185
|
pass
|
|
197
186
|
logger.info("MCP job timeout sweeper stopped")
|
|
198
187
|
|
|
199
|
-
if _spec_sweeper_task:
|
|
200
|
-
_spec_sweeper_task.cancel()
|
|
201
|
-
try:
|
|
202
|
-
await _spec_sweeper_task
|
|
203
|
-
except asyncio.CancelledError:
|
|
204
|
-
pass
|
|
205
|
-
logger.info("Spec-review arc sweeper stopped")
|
|
206
|
-
|
|
207
188
|
# Tear down the FastMCP session manager's task group. Safe to call
|
|
208
189
|
# unconditionally — the stack was entered unconditionally at startup.
|
|
209
190
|
await mcp_lifespan_stack.aclose()
|
|
@@ -508,11 +489,23 @@ logger.info("MCP server mounted at /mcp")
|
|
|
508
489
|
|
|
509
490
|
@app.get("/api/health")
|
|
510
491
|
async def health():
|
|
511
|
-
"""Health check endpoint.
|
|
492
|
+
"""Health check endpoint.
|
|
493
|
+
|
|
494
|
+
``encryption_key_source`` is load-bearing for deployment: ``tellr.update``
|
|
495
|
+
polls it to confirm a relocated app is reading the secret before it deletes
|
|
496
|
+
the Lakebase key row. Reports the source only — never the key.
|
|
497
|
+
|
|
498
|
+
``version`` comes from the installed wheel's metadata, so it tracks the
|
|
499
|
+
deployed release; it reads "unknown" from a source checkout.
|
|
500
|
+
"""
|
|
501
|
+
from src.api.routes.version import get_installed_version
|
|
502
|
+
from src.core.encryption import key_source
|
|
503
|
+
|
|
512
504
|
return {
|
|
513
505
|
"status": "healthy",
|
|
514
506
|
"environment": ENVIRONMENT,
|
|
515
|
-
"version":
|
|
507
|
+
"version": get_installed_version(),
|
|
508
|
+
"encryption_key_source": key_source(),
|
|
516
509
|
}
|
|
517
510
|
|
|
518
511
|
|
|
@@ -16,19 +16,22 @@ Accepts three identity sources, evaluated in priority order:
|
|
|
16
16
|
identity headers. The receiving app (tellr) trusts those headers
|
|
17
17
|
because the same proxy sets them, strips any caller-supplied versions,
|
|
18
18
|
and cannot be bypassed by external traffic. This path has no user
|
|
19
|
-
token, so
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
token, so the user-client ContextVar is left **unset**: agent tools
|
|
20
|
+
that resolve their client via ``get_user_client()`` fail closed rather
|
|
21
|
+
than silently running as tellr's service principal (SDR-4437 / F-CR-3).
|
|
22
|
+
Code that legitimately needs SP credentials on this path must call
|
|
23
|
+
``get_system_client()`` explicitly. Attribution (``created_by`` on
|
|
24
|
+
decks, etc.) remains the real user via ``user_name``.
|
|
22
25
|
|
|
23
26
|
The priority-3 path is gated on ``TELLR_TRUST_FORWARDED_IDENTITY=true``
|
|
24
27
|
so the behaviour is explicit at deploy time. Production Databricks Apps
|
|
25
28
|
deployments enable it; local dev does not.
|
|
26
29
|
|
|
27
30
|
The resolved identity is bound into the same request-scoped ContextVars
|
|
28
|
-
the browser flow uses (``set_current_user``, ``
|
|
29
|
-
``
|
|
30
|
-
permission service, MLflow, Google
|
|
31
|
-
without any MCP-specific plumbing.
|
|
31
|
+
the browser flow uses (``set_current_user``, ``set_permission_context``,
|
|
32
|
+
and — only when a user token is present — ``set_user_client``), so
|
|
33
|
+
downstream services (session manager, permission service, MLflow, Google
|
|
34
|
+
OAuth) see the caller's identity without any MCP-specific plumbing.
|
|
32
35
|
"""
|
|
33
36
|
|
|
34
37
|
from __future__ import annotations
|
|
@@ -43,7 +46,6 @@ from fastapi import Request
|
|
|
43
46
|
|
|
44
47
|
from src.core.databricks_client import (
|
|
45
48
|
get_or_create_user_client,
|
|
46
|
-
get_system_client,
|
|
47
49
|
set_user_client,
|
|
48
50
|
)
|
|
49
51
|
from src.core.permission_context import (
|
|
@@ -150,28 +152,24 @@ def extract_mcp_identity(request: Request) -> MCPIdentity:
|
|
|
150
152
|
def mcp_auth_scope(request: Request) -> Iterator[MCPIdentity]:
|
|
151
153
|
"""Authenticate an MCP request and bind identity ContextVars for the block.
|
|
152
154
|
|
|
153
|
-
On entry: resolves identity
|
|
154
|
-
|
|
155
|
+
On entry: resolves identity and binds ``current_user`` and
|
|
156
|
+
``permission_context``. The ``user_client`` ContextVar is bound only when
|
|
157
|
+
a real user token is present (priority 1/2); on the token-less priority-3
|
|
158
|
+
app-to-app path it is deliberately left unset.
|
|
155
159
|
|
|
156
160
|
On exit: clears all three ContextVars, even if the wrapped block raised.
|
|
157
161
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
Leaving ``user_client`` unset on priority 3 makes it true by construction
|
|
163
|
+
that agent tools (which resolve their client via ``get_user_client()``)
|
|
164
|
+
can never execute as tellr's service principal on the app-to-app path —
|
|
165
|
+
they fail closed with ``UserClientRequiredError`` in production
|
|
166
|
+
(SDR-4437 / F-CR-3). Code that legitimately needs SP credentials must call
|
|
167
|
+
``get_system_client()`` explicitly. Attribution (``created_by``) is
|
|
168
|
+
unaffected: it uses ``user_name`` from the forwarded identity headers,
|
|
169
|
+
which the proxy attests.
|
|
164
170
|
"""
|
|
165
171
|
identity = extract_mcp_identity(request)
|
|
166
172
|
|
|
167
|
-
if identity.token is not None:
|
|
168
|
-
user_client = get_or_create_user_client(identity.token)
|
|
169
|
-
else:
|
|
170
|
-
# Priority-3 path: no user token, so downstream Databricks API
|
|
171
|
-
# calls use tellr's service principal. Safe because the app-to-app
|
|
172
|
-
# model explicitly delegates credentialing to the receiving app.
|
|
173
|
-
user_client = get_system_client()
|
|
174
|
-
|
|
175
173
|
permission_ctx = build_permission_context(
|
|
176
174
|
user_id=identity.user_id,
|
|
177
175
|
user_name=identity.user_name,
|
|
@@ -179,9 +177,22 @@ def mcp_auth_scope(request: Request) -> Iterator[MCPIdentity]:
|
|
|
179
177
|
)
|
|
180
178
|
|
|
181
179
|
set_current_user(identity.user_name)
|
|
182
|
-
set_user_client(user_client)
|
|
183
180
|
set_permission_context(permission_ctx)
|
|
184
181
|
|
|
182
|
+
if identity.token is not None:
|
|
183
|
+
# Priority 1/2: a real user token is present. Bind the OBO client so
|
|
184
|
+
# downstream services (agent tools included) act as the user.
|
|
185
|
+
set_user_client(get_or_create_user_client(identity.token))
|
|
186
|
+
else:
|
|
187
|
+
# Priority-3 (app-to-app) path: no user token is available. Do NOT
|
|
188
|
+
# bind any client into the user-client ContextVar. Leaving it unset
|
|
189
|
+
# makes it true by construction that agent tools — which resolve their
|
|
190
|
+
# client via get_user_client() — can never run as the app service
|
|
191
|
+
# principal on this path: they fail closed with UserClientRequiredError
|
|
192
|
+
# in production (SDR-4437 / F-CR-3). Anything that legitimately needs
|
|
193
|
+
# the SP here must call get_system_client() explicitly.
|
|
194
|
+
set_user_client(None)
|
|
195
|
+
|
|
185
196
|
logger.debug(
|
|
186
197
|
"MCP auth scope entered",
|
|
187
198
|
extra={
|