typecast-ruby 0.1.5 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5de7b5e77a18c1e4e6834db6fedd467b922eb4a6124b01ad67b3521a7b5cebf7
4
- data.tar.gz: 95ddc9f242aebcb75372c93bcebde790e36aa4a84a096c981b5a039055dfcd2b
3
+ metadata.gz: f65c6725ca10d449b9ba688231a8ad96a7042197efe9fdba188b84a55fa1d232
4
+ data.tar.gz: 9995e18d6b6364c9e9906216d643759ab0570b0867228cb49951a0e7259ccb2e
5
5
  SHA512:
6
- metadata.gz: 6ade9e4df77283c37b69efc1fc8d417233d31b63b7f256c4badeccdd106f524014f01c526f199b3e187ceb6b8338cd2b0068814a67618930d8ebf37d4ce4ce6e
7
- data.tar.gz: f8f83592269f2d30ee810e257a8713dd34ffadc034933b51b089aa9bc0b1fbff7de9a8b0b9fda8947f914570e76b3f2948eaca65d38d53f49a1db8877ec7aa65
6
+ metadata.gz: e724bac05758d13d390cb1865eb522c57b55cdd6ae976d778d28643b06db35f390e3151040a4f611138977a13d6f07448ec35f39cb86f13ce7376915b2820c50
7
+ data.tar.gz: 75001ca132eed41352314a431fc34d184f5d3f8c931f3cbce6b5809ca9f90214da108c6f97c7bf48d048744a325ee15783c2bc9d75faef053a74c3fcf93c0dc2
@@ -91,6 +91,18 @@ module Typecast
91
91
  voices.first
92
92
  end
93
93
 
94
+ # Recommends voices from a text description.
95
+ #
96
+ # Results only include voice_id, voice_name, and score. Use get_voice_v2 or
97
+ # get_voices_v2 to fetch detailed voice metadata for returned voice IDs.
98
+ def recommend_voices(query, count: 5)
99
+ raise ArgumentError, "count must be between 1 and 10" unless (1..10).cover?(count)
100
+
101
+ JSON.parse(request_json(:get, "/v1/voices/recommendations", nil, { query: query, count: count }).body).map do |item|
102
+ Models::RecommendedVoice.from_h(item)
103
+ end
104
+ end
105
+
94
106
  def clone_voice(audio:, filename:, name:, model:)
95
107
  validate_clone_inputs(audio, name)
96
108
  response = request_multipart("/v1/voices/clone", audio: audio, filename: filename, fields: { name: name, model: model })
@@ -179,6 +179,27 @@ module Typecast
179
179
  end
180
180
  end
181
181
 
182
+ class RecommendedVoice
183
+ attr_reader :voice_id, :voice_name, :score
184
+
185
+ # Recommendation results only include the matched voice ID, voice name,
186
+ # and similarity score. Use get_voice_v2 or get_voices_v2 to fetch
187
+ # detailed voice metadata for a returned voice_id.
188
+ def self.from_h(hash)
189
+ new(
190
+ voice_id: hash.fetch("voice_id", ""),
191
+ voice_name: hash.fetch("voice_name", ""),
192
+ score: hash.fetch("score", 0).to_f
193
+ )
194
+ end
195
+
196
+ def initialize(voice_id:, voice_name:, score:)
197
+ @voice_id = voice_id
198
+ @voice_name = voice_name
199
+ @score = score
200
+ end
201
+ end
202
+
182
203
  class VoicesV2Filter
183
204
  attr_reader :model, :gender, :age, :use_cases
184
205
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typecast-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neosapience
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-23 00:00:00.000000000 Z
11
+ date: 2026-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest