feat: improve execute js/py code and collect results (#117)
This commit is contained in:
@@ -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]") {
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
Reference in New Issue
Block a user