Snakepit.Adapter behaviour (snakepit v0.1.2)
Behaviour for implementing adapters in Snakepit.
Adapters define how to communicate with external processes (Python, Node.js, etc.) and what commands they support. This allows Snakepit to be truly generalized and support multiple ML frameworks or external systems.
Required Callbacks
executable_path/0
- Returns the path to the runtime executable (python3, node, etc.)script_path/0
- Returns the path to the external script to executescript_args/0
- Returns additional arguments for the scriptsupported_commands/0
- Returns list of commands this adapter supportsvalidate_command/2
- Validates a command and its arguments
Optional Callbacks
process_response/2
- Post-process responses from the external processprepare_args/2
- Pre-process arguments before sending to external process
Example Implementation
defmodule MyApp.PythonMLAdapter do
@behaviour Snakepit.Adapter
def executable_path, do: System.find_executable("python3") || System.find_executable("python")
def script_path, do: Path.join(:code.priv_dir(:my_app), "python/ml_bridge.py")
def script_args, do: ["--mode", "pool-worker"]
def supported_commands, do: ["predict", "train", "ping"]
def validate_command("predict", args) do
if Map.has_key?(args, :input), do: :ok, else: {:error, :missing_input}
end
def validate_command("ping", _args), do: :ok
def validate_command(cmd, _), do: {:error, {:unsupported_command, cmd}}
end
Summary
Callbacks
Optional callback to get a command-specific timeout in milliseconds.
Returns the path to the runtime executable.
Optional callback to prepare arguments before sending to external process.
Optional callback to process responses from the external process.
Returns additional command-line arguments for the script.
Returns the path to the external script that will be executed.
Returns a list of commands that this adapter supports.
Validates that a command and its arguments are valid for this adapter.
Functions
Default implementation for command_timeout - returns 30 seconds.
Default implementation for prepare_args - just returns args as-is.
Default implementation for process_response - just returns the response as-is.
Callbacks
@callback command_timeout(command :: String.t(), args :: map()) :: pos_integer()
Optional callback to get a command-specific timeout in milliseconds.
This allows adapters to specify appropriate timeouts for different commands based on their expected execution time.
@callback executable_path() :: String.t()
Returns the path to the runtime executable.
This is the interpreter or runtime that will execute the script. Examples: "python3", "node", "ruby", "R", etc.
Optional callback to prepare arguments before sending to external process.
This allows adapters to transform arguments into the format expected by their external script.
@callback process_response(command :: String.t(), response :: term()) :: {:ok, term()} | {:error, term()}
Optional callback to process responses from the external process.
This allows adapters to transform or validate responses before they're returned to the caller.
@callback script_args() :: [String.t()]
Returns additional command-line arguments for the script.
These arguments will be passed to the script when it's started. Common examples: ["--mode", "pool-worker"], ["--config", "prod"]
@callback script_path() :: String.t()
Returns the path to the external script that will be executed.
This should be an absolute path to a script that implements the bridge protocol for communication with Snakepit.
@callback supported_commands() :: [String.t()]
Returns a list of commands that this adapter supports.
This is used for validation and documentation purposes.
Validates that a command and its arguments are valid for this adapter.
Returns :ok
if valid, {:error, reason}
if invalid.
Functions
Default implementation for command_timeout - returns 30 seconds.
Default implementation for prepare_args - just returns args as-is.
Default implementation for process_response - just returns the response as-is.