Module: OllamaChat::ServerSocket

Included in:
Chat
Defined in:
lib/ollama_chat/server_socket.rb

Overview

A module that provides server socket functionality for OllamaChat

The ServerSocket module encapsulates the logic for creating and managing Unix domain socket servers that enable external processes to send input to running ollama_chat sessions. It supports both simple message transmission and bidirectional communication with response handling, allowing for integration with tools like ollama_chat_send.

Examples:

Sending a message to a running chat session

OllamaChat::ServerSocket.send_to_server_socket(
  "Hello from external process",
  config: chat_config,
  type: :socket_input
)

Sending a message and waiting for a response

response = OllamaChat::ServerSocket.send_to_server_socket(
  "What is the answer?",
  config: chat_config,
  type: :socket_input_with_response,
  parse: true
)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#server_socket_messageObject?

The server_socket_message accessor method provides read and write access to the server socket message instance variable.

not set

Returns:

  • (Object, nil)

    the current server socket message object or nil if



86
87
88
# File 'lib/ollama_chat/server_socket.rb', line 86

def server_socket_message
  @server_socket_message
end

Class Method Details

.create_socket_server(config:, runtime_dir: nil) ⇒ UnixSocks::Server

The create_socket_server method constructs and returns a Unix domain socket server instance for communication with the Ollama Chat client.

This method initializes a UnixSocks::Server object configured to listen for incoming messages on a named socket file. It supports specifying a custom runtime directory for the socket, which is useful for isolating multiple instances or environments. If no runtime directory is provided in the configuration, it defaults to using the standard system location for Unix domain sockets.

containing server settings

instance ready to receive messages

Parameters:

  • config (ComplexConfig::Settings)

    the configuration object

Returns:

  • (UnixSocks::Server)

    a configured Unix domain socket server



69
70
71
72
73
74
75
76
77
78
# File 'lib/ollama_chat/server_socket.rb', line 69

def create_socket_server(config:, runtime_dir: nil)
  if runtime_dir
    return UnixSocks::Server.new(socket_name: 'ollama_chat.sock', runtime_dir:)
  end
  if runtime_dir = config.server_socket_runtime_dir
    UnixSocks::Server.new(socket_name: 'ollama_chat.sock', runtime_dir:)
  else
    UnixSocks::Server.new(socket_name: 'ollama_chat.sock')
  end
end

.send_to_server_socket(content, config:, type: :socket_input, runtime_dir: nil, parse: false) ⇒ UnixSocks::Message?

The send_to_server_socket method transmits a message to a Unix domain socket server for processing by the Ollama Chat client.

This method creates a socket server instance using the provided configuration, prepares a message with the given content, type, and parse flag, then sends it either as a simple transmission or with a response expectation depending on the message type. It is used to enable communication between external processes and the chat session via a named Unix socket.

is :socket_input_with_response, otherwise nil

Parameters:

  • content (String)

    the message content to be sent

  • config (ComplexConfig::Settings)

    the configuration object containing server settings

  • type (Symbol) (defaults to: :socket_input)

    the type of message transmission, defaults to :socket_input

  • runtime_dir (String) (defaults to: nil)

    pathname to runtime_dir of socket file

  • parse (TrueClass, FalseClass) (defaults to: false)

    whether to parse the response, defaults to false

Returns:

  • (UnixSocks::Message, nil)

    the response from transmit_with_response if type



43
44
45
46
47
48
49
50
51
52
# File 'lib/ollama_chat/server_socket.rb', line 43

def send_to_server_socket(content, config:, type: :socket_input, runtime_dir: nil, parse: false)
  server  = create_socket_server(config:, runtime_dir:)
  message = { content:, type:, parse: }
  if type.to_sym == :socket_input_with_response
    server.transmit_with_response(message)
  else
    server.transmit(message)
    nil
  end
end

Instance Method Details

#init_server_socketObject

Initializes the server socket to receive messages from the Ollama Chat Client.

This method sets up a Unix domain socket server that listens for incoming messages in the background. When a message is received, it updates the instance variable ‘server_socket_message` and sends an interrupt signal to the current process in order to handle the message.



95
96
97
98
99
100
101
# File 'lib/ollama_chat/server_socket.rb', line 95

def init_server_socket
  server = OllamaChat::ServerSocket.create_socket_server(config:)
  server.receive_in_background do |message|
    self.server_socket_message = message
    Process.kill :INT, $$
  end
end