Packages
snakepit
0.4.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.1
0.9.0
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
High-performance pooler and session manager for external language integrations. Supports Python, Node.js, Ruby, and more with gRPC streaming, session management, and production-ready process cleanup.
Current section
Files
Jump to
Current section
Files
lib/snakepit/adapters/grpc_bridge.ex
defmodule Snakepit.Adapters.GRPCBridge do
@moduledoc """
Adapter for the new unified gRPC bridge server.
"""
@behaviour Snakepit.Adapter
@impl true
def executable_path, do: System.find_executable("python3") || "python3"
@impl true
def script_path, do: Path.join(:code.priv_dir(:snakepit), "python/grpc_server.py")
@impl true
def script_args do
[
# Dynamic port allocation
"--port",
"0",
"--adapter",
"snakepit_bridge.adapters.enhanced.EnhancedBridge"
]
end
@impl true
def supported_commands do
[
# Variable operations
"register_variable",
"get_variable",
"set_variable",
"delete_variable",
"list_variables",
"watch_variable",
# Tool operations (future)
"register_tool",
"execute_tool",
"list_tools",
# Session management
"initialize_session",
"cleanup_session",
# Basic operations
"ping"
]
end
@impl true
def validate_command(command, _args) do
if command in supported_commands() do
:ok
else
{:error, "Unsupported command: #{command}"}
end
end
@impl true
def prepare_args(_command, args), do: args
@impl true
def process_response(_command, response), do: {:ok, response}
@impl true
def command_timeout(_command, _args), do: 30_000
# Additional adapter-specific functions
def get_name, do: "GRPCBridge"
# Let the server choose
def get_port, do: 0
def get_env, do: %{"PYTHONUNBUFFERED" => "1"}
def supports_health?, do: true
def grpc_enabled?, do: true
def session_enabled?, do: true
def validate_config(config) do
{:ok, config}
end
def init_grpc_connection(port) do
case Snakepit.GRPC.ClientImpl.connect(port) do
{:ok, channel} ->
{:ok, %{channel: channel, port: port}}
{:error, reason} ->
{:error, reason}
end
end
def uses_grpc?, do: true
end