Skip to content

Commit 97a4979

Browse files
committed
Add on display data to js
1 parent 7b5053f commit 97a4979

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

js/src/code-interpreter.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ProcessMessage, Sandbox, SandboxOpts } from 'e2b'
2-
import { JupyterKernelWebSocket, Result } from './messaging'
2+
import {Data, JupyterKernelWebSocket, Result} from './messaging'
33
import { createDeferredPromise } from './utils'
44

55
interface Kernels {
@@ -67,12 +67,13 @@ export class JupyterExtension {
6767
code: string,
6868
kernelID?: string,
6969
onStdout?: (msg: ProcessMessage) => any,
70-
onStderr?: (msg: ProcessMessage) => any
70+
onStderr?: (msg: ProcessMessage) => any,
71+
onDisplayData?: (data: Data) => any
7172
): Promise<Result> {
7273
kernelID = kernelID || await this.defaultKernelID
7374
const ws = this.connectedKernels[kernelID] || await this.connectToKernelWS(kernelID)
7475

75-
return await ws.sendExecutionMessage(code, onStdout, onStderr)
76+
return await ws.sendExecutionMessage(code, onStdout, onStderr, onDisplayData)
7677
}
7778

7879
private async startConnectingToDefaultKernel(

js/src/messaging.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,18 @@ class CellExecution {
185185
result: Result
186186
onStdout?: (out: ProcessMessage) => Promise<void> | void
187187
onStderr?: (out: ProcessMessage) => Promise<void> | void
188+
onDisplayData?: (data: Data) => Promise<void> | void
188189
inputAccepted: boolean = false
189190

190191
constructor(
191192
onStdout?: (out: ProcessMessage) => Promise<void> | void,
192-
onStderr?: (out: ProcessMessage) => Promise<void> | void
193+
onStderr?: (out: ProcessMessage) => Promise<void> | void,
194+
onDisplayData?: (data: Data) => Promise<void> | void
193195
) {
194196
this.result = new Result([], { stdout: [], stderr: [] })
195197
this.onStdout = onStdout
196198
this.onStderr = onStderr
199+
this.onDisplayData = onDisplayData
197200
}
198201
}
199202

@@ -288,6 +291,9 @@ export class JupyterKernelWebSocket {
288291
}
289292
} else if (message.msg_type == 'display_data') {
290293
result.data.push(new Data(message.content.data, false))
294+
if (cell.onDisplayData) {
295+
cell.onDisplayData(new Data(message.content.data, false))
296+
}
291297
} else if (message.msg_type == 'execute_result') {
292298
result.data.push(new Data(message.content.data, true))
293299
} else if (message.msg_type == 'status') {
@@ -327,13 +333,15 @@ export class JupyterKernelWebSocket {
327333
* @param code Code to be executed.
328334
* @param onStdout Callback for stdout messages.
329335
* @param onStderr Callback for stderr messages.
336+
* @param onDisplayData Callback for display data messages.
330337
* @param timeout Time in milliseconds to wait for response.
331338
* @returns Promise with execution result.
332339
*/
333340
public sendExecutionMessage(
334341
code: string,
335342
onStdout?: (out: ProcessMessage) => Promise<void> | void,
336343
onStderr?: (out: ProcessMessage) => Promise<void> | void,
344+
onDisplayData?: (data: Data) => Promise<void> | void,
337345
timeout?: number
338346
) {
339347
return new Promise<Result>((resolve, reject) => {
@@ -355,7 +363,7 @@ export class JupyterKernelWebSocket {
355363
}
356364

357365
// expect response
358-
this.cells[msg_id] = new CellExecution(onStdout, onStderr)
366+
this.cells[msg_id] = new CellExecution(onStdout, onStderr, onDisplayData)
359367
this.idAwaiter[msg_id] = (responseData: Result) => {
360368
// stop timeout
361369
clearInterval(timeoutSet as number)

0 commit comments

Comments
 (0)