Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -290,24 +290,35 @@ export function ChatBody({
({ message, payload }: { message: Message; payload: ChatActionClickPayload }) => {
setStickToBottom(true);
switch (payload.type) {
case ChatActionClickType.executeEsqlQuery:
case ChatActionClickType.executeEsqlQuery: {
const now = new Date().toISOString();
next(
messages.concat({
'@timestamp': new Date().toISOString(),
message: {
role: MessageRole.Assistant,
content: '',
function_call: {
name: 'execute_query',
arguments: JSON.stringify({
query: payload.query,
}),
trigger: MessageRole.User,
messages.concat([
{
'@timestamp': now,
message: {
role: MessageRole.User,
content: `Display results for the following ES|QL query:\n\n\`\`\`esql\n${payload.query}\n\`\`\``,
},
},
})
{
'@timestamp': now,
message: {
role: MessageRole.Assistant,
content: '',
function_call: {
name: 'execute_query',
arguments: JSON.stringify({
query: payload.query,
}),
trigger: MessageRole.User,
},
},
},
])
);
break;
}

case ChatActionClickType.updateVisualization:
const visualizeQueryResponse = message;
Expand All @@ -331,25 +342,36 @@ export function ChatBody({
})
);
break;
case ChatActionClickType.visualizeEsqlQuery:
case ChatActionClickType.visualizeEsqlQuery: {
const now = new Date().toISOString();
next(
messages.concat({
'@timestamp': new Date().toISOString(),
message: {
role: MessageRole.Assistant,
content: '',
function_call: {
name: 'visualize_query',
arguments: JSON.stringify({
query: payload.query,
intention: VisualizeESQLUserIntention.visualizeAuto,
}),
trigger: MessageRole.User,
messages.concat([
{
'@timestamp': now,
message: {
role: MessageRole.User,
content: `Visualize the following ES|QL query:\n\n\`\`\`esql\n${payload.query}\n\`\`\``,
},
},
})
{
'@timestamp': now,
message: {
role: MessageRole.Assistant,
content: '',
function_call: {
name: 'visualize_query',
arguments: JSON.stringify({
query: payload.query,
intention: VisualizeESQLUserIntention.visualizeAuto,
}),
trigger: MessageRole.User,
},
},
},
])
);
break;
}
}
},
[messages, next]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,20 @@ const getMessageForLLM = (
if (hasErrors) {
return 'The query has syntax errors';
}
return intention === VisualizeESQLUserIntention.executeAndReturnResults ||

if (
intention === VisualizeESQLUserIntention.executeAndReturnResults ||
intention === VisualizeESQLUserIntention.generateQueryOnly
? 'These results are not visualized'
: 'Only following query is visualized: ```esql\n' + query + '\n```';
) {
return 'These results are not visualized.';
}

// This message is added to avoid the model echoing the full ES|QL query back to the user.
// The UI already shows the chart.
return `Only the following query is visualized: \`\`\`esql\n' + ${query} + '\n\`\`\`\n
If the query is visualized once, don't attempt to visualize the same query again immediately.
After calling visualize_query you are done - **do NOT repeat the ES|QL query or add any further
explanation unless the user explicitly asks for it again.** Mention that the query is visualized.`;
};

export function registerVisualizeESQLFunction({
Expand Down