瀏覽代碼

enh: pyodide python result handling

Timothy Jaeryang Baek 3 月之前
父節點
當前提交
74172461c7
共有 2 個文件被更改,包括 28 次插入9 次删除
  1. 21 9
      src/lib/components/chat/Messages/CodeBlock.svelte
  2. 7 0
      src/lib/workers/pyodide.worker.ts

+ 21 - 9
src/lib/components/chat/Messages/CodeBlock.svelte

@@ -379,15 +379,27 @@ __builtins__.input = input`);
 				class="bg-[#202123] text-white max-w-full overflow-x-auto scrollbar-hidden"
 				class="bg-[#202123] text-white max-w-full overflow-x-auto scrollbar-hidden"
 			/>
 			/>
 
 
-			{#if executing}
-				<div class="bg-[#202123] text-white px-4 py-4 rounded-b-lg">
-					<div class=" text-gray-500 text-xs mb-1">STDOUT/STDERR</div>
-					<div class="text-sm">Running...</div>
-				</div>
-			{:else if stdout || stderr || result}
-				<div class="bg-[#202123] text-white px-4 py-4 rounded-b-lg">
-					<div class=" text-gray-500 text-xs mb-1">STDOUT/STDERR</div>
-					<div class="text-sm">{stdout || stderr || result}</div>
+			{#if executing || stdout || stderr || result}
+				<div class="bg-[#202123] text-white !rounded-b-lg py-4 px-4 flex flex-col gap-2">
+					{#if executing}
+						<div class=" ">
+							<div class=" text-gray-500 text-xs mb-1">STDOUT/STDERR</div>
+							<div class="text-sm">Running...</div>
+						</div>
+					{:else}
+						{#if stdout || stderr}
+							<div class=" ">
+								<div class=" text-gray-500 text-xs mb-1">STDOUT/STDERR</div>
+								<div class="text-sm">{stdout || stderr}</div>
+							</div>
+						{/if}
+						{#if result}
+							<div class=" ">
+								<div class=" text-gray-500 text-xs mb-1">RESULT</div>
+								<div class="text-sm">{`${result}`}</div>
+							</div>
+						{/if}
+					{/if}
 				</div>
 				</div>
 			{/if}
 			{/if}
 		{/if}
 		{/if}

+ 7 - 0
src/lib/workers/pyodide.worker.ts

@@ -61,9 +61,16 @@ self.onmessage = async (event) => {
 
 
 	try {
 	try {
 		self.result = await self.pyodide.runPythonAsync(code);
 		self.result = await self.pyodide.runPythonAsync(code);
+
+		try {
+			self.result = self.result.toJSON();
+		} catch (error) {
+			console.error(error);
+		}
 	} catch (error) {
 	} catch (error) {
 		self.stderr = error.toString();
 		self.stderr = error.toString();
 	}
 	}
+
 	self.postMessage({ id, result: self.result, stdout: self.stdout, stderr: self.stderr });
 	self.postMessage({ id, result: self.result, stdout: self.stdout, stderr: self.stderr });
 };
 };