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
|