2023-10-04 13:47:51 -03:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module ::DiscourseAi
|
|
|
|
module Inference
|
|
|
|
class CloudflareWorkersAi
|
2025-01-21 12:23:19 -03:00
|
|
|
def initialize(endpoint, api_token, referer = Discourse.base_url)
|
|
|
|
@endpoint = endpoint
|
2024-11-25 13:12:43 -03:00
|
|
|
@api_token = api_token
|
|
|
|
@referer = referer
|
|
|
|
end
|
|
|
|
|
2025-01-21 12:23:19 -03:00
|
|
|
attr_reader :endpoint, :api_token, :referer
|
2023-10-04 13:47:51 -03:00
|
|
|
|
2024-11-25 13:12:43 -03:00
|
|
|
def perform!(content)
|
|
|
|
headers = {
|
|
|
|
"Referer" => Discourse.base_url,
|
|
|
|
"Content-Type" => "application/json",
|
|
|
|
"Authorization" => "Bearer #{api_token}",
|
|
|
|
}
|
2023-10-04 13:47:51 -03:00
|
|
|
|
2024-12-20 17:45:27 -03:00
|
|
|
payload = { text: [content] }
|
|
|
|
|
2024-02-21 17:14:50 -03:00
|
|
|
conn = Faraday.new { |f| f.adapter FinalDestination::FaradayAdapter }
|
2024-12-20 17:45:27 -03:00
|
|
|
response = conn.post(endpoint, payload.to_json, headers)
|
2023-10-04 13:47:51 -03:00
|
|
|
|
2024-08-01 17:25:24 -03:00
|
|
|
case response.status
|
|
|
|
when 200
|
2024-11-25 13:12:43 -03:00
|
|
|
JSON.parse(response.body, symbolize_names: true).dig(:result, :data).first
|
2024-08-01 17:25:24 -03:00
|
|
|
when 429
|
|
|
|
# TODO add a AdminDashboard Problem?
|
|
|
|
else
|
|
|
|
Rails.logger.warn(
|
|
|
|
"Cloudflare Workers AI Embeddings failed with status: #{response.status} body: #{response.body}",
|
|
|
|
)
|
2025-01-21 12:23:19 -03:00
|
|
|
raise Net::HTTPBadResponse.new(response.body.to_s)
|
2024-08-01 17:25:24 -03:00
|
|
|
end
|
2023-10-04 13:47:51 -03:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|