Class: LlmGateway::Proxy::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/llm_gateway/proxy/server.rb

Constant Summary collapse

PATH =
"/agent/llm_proxy"

Instance Method Summary collapse

Instance Method Details

#call(env) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/llm_gateway/proxy/server.rb', line 10

def call(env)
  return not_found unless env["REQUEST_METHOD"] == "POST" && env["PATH_INFO"] == PATH

  request = JSON.parse(env["rack.input"].read).deep_symbolize_keys
  options = request[:options] || {}
  options = options.merge(model: request[:model]) if request.key?(:model)
  adapter = build_adapter(request)

  body = Enumerator.new do |yielder|
    adapter.raw_stream(
      request[:messages],
      system: request[:system],
      tools: request[:tools],
      **options
    ) do |chunk|
      yielder << encode_sse(chunk)
    end
  end

  [ 200, { "content-type" => "text/event-stream", "cache-control" => "no-cache" }, body ]
rescue KeyError, JSON::ParserError, ArgumentError => e
  json_error(400, e.message)
rescue Errors::UnsupportedProvider => e
  json_error(404, e.message)
rescue StandardError => e
  json_error(500, e.message)
end