Class: MeetingBuddy::SystemDependency

Inherits:
Struct
  • Object
show all
Defined in:
lib/meeting_buddy/system_dependency.rb

Constant Summary collapse

WHISPER_CPP_VERSION =
"v1.7.3"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:) ⇒ SystemDependency

Returns a new instance of SystemDependency.



32
33
34
# File 'lib/meeting_buddy/system_dependency.rb', line 32

def initialize(name:)
  @name = name
end

Instance Attribute Details

#nameObject

Returns the value of attribute name

Returns:

  • (Object)

    the current value of name



4
5
6
# File 'lib/meeting_buddy/system_dependency.rb', line 4

def name
  @name
end

Class Method Details

.auto_install!(name) ⇒ Object



10
11
12
13
# File 'lib/meeting_buddy/system_dependency.rb', line 10

def auto_install!(name)
  system_dependency = new(name: name)
  system_dependency.install unless system_dependency.installed?
end

.download_model(model) ⇒ Object



24
25
26
27
28
29
# File 'lib/meeting_buddy/system_dependency.rb', line 24

def download_model(model)
  Dir.chdir("#{MeetingBuddy.cache_dir}/whisper.cpp") do
    MeetingBuddy.logger.info "Downloading GGML model: #{MeetingBuddy.whisper_model}"
    MeetingBuddy.logger.info `bash ./models/download-ggml-model.sh #{MeetingBuddy.whisper_model}`
  end
end

.model_downloaded?(model) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/meeting_buddy/system_dependency.rb', line 20

def model_downloaded?(model)
  File.exist?(File.join(MeetingBuddy.cache_dir, "whisper.cpp", "models", "ggml-#{model}.bin"))
end

.resolve_whisper_model(model) ⇒ Object



15
16
17
18
# File 'lib/meeting_buddy/system_dependency.rb', line 15

def resolve_whisper_model(model)
  return if model_downloaded?(model)
  download_model(model)
end

Instance Method Details

#installObject



45
46
47
48
49
50
# File 'lib/meeting_buddy/system_dependency.rb', line 45

def install
  return install_whisper if name.to_s == "whisper"

  MeetingBuddy.logger.info "Installing #{name}..."
  `brew list #{name} || brew install #{name}`
end

#install_whisperObject



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/meeting_buddy/system_dependency.rb', line 52

def install_whisper
  MeetingBuddy.logger.info "Installing whisper.cpp..."
  Dir.chdir(MeetingBuddy.cache_dir) do
    MeetingBuddy.logger.info "Setting up whipser.cpp in #{MeetingBuddy.cache_dir}/whipser.cpp"
    MeetingBuddy.logger.info `git clone https://github.com/ggerganov/whisper.cpp`
    Dir.chdir("whisper.cpp") do
      MeetingBuddy.logger.info `git checkout #{WHISPER_CPP_VERSION}`
      MeetingBuddy.logger.info "Downloading GGML model: #{MeetingBuddy.whisper_model}"
      MeetingBuddy.logger.info `bash #{MeetingBuddy.cache_dir}/whisper.cpp/models/download-ggml-model.sh #{MeetingBuddy.whisper_model}`
      MeetingBuddy.logger.info "Building whipser.cpp with streaming support..."
      MeetingBuddy.logger.info `cmake -B build -DWHISPER_SDL2=ON && cmake --build build --config Release`
    end
  end
end

#installed?Boolean

Returns:

  • (Boolean)


36
37
38
39
40
41
42
43
# File 'lib/meeting_buddy/system_dependency.rb', line 36

def installed?
  MeetingBuddy.logger.info "Checking for system dependency: #{name}..."
  if name.to_s == "whisper"
    Dir.exist?("#{MeetingBuddy.cache_dir}/whisper.cpp")
  else
    system("brew list -1 #{name} > /dev/null") || system("type -a #{name}")
  end
end