Class: BxBuilderChain::DocumentUploadService

Inherits:
Object
  • Object
show all
Defined in:
lib/generators/bx_builder_chain/templates/app/services/bx_builder_chain/document_upload_service.rb

Constant Summary collapse

WAITING_FOLDER =

Update this path

'path/to/waiting_folder'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(files:, user_groups: ['public'], client_class_name: 'BxBuilderChain::Vectorsearch::Pgvector', llm_class_name: 'BxBuilderChain::Llm::OpenAi') ⇒ DocumentUploadService

Returns a new instance of DocumentUploadService.



7
8
9
10
11
12
# File 'lib/generators/bx_builder_chain/templates/app/services/bx_builder_chain/document_upload_service.rb', line 7

def initialize(files:, user_groups: ['public'], client_class_name: 'BxBuilderChain::Vectorsearch::Pgvector', llm_class_name: 'BxBuilderChain::Llm::OpenAi')
  @files = files
  @user_groups = user_groups
  @client_class_name = client_class_name
  @llm_class_name = llm_class_name
end

Instance Attribute Details

#client_class_nameObject (readonly)

Returns the value of attribute client_class_name.



3
4
5
# File 'lib/generators/bx_builder_chain/templates/app/services/bx_builder_chain/document_upload_service.rb', line 3

def client_class_name
  @client_class_name
end

#filesObject (readonly)

Returns the value of attribute files.



3
4
5
# File 'lib/generators/bx_builder_chain/templates/app/services/bx_builder_chain/document_upload_service.rb', line 3

def files
  @files
end

#llm_class_nameObject (readonly)

Returns the value of attribute llm_class_name.



3
4
5
# File 'lib/generators/bx_builder_chain/templates/app/services/bx_builder_chain/document_upload_service.rb', line 3

def llm_class_name
  @llm_class_name
end

#user_groupsObject (readonly)

Returns the value of attribute user_groups.



3
4
5
# File 'lib/generators/bx_builder_chain/templates/app/services/bx_builder_chain/document_upload_service.rb', line 3

def user_groups
  @user_groups
end

Instance Method Details

#upload_and_processObject



14
15
16
17
18
19
20
21
# File 'lib/generators/bx_builder_chain/templates/app/services/bx_builder_chain/document_upload_service.rb', line 14

def upload_and_process
  return { error: 'No files provided' } unless @files&.any?
  
  files_n_paths = @files.map { |file| { path: file.tempfile.path, filename: file.original_filename } }
  client.add_data(paths: files_n_paths)
  
  { success: 'Files added to document store' }
end

#upload_and_process_laterObject



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/generators/bx_builder_chain/templates/app/services/bx_builder_chain/document_upload_service.rb', line 23

def upload_and_process_later
  return { error: 'No files provided' } unless @files&.any?
  
  @files.each do |file|
    new_path = File.join(WAITING_FOLDER, file.original_filename)
    FileUtils.mv(file.tempfile.path, new_path)
    file_n_path = { path: new_path, filename: file.original_filename }
    # Enqueue for processing with Sidekiq
    BxBuilderChain::DocumentProcessorWorker.perform_async(file_n_path, llm_class: @llm_class_name, client_class: @client_class_name, namespaces: @user_groups)
  end
  
  { success: 'Files queued for processing' }
end