class SlackSmartBot
module AI
module OpenAI
def self.models(open_ai_client, models_config, model = "", return_response: false)
require "openai"
require "amazing_print"
user = Thread.current[:user]
models = []
if model.empty? or model == "chatgpt"
if open_ai_client.is_a?(NiceHttp) and models_config.url != ""
resp = open_ai_client.get(models_config.url)
resp.body.json.data.each do |m|
if model.empty? or (model == "chatgpt" and
(m[:model_name].to_s.include?("gpt-") or (m.key?(:model_info) and m[:model_info][:mode].to_s == "chat")))
models << m[:model_name]
end
end
elsif open_ai_client.is_a?(NiceHttp) resp = open_ai_client.get("/openai/deployments?api-version=#{models_config.api_version}")
models = resp.body.json(:id)
models.flatten!
models.select! { |i| i.include?("gpt-") } if model == "chatgpt"
else
response = open_ai_client.models.list
models = []
response.data.each do |model|
models << model["id"]
end
models.select! { |i| i.include?("gpt-") } if model == "chatgpt"
end
if return_response
return models.uniq.sort
else
return models.uniq.sort.join("\n")
end
else
response_obj = {}
if open_ai_client.is_a?(NiceHttp) and models_config.url != ""
resp = open_ai_client.get(models_config.url)
result = {}
resp.data.json.data.each do |m|
if m[:model_name].to_s == model
result = m
break
end
end
if result.empty?
response = { message: "Model not found" }
response_obj = response
else
response = { message: "" }
result[:model_info].each do |k, v|
response.message += "#{k}: #{v}\n"
end
response_obj = result[:model_info]
end
elsif open_ai_client.is_a?(NiceHttp) resp = open_ai_client.get("/openai/deployments/#{model}?api-version=#{models_config.api_version}")
response = resp.body.json()
response_obj = response
else
response = open_ai_client.models.retrieve(id: model)
response_obj = response
end
result = response.ai
end
response = response.to_json
if !response.json(:message).empty? and response.json(:content).empty?
result = response.json(:message)
end
if return_response
return response_obj
else
return result
end
end
end
end
end