🚀 feat: Artifact Editing & Downloads (#5428)

* refactor: expand container

* chore: bump @codesandbox/sandpack-react to latest

* WIP: first pass, show editor

* feat: implement ArtifactCodeEditor and ArtifactTabs components for enhanced artifact management

* refactor: fileKey

* refactor: auto scrolling code editor and add messageId to artifact

* feat: first pass, editing artifact

* feat: first pass, robust artifact replacement

* fix: robust artifact replacement & re-render when expected

* feat: Download Artifacts

* refactor: improve artifact editing UX

* fix: layout shift of new download button

* fix: enhance missing output checks and logging in StreamRunManager
This commit is contained in:
Danny Avila 2025-01-23 18:19:04 -05:00 committed by GitHub
parent 87383fec27
commit ed57bb4711
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
34 changed files with 1156 additions and 237 deletions

View file

@ -508,12 +508,30 @@ class StreamRunManager {
* @param {RequiredAction[]} actions - The required actions.
* @returns {ToolOutput[]} completeOutputs - The complete outputs.
*/
checkMissingOutputs(tool_outputs, actions) {
checkMissingOutputs(tool_outputs = [], actions = []) {
const missingOutputs = [];
const MISSING_OUTPUT_MESSAGE =
'The tool failed to produce an output. The tool may not be currently available or experienced an unhandled error.';
const outputIds = new Set();
const validatedOutputs = tool_outputs.map((output) => {
if (!output) {
logger.warn('Tool output is undefined');
return;
}
outputIds.add(output.tool_call_id);
if (!output.output) {
logger.warn(`Tool output exists but has no output property (ID: ${output.tool_call_id})`);
return {
...output,
output: MISSING_OUTPUT_MESSAGE,
};
}
return output;
});
for (const item of actions) {
const { tool, toolCallId, run_id, thread_id } = item;
const outputExists = tool_outputs.some((output) => output.tool_call_id === toolCallId);
const outputExists = outputIds.has(toolCallId);
if (!outputExists) {
logger.warn(
@ -521,13 +539,12 @@ class StreamRunManager {
);
missingOutputs.push({
tool_call_id: toolCallId,
output:
'The tool failed to produce an output. The tool may not be currently available or experienced an unhandled error.',
output: MISSING_OUTPUT_MESSAGE,
});
}
}
return [...tool_outputs, ...missingOutputs];
return [...validatedOutputs, ...missingOutputs];
}
/* <------------------ Run Event handlers ------------------> */