chat worked
This commit is contained in:
@@ -23,6 +23,11 @@ from .service import ScreenshotService, LLMClient
|
||||
from .models import LLMProviderType, ValidationStatus, ValidationResult, DetectedIssue
|
||||
from ...models.llm import ValidationRecord
|
||||
from ...core.task_manager.context import TaskContext
|
||||
from ...services.llm_prompt_templates import (
|
||||
DEFAULT_LLM_PROMPTS,
|
||||
normalize_llm_settings,
|
||||
render_prompt,
|
||||
)
|
||||
|
||||
# [DEF:DashboardValidationPlugin:Class]
|
||||
# @PURPOSE: Plugin for automated dashboard health analysis using LLMs.
|
||||
@@ -181,7 +186,16 @@ class DashboardValidationPlugin(PluginBase):
|
||||
)
|
||||
|
||||
llm_log.info(f"Analyzing dashboard {dashboard_id} with LLM")
|
||||
analysis = await llm_client.analyze_dashboard(screenshot_path, logs)
|
||||
llm_settings = normalize_llm_settings(config_mgr.get_config().settings.llm)
|
||||
dashboard_prompt = llm_settings["prompts"].get(
|
||||
"dashboard_validation_prompt",
|
||||
DEFAULT_LLM_PROMPTS["dashboard_validation_prompt"],
|
||||
)
|
||||
analysis = await llm_client.analyze_dashboard(
|
||||
screenshot_path,
|
||||
logs,
|
||||
prompt_template=dashboard_prompt,
|
||||
)
|
||||
|
||||
# Log analysis summary to task logs for better visibility
|
||||
llm_log.info(f"[ANALYSIS_SUMMARY] Status: {analysis['status']}")
|
||||
@@ -341,22 +355,18 @@ class DocumentationPlugin(PluginBase):
|
||||
default_model=db_provider.default_model
|
||||
)
|
||||
|
||||
prompt = f"""
|
||||
Generate professional documentation for the following dataset and its columns.
|
||||
Dataset: {dataset.get('table_name')}
|
||||
Columns: {columns_data}
|
||||
|
||||
Provide the documentation in JSON format:
|
||||
{{
|
||||
"dataset_description": "General description of the dataset",
|
||||
"column_descriptions": [
|
||||
{{
|
||||
"name": "column_name",
|
||||
"description": "Generated description"
|
||||
}}
|
||||
]
|
||||
}}
|
||||
"""
|
||||
llm_settings = normalize_llm_settings(config_mgr.get_config().settings.llm)
|
||||
documentation_prompt = llm_settings["prompts"].get(
|
||||
"documentation_prompt",
|
||||
DEFAULT_LLM_PROMPTS["documentation_prompt"],
|
||||
)
|
||||
prompt = render_prompt(
|
||||
documentation_prompt,
|
||||
{
|
||||
"dataset_name": dataset.get("table_name") or "",
|
||||
"columns_json": json.dumps(columns_data, ensure_ascii=False),
|
||||
},
|
||||
)
|
||||
|
||||
# Using a generic chat completion for text-only US2
|
||||
llm_log.info(f"Generating documentation for dataset {dataset_id}")
|
||||
|
||||
@@ -20,6 +20,7 @@ from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_excep
|
||||
from .models import LLMProviderType
|
||||
from ...core.logger import belief_scope, logger
|
||||
from ...core.config_models import Environment
|
||||
from ...services.llm_prompt_templates import DEFAULT_LLM_PROMPTS, render_prompt
|
||||
|
||||
# [DEF:ScreenshotService:Class]
|
||||
# @PURPOSE: Handles capturing screenshots of Superset dashboards.
|
||||
@@ -548,7 +549,12 @@ class LLMClient:
|
||||
# @PRE: screenshot_path exists, logs is a list of strings.
|
||||
# @POST: Returns a structured analysis dictionary (status, summary, issues).
|
||||
# @SIDE_EFFECT: Reads screenshot file and calls external LLM API.
|
||||
async def analyze_dashboard(self, screenshot_path: str, logs: List[str]) -> Dict[str, Any]:
|
||||
async def analyze_dashboard(
|
||||
self,
|
||||
screenshot_path: str,
|
||||
logs: List[str],
|
||||
prompt_template: str = DEFAULT_LLM_PROMPTS["dashboard_validation_prompt"],
|
||||
) -> Dict[str, Any]:
|
||||
with belief_scope("analyze_dashboard"):
|
||||
# Optimize image to reduce token count (US1 / T023)
|
||||
# Gemini/Gemma models have limits on input tokens, and large images contribute significantly.
|
||||
@@ -582,25 +588,7 @@ class LLMClient:
|
||||
base_64_image = base64.b64encode(image_file.read()).decode('utf-8')
|
||||
|
||||
log_text = "\n".join(logs)
|
||||
prompt = f"""
|
||||
Analyze the attached dashboard screenshot and the following execution logs for health and visual issues.
|
||||
|
||||
Logs:
|
||||
{log_text}
|
||||
|
||||
Provide the analysis in JSON format with the following structure:
|
||||
{{
|
||||
"status": "PASS" | "WARN" | "FAIL",
|
||||
"summary": "Short summary of findings",
|
||||
"issues": [
|
||||
{{
|
||||
"severity": "WARN" | "FAIL",
|
||||
"message": "Description of the issue",
|
||||
"location": "Optional location info (e.g. chart name)"
|
||||
}}
|
||||
]
|
||||
}}
|
||||
"""
|
||||
prompt = render_prompt(prompt_template, {"logs": log_text})
|
||||
|
||||
messages = [
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user