feat: improve execute js/py code and collect results (#117)

This commit is contained in:
sigoden
2024-10-23 17:22:11 +08:00
committed by GitHub
parent d499954dbb
commit fbeaa9cb2c
6 changed files with 14 additions and 18 deletions
+2 -4
View File
@@ -87,9 +87,7 @@ async function loadEnv(filePath) {
if (!process.env[envName]) { if (!process.env[envName]) {
let envValue = valueParts.join("=").trim(); let envValue = valueParts.join("=").trim();
if (envValue.startsWith('"') && envValue.endsWith('"')) { if ((envValue.startsWith('"') && envValue.endsWith('"')) || (envValue.startsWith("'") && envValue.endsWith("'"))) {
envValue = envValue.slice(1, -1);
} else if (envValue.startsWith("'") && envValue.endsWith("'")) {
envValue = envValue.slice(1, -1); envValue = envValue.slice(1, -1);
} }
envVars.set(envName, envValue); envVars.set(envName, envValue);
@@ -129,7 +127,7 @@ function returnToLLM(value) {
} }
const type = typeof value; const type = typeof value;
if (type === "string" || type === "number" || type === "boolean") { if (type === "string" || type === "number" || type === "boolean") {
writer.write(value); writer.write(value.toString());
} else if (type === "object") { } else if (type === "object") {
const proto = Object.prototype.toString.call(value); const proto = Object.prototype.toString.call(value);
if (proto === "[object Object]" || proto === "[object Array]") { if (proto === "[object Object]" || proto === "[object Array]") {
+2 -4
View File
@@ -77,9 +77,7 @@ def load_env(file_path):
if env_name not in os.environ: if env_name not in os.environ:
env_value = "=".join(value_parts).strip() env_value = "=".join(value_parts).strip()
if env_value.startswith('"') and env_value.endswith('"'): if (env_value.startswith('"') and env_value.endswith('"')) or (env_value.startswith("'") and env_value.endswith("'")):
env_value = env_value[1:-1]
elif env_value.startswith("'") and env_value.endswith("'"):
env_value = env_value[1:-1] env_value = env_value[1:-1]
env_vars[env_name] = env_value env_vars[env_name] = env_value
@@ -150,7 +148,7 @@ def return_to_llm(value):
value_type = type(value).__name__ value_type = type(value).__name__
if value_type in ("str", "int", "float", "bool"): if value_type in ("str", "int", "float", "bool"):
writer.write(value) writer.write(str(value))
elif value_type == "dict" or value_type == "list": elif value_type == "dict" or value_type == "list":
value_str = json.dumps(value, indent=2) value_str = json.dumps(value, indent=2)
assert value == json.loads(value_str) assert value == json.loads(value_str)
+2 -4
View File
@@ -74,9 +74,7 @@ async function loadEnv(filePath) {
if (!process.env[envName]) { if (!process.env[envName]) {
let envValue = valueParts.join("=").trim(); let envValue = valueParts.join("=").trim();
if (envValue.startsWith('"') && envValue.endsWith('"')) { if ((envValue.startsWith('"') && envValue.endsWith('"')) || (envValue.startsWith("'") && envValue.endsWith("'"))) {
envValue = envValue.slice(1, -1);
} else if (envValue.startsWith("'") && envValue.endsWith("'")) {
envValue = envValue.slice(1, -1); envValue = envValue.slice(1, -1);
} }
envVars.set(envName, envValue); envVars.set(envName, envValue);
@@ -116,7 +114,7 @@ function returnToLLM(value) {
} }
const type = typeof value; const type = typeof value;
if (type === "string" || type === "number" || type === "boolean") { if (type === "string" || type === "number" || type === "boolean") {
writer.write(value); writer.write(value.toString());
} else if (type === "object") { } else if (type === "object") {
const proto = Object.prototype.toString.call(value); const proto = Object.prototype.toString.call(value);
if (proto === "[object Object]" || proto === "[object Array]") { if (proto === "[object Object]" || proto === "[object Array]") {
+2 -4
View File
@@ -72,9 +72,7 @@ def load_env(file_path):
if env_name not in os.environ: if env_name not in os.environ:
env_value = "=".join(value_parts).strip() env_value = "=".join(value_parts).strip()
if env_value.startswith('"') and env_value.endswith('"'): if (env_value.startswith('"') and env_value.endswith('"')) or (env_value.startswith("'") and env_value.endswith("'")):
env_value = env_value[1:-1]
elif env_value.startswith("'") and env_value.endswith("'"):
env_value = env_value[1:-1] env_value = env_value[1:-1]
env_vars[env_name] = env_value env_vars[env_name] = env_value
@@ -110,7 +108,7 @@ def return_to_llm(value):
value_type = type(value).__name__ value_type = type(value).__name__
if value_type in ("str", "int", "float", "bool"): if value_type in ("str", "int", "float", "bool"):
writer.write(value) writer.write(str(value))
elif value_type == "dict" or value_type == "list": elif value_type == "dict" or value_type == "list":
value_str = json.dumps(value, indent=2) value_str = json.dumps(value, indent=2)
assert value == json.loads(value_str) assert value == json.loads(value_str)
+5 -1
View File
@@ -1,3 +1,5 @@
const vm = require('vm');
/** /**
* Execute the javascript code in node.js. * Execute the javascript code in node.js.
* @typedef {Object} Args * @typedef {Object} Args
@@ -5,5 +7,7 @@
* @param {Args} args * @param {Args} args
*/ */
exports.run = function run({ code }) { exports.run = function run({ code }) {
return eval(code); const context = vm.createContext({});
const script = new vm.Script(code);
return script.runInContext(context);
} }
+1 -1
View File
@@ -3,4 +3,4 @@ def run(code: str):
Args: Args:
code: Python code to execute, such as `print("hello world")` code: Python code to execute, such as `print("hello world")`
""" """
return exec(code) return eval(code)