mirror of https://github.com/buster-so/buster.git
import assets into chat
This commit is contained in:
parent
85a2b2a8aa
commit
e782a7cf9a
|
@ -50,7 +50,7 @@ pub async fn generate_asset_messages(
|
||||||
let tool_call_id = format!("call_{}", Uuid::new_v4().simple().to_string());
|
let tool_call_id = format!("call_{}", Uuid::new_v4().simple().to_string());
|
||||||
|
|
||||||
// Prepare asset data based on asset type
|
// Prepare asset data based on asset type
|
||||||
let (asset_data, asset_type_str) = match asset_type {
|
let (asset_data, asset_type_str, additional_files) = match asset_type {
|
||||||
AssetType::MetricFile => {
|
AssetType::MetricFile => {
|
||||||
let metric = metric_files::table
|
let metric = metric_files::table
|
||||||
.filter(metric_files::id.eq(asset_id))
|
.filter(metric_files::id.eq(asset_id))
|
||||||
|
@ -78,7 +78,7 @@ pub async fn generate_asset_messages(
|
||||||
"updated_at": metric.updated_at
|
"updated_at": metric.updated_at
|
||||||
});
|
});
|
||||||
|
|
||||||
(asset_data, "metric")
|
(asset_data, "metric", Vec::new())
|
||||||
},
|
},
|
||||||
AssetType::DashboardFile => {
|
AssetType::DashboardFile => {
|
||||||
let dashboard = dashboard_files::table
|
let dashboard = dashboard_files::table
|
||||||
|
@ -101,18 +101,77 @@ pub async fn generate_asset_messages(
|
||||||
"updated_at": dashboard.updated_at
|
"updated_at": dashboard.updated_at
|
||||||
});
|
});
|
||||||
|
|
||||||
(asset_data, "dashboard")
|
// Extract metric IDs from dashboard
|
||||||
|
let mut metric_ids = std::collections::HashSet::new();
|
||||||
|
for row in &dashboard.content.rows {
|
||||||
|
for item in &row.items {
|
||||||
|
metric_ids.insert(item.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load all associated metrics for context (they won't be shown in UI)
|
||||||
|
let mut metric_files_data = Vec::new();
|
||||||
|
for metric_id in metric_ids {
|
||||||
|
match metric_files::table
|
||||||
|
.filter(metric_files::id.eq(metric_id))
|
||||||
|
.first::<MetricFile>(&mut conn)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(metric) => {
|
||||||
|
// Get YAML content for this metric
|
||||||
|
if let Ok(yml_content) = serde_yaml::to_string(&metric.content) {
|
||||||
|
// Add metric as additional file data for agent context
|
||||||
|
let metric_data = json!({
|
||||||
|
"id": metric.id.to_string(),
|
||||||
|
"name": metric.name,
|
||||||
|
"file_type": "metric",
|
||||||
|
"asset_type": "metric",
|
||||||
|
"yml_content": yml_content,
|
||||||
|
"created_at": metric.created_at,
|
||||||
|
"version_number": metric.version_history.get_version_number(),
|
||||||
|
"updated_at": metric.updated_at
|
||||||
|
});
|
||||||
|
|
||||||
|
metric_files_data.push(metric_data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(e) => {
|
||||||
|
// Log error but continue with other metrics
|
||||||
|
tracing::warn!("Failed to load metric {} for dashboard context: {}", metric_id, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tracing::info!(
|
||||||
|
"Loaded {} metrics as context for dashboard import",
|
||||||
|
metric_files_data.len()
|
||||||
|
);
|
||||||
|
|
||||||
|
(asset_data, "dashboard", metric_files_data)
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
return Err(anyhow!("Unsupported asset type for generating asset messages: {:?}", asset_type));
|
return Err(anyhow!("Unsupported asset type for generating asset messages: {:?}", asset_type));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Determine appropriate message based on file count
|
||||||
|
let additional_files_count = additional_files.len();
|
||||||
|
let message_text = if additional_files_count == 0 {
|
||||||
|
format!("Successfully imported 1 {} file.", asset_type_str)
|
||||||
|
} else {
|
||||||
|
format!("Successfully imported 1 {} file with {} additional context files.",
|
||||||
|
asset_type_str, additional_files_count)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create combined file list with the main asset first, followed by context files
|
||||||
|
let mut all_files = vec![asset_data];
|
||||||
|
all_files.extend(additional_files);
|
||||||
|
|
||||||
// Create the tool response content
|
// Create the tool response content
|
||||||
let tool_response_content = json!({
|
let tool_response_content = json!({
|
||||||
"message": format!("Successfully imported 1 {} files.", asset_type_str),
|
"message": message_text,
|
||||||
"duration": 928, // Example duration
|
"duration": 928, // Example duration
|
||||||
"files": [asset_data]
|
"files": all_files
|
||||||
}).to_string();
|
}).to_string();
|
||||||
|
|
||||||
// Create the Assistant message with tool call
|
// Create the Assistant message with tool call
|
||||||
|
|
Loading…
Reference in New Issue