कोड निष्पादन

ADK-Rust दो crates के माध्यम से कोड निष्पादन प्रदान करता है:

  • adk-sandboxProcessBackend (subprocess) और WasmBackend (wasmtime) के साथ पृथक निष्पादन रनटाइम
  • adk-codeRustExecutor (जाँच, निर्माण, निष्पादन पाइपलाइन) और CodeTool के साथ भाषा-जागरूक टूलचेन

यह पृथक्करण जानबूझकर किया गया है: adk-sandbox आइसोलेशन संभालता है, जबकि adk-code compilation और भाषा-विशिष्ट तर्क संभालता है।

त्वरित प्रारंभ

use adk_code::{CodeTool, RustExecutor, RustExecutorConfig};
use adk_sandbox::ProcessBackend;
use std::sync::Arc;

let backend = Arc::new(ProcessBackend::default());
let executor = RustExecutor::new(backend, RustExecutorConfig::default());
let tool = Arc::new(CodeTool::new(executor));

let agent = LlmAgentBuilder::new("code_agent")
    .instruction("Execute Rust code when asked to compute something.")
    .model(model)
    .tool(tool)
    .build()?;

Rust compilation pipeline के बिना सीधे sandbox निष्पादन के लिए:

use adk_sandbox::{SandboxTool, ProcessBackend};
use std::sync::Arc;

let backend = Arc::new(ProcessBackend::default());
let tool = Arc::new(SandboxTool::new(backend));

आर्किटेक्चर

CodeTool Rust compilation pipeline जोड़ता है (त्रुटियों की जाँच, binary का निर्माण, फिर निष्पादन)। SandboxTool बिना compilation के backend के माध्यम से सीधे कोड निष्पादित करता है।

Backend क्षमता मैट्रिक्स

क्षमताProcessBackendWasmBackendEmbeddedJsExecutorMonty निष्पादकDockerExecutor
समय-सीमालागूलागूलागूलागू (VM में)लागू
मेमोरी सीमालागू नहींलागूलागू नहींलागूकंटेनर सीमाएँ
नेटवर्क पृथक्करणलागू नहींकोई WASI नेटवर्क नहींकोई API उपलब्ध नहींकोई API उपलब्ध नहींविन्यास योग्य
फ़ाइल सिस्टम पृथक्करणलागू नहींकोई WASI प्रीओपन नहींकोई API उपलब्ध नहींकेवल प्रदान किए गए माउंटविन्यास योग्य
पर्यावरण पृथक्करणenv_clear()पूर्णकोई API उपलब्ध नहींकेवल प्रदान किया गया मैपविन्यास योग्य
भाषाएँRust, Python, JS, TS, कमांडWasmJavaScriptPythonPython, Node.js

ProcessBackend उन बातों के बारे में स्पष्ट है जिन्हें वह लागू नहीं करता। पूर्ण सैंडबॉक्सिंग के लिए WasmBackend या कंटेनर-स्तरीय पृथक्करण के लिए DockerExecutor का उपयोग करें।

टूल्स

टूलक्रेटनामभाषास्कोप
CodeTooladk-codecode_execRustcode:execute, code:execute:rust
SandboxTooladk-sandboxsandbox_execबहु-भाषाcode:execute
PythonCodeTooladk-toolpython_codePython (कंटेनर-समर्थित CPython)code:execute, code:execute:container
MontyPythonCodeTooladk-toolmonty_python_codePython (इन-प्रोसेस Monty)code:execute

CodeTool, SandboxTool, और MontyPythonCodeTool त्रुटि-को-सूचना पैटर्न का पालन करते हैं: त्रुटियाँ संरचित JSON के रूप में लौटाई जाती हैं, जिनमें "status" फ़ील्ड होता है, कभी भी ToolError के रूप में नहीं। इससे एजेंट विफलताओं पर तर्क कर सकते हैं। PythonCodeTool अपवाद है — यह अनुपस्थित code तर्क और एक्ज़ीक्यूटर-स्तरीय विफलताओं के लिए ToolError लौटाता है; केवल स्क्रिप्ट-स्तरीय विफलताएँ डेटा के रूप में दिखाई देती हैं।

इन-प्रोसेस Python एक्ज़ीक्यूशन — वन-शॉट और REPL मोड, OS-एक्सेस अनुमतियाँ, और होस्ट फ़ंक्शन — के लिए Python Code Execution देखें।

संरचित डायग्नोस्टिक्स

CodeTool Rust कंपाइल त्रुटियों के लिए पार्स किए गए कंपाइलर डायग्नोस्टिक्स लौटाता है:

{
  "status": "compile_error",
  "diagnostics": [
    {
      "level": "error",
      "message": "expected `;`",
      "code": "E0308",
      "spans": [{ "file_name": "main.rs", "line_start": 3, "column_start": 15 }]
    }
  ],
  "stderr": "error: expected `;`"
}

सफलता प्रतिक्रियाओं में हार्नेस से निकाला गया संरचित आउटपुट शामिल होता है:

{
  "status": "success",
  "stdout": "",
  "output": { "greeting": "hello" },
  "exit_code": 0,
  "duration_ms": 42
}

Rust कोड अनुबंध

उपयोगकर्ता कोड में fn run(input: serde_json::Value) -> serde_json::Value प्रदान करना आवश्यक है। हार्नेस इसे fn main(), stdin पार्सिंग, और stdout सीरियलाइज़ेशन के साथ रैप करता है। उपयोगकर्ता कोड में fn main() परिभाषित नहीं करना चाहिए और क्रेट-स्तरीय एट्रिब्यूट्स (#![...]) का उपयोग नहीं करना चाहिए।

पिछले API से माइग्रेशन

पिछले adk-code प्रकार (CodeExecutor, ExecutionRequest, RustSandboxExecutor) और adk-tool का RustCodeTool हटा दिया गया है। इसके बजाय नए प्रकारों का उपयोग करें:

हटाया गयाप्रतिस्थापनक्रेट
RustCodeTool (0.8.0 में हटाया गया)CodeTooladk-code
RustSandboxExecutorRustExecutoradk-code
ExecutionRequestExecRequestadk-sandbox
ExecutionResultExecResultadk-sandbox
CodeExecutorSandboxBackendadk-sandbox

पूर्ण माइग्रेशन गाइड के लिए adk_code::compat देखें।

ब्राउज़र JavaScript

adk-browser के माध्यम से ब्राउज़र-पृष्ठ JavaScript का निष्पादन एक अलग क्षमता है। यह दूरस्थ पृष्ठ संदर्भ के अंदर चलता है और कोड निष्पादन आधारभूत संरचना का हिस्सा नहीं है। वेब स्वचालन और पृष्ठ इंटरैक्शन के लिए adk-browser टूल का उपयोग करें।

स्टूडियो एकीकरण

ADK Studio उसी कोड निष्पादन पाइपलाइन का उपयोग करता है:

  • लाइव रनर: RustExecutor + ProcessBackend के माध्यम से लिखे गए Rust को निष्पादित करता है
  • कोड जनरेशन: उसी Rust बॉडी को जनरेट किए गए प्रोजेक्ट में एम्बेड करता है
  • सैंडबॉक्स सेटिंग्स: बैकएंड द्वारा लागू की जा सकने वाली क्षमताओं से मैप होती हैं