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
SDK Langsung
Agno menyediakan
DaytonaTools bawaan untuk menghubungkan sandbox Daytona ke agen Neosantara. Agen mengelola siklus pembuatan sandbox, eksekusi kode, dan pembersihan resource 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 sandbox untuk menjalankan dan memverifikasi kode.",
"Sajikan hasil eksekusi dengan format yang jelas."
]
)
agent.print_response(
"Buat file Python yang menghitung deret Fibonacci ke-20, eksekusi, dan tampilkan hasilnya."
)
Operasi File dan Git
Sandbox Daytona mendukung operasi filesystem dan git secara native:agent.print_response(
"Clone repo https://github.com/neosantara-xyz/examples.git, "
"baca file README.md, dan buat ringkasan kontennya."
)
Gunakan function calling untuk mengeksekusi kode dan perintah shell di sandbox Daytona. 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)
tools = [{
"type": "function",
"function": {
"name": "run_code",
"description": "Eksekusi kode Python di sandbox terisolasi Daytona.",
"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)
sandbox = daytona.create()
result = sandbox.process.code_run(args["code"])
output_text = 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 tools = [
{
type: "function",
function: {
name: "run_code",
description: "Eksekusi kode Python di sandbox terisolasi Daytona.",
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 sandbox = await daytona.create();
const result = await sandbox.process.codeRun(args.code);
const outputText = 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);
}
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)
tools = [{
"name": "run_code",
"description": "Eksekusi kode Python di sandbox terisolasi Daytona.",
"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."}]
)
sandbox = daytona.create()
for block in response.content:
if block.type == "tool_use":
code_to_run = block.input.get("code")
result = sandbox.process.code_run(code_to_run)
print("Hasil:", 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 tools = [
{
name: "run_code",
description: "Eksekusi kode Python di sandbox terisolasi Daytona.",
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." }],
});
const sandbox = await daytona.create();
for (const block of response.content) {
if (block.type === "tool_use") {
const codeToRun = block.input.code;
const result = await sandbox.process.codeRun(codeToRun);
console.log("Hasil:", result.result);
}
}
await daytona.remove(sandbox);
Gunakan Daytona SDK secara langsung untuk skenario yang membutuhkan kontrol penuh atas lifecycle sandbox, operasi filesystem, dan git.
Instalasi Library
pip install -U daytona
npm install @daytona/sdk
Contoh Penggunaan
from daytona import Daytona, DaytonaConfig
config = DaytonaConfig(api_key="YOUR_DAYTONA_API_KEY")
daytona = Daytona(config)
sandbox = daytona.create()
# Eksekusi shell command
response = sandbox.process.exec("echo 'Hello from Daytona sandbox!'")
print(response.result)
# Jalankan kode Python
response = sandbox.process.code_run("print(sum(range(1, 101)))")
print(response.result)
# Operasi file
sandbox.fs.upload_file("workspace/data.txt", b"sample data content")
files = sandbox.fs.list_files("workspace")
print(files)
# Operasi git
sandbox.git.clone({
"url": "https://github.com/neosantara-xyz/examples.git",
"path": "workspace/repo"
})
daytona.remove(sandbox)
import { Daytona } from "@daytona/sdk";
const daytona = new Daytona({ apiKey: "YOUR_DAYTONA_API_KEY" });
const sandbox = await daytona.create();
// Eksekusi shell command
const shellResult = await sandbox.process.exec("echo 'Hello from Daytona sandbox!'");
console.log(shellResult.result);
// Jalankan kode
const codeResult = await sandbox.process.codeRun("console.log(Array.from({length: 10}, (_, i) => i + 1))");
console.log(codeResult.result);
// Operasi file
const files = await sandbox.fs.listFiles("workspace");
console.log(files);
// Operasi git
await sandbox.git.clone({
url: "https://github.com/neosantara-xyz/examples.git",
path: "workspace/repo",
});
await daytona.remove(sandbox);
Perbandingan Daytona vs E2B
| Fitur | Daytona | E2B |
|---|---|---|
| Fokus | Dev environment sandbox (file, git, shell, kode) | Code interpreter sandbox |
| Startup | <90ms | ~1-2 detik (Firecracker microVM) |
| Git bawaan | sandbox.git (clone, commit, push) | Manual via shell |
| Filesystem API | sandbox.fs (upload, list, download) | Terbatas |
| Snapshot stateful | Persistent snapshots antar sesi | Terbatas |
| GPU | Tersedia | Tersedia |
| SDK | Python, TypeScript, Go, Ruby, Java | Python, TypeScript |
Langkah Berikutnya
| Kebutuhan | Panduan |
|---|---|
| Sandbox code interpreter E2B | Dokumentasi E2B |
| Framework agen Agno | Dokumentasi Agno |
| Tool calling pada Gateway | Tool Calling Chat Completions |
| Katalog model yang didukung | Daftar Model & Harga |