process.code_run), Code Interpreter mendukung isolated context, streaming output via callback, dan manajemen context eksplisit. Saat ini hanya mendukung Python. Untuk bahasa lain, gunakan process.code_run.
Kredensial Akses
Setel API key Neosantara dan Daytona pada environment variables sistem Anda:export NEOSANTARA_API_KEY="nsk_..."
export DAYTONA_API_KEY="your_daytona_api_key"
Integrasi Framework dan SDK
Pilih framework atau SDK yang ingin digunakan:Agno
OpenAI SDK
Anthropic SDK
Agno menyediakan
DaytonaTools bawaan untuk menghubungkan Code Interpreter Daytona ke agen Neosantara. Agen mengelola siklus tool calling dan eksekusi kode secara otomatis.Instalasi Library
pip install -U agno daytona
Contoh Implementasi
from agno.agent import Agent
from agno.models.neosantara import Neosantara
from agno.tools.daytona import DaytonaTools
agent = Agent(
model=Neosantara(id="deepseek-v4.1-flash"),
tools=[DaytonaTools()],
markdown=True,
show_tool_calls=True,
instructions=[
"Gunakan Daytona Code Interpreter untuk menjalankan dan memverifikasi kode Python.",
"Sajikan hasil eksekusi dengan format yang jelas."
]
)
agent.print_response(
"Hitung 10 bilangan Fibonacci pertama dengan Python dan tampilkan hasilnya."
)
Gunakan function calling untuk mengeksekusi kode Python stateful via
code_interpreter.run_code. Tersedia untuk Python dan Node.js.Instalasi Library
pip install -U openai daytona
npm install openai @daytona/sdk
Contoh Implementasi
import os
import json
from openai import OpenAI
from daytona import Daytona, DaytonaConfig
client = OpenAI(
base_url="https://api.neosantara.xyz/v1",
api_key=os.environ["NEOSANTARA_API_KEY"]
)
config = DaytonaConfig(api_key=os.environ["DAYTONA_API_KEY"])
daytona = Daytona(config)
sandbox = daytona.create()
tools = [{
"type": "function",
"function": {
"name": "run_python_code",
"description": "Eksekusi kode Python stateful di Daytona Code Interpreter.",
"parameters": {
"type": "object",
"properties": {
"code": {"type": "string", "description": "Kode Python yang akan dieksekusi."}
},
"required": ["code"]
}
}
}]
messages = [{"role": "user", "content": "Hitung faktorial dari 12 menggunakan Python."}]
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=messages,
tools=tools,
tool_choice="auto"
)
message = response.choices[0].message
if message.tool_calls:
tool_call = message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
result = sandbox.code_interpreter.run_code(args["code"])
output_text = result.stdout or str(result.result)
messages.append(message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": output_text
})
final_response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=messages
)
print(final_response.choices[0].message.content)
daytona.remove(sandbox)
import OpenAI from "openai";
import { Daytona } from "@daytona/sdk";
const client = new OpenAI({
baseURL: "https://api.neosantara.xyz/v1",
apiKey: process.env.NEOSANTARA_API_KEY,
});
const daytona = new Daytona({ apiKey: process.env.DAYTONA_API_KEY });
const sandbox = await daytona.create();
const tools = [
{
type: "function",
function: {
name: "run_python_code",
description: "Eksekusi kode Python stateful di Daytona Code Interpreter.",
parameters: {
type: "object",
properties: {
code: { type: "string", description: "Kode Python yang akan dieksekusi." },
},
required: ["code"],
},
},
},
];
const messages = [{ role: "user", content: "Hitung faktorial dari 12 menggunakan Python." }];
const response = await client.chat.completions.create({
model: "deepseek-v4.1-flash",
messages,
tools,
tool_choice: "auto",
});
const message = response.choices[0].message;
if (message.tool_calls && message.tool_calls.length > 0) {
const toolCall = message.tool_calls[0];
const args = JSON.parse(toolCall.function.arguments);
const result = await sandbox.codeInterpreter.runCode(args.code);
const outputText = result.stdout || String(result.result);
messages.push(message);
messages.push({
role: "tool",
tool_call_id: toolCall.id,
content: outputText,
});
const finalResponse = await client.chat.completions.create({
model: "deepseek-v4.1-flash",
messages,
});
console.log(finalResponse.choices[0].message.content);
}
await daytona.remove(sandbox);
Isolated Context
Default context bersifat shared dan persist antar eksekusi. Buat isolated context untuk sesi independen:ctx = sandbox.code_interpreter.create_context()
sandbox.code_interpreter.run_code("x = 100", context=ctx)
result = sandbox.code_interpreter.run_code("x + 23", context=ctx)
print(result.stdout)
sandbox.code_interpreter.delete_context(ctx)
Gunakan antarmuka tool use Anthropic dengan endpoint Neosantara. Tersedia untuk Python dan Node.js.
Instalasi Library
pip install -U anthropic daytona
npm install @anthropic-ai/sdk @daytona/sdk
Contoh Implementasi
import os
from anthropic import Anthropic
from daytona import Daytona, DaytonaConfig
client = Anthropic(
base_url="https://api.neosantara.xyz/anthropic",
api_key=os.environ["NEOSANTARA_API_KEY"]
)
config = DaytonaConfig(api_key=os.environ["DAYTONA_API_KEY"])
daytona = Daytona(config)
sandbox = daytona.create()
tools = [{
"name": "run_python_code",
"description": "Eksekusi kode Python stateful di Daytona Code Interpreter.",
"input_schema": {
"type": "object",
"properties": {
"code": {"type": "string", "description": "Kode Python untuk dijalankan."}
},
"required": ["code"]
}
}]
response = client.messages.create(
model="claude-3-7-sonnet",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "Hitung 2 pangkat 20 menggunakan Python."}]
)
for block in response.content:
if block.type == "tool_use":
result = sandbox.code_interpreter.run_code(block.input.get("code"))
print("Hasil:", result.stdout or result.result)
daytona.remove(sandbox)
import Anthropic from "@anthropic-ai/sdk";
import { Daytona } from "@daytona/sdk";
const client = new Anthropic({
baseURL: "https://api.neosantara.xyz/anthropic",
apiKey: process.env.NEOSANTARA_API_KEY,
});
const daytona = new Daytona({ apiKey: process.env.DAYTONA_API_KEY });
const sandbox = await daytona.create();
const tools = [
{
name: "run_python_code",
description: "Eksekusi kode Python stateful di Daytona Code Interpreter.",
input_schema: {
type: "object",
properties: {
code: { type: "string", description: "Kode Python untuk dijalankan." },
},
required: ["code"],
},
},
];
const response = await client.messages.create({
model: "claude-3-7-sonnet",
max_tokens: 1024,
tools,
messages: [{ role: "user", content: "Hitung 2 pangkat 20 menggunakan Python." }],
});
for (const block of response.content) {
if (block.type === "tool_use") {
const result = await sandbox.codeInterpreter.runCode(block.input.code);
console.log("Hasil:", result.stdout || result.result);
}
}
await daytona.remove(sandbox);
Code Interpreter vs Sandbox Process
| Fitur | Code Interpreter | Sandbox Process |
|---|---|---|
| API | code_interpreter.run_code() | process.code_run() / process.exec() |
| Bahasa | Python saja | Python, TypeScript, shell |
| State | Stateful per context, variabel persist | Stateless per panggilan |
| Isolasi | create_context() / delete_context() | Sandbox baru per sesi |
| Streaming | Callback on_stdout, on_stderr, on_error | Output langsung result |
| Cocok untuk | Analisis data, kalkulasi berantai, agen coding Python | Shell, multi-bahasa, operasi file dan git |
Langkah Berikutnya
| Kebutuhan | Panduan |
|---|---|
| Operasi file, shell, dan git Daytona | Daytona Sandbox |
| Eksekusi kode Python dan visualisasi E2B | E2B Code Interpreter |
| Tool calling pada Gateway | Tool Calling Chat Completions |
| Katalog model yang didukung | Daftar Model & Harga |