Creación y Uso de un Sandbox
Cree un sandbox en un proyecto de IA generativa activo, ejecute un comando y detenga el tiempo de ejecución cuando haya terminado.
Utilice la CLI o el SDK de OCI para crear sandboxes. La consola proporciona la configuración del proyecto, los detalles del sandbox, la supervisión y las acciones del ciclo de vida.
Antes de empezar
- Configure los permisos en Permisos de nivel de API para sandboxes.
- Seleccione una región soportada.
- Instale una versión de SDK o CLI de OCI que incluya el grupo de comandos
generative-ai-sandboxo el paqueteoci.generative_ai_sandbox. Consulte CLI de OCI y SDK para Python.
Los ejemplos utilizan un shell que soporta la sintaxis de variable mostrada y la autenticación de sesión de OCI. Ejecute oci session authenticate y, a continuación, defina profile_name en el perfil que ha creado. Consulte Autenticación basada en tokens para la CLI.
Para comprobar que la CLI incluye los comandos, ejecute:
oci generative-ai-sandbox --helpUso de la CLI
Sustituya COMPARTMENT_OCID y PROJECT_OCID por sus identificadores de recursos.
Uso del SDK de Python
En este ejemplo, se utiliza un proyecto activo existente con sandboxes activados y el perfil de autenticación de sesión preparado anteriormente. Crea un sandbox, lo espera, ejecuta un comando y solicita una parada cuando finaliza.
from pathlib import Path
import time
import warnings
import oci
from oci.generative_ai_sandbox import GenerativeAiSandboxClient
from oci.generative_ai_sandbox.models import (
CreateSandboxDetails,
RunSandboxCommandDetails,
StopSandboxDetails,
)
profile_name = "DEFAULT"
project_id = "PROJECT_OCID"
region = "us-chicago-1"
config = oci.config.from_file(profile_name=profile_name)
key = oci.signer.load_private_key_from_file(config["key_file"])
token = Path(config["security_token_file"]).expanduser().read_text().strip()
signer = oci.auth.signers.SecurityTokenSigner(token, key)
client = GenerativeAiSandboxClient(
config=config,
signer=signer,
service_endpoint=f"https://inference.generativeai.{region}.oci.oraclecloud.com",
)
created = client.create_sandbox(
project_id,
CreateSandboxDetails(
display_name="my-sandbox",
runtime="python-3.11",
shape="SMALL",
expiration_duration="PT30M",
),
).data
sandbox_id = created.id
print(sandbox_id)
state = created.lifecycle_state
try:
# This example waits up to five minutes for creation.
deadline = time.monotonic() + 300
while time.monotonic() < deadline:
sandbox = client.get_sandbox(sandbox_id).data
state = sandbox.lifecycle_state
if state == "RUNNING":
break
if state in {"FAILED", "STOPPING", "STOPPED", "DELETING", "DELETED"}:
raise RuntimeError(f"Sandbox state: {sandbox.lifecycle_state}")
time.sleep(2)
else:
raise TimeoutError("Sandbox didn't reach RUNNING within five minutes")
result = client.run_sandbox_command_and_wait(
sandbox_id,
RunSandboxCommandDetails(command="python3 --version", timeout="PT1M"),
).data
print(result.output.stdout)
print(result.output.stderr)
print(result.output.exit_code)
finally:
# Attempt cleanup without masking an earlier error.
if state not in {"FAILED", "STOPPING", "STOPPED", "DELETING", "DELETED"}:
try:
client.stop_sandbox(sandbox_id, StopSandboxDetails(is_force=False))
except Exception as cleanup_error:
warnings.warn(f"Check sandbox {sandbox_id}: stop failed: {cleanup_error}")