aia 0.5.13 → 0.5.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1487b5005351fcb62b10d7ccdfdfe0153a40b931b633562671cc28e9f554ad8f
4
- data.tar.gz: 9d34fc975adb14a52d0cf62a541a7568af61b4da5cb963c326a83253613d6b30
3
+ metadata.gz: 9a4bc8019b9ad41da7d884ad4d86b3489afd2487b8ce7be78dd10ca8e963f454
4
+ data.tar.gz: d374c91f50ea29bb1dd0d9fab5c924ab7741676c45cf75de6999f3f965c1d8a1
5
5
  SHA512:
6
- metadata.gz: '00994916d15ef59a91ee9ae8b73acee3e10a8cc7deb1c41cbfa5fff4997fd97622deb2d16fdbc555da17bddba48dc349db21115333aac9bdf8d9a3dfaaa220c4'
7
- data.tar.gz: b40df4e189d676dbee86f6593fac9fb90153d392105c07af7a53a3a1be1e3961b9978e05e29738e94c5ee135f7f9af0abdb7de19475edd4e7f7615f42d701327
6
+ metadata.gz: 4a2a194377c2b871a13e951a423bd1cede4b06be631ba0a3986cd8b3bddb80bb3cdd0c831207df08da7cabbdcb697d290bef6c083c54054d550c942909dbdd16
7
+ data.tar.gz: 79921b2f9899a2a86a86a18ae4cf2d9fe988a94e2bb70ae4dcd1998c3f721661b9a4587f4585219666b2d942d6ef500015fe9f4cfd60cae3982cb143b62bc366
data/.semver CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 5
4
- :patch: 13
4
+ :patch: 14
5
5
  :special: ''
6
6
  :metadata: ''
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.5.14] 2024-03-09
4
+ - Directly access OpenAI to do text to speech when using the `--speak` option
5
+ - Added --voice to specify which voice to use
6
+ - Added --speech_model to specify which TTS model to use
7
+
3
8
  ## [0.5.13] 2024-03-03
4
9
  - Added CLI-utility `llm` as a backend processor
5
10
 
data/README.md CHANGED
@@ -6,15 +6,15 @@ It leverages the `prompt_manager` gem to manage prompts for the `mods` and `sgpt
6
6
 
7
7
  **Most Recent Change**: Refer to the [Changelog](CHANGELOG.md)
8
8
 
9
+ > v0.5.14
10
+ > - Directly access OpenAI to do text to speech when using the `--speak` option
11
+ > - Added --voice to specify which voice to use
12
+ > - Added --speech_model to specify which TTS model to use
13
+ >
9
14
  > v0.5.13
10
15
  > - Added an initial integration for CLI-tool `llm` as a backend processor
11
16
  > Its primary feature is its **ability to use local LLMs and APIs to keep all processing within your local workstation.**
12
17
  >
13
- > v0.5.12
14
- > - Supports Prompt Sequencing
15
- > - Added --next option
16
- > - Added --pipeline option
17
-
18
18
 
19
19
  <!-- Tocer[start]: Auto-generated, don't remove. -->
20
20
 
@@ -106,9 +106,12 @@ The `aia` configuration defaults can be over-ridden by system environment variab
106
106
  | log_file | ~/.prompts/_prompts.log | AIA_LOG_FILE |
107
107
  | markdown | true | AIA_MARKDOWN |
108
108
  | model | gpt-4-1106-preview | AIA_MODEL |
109
- | out_file | STDOUT | AIA_OUT_FILE |
109
+ | out_file | STDOUT | AIA_OUT_FILE |
110
110
  | prompts_dir | ~/.prompts | AIA_PROMPTS_DIR |
111
- | VERBOSE | FALSE | AIA_VERBOSE |
111
+ | speech_model. | tts-1 | AIA_SPEECH_MODEL |
112
+ | verbose | FALSE | AIA_VERBOSE |
113
+ | voice | alloy | AIA_VOICE |
114
+
112
115
 
113
116
 
114
117
  See the `@options` hash in the `cli.rb` file for a complete list. There are some config items that do not necessarily make sense for use as an envar over-ride. For example if you set `export AIA_DUMP_FILE=config.yaml` then `aia` would dump the current configuration config.yaml and exit every time it is ran until you finally `unset AIA_DUMP_FILE`
data/lib/aia/cli.rb CHANGED
@@ -155,6 +155,8 @@ class AIA::Cli
155
155
  extra: [''], #
156
156
  #
157
157
  model: ["gpt-4-1106-preview", "--llm --model"],
158
+ speech_model: ["tts-1", "--sm --spech_model"],
159
+ voice: ["alloy", "--voice"],
158
160
  #
159
161
  dump_file: [nil, "--dump"],
160
162
  completion: [nil, "--completion"],
data/lib/aia/main.rb CHANGED
@@ -53,17 +53,6 @@ class AIA::Main
53
53
  end
54
54
 
55
55
 
56
- def speak(what)
57
- return false unless AIA.config.speak?
58
- # TODO: Consider putting this into a thread
59
- # so that it can speak at the same time
60
- # the output is going to the screen
61
- # MacOS uses the say command
62
- system "say #{Shellwords.escape(what)}"
63
- true
64
- end
65
-
66
-
67
56
  # Function to setup the Reline history with a maximum depth
68
57
  def setup_reline_history(max_history_size=5)
69
58
  Reline::HISTORY.clear
@@ -123,7 +112,7 @@ class AIA::Main
123
112
 
124
113
  if AIA.config.chat?
125
114
  setup_reline_history
126
- speak result
115
+ AIA.speak result
127
116
  lets_chat
128
117
  end
129
118
 
@@ -227,14 +216,14 @@ class AIA::Main
227
216
  result = get_and_display_result(the_prompt_text)
228
217
 
229
218
  log_the_follow_up(the_prompt_text, result)
230
- speak result
219
+ AIA.speak result
231
220
  end
232
221
  else
233
222
  the_prompt_text = insert_terse_phrase(the_prompt_text)
234
223
  result = get_and_display_result(the_prompt_text)
235
224
 
236
225
  log_the_follow_up(the_prompt_text, result)
237
- speak result
226
+ AIA.speak result
238
227
  end
239
228
 
240
229
  the_prompt_text = ask_question_with_reline("\nFollow Up: ")
data/lib/aia.rb CHANGED
@@ -20,11 +20,12 @@ tramp_require('debug_me') {
20
20
  }
21
21
 
22
22
  require 'hashie'
23
+ require 'openai'
23
24
  require 'os'
24
25
  require 'pathname'
25
26
  require 'reline'
26
27
  require 'shellwords'
27
- require 'tempfile' # SMELL: is this still being used?
28
+ require 'tempfile'
28
29
 
29
30
  require 'tty-spinner'
30
31
 
@@ -45,8 +46,15 @@ require_relative "core_ext/string_wrap"
45
46
  module AIA
46
47
  class << self
47
48
  attr_accessor :config
49
+ attr_accessor :client
48
50
 
49
51
  def run(args=ARGV)
52
+ begin
53
+ @client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"])
54
+ rescue OpenAI::ConfigurationError
55
+ @client = nil
56
+ end
57
+
50
58
  args = args.split(' ') if args.is_a?(String)
51
59
 
52
60
  # TODO: Currently this is a one and done architecture.
@@ -59,8 +67,47 @@ module AIA
59
67
 
60
68
 
61
69
  def speak(what)
62
- return unless AIA.config.speak?
63
- system "say #{Shellwords.escape(what)}" if OS.osx?
70
+ return unless config.speak?
71
+
72
+ if OS.osx? && 'siri' == config.voice.downcase
73
+ system "say #{Shellwords.escape(what)}"
74
+ else
75
+ use_openai_tts(what)
76
+ end
77
+ end
78
+
79
+
80
+ def use_openai_tts(what)
81
+ if client.nil?
82
+ puts "\nWARNING: OpenAI's text to speech capability is not available at this time."
83
+ return
84
+ end
85
+
86
+ player = if OS.osx?
87
+ 'afplay'
88
+ elsif OS.linux?
89
+ 'mpg123'
90
+ elsif OS.windows?
91
+ 'cmdmp3'
92
+ else
93
+ puts "\nWARNING: There is no MP3 player available"
94
+ return
95
+ end
96
+
97
+ response = client.audio.speech(
98
+ parameters: {
99
+ model: config.speech_model,
100
+ input: what,
101
+ voice: config.voice
102
+ }
103
+ )
104
+
105
+ Tempfile.create(['speech', '.mp3']) do |f|
106
+ f.binmode
107
+ f.write(response)
108
+ f.close
109
+ `#{player} #{f.path}`
110
+ end
64
111
  end
65
112
  end
66
113
  end
data/man/aia.1 CHANGED
@@ -1,6 +1,6 @@
1
1
  .\" Generated by kramdown-man 1.0.1
2
2
  .\" https://github.com/postmodern/kramdown-man#readme
3
- .TH aia 1 "v0.5.13" AIA "User Manuals"
3
+ .TH aia 1 "v0.5.14" AIA "User Manuals"
4
4
  .SH NAME
5
5
  .PP
6
6
  aia \- command\-line interface for an AI assistant
@@ -98,6 +98,12 @@ A role ID is the same as a prompt ID\. A \[lq]role\[rq] is a specialized prompt
98
98
  .TP
99
99
  \fB\-v\fR, \fB\-\-verbose\fR
100
100
  Be Verbose \- default is false
101
+ .TP
102
+ \fB\-\-voice\fR
103
+ The voice to use when the option \fB\-\-speak\fR is used\. If you are on a Mac, then setting voice to \[lq]siri\[rq] will use your Mac\[cq]s default siri voice and not access OpenAI \- default is \[lq]alloy\[rq] from OpenAI
104
+ .TP
105
+ \fB\-\-sm\fR, \fB\-\-speech\[ru]model\fR
106
+ The OpenAI speech model to use when converting text into speech \- default is \[lq]tts\-1\[rq]
101
107
  .SH CONFIGURATION HIERARCHY
102
108
  .PP
103
109
  System Environment Variables (envars) that are all uppercase and begin with \[lq]AIA\[ru]\[rq] can be used to over\-ride the default configuration settings\. For example setting \[lq]export AIA\[ru]PROMPTS\[ru]DIR\[eq]\[ti]\[sl]Documents\[sl]prompts\[rq] will over\-ride the default configuration; however, a config value provided by a command line options will over\-ride an envar setting\.
data/man/aia.1.md CHANGED
@@ -1,4 +1,4 @@
1
- # aia 1 "v0.5.13" AIA "User Manuals"
1
+ # aia 1 "v0.5.14" AIA "User Manuals"
2
2
 
3
3
  ## NAME
4
4
 
@@ -103,6 +103,11 @@ The aia command-line tool is an interface for interacting with an AI model backe
103
103
  `-v`, `--verbose`
104
104
  : Be Verbose - default is false
105
105
 
106
+ `--voice`
107
+ : The voice to use when the option `--speak` is used. If you are on a Mac, then setting voice to "siri" will use your Mac's default siri voice and not access OpenAI - default is "alloy" from OpenAI
108
+
109
+ `--sm`, `--speech_model`
110
+ : The OpenAI speech model to use when converting text into speech - default is "tts-1"
106
111
 
107
112
  ## CONFIGURATION HIERARCHY
108
113
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.13
4
+ version: 0.5.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-03 00:00:00.000000000 Z
11
+ date: 2024-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: ruby-openai
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: semver2
71
85
  requirement: !ruby/object:Gem::Requirement