Class: BddOpenai::Files::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/bdd_openai/files/client.rb

Overview

Client for OpenAI Files API

Instance Method Summary collapse

Constructor Details

#initialize(api_key = '') ⇒ Client

Returns a new instance of Client.

Parameters:

  • api_key (String) (defaults to: '')

    The key of the OpenAI API



10
11
12
13
14
# File 'lib/bdd_openai/files/client.rb', line 10

def initialize(api_key = '')
  @http_client = BddOpenai::Client::HttpClient.new
  @openai_api_domain = 'https://api.openai.com/v1'
  @openai_api_key = api_key
end

Instance Method Details

#default_headersObject



16
17
18
19
20
21
# File 'lib/bdd_openai/files/client.rb', line 16

def default_headers
  {
    "Authorization": "Bearer #{@openai_api_key}",
    "Content-Type": 'application/json'
  }
end

#delete_file(file_id) ⇒ true, BddOpenai::ErrorResponse

Parameters:

  • file_id (String)

    The id of the file to delete

Returns:



52
53
54
55
56
57
58
# File 'lib/bdd_openai/files/client.rb', line 52

def delete_file(file_id)
  uri = URI.parse("#{@openai_api_domain}/files/#{file_id}")
  response = @http_client.call_delete(uri, default_headers)
  return BddOpenai::ErrorResponse.from_json(response.body) unless response.code == '200'

  true
end

#list_filesArray<BddOpenai::Files::File>, BddOpenai::ErrorResponse



24
25
26
27
28
29
30
31
32
# File 'lib/bdd_openai/files/client.rb', line 24

def list_files
  uri = URI.parse("#{@openai_api_domain}/files")
  response = @http_client.call_get(uri, default_headers)
  return BddOpenai::ErrorResponse.from_json(response.body) unless response.code == '200'

  JSON.parse(response.body)['data'].map do |file|
    BddOpenai::Files::File.from_json(file.to_json)
  end
end

#retrieve_file(file_id) ⇒ BddOpenai::Files::File, BddOpenai::ErrorResponse

Parameters:

  • file_id (String)

    The id of the file to retrieve

Returns:



62
63
64
65
66
67
68
# File 'lib/bdd_openai/files/client.rb', line 62

def retrieve_file(file_id)
  uri = URI.parse("#{@openai_api_domain}/files/#{file_id}")
  response = @http_client.call_get(uri, default_headers)
  return BddOpenai::ErrorResponse.from_json(response.body) unless response.code == '200'

  BddOpenai::Files::File.from_json(response.body)
end

#upload_file(purpose, file_path) ⇒ BddOpenai::Files::File, BddOpenai::ErrorResponse

Parameters:

  • purpose (String)

    The intended purpose of the file. One of: “fine-tune”, “assistants”.

  • file_path (String)

    The path of the file to upload

Returns:



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/bdd_openai/files/client.rb', line 37

def upload_file(purpose, file_path)
  uri = URI.parse("#{@openai_api_domain}/files")
  body, boundary = @http_client.create_multipart_body({ purpose: purpose }, { file: file_path })
  headers = default_headers
            .merge({
                     "Content-Type": "multipart/form-data; boundary=#{boundary}"
                   })
  response = @http_client.call_post(uri, body, headers)
  return BddOpenai::ErrorResponse.from_json(response.body) unless response.code == '200'

  BddOpenai::Files::File.from_json(response.body)
end