eleven_rb 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +33 -0
- data/LICENSE +21 -0
- data/README.md +311 -0
- data/lib/eleven_rb/callbacks.rb +47 -0
- data/lib/eleven_rb/client.rb +110 -0
- data/lib/eleven_rb/collections/base.rb +92 -0
- data/lib/eleven_rb/collections/library_voice_collection.rb +91 -0
- data/lib/eleven_rb/collections/voice_collection.rb +78 -0
- data/lib/eleven_rb/configuration.rb +87 -0
- data/lib/eleven_rb/errors.rb +58 -0
- data/lib/eleven_rb/http/client.rb +277 -0
- data/lib/eleven_rb/instrumentation.rb +35 -0
- data/lib/eleven_rb/objects/audio.rb +118 -0
- data/lib/eleven_rb/objects/base.rb +86 -0
- data/lib/eleven_rb/objects/cost_info.rb +72 -0
- data/lib/eleven_rb/objects/library_voice.rb +66 -0
- data/lib/eleven_rb/objects/model.rb +56 -0
- data/lib/eleven_rb/objects/subscription.rb +91 -0
- data/lib/eleven_rb/objects/user_info.rb +24 -0
- data/lib/eleven_rb/objects/voice.rb +86 -0
- data/lib/eleven_rb/objects/voice_settings.rb +41 -0
- data/lib/eleven_rb/resources/base.rb +84 -0
- data/lib/eleven_rb/resources/models.rb +65 -0
- data/lib/eleven_rb/resources/text_to_speech.rb +164 -0
- data/lib/eleven_rb/resources/user.rb +66 -0
- data/lib/eleven_rb/resources/voice_library.rb +160 -0
- data/lib/eleven_rb/resources/voices.rb +138 -0
- data/lib/eleven_rb/tts_adapter.rb +151 -0
- data/lib/eleven_rb/version.rb +5 -0
- data/lib/eleven_rb/voice_slot_manager.rb +184 -0
- data/lib/eleven_rb.rb +113 -0
- metadata +193 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ElevenRb
|
|
4
|
+
# Manages voice slots to work within ElevenLabs account limits
|
|
5
|
+
#
|
|
6
|
+
# This is the key feature for switching voices in and out of your account
|
|
7
|
+
# when you're limited by your subscription tier.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# manager = client.voice_slots
|
|
11
|
+
# manager.ensure_available(public_user_id: "abc", voice_id: "xyz", name: "Spanish Voice")
|
|
12
|
+
#
|
|
13
|
+
# @example Check status
|
|
14
|
+
# status = client.voice_slots.status
|
|
15
|
+
# puts "#{status[:used]}/#{status[:limit]} slots used"
|
|
16
|
+
class VoiceSlotManager
|
|
17
|
+
attr_reader :client
|
|
18
|
+
|
|
19
|
+
# Initialize the manager
|
|
20
|
+
#
|
|
21
|
+
# @param client [Client] the ElevenRb client
|
|
22
|
+
def initialize(client)
|
|
23
|
+
@client = client
|
|
24
|
+
@usage_tracker = {} # voice_id => last_used_at
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Ensure a voice from the library is available in your account
|
|
28
|
+
#
|
|
29
|
+
# This will:
|
|
30
|
+
# 1. Check if the voice is already in your account
|
|
31
|
+
# 2. If not, check if there's room for a new voice
|
|
32
|
+
# 3. If no room, remove the least recently used voice
|
|
33
|
+
# 4. Add the voice from the library
|
|
34
|
+
#
|
|
35
|
+
# @param public_user_id [String] the public user ID of the voice owner
|
|
36
|
+
# @param voice_id [String] the voice ID
|
|
37
|
+
# @param name [String] the name to give the voice
|
|
38
|
+
# @return [Objects::Voice] the voice (existing or newly added)
|
|
39
|
+
def ensure_available(public_user_id:, voice_id:, name:)
|
|
40
|
+
# Check if already in account
|
|
41
|
+
existing = find_in_account(voice_id)
|
|
42
|
+
if existing
|
|
43
|
+
track_usage(existing.voice_id)
|
|
44
|
+
return existing
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Make room if needed
|
|
48
|
+
make_room_if_needed!
|
|
49
|
+
|
|
50
|
+
# Add from library
|
|
51
|
+
voice = client.voice_library.add(
|
|
52
|
+
public_user_id: public_user_id,
|
|
53
|
+
voice_id: voice_id,
|
|
54
|
+
name: name
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
track_usage(voice.voice_id)
|
|
58
|
+
voice
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Get current slot status
|
|
62
|
+
#
|
|
63
|
+
# @return [Hash] status with :used, :limit, :available, :full keys
|
|
64
|
+
def status
|
|
65
|
+
subscription = client.user.subscription
|
|
66
|
+
voice_count = current_count
|
|
67
|
+
|
|
68
|
+
{
|
|
69
|
+
used: voice_count,
|
|
70
|
+
limit: subscription.voice_limit,
|
|
71
|
+
available: (subscription.voice_limit || 0) - voice_count,
|
|
72
|
+
full: subscription.voice_limit ? voice_count >= subscription.voice_limit : false
|
|
73
|
+
}
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Get current voice count
|
|
77
|
+
#
|
|
78
|
+
# @return [Integer]
|
|
79
|
+
def current_count
|
|
80
|
+
client.voices.list.size
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Get available slot count
|
|
84
|
+
#
|
|
85
|
+
# @return [Integer]
|
|
86
|
+
def available_slots
|
|
87
|
+
status[:available]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Check if slots are full
|
|
91
|
+
#
|
|
92
|
+
# @return [Boolean]
|
|
93
|
+
def full?
|
|
94
|
+
status[:full]
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Track that a voice was used
|
|
98
|
+
#
|
|
99
|
+
# @param voice_id [String]
|
|
100
|
+
# @return [Time] the tracked time
|
|
101
|
+
def track_usage(voice_id)
|
|
102
|
+
@usage_tracker[voice_id] = Time.now
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Get voices sorted by last usage (least recent first)
|
|
106
|
+
#
|
|
107
|
+
# @return [Array<Objects::Voice>]
|
|
108
|
+
def voices_by_usage
|
|
109
|
+
voices = client.voices.list
|
|
110
|
+
voices.sort_by { |v| @usage_tracker[v.voice_id] || Time.at(0) }
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Get the least recently used voice
|
|
114
|
+
#
|
|
115
|
+
# @return [Objects::Voice, nil]
|
|
116
|
+
def least_recently_used
|
|
117
|
+
voices_by_usage.first
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Remove the least recently used voice
|
|
121
|
+
#
|
|
122
|
+
# @return [Objects::Voice] the removed voice
|
|
123
|
+
# @raise [Errors::VoiceSlotLimitError] if no voices to remove
|
|
124
|
+
def remove_lru!
|
|
125
|
+
lru_voice = least_recently_used
|
|
126
|
+
raise Errors::VoiceSlotLimitError, 'No voices available to remove' unless lru_voice
|
|
127
|
+
|
|
128
|
+
client.voices.destroy(lru_voice.voice_id)
|
|
129
|
+
@usage_tracker.delete(lru_voice.voice_id)
|
|
130
|
+
lru_voice
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Remove a specific voice
|
|
134
|
+
#
|
|
135
|
+
# @param voice_id [String]
|
|
136
|
+
# @return [Boolean]
|
|
137
|
+
def remove(voice_id)
|
|
138
|
+
result = client.voices.destroy(voice_id)
|
|
139
|
+
@usage_tracker.delete(voice_id) if result
|
|
140
|
+
result
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Clear usage tracking data
|
|
144
|
+
#
|
|
145
|
+
# @return [void]
|
|
146
|
+
def reset_tracking!
|
|
147
|
+
@usage_tracker.clear
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Check if a voice is in the account
|
|
151
|
+
#
|
|
152
|
+
# @param voice_id [String]
|
|
153
|
+
# @return [Boolean]
|
|
154
|
+
def in_account?(voice_id)
|
|
155
|
+
client.voices.list.include_voice?(voice_id)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Find a voice in the account by ID
|
|
159
|
+
#
|
|
160
|
+
# @param voice_id [String]
|
|
161
|
+
# @return [Objects::Voice, nil]
|
|
162
|
+
def find_in_account(voice_id)
|
|
163
|
+
client.voices.list.find_by_id(voice_id)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Prepare multiple voices at once
|
|
167
|
+
#
|
|
168
|
+
# @param voices [Array<Hash>] array of voice params (public_user_id, voice_id, name)
|
|
169
|
+
# @return [Array<Objects::Voice>]
|
|
170
|
+
def prepare_voices(voices)
|
|
171
|
+
voices.map do |params|
|
|
172
|
+
ensure_available(**params)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
private
|
|
177
|
+
|
|
178
|
+
def make_room_if_needed!
|
|
179
|
+
return unless full?
|
|
180
|
+
|
|
181
|
+
remove_lru!
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
data/lib/eleven_rb.rb
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'httparty'
|
|
4
|
+
require 'json'
|
|
5
|
+
require 'base64'
|
|
6
|
+
|
|
7
|
+
# ElevenRb - A Ruby client for the ElevenLabs Text-to-Speech API
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# client = ElevenRb::Client.new(api_key: "your-api-key")
|
|
11
|
+
# audio = client.tts.generate("Hello world", voice_id: "abc123")
|
|
12
|
+
# audio.save_to_file("output.mp3")
|
|
13
|
+
#
|
|
14
|
+
# @example Using the module-level client
|
|
15
|
+
# ElevenRb.client.tts.generate("Hello", voice_id: "abc123")
|
|
16
|
+
#
|
|
17
|
+
# @example Voice slot management
|
|
18
|
+
# client.voice_slots.ensure_available(
|
|
19
|
+
# public_user_id: "owner123",
|
|
20
|
+
# voice_id: "voice456",
|
|
21
|
+
# name: "My Voice"
|
|
22
|
+
# )
|
|
23
|
+
module ElevenRb
|
|
24
|
+
class << self
|
|
25
|
+
# Get a shared client instance
|
|
26
|
+
#
|
|
27
|
+
# @param api_key [String, nil] optional API key
|
|
28
|
+
# @return [Client]
|
|
29
|
+
def client(api_key: nil)
|
|
30
|
+
@client ||= Client.new(api_key: api_key)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Configure the shared client
|
|
34
|
+
#
|
|
35
|
+
# @yield [Configuration] the configuration object
|
|
36
|
+
# @return [Client]
|
|
37
|
+
def configure
|
|
38
|
+
config = Configuration.new(api_key: ENV.fetch('ELEVENLABS_API_KEY', nil))
|
|
39
|
+
yield config if block_given?
|
|
40
|
+
config.validate!
|
|
41
|
+
@client = Client.new(**config_to_options(config))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Reset the shared client
|
|
45
|
+
#
|
|
46
|
+
# @return [void]
|
|
47
|
+
def reset!
|
|
48
|
+
@client = nil
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def config_to_options(config)
|
|
54
|
+
{
|
|
55
|
+
api_key: config.api_key,
|
|
56
|
+
base_url: config.base_url,
|
|
57
|
+
timeout: config.timeout,
|
|
58
|
+
open_timeout: config.open_timeout,
|
|
59
|
+
max_retries: config.max_retries,
|
|
60
|
+
retry_delay: config.retry_delay,
|
|
61
|
+
retry_statuses: config.retry_statuses,
|
|
62
|
+
logger: config.logger,
|
|
63
|
+
on_request: config.on_request,
|
|
64
|
+
on_response: config.on_response,
|
|
65
|
+
on_error: config.on_error,
|
|
66
|
+
on_audio_generated: config.on_audio_generated,
|
|
67
|
+
on_retry: config.on_retry,
|
|
68
|
+
on_rate_limit: config.on_rate_limit,
|
|
69
|
+
on_voice_added: config.on_voice_added,
|
|
70
|
+
on_voice_deleted: config.on_voice_deleted
|
|
71
|
+
}.compact
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Core modules
|
|
77
|
+
require_relative 'eleven_rb/version'
|
|
78
|
+
require_relative 'eleven_rb/errors'
|
|
79
|
+
require_relative 'eleven_rb/callbacks'
|
|
80
|
+
require_relative 'eleven_rb/instrumentation'
|
|
81
|
+
require_relative 'eleven_rb/configuration'
|
|
82
|
+
|
|
83
|
+
# HTTP layer
|
|
84
|
+
require_relative 'eleven_rb/http/client'
|
|
85
|
+
|
|
86
|
+
# Response objects
|
|
87
|
+
require_relative 'eleven_rb/objects/base'
|
|
88
|
+
require_relative 'eleven_rb/objects/voice_settings'
|
|
89
|
+
require_relative 'eleven_rb/objects/voice'
|
|
90
|
+
require_relative 'eleven_rb/objects/audio'
|
|
91
|
+
require_relative 'eleven_rb/objects/model'
|
|
92
|
+
require_relative 'eleven_rb/objects/subscription'
|
|
93
|
+
require_relative 'eleven_rb/objects/user_info'
|
|
94
|
+
require_relative 'eleven_rb/objects/library_voice'
|
|
95
|
+
require_relative 'eleven_rb/objects/cost_info'
|
|
96
|
+
|
|
97
|
+
# Collections
|
|
98
|
+
require_relative 'eleven_rb/collections/base'
|
|
99
|
+
require_relative 'eleven_rb/collections/voice_collection'
|
|
100
|
+
require_relative 'eleven_rb/collections/library_voice_collection'
|
|
101
|
+
|
|
102
|
+
# Resources
|
|
103
|
+
require_relative 'eleven_rb/resources/base'
|
|
104
|
+
require_relative 'eleven_rb/resources/voices'
|
|
105
|
+
require_relative 'eleven_rb/resources/text_to_speech'
|
|
106
|
+
require_relative 'eleven_rb/resources/voice_library'
|
|
107
|
+
require_relative 'eleven_rb/resources/models'
|
|
108
|
+
require_relative 'eleven_rb/resources/user'
|
|
109
|
+
|
|
110
|
+
# High-level components
|
|
111
|
+
require_relative 'eleven_rb/voice_slot_manager'
|
|
112
|
+
require_relative 'eleven_rb/tts_adapter'
|
|
113
|
+
require_relative 'eleven_rb/client'
|
metadata
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: eleven_rb
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Web Ventures Ltd
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-01-21 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: base64
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.1'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0.1'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: httparty
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0.21'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0.21'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rake
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '13.0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '13.0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '3.12'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '3.12'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rubocop
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '1.57'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '1.57'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: vcr
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '6.2'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '6.2'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: webmock
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '3.19'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '3.19'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: yard
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0.9'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0.9'
|
|
125
|
+
description: |
|
|
126
|
+
A well-structured Ruby gem for ElevenLabs TTS with voice library management,
|
|
127
|
+
streaming support, voice slot optimization, and comprehensive callbacks for
|
|
128
|
+
logging, error tracking, and cost monitoring.
|
|
129
|
+
email:
|
|
130
|
+
- gems@dev.webven.nz
|
|
131
|
+
executables: []
|
|
132
|
+
extensions: []
|
|
133
|
+
extra_rdoc_files: []
|
|
134
|
+
files:
|
|
135
|
+
- CHANGELOG.md
|
|
136
|
+
- LICENSE
|
|
137
|
+
- README.md
|
|
138
|
+
- lib/eleven_rb.rb
|
|
139
|
+
- lib/eleven_rb/callbacks.rb
|
|
140
|
+
- lib/eleven_rb/client.rb
|
|
141
|
+
- lib/eleven_rb/collections/base.rb
|
|
142
|
+
- lib/eleven_rb/collections/library_voice_collection.rb
|
|
143
|
+
- lib/eleven_rb/collections/voice_collection.rb
|
|
144
|
+
- lib/eleven_rb/configuration.rb
|
|
145
|
+
- lib/eleven_rb/errors.rb
|
|
146
|
+
- lib/eleven_rb/http/client.rb
|
|
147
|
+
- lib/eleven_rb/instrumentation.rb
|
|
148
|
+
- lib/eleven_rb/objects/audio.rb
|
|
149
|
+
- lib/eleven_rb/objects/base.rb
|
|
150
|
+
- lib/eleven_rb/objects/cost_info.rb
|
|
151
|
+
- lib/eleven_rb/objects/library_voice.rb
|
|
152
|
+
- lib/eleven_rb/objects/model.rb
|
|
153
|
+
- lib/eleven_rb/objects/subscription.rb
|
|
154
|
+
- lib/eleven_rb/objects/user_info.rb
|
|
155
|
+
- lib/eleven_rb/objects/voice.rb
|
|
156
|
+
- lib/eleven_rb/objects/voice_settings.rb
|
|
157
|
+
- lib/eleven_rb/resources/base.rb
|
|
158
|
+
- lib/eleven_rb/resources/models.rb
|
|
159
|
+
- lib/eleven_rb/resources/text_to_speech.rb
|
|
160
|
+
- lib/eleven_rb/resources/user.rb
|
|
161
|
+
- lib/eleven_rb/resources/voice_library.rb
|
|
162
|
+
- lib/eleven_rb/resources/voices.rb
|
|
163
|
+
- lib/eleven_rb/tts_adapter.rb
|
|
164
|
+
- lib/eleven_rb/version.rb
|
|
165
|
+
- lib/eleven_rb/voice_slot_manager.rb
|
|
166
|
+
homepage: https://github.com/webventures/eleven_rb
|
|
167
|
+
licenses:
|
|
168
|
+
- MIT
|
|
169
|
+
metadata:
|
|
170
|
+
homepage_uri: https://github.com/webventures/eleven_rb
|
|
171
|
+
source_code_uri: https://github.com/webventures/eleven_rb
|
|
172
|
+
changelog_uri: https://github.com/webventures/eleven_rb/blob/main/CHANGELOG.md
|
|
173
|
+
rubygems_mfa_required: 'true'
|
|
174
|
+
post_install_message:
|
|
175
|
+
rdoc_options: []
|
|
176
|
+
require_paths:
|
|
177
|
+
- lib
|
|
178
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
179
|
+
requirements:
|
|
180
|
+
- - ">="
|
|
181
|
+
- !ruby/object:Gem::Version
|
|
182
|
+
version: '3.0'
|
|
183
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
|
+
requirements:
|
|
185
|
+
- - ">="
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: '0'
|
|
188
|
+
requirements: []
|
|
189
|
+
rubygems_version: 3.5.23
|
|
190
|
+
signing_key:
|
|
191
|
+
specification_version: 4
|
|
192
|
+
summary: Ruby client for the ElevenLabs Text-to-Speech API
|
|
193
|
+
test_files: []
|