databricks-tellr-app 0.4.3.dev32__tar.gz → 0.4.3.dev33__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.dev32 → databricks_tellr_app-0.4.3.dev33}/PKG-INFO +1 -1
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/databricks_tellr_app.egg-info/PKG-INFO +1 -1
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/databricks_tellr_app.egg-info/SOURCES.txt +2 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/pyproject.toml +1 -1
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/chat_service.py +5 -20
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/session_naming.py +16 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/defaults.py +4 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_runtime.py +4 -2
- databricks_tellr_app-0.4.3.dev33/src/services/gateway_openai.py +12 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_configuration_draft.py +35 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/html_to_google_slides.py +3 -2
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/html_to_pptx.py +7 -6
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/model_endpoint_catalog.py +53 -62
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/README.md +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/databricks_tellr_app/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/databricks_tellr_app/run.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/databricks_tellr_app.egg-info/dependency_links.txt +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/databricks_tellr_app.egg-info/requires.txt +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/databricks_tellr_app.egg-info/top_level.txt +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/setup.cfg +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/setup.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/_otel_bootstrap.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/fixtures/tour_demo_deck.json +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/main.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/mcp_auth.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/mcp_server.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/middleware/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/middleware/csrf.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/middleware/request_logging.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/middleware/security_headers.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/_authz.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/admin.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/admin_usage.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/agent_config.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/agent_definitions.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/chat.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/deck_contributors.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/export.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/feedback.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/google_slides.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/images.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/local_version.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/profiles.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/sessions.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/settings/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/settings/contributors.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/settings/deck_prompts.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/settings/design_systems.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/settings/identities.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/settings/slide_styles.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/setup.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/slides.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/tools.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/tour.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/verification.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/version.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/agent_config.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/agent_definitions.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/feedback.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/graph_release_history.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/graph_releases.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/requests.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/responses.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/settings/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/settings/requests.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/settings/responses.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/streaming.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/deck_level_writer.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/export_job_queue.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/feedback_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/job_queue.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/session_manager.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/slide_repository.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/usage_events.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/usage_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/utils/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/utils/validation.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/backfill_session_slides_startup.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/checkpointer.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/config_loader.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/context_utils.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/database.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/databricks_client.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/encryption.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/init_default_profile.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/lakebase.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/migrate_profiles_to_agent_config.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/mlflow_agent_spans.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/mlflow_tracing.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/otel_logging.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/permission_context.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/prompt_modules.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/settings_db.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/skills/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/skills/architect.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/skills/build_reviewer.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/skills/builder.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/skills/data_analyst.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/skills/deck_reviewer.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/skills/fix_reviewer.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/skills/fixer.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/strip_retired_prompt_keys.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/core/user_context.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/deck_contributor.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/deck_review.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/design_system.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/encryption_key.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/feedback.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/genie_space.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/google_global_credentials.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/google_oauth_token.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/graph_checkpoint.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/graph_configuration.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/identity.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/image.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/profile.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/profile_contributor.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/prompts.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/request_log.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/session.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/slide_deck_prompt.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/slide_style_library.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/usage_event.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/models/user_preference.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/database/types.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/domain/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/domain/conversation_engine.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/domain/deck_spec.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/domain/finding.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/domain/skill_io.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/domain/slide.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/domain/slide_deck.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_definition_manifest_v1.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_factory.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_model_payload.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_resolution.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_runtime_identity.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_schema_registry.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_schema_types.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_test_workbench.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/collaboration_history.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/config_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/config_validator.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/conversation_pins.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/converter_jail/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/converter_jail/ast_guard.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/converter_jail/codeprep.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/converter_jail/gslides_runner.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/converter_jail/jail.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/converter_jail/pptx_runner.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/converter_jail/protocol.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/deck_css_aggregator.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/deck_review_store.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/design_system_compiler.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/design_system_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/design_system_templates.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/drive_uploader.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/evaluation/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/evaluation/llm_judge.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/foreman_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/genie_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/google_slides_auth.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/google_slides_prompts_defaults.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph/builder.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph/event_emitter.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph/nodes.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph/routers.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph/state.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_configuration.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_configuration_bootstrap.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_configuration_content.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_configuration_publication.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_configuration_rollback.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_configuration_seed.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_configuration_workbench.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_definition_manifest.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_release_evidence.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/graph_release_history.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/identity_provider.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/identity_providers/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/identity_providers/account_provider.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/identity_providers/local_provider.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/identity_providers/workspace_provider.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/image_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/image_tools.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/model_endpoint_probe.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/permission_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/persisted_graph_release.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/pptx_from_html_huashu.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/pptx_from_records.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/pptx_prompts_defaults.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/profile_service.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/prompt_assembler.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/shared_deck_attribution.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/spec_sync.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/streaming_callback.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/template_sections.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/tools/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/tools/agent_bricks_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/tools/ds_asset_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/tools/genie_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/tools/mcp_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/tools/model_endpoint_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/tools/vector_tool.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/validator.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/__init__.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/css_utils.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/ds_asset_utils.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/error_handling.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/graph_safety.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/html_safety.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/html_utils.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/image_utils.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/js_validator.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/logging_config.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/pi_filter.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/slide_hash.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/spotlight.py +0 -0
- {databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/utils/text_caps.py +0 -0
|
@@ -147,6 +147,7 @@ setup.py
|
|
|
147
147
|
./src/services/design_system_templates.py
|
|
148
148
|
./src/services/drive_uploader.py
|
|
149
149
|
./src/services/foreman_service.py
|
|
150
|
+
./src/services/gateway_openai.py
|
|
150
151
|
./src/services/genie_service.py
|
|
151
152
|
./src/services/google_slides_auth.py
|
|
152
153
|
./src/services/google_slides_prompts_defaults.py
|
|
@@ -371,6 +372,7 @@ src/services/design_system_service.py
|
|
|
371
372
|
src/services/design_system_templates.py
|
|
372
373
|
src/services/drive_uploader.py
|
|
373
374
|
src/services/foreman_service.py
|
|
375
|
+
src/services/gateway_openai.py
|
|
374
376
|
src/services/genie_service.py
|
|
375
377
|
src/services/google_slides_auth.py
|
|
376
378
|
src/services/google_slides_prompts_defaults.py
|
|
@@ -1445,16 +1445,9 @@ class ChatService:
|
|
|
1445
1445
|
def run_title_gen():
|
|
1446
1446
|
"""Generate a session title in parallel with the main agent."""
|
|
1447
1447
|
try:
|
|
1448
|
-
from
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
from src.core.defaults import DEFAULT_CONFIG
|
|
1452
|
-
naming_model = ChatDatabricks(
|
|
1453
|
-
endpoint=DEFAULT_CONFIG["llm"]["endpoint"],
|
|
1454
|
-
max_tokens=50,
|
|
1455
|
-
temperature=0.3,
|
|
1456
|
-
workspace_client=get_user_client(),
|
|
1457
|
-
)
|
|
1448
|
+
from src.api.services.session_naming import build_session_title_model
|
|
1449
|
+
|
|
1450
|
+
naming_model = build_session_title_model()
|
|
1458
1451
|
generated_title = generate_session_title(message, naming_model)
|
|
1459
1452
|
if generated_title:
|
|
1460
1453
|
session_manager.rename_session(session_id, generated_title)
|
|
@@ -1999,17 +1992,9 @@ class ChatService:
|
|
|
1999
1992
|
session must never fail the turn, so this catches and logs.
|
|
2000
1993
|
"""
|
|
2001
1994
|
try:
|
|
2002
|
-
from
|
|
1995
|
+
from src.api.services.session_naming import build_session_title_model
|
|
2003
1996
|
|
|
2004
|
-
|
|
2005
|
-
from src.core.defaults import DEFAULT_CONFIG
|
|
2006
|
-
|
|
2007
|
-
naming_model = ChatDatabricks(
|
|
2008
|
-
endpoint=DEFAULT_CONFIG["llm"]["endpoint"],
|
|
2009
|
-
max_tokens=50,
|
|
2010
|
-
temperature=0.3,
|
|
2011
|
-
workspace_client=get_user_client(),
|
|
2012
|
-
)
|
|
1997
|
+
naming_model = build_session_title_model()
|
|
2013
1998
|
generated_title = generate_session_title(message, naming_model)
|
|
2014
1999
|
if generated_title:
|
|
2015
2000
|
session_manager.rename_session(session_id, generated_title)
|
|
@@ -88,6 +88,22 @@ def _was_truncated(response: object) -> bool:
|
|
|
88
88
|
return False
|
|
89
89
|
|
|
90
90
|
|
|
91
|
+
def build_session_title_model():
|
|
92
|
+
"""The title model: Gateway-routed, on the requesting user's OBO identity."""
|
|
93
|
+
from databricks_langchain import ChatDatabricks
|
|
94
|
+
|
|
95
|
+
from src.core.databricks_client import get_user_client
|
|
96
|
+
from src.core.defaults import SESSION_TITLE_MODEL
|
|
97
|
+
|
|
98
|
+
return ChatDatabricks(
|
|
99
|
+
model=SESSION_TITLE_MODEL,
|
|
100
|
+
use_ai_gateway=True,
|
|
101
|
+
max_tokens=50,
|
|
102
|
+
temperature=0.3,
|
|
103
|
+
workspace_client=get_user_client(),
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
|
|
91
107
|
def generate_session_title(
|
|
92
108
|
user_message: str,
|
|
93
109
|
model,
|
|
@@ -232,3 +232,7 @@ This means the user wants to modify these specific slides. Your response should:
|
|
|
232
232
|
For these operations, respond with a helpful message guiding users to the UI or workaround - do NOT attempt to return HTML.""",
|
|
233
233
|
},
|
|
234
234
|
}
|
|
235
|
+
|
|
236
|
+
#: Session-title generation (both engine paths) goes through Unity AI Gateway (ws2a).
|
|
237
|
+
#: Kept separate from DEFAULT_CONFIG["llm"], which the out-of-scope monolith still reads.
|
|
238
|
+
SESSION_TITLE_MODEL = "system.ai.claude-opus-4-6"
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/agent_runtime.py
RENAMED
|
@@ -231,7 +231,7 @@ def bind_structured_output_model(
|
|
|
231
231
|
the plain structured-output binding of ``schema``.
|
|
232
232
|
"""
|
|
233
233
|
model = model_factory(
|
|
234
|
-
|
|
234
|
+
model=configuration.endpoint_name,
|
|
235
235
|
temperature=configuration.temperature,
|
|
236
236
|
max_tokens=configuration.max_tokens,
|
|
237
237
|
top_p=configuration.top_p,
|
|
@@ -322,7 +322,9 @@ class DatabricksModelAdapter:
|
|
|
322
322
|
def _default_model_factory(**kwargs: Any) -> Any:
|
|
323
323
|
from databricks_langchain import ChatDatabricks # type: ignore[import-untyped]
|
|
324
324
|
|
|
325
|
-
|
|
325
|
+
# Workstream 2a: every graph model call goes through Unity AI Gateway
|
|
326
|
+
# ({host}/ai-gateway/mlflow/v1). There is no /serving-endpoints fallback.
|
|
327
|
+
return ChatDatabricks(use_ai_gateway=True, **kwargs)
|
|
326
328
|
|
|
327
329
|
@staticmethod
|
|
328
330
|
def _default_client_factory() -> Any:
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""The one OpenAI-compatible client for app LLM calls through Unity AI Gateway (ws2a)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def gateway_openai_client(workspace_client: Any) -> Any:
|
|
9
|
+
"""``DatabricksOpenAI`` bound to ``{host}/ai-gateway/mlflow/v1`` with the caller's identity."""
|
|
10
|
+
from databricks_openai import DatabricksOpenAI
|
|
11
|
+
|
|
12
|
+
return DatabricksOpenAI(workspace_client=workspace_client, use_ai_gateway=True)
|
|
@@ -44,6 +44,7 @@ from src.services.model_endpoint_catalog import (
|
|
|
44
44
|
EndpointValidationFailure,
|
|
45
45
|
ModelEndpointCatalog,
|
|
46
46
|
validate_endpoint_name_policy,
|
|
47
|
+
validate_gateway_model_name,
|
|
47
48
|
)
|
|
48
49
|
from src.services.prompt_assembler import PromptAssembler, PromptAssemblyRejected
|
|
49
50
|
|
|
@@ -285,6 +286,24 @@ def _endpoint_name_policy_validator(
|
|
|
285
286
|
return ()
|
|
286
287
|
|
|
287
288
|
|
|
289
|
+
def _gateway_model_name_validator(
|
|
290
|
+
current: DefinitionContent, candidate: DefinitionContent
|
|
291
|
+
) -> tuple[DraftValidationIssue, ...]:
|
|
292
|
+
"""ws2a: a save that CHANGES the model must name a system.ai.* Gateway model.
|
|
293
|
+
|
|
294
|
+
Save-only by design. It is never composed into ``_save_local_validators``,
|
|
295
|
+
which publication and rollback reuse, because rollback re-validates historical
|
|
296
|
+
releases whose roles name ``databricks-*`` endpoints (spec §5.2).
|
|
297
|
+
"""
|
|
298
|
+
if candidate.model.endpoint_name == current.model.endpoint_name:
|
|
299
|
+
return ()
|
|
300
|
+
try:
|
|
301
|
+
validate_gateway_model_name(candidate.model.endpoint_name)
|
|
302
|
+
except EndpointValidationFailure as failure:
|
|
303
|
+
return (_endpoint_issue(failure),)
|
|
304
|
+
return ()
|
|
305
|
+
|
|
306
|
+
|
|
288
307
|
class RemoteEndpointDraftValidator(Protocol):
|
|
289
308
|
"""Remote exact-endpoint check over one complete reconstructed candidate.
|
|
290
309
|
|
|
@@ -449,6 +468,14 @@ class _GraphConfigurationDraft(_GraphConfigurationWorkbench):
|
|
|
449
468
|
client_candidate=candidate,
|
|
450
469
|
server=self._draft_aggregate_snapshot(locked.snapshot),
|
|
451
470
|
)
|
|
471
|
+
# Post-lock (ruling I-1): the locked draft is now the client's own
|
|
472
|
+
# base, so "changed" means changed by this request, never by a
|
|
473
|
+
# concurrent save that a stale client has not seen.
|
|
474
|
+
gateway_issues = _gateway_model_name_validator(
|
|
475
|
+
locked.selected.draft.content, content
|
|
476
|
+
)
|
|
477
|
+
if gateway_issues:
|
|
478
|
+
raise DraftContentRejected(*gateway_issues)
|
|
452
479
|
self._run_candidate_validators(self.post_stale_validators, content)
|
|
453
480
|
self._validate_remote_endpoint(content)
|
|
454
481
|
return self._write_locked_content(
|
|
@@ -508,6 +535,14 @@ class _GraphConfigurationDraft(_GraphConfigurationWorkbench):
|
|
|
508
535
|
client_candidate=validated,
|
|
509
536
|
server=self._draft_aggregate_snapshot(locked.snapshot),
|
|
510
537
|
)
|
|
538
|
+
# Post-lock (ruling I-1): the locked draft is now the client's own
|
|
539
|
+
# base, so "changed" means changed by this request, never by a
|
|
540
|
+
# concurrent save that a stale client has not seen.
|
|
541
|
+
gateway_issues = _gateway_model_name_validator(
|
|
542
|
+
locked.selected.draft.content, validated
|
|
543
|
+
)
|
|
544
|
+
if gateway_issues:
|
|
545
|
+
raise DraftContentRejected(*gateway_issues)
|
|
511
546
|
self._run_candidate_validators(self.post_stale_validators, validated)
|
|
512
547
|
self._validate_remote_endpoint(validated)
|
|
513
548
|
return self._write_locked_content(
|
|
@@ -16,6 +16,7 @@ from typing import Callable, Dict, List, Optional, Tuple
|
|
|
16
16
|
from databricks.sdk import WorkspaceClient
|
|
17
17
|
|
|
18
18
|
from src.services.converter_jail.codeprep import _fix_apostrophe_strings
|
|
19
|
+
from src.services.gateway_openai import gateway_openai_client
|
|
19
20
|
from src.services.google_slides_auth import GoogleSlidesAuth, GoogleSlidesAuthError
|
|
20
21
|
from src.services.google_slides_prompts_defaults import (
|
|
21
22
|
DEFAULT_GSLIDES_SYSTEM_PROMPT,
|
|
@@ -339,7 +340,7 @@ class GoogleSlidesConversionError(Exception):
|
|
|
339
340
|
class HtmlToGoogleSlidesConverter:
|
|
340
341
|
"""LLM-powered converter: HTML → Google Slides API code → execution."""
|
|
341
342
|
|
|
342
|
-
DEFAULT_MODEL = "
|
|
343
|
+
DEFAULT_MODEL = "system.ai.claude-sonnet-4-5"
|
|
343
344
|
|
|
344
345
|
def __init__(
|
|
345
346
|
self,
|
|
@@ -355,7 +356,7 @@ class HtmlToGoogleSlidesConverter:
|
|
|
355
356
|
from src.core.databricks_client import get_databricks_client
|
|
356
357
|
self.ws_client = get_databricks_client()
|
|
357
358
|
|
|
358
|
-
self.llm_client = self.ws_client
|
|
359
|
+
self.llm_client = gateway_openai_client(self.ws_client)
|
|
359
360
|
self.auth = google_auth or GoogleSlidesAuth()
|
|
360
361
|
self.SYSTEM_PROMPT = DEFAULT_GSLIDES_SYSTEM_PROMPT
|
|
361
362
|
self.USER_PROMPT = DEFAULT_GSLIDES_USER_PROMPT
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/services/html_to_pptx.py
RENAMED
|
@@ -13,6 +13,7 @@ from typing import Any, Callable, Dict, List, Optional, Tuple
|
|
|
13
13
|
from bs4 import BeautifulSoup
|
|
14
14
|
from databricks.sdk import WorkspaceClient
|
|
15
15
|
|
|
16
|
+
from src.services.gateway_openai import gateway_openai_client
|
|
16
17
|
from src.services.pptx_prompts_defaults import (
|
|
17
18
|
DEFAULT_SYSTEM_PROMPT,
|
|
18
19
|
DEFAULT_USER_PROMPT_TEMPLATE,
|
|
@@ -48,7 +49,7 @@ class HtmlToPptxConverterV3:
|
|
|
48
49
|
"""
|
|
49
50
|
|
|
50
51
|
# Model configuration
|
|
51
|
-
DEFAULT_MODEL = "
|
|
52
|
+
DEFAULT_MODEL = "system.ai.claude-sonnet-4-5"
|
|
52
53
|
|
|
53
54
|
|
|
54
55
|
def __init__(
|
|
@@ -60,19 +61,19 @@ class HtmlToPptxConverterV3:
|
|
|
60
61
|
|
|
61
62
|
Args:
|
|
62
63
|
workspace_client: Databricks client (optional, uses singleton if not provided)
|
|
63
|
-
model_endpoint: LLM model name (default:
|
|
64
|
+
model_endpoint: LLM model name (default: system.ai.claude-sonnet-4-5)
|
|
64
65
|
"""
|
|
65
66
|
self.model_endpoint = model_endpoint or self.DEFAULT_MODEL
|
|
66
|
-
|
|
67
|
+
|
|
67
68
|
# Use provided client or get singleton from databricks_client
|
|
68
69
|
if workspace_client:
|
|
69
70
|
self.ws_client = workspace_client
|
|
70
71
|
else:
|
|
71
72
|
from src.core.databricks_client import get_databricks_client
|
|
72
73
|
self.ws_client = get_databricks_client()
|
|
73
|
-
|
|
74
|
-
# Initialize OpenAI-compatible client for LLM calls
|
|
75
|
-
self.llm_client = self.ws_client
|
|
74
|
+
|
|
75
|
+
# Initialize OpenAI-compatible client for LLM calls through Unity AI Gateway
|
|
76
|
+
self.llm_client = gateway_openai_client(self.ws_client)
|
|
76
77
|
|
|
77
78
|
# Load default prompts
|
|
78
79
|
self.SYSTEM_PROMPT = DEFAULT_SYSTEM_PROMPT
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Unity AI Gateway model discovery and validation for the workbench (ws2a)."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -9,8 +9,7 @@ from typing import Any, Literal, Protocol
|
|
|
9
9
|
|
|
10
10
|
import requests
|
|
11
11
|
from databricks.sdk import WorkspaceClient
|
|
12
|
-
from databricks.sdk.errors import DatabricksError,
|
|
13
|
-
from databricks.sdk.service.serving import EndpointStateConfigUpdate, EndpointStateReady
|
|
12
|
+
from databricks.sdk.errors import DatabricksError, NotFound, PermissionDenied
|
|
14
13
|
|
|
15
14
|
CatalogFailureCode = Literal["catalog_forbidden", "catalog_unavailable"]
|
|
16
15
|
EndpointValidationCode = Literal[
|
|
@@ -23,6 +22,8 @@ EndpointValidationCode = Literal[
|
|
|
23
22
|
"endpoint_update_in_progress",
|
|
24
23
|
"endpoint_update_failed",
|
|
25
24
|
"endpoint_update_canceled",
|
|
25
|
+
"endpoint_not_gateway_model",
|
|
26
|
+
"endpoint_not_chat_model",
|
|
26
27
|
]
|
|
27
28
|
|
|
28
29
|
|
|
@@ -72,6 +73,27 @@ _TRANSPORT_FAILURES: tuple[type[BaseException], ...] = (
|
|
|
72
73
|
)
|
|
73
74
|
|
|
74
75
|
|
|
76
|
+
GATEWAY_ENDPOINTS_PATH = "/api/ai-gateway/v2/endpoints"
|
|
77
|
+
GATEWAY_CHAT_API_TYPE = "mlflow/v1/chat/completions"
|
|
78
|
+
_GATEWAY_PREFIX = "databricks-"
|
|
79
|
+
_SYSTEM_AI_PREFIX = "system.ai."
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def gateway_invocable_name(gateway_endpoint_name: str) -> str | None:
|
|
83
|
+
"""``databricks-<m>`` -> ``system.ai.<m>`` (spec §2 naming rule); otherwise ``None``."""
|
|
84
|
+
if not gateway_endpoint_name.startswith(_GATEWAY_PREFIX):
|
|
85
|
+
return None
|
|
86
|
+
model = gateway_endpoint_name[len(_GATEWAY_PREFIX):]
|
|
87
|
+
return f"{_SYSTEM_AI_PREFIX}{model}" if model else None
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def gateway_endpoint_name(model_name: str) -> str:
|
|
91
|
+
"""``system.ai.<m>`` -> ``databricks-<m>``; any other (legacy) name is looked up as-is."""
|
|
92
|
+
if model_name.startswith(_SYSTEM_AI_PREFIX):
|
|
93
|
+
return f"{_GATEWAY_PREFIX}{model_name[len(_SYSTEM_AI_PREFIX):]}"
|
|
94
|
+
return model_name
|
|
95
|
+
|
|
96
|
+
|
|
75
97
|
class ModelEndpointCatalog(Protocol):
|
|
76
98
|
def list_system_models(self) -> SystemModelDiscovery: ...
|
|
77
99
|
|
|
@@ -103,6 +125,20 @@ def validate_endpoint_name_policy(name: str) -> None:
|
|
|
103
125
|
)
|
|
104
126
|
|
|
105
127
|
|
|
128
|
+
_GATEWAY_MODEL_NAME = re.compile(r"^system\.ai\.[a-z0-9][a-z0-9._-]*[a-z0-9]$")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def validate_gateway_model_name(name: str) -> None:
|
|
132
|
+
"""A changed draft model must be a ``system.ai.*`` Gateway name (spec §5.2)."""
|
|
133
|
+
if not _GATEWAY_MODEL_NAME.fullmatch(name):
|
|
134
|
+
raise EndpointValidationFailure(
|
|
135
|
+
"endpoint_not_gateway_model",
|
|
136
|
+
"Model name must start with `system.ai.` and contain only lowercase letters, "
|
|
137
|
+
"digits, hyphens, underscores and periods.",
|
|
138
|
+
False,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
|
|
106
142
|
#: The remote check runs while the save holds the exclusive draft lock, so its
|
|
107
143
|
#: client must not inherit the SDK's 300 s default retry window. With a 5 s
|
|
108
144
|
#: window and a 3 s per-request timeout, measured transport exhaustion ends
|
|
@@ -162,7 +198,7 @@ class DatabricksModelEndpointCatalog:
|
|
|
162
198
|
|
|
163
199
|
def list_system_models(self) -> SystemModelDiscovery:
|
|
164
200
|
try:
|
|
165
|
-
|
|
201
|
+
listed = self._workspace_client.api_client.do("GET", GATEWAY_ENDPOINTS_PATH)
|
|
166
202
|
except PermissionDenied as error:
|
|
167
203
|
raise ModelEndpointCatalogFailure(
|
|
168
204
|
"catalog_forbidden",
|
|
@@ -177,45 +213,31 @@ class DatabricksModelEndpointCatalog:
|
|
|
177
213
|
) from error
|
|
178
214
|
|
|
179
215
|
discovered: list[SystemModelEndpoint] = []
|
|
180
|
-
for
|
|
181
|
-
|
|
182
|
-
foundation_model = next(
|
|
183
|
-
(
|
|
184
|
-
getattr(entity, "foundation_model", None)
|
|
185
|
-
for entity in served_entities
|
|
186
|
-
if getattr(entity, "foundation_model", None) is not None
|
|
187
|
-
),
|
|
188
|
-
None,
|
|
189
|
-
)
|
|
190
|
-
if foundation_model is None:
|
|
191
|
-
continue
|
|
192
|
-
|
|
193
|
-
name = getattr(endpoint, "name", None)
|
|
216
|
+
for entry in (listed or {}).get("endpoints") or ():
|
|
217
|
+
name = entry.get("name") if isinstance(entry, dict) else None
|
|
194
218
|
if not isinstance(name, str) or not name.strip():
|
|
195
219
|
raise ModelEndpointCatalogFailure(
|
|
196
220
|
"catalog_unavailable",
|
|
197
221
|
"Model endpoint discovery returned an endpoint without a name.",
|
|
198
222
|
True,
|
|
199
223
|
)
|
|
200
|
-
|
|
224
|
+
invocable = gateway_invocable_name(name)
|
|
225
|
+
if invocable is None:
|
|
226
|
+
continue
|
|
201
227
|
discovered.append(
|
|
202
|
-
SystemModelEndpoint(
|
|
203
|
-
name=name,
|
|
204
|
-
display_name=getattr(foundation_model, "display_name", None),
|
|
205
|
-
description=getattr(foundation_model, "description", None),
|
|
206
|
-
docs=getattr(foundation_model, "docs", None),
|
|
207
|
-
)
|
|
228
|
+
SystemModelEndpoint(name=invocable, display_name=None, description=None, docs=None)
|
|
208
229
|
)
|
|
209
230
|
|
|
210
|
-
discovered.sort(key=lambda item:
|
|
231
|
+
discovered.sort(key=lambda item: item.name)
|
|
211
232
|
return SystemModelDiscovery(endpoints=tuple(discovered))
|
|
212
233
|
|
|
213
234
|
def validate_custom_endpoint_remote(self, name: str) -> None:
|
|
214
235
|
# Defensive: never let a path-shaped name reach the interpolated request.
|
|
215
236
|
validate_endpoint_name_policy(name)
|
|
237
|
+
path = f"{GATEWAY_ENDPOINTS_PATH}/{gateway_endpoint_name(name)}"
|
|
216
238
|
try:
|
|
217
|
-
detail = self._workspace_client.
|
|
218
|
-
except
|
|
239
|
+
detail = self._workspace_client.api_client.do("GET", path)
|
|
240
|
+
except NotFound as error:
|
|
219
241
|
raise _validation_failure(
|
|
220
242
|
"endpoint_unknown", "Endpoint name was not found.", False
|
|
221
243
|
) from error
|
|
@@ -232,41 +254,10 @@ class DatabricksModelEndpointCatalog:
|
|
|
232
254
|
True,
|
|
233
255
|
) from error
|
|
234
256
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
"endpoint_name_mismatch",
|
|
238
|
-
"Endpoint validation did not return the exact requested name.",
|
|
239
|
-
False,
|
|
240
|
-
)
|
|
241
|
-
|
|
242
|
-
state = getattr(detail, "state", None)
|
|
243
|
-
config_update = getattr(state, "config_update", None)
|
|
244
|
-
if config_update == EndpointStateConfigUpdate.IN_PROGRESS:
|
|
245
|
-
raise _validation_failure(
|
|
246
|
-
"endpoint_update_in_progress",
|
|
247
|
-
"Endpoint configuration update is in progress.",
|
|
248
|
-
True,
|
|
249
|
-
)
|
|
250
|
-
if config_update == EndpointStateConfigUpdate.UPDATE_FAILED:
|
|
251
|
-
raise _validation_failure(
|
|
252
|
-
"endpoint_update_failed",
|
|
253
|
-
"Endpoint configuration update failed.",
|
|
254
|
-
False,
|
|
255
|
-
)
|
|
256
|
-
if config_update == EndpointStateConfigUpdate.UPDATE_CANCELED:
|
|
257
|
+
api_types = (detail or {}).get("supported_api_types") or ()
|
|
258
|
+
if GATEWAY_CHAT_API_TYPE not in api_types:
|
|
257
259
|
raise _validation_failure(
|
|
258
|
-
"
|
|
259
|
-
"Endpoint configuration update was canceled.",
|
|
260
|
-
False,
|
|
261
|
-
)
|
|
262
|
-
if (
|
|
263
|
-
getattr(state, "ready", None) != EndpointStateReady.READY
|
|
264
|
-
or config_update != EndpointStateConfigUpdate.NOT_UPDATING
|
|
265
|
-
):
|
|
266
|
-
raise _validation_failure(
|
|
267
|
-
"endpoint_not_ready",
|
|
268
|
-
"Endpoint is not ready for invocation.",
|
|
269
|
-
True,
|
|
260
|
+
"endpoint_not_chat_model", "Endpoint is not a chat model.", False
|
|
270
261
|
)
|
|
271
262
|
|
|
272
263
|
|
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/databricks_tellr_app/run.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/_otel_bootstrap.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/middleware/__init__.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/middleware/csrf.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/__init__.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/_authz.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/admin.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/admin_usage.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/agent_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/chat.py
RENAMED
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/export.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/feedback.py
RENAMED
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/images.py
RENAMED
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/profiles.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/sessions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/setup.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/slides.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/tools.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/tour.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/verification.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/routes/version.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/feedback.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/requests.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/responses.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/schemas/streaming.py
RENAMED
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{databricks_tellr_app-0.4.3.dev32 → databricks_tellr_app-0.4.3.dev33}/src/api/services/job_queue.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|