Current section

Files

Jump to
snakepit priv proto snakepit_bridge.proto
Raw

priv/proto/snakepit_bridge.proto

syntax = "proto3";
package snakepit.bridge;
import "google/protobuf/any.proto";
import "google/protobuf/timestamp.proto";
service BridgeService {
// Health & Session Management
rpc Ping(PingRequest) returns (PingResponse);
rpc InitializeSession(InitializeSessionRequest) returns (InitializeSessionResponse);
rpc CleanupSession(CleanupSessionRequest) returns (CleanupSessionResponse);
rpc GetSession(GetSessionRequest) returns (GetSessionResponse);
rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse);
// Tool Execution
rpc ExecuteTool(ExecuteToolRequest) returns (ExecuteToolResponse);
rpc ExecuteStreamingTool(ExecuteToolRequest) returns (stream ToolChunk);
// Tool Registration & Discovery
rpc RegisterTools(RegisterToolsRequest) returns (RegisterToolsResponse);
rpc GetExposedElixirTools(GetExposedElixirToolsRequest) returns (GetExposedElixirToolsResponse);
rpc ExecuteElixirTool(ExecuteElixirToolRequest) returns (ExecuteElixirToolResponse);
}
// Core Messages
message PingRequest {
string message = 1;
}
message PingResponse {
string message = 1;
google.protobuf.Timestamp server_time = 2;
}
message InitializeSessionRequest {
string session_id = 1;
map<string, string> metadata = 2;
SessionConfig config = 3;
}
message SessionConfig {
bool enable_caching = 1;
int32 cache_ttl_seconds = 2;
bool enable_telemetry = 3;
}
message InitializeSessionResponse {
bool success = 1;
string error_message = 2;
map<string, ToolSpec> available_tools = 3;
}
message CleanupSessionRequest {
string session_id = 1;
bool force = 2;
}
message CleanupSessionResponse {
bool success = 1;
int32 resources_cleaned = 2;
}
// Tool Messages
message ToolSpec {
string name = 1;
string description = 2;
repeated ParameterSpec parameters = 3;
map<string, string> metadata = 4;
bool supports_streaming = 5;
}
message ParameterSpec {
string name = 1;
string type = 2;
string description = 3;
bool required = 4;
google.protobuf.Any default_value = 5;
string validation_json = 6;
}
message ExecuteToolRequest {
string session_id = 1;
string tool_name = 2;
map<string, google.protobuf.Any> parameters = 3;
map<string, string> metadata = 4;
bool stream = 5;
// Binary parameters for large data (e.g., images, audio, video)
// Keys should match parameter names, metadata should describe format
map<string, bytes> binary_parameters = 6;
}
message ExecuteToolResponse {
bool success = 1;
google.protobuf.Any result = 2;
string error_message = 3;
map<string, string> metadata = 4;
int64 execution_time_ms = 5;
}
message ToolChunk {
string chunk_id = 1;
bytes data = 2;
bool is_final = 3;
map<string, string> metadata = 4;
}
// Session Management Messages
message GetSessionRequest {
string session_id = 1;
}
message GetSessionResponse {
string session_id = 1;
map<string, string> metadata = 2;
google.protobuf.Timestamp created_at = 3;
int32 tool_count = 4;
}
message HeartbeatRequest {
string session_id = 1;
google.protobuf.Timestamp client_time = 2;
}
message HeartbeatResponse {
google.protobuf.Timestamp server_time = 1;
bool session_valid = 2;
}
// Tool Registration & Discovery Messages
message RegisterToolsRequest {
string session_id = 1;
repeated ToolRegistration tools = 2;
string worker_id = 3;
}
message ToolRegistration {
string name = 1;
string description = 2;
repeated ParameterSpec parameters = 3;
map<string, string> metadata = 4;
bool supports_streaming = 5;
}
message RegisterToolsResponse {
bool success = 1;
map<string, string> tool_ids = 2;
string error_message = 3;
}
message GetExposedElixirToolsRequest {
string session_id = 1;
}
message GetExposedElixirToolsResponse {
repeated ToolSpec tools = 1;
}
message ExecuteElixirToolRequest {
string session_id = 1;
string tool_name = 2;
map<string, google.protobuf.Any> parameters = 3;
map<string, string> metadata = 4;
}
message ExecuteElixirToolResponse {
bool success = 1;
google.protobuf.Any result = 2;
string error_message = 3;
map<string, string> metadata = 4;
int64 execution_time_ms = 5;
}