runapi-suno 0.5.1 → 0.6.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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/lib/runapi/suno/resources/add_instrumental.rb +0 -7
  3. data/lib/runapi/suno/resources/add_samples.rb +0 -4
  4. data/lib/runapi/suno/resources/add_vocals.rb +0 -7
  5. data/lib/runapi/suno/resources/audio_action.rb +0 -1
  6. data/lib/runapi/suno/resources/audio_exports.rb +0 -7
  7. data/lib/runapi/suno/resources/blend_lyrics.rb +0 -1
  8. data/lib/runapi/suno/resources/boost_style.rb +0 -7
  9. data/lib/runapi/suno/resources/check_voice.rb +0 -7
  10. data/lib/runapi/suno/resources/convert_audio.rb +0 -7
  11. data/lib/runapi/suno/resources/cover_audio.rb +0 -7
  12. data/lib/runapi/suno/resources/create_mashup.rb +0 -7
  13. data/lib/runapi/suno/resources/extend_music.rb +0 -7
  14. data/lib/runapi/suno/resources/generate_artwork.rb +0 -7
  15. data/lib/runapi/suno/resources/generate_lyrics.rb +0 -7
  16. data/lib/runapi/suno/resources/generate_midi.rb +0 -7
  17. data/lib/runapi/suno/resources/generate_persona.rb +0 -7
  18. data/lib/runapi/suno/resources/generate_voice.rb +0 -7
  19. data/lib/runapi/suno/resources/get_timestamped_lyrics.rb +0 -7
  20. data/lib/runapi/suno/resources/music_from_sample.rb +0 -7
  21. data/lib/runapi/suno/resources/music_visualizations.rb +0 -7
  22. data/lib/runapi/suno/resources/personas.rb +0 -9
  23. data/lib/runapi/suno/resources/regenerate_validation_phrase.rb +0 -7
  24. data/lib/runapi/suno/resources/replace_section.rb +0 -7
  25. data/lib/runapi/suno/resources/separate_audio_stems.rb +0 -7
  26. data/lib/runapi/suno/resources/style_expansions.rb +0 -7
  27. data/lib/runapi/suno/resources/text_to_music.rb +0 -7
  28. data/lib/runapi/suno/resources/text_to_sound.rb +0 -7
  29. data/lib/runapi/suno/resources/timestamped_lyrics.rb +0 -7
  30. data/lib/runapi/suno/resources/visualize_music.rb +0 -7
  31. data/lib/runapi/suno/resources/voice_to_validation_phrase.rb +0 -7
  32. data/lib/runapi/suno/resources/voices.rb +0 -7
  33. data/lib/runapi/suno.rb +0 -2
  34. metadata +3 -5
  35. data/lib/runapi/suno/contract_gen.rb +0 -2797
  36. data/lib/runapi/suno/validators.rb +0 -232
@@ -1,232 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RunApi
4
- module Suno
5
- module Validators
6
- module_function
7
-
8
- def validate_text_to_music!(params, resource)
9
- resource.send(:validate_contract!, CONTRACT["text-to-music"], params)
10
- end
11
-
12
- def validate_extend_music!(params, resource)
13
- unless %i[task_id audio_id audio_url upload_url].any? { |key| param(resource, params, key) }
14
- raise Core::ValidationError, "task_id, audio_id, audio_url, or upload_url is required"
15
- end
16
- require_param!(resource, params, :parameter_mode)
17
- require_param!(resource, params, :model)
18
-
19
- validate_optional!(resource, params, :parameter_mode, Types::PARAMETER_MODES)
20
- if param(resource, params, :parameter_mode) == "custom"
21
- require_param!(resource, params, :style)
22
- require_param!(resource, params, :title)
23
- require_param!(resource, params, :continue_at)
24
- end
25
- validate_extend_music_prompt_shape!(params, resource)
26
- validate_optional!(resource, params, :model, Types::MODELS)
27
- validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
28
- validate_optional!(resource, params, :persona_type, Types::PERSONA_TYPES)
29
- end
30
-
31
- def validate_generate_artwork!(params, resource)
32
- require_param!(resource, params, :task_id)
33
- end
34
-
35
- def validate_cover_audio!(params, resource)
36
- resource.send(:validate_contract!, CONTRACT["cover-audio"], params)
37
- end
38
-
39
- def validate_add_instrumental!(params, resource)
40
- require_all!(resource, params, :upload_url, :title, :negative_tags, :tags, :model)
41
- validate_optional!(resource, params, :model, Types::MODELS)
42
- validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
43
- end
44
-
45
- def validate_add_vocals!(params, resource)
46
- require_all!(resource, params, :upload_url, :lyrics, :title, :negative_tags, :style, :model)
47
- validate_optional!(resource, params, :model, Types::MODELS)
48
- validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
49
- end
50
-
51
- def validate_separate_audio_stems!(params, resource)
52
- resource.send(:validate_contract!, CONTRACT["separate-audio-stems"], params)
53
- end
54
-
55
- def validate_generate_midi!(params, resource)
56
- require_param!(resource, params, :task_id)
57
- end
58
-
59
- def validate_convert_audio!(params, resource)
60
- require_all!(resource, params, :task_id, :audio_id)
61
- end
62
-
63
- def validate_visualize_music!(params, resource)
64
- require_all!(resource, params, :task_id, :audio_id)
65
- end
66
-
67
- def validate_generate_lyrics!(params, resource)
68
- require_param!(resource, params, :prompt)
69
- end
70
-
71
- def validate_get_timestamped_lyrics!(params, resource)
72
- require_all!(resource, params, :task_id, :audio_id)
73
- end
74
-
75
- def validate_replace_section!(params, resource)
76
- resource.send(:validate_contract!, CONTRACT["replace-section"], params)
77
- validate_replace_section_source!(params, resource)
78
- start_time = replace_section_time!(params, resource, :infill_start_time)
79
- end_time = replace_section_time!(params, resource, :infill_end_time)
80
- if end_time <= start_time
81
- raise Core::ValidationError, "infill_end_time must be greater than infill_start_time"
82
- end
83
-
84
- duration = end_time - start_time
85
- return if duration + 1e-9 >= 10
86
-
87
- raise Core::ValidationError, "replacement duration must be at least 10 seconds"
88
- end
89
-
90
- def validate_create_mashup!(params, resource)
91
- resource.send(:validate_contract!, CONTRACT["create-mashup"], params)
92
- end
93
-
94
- def validate_text_to_sound!(params, resource)
95
- require_all!(resource, params, :prompt, :model)
96
- validate_optional!(resource, params, :model, Types::SOUND_MODELS)
97
- validate_optional!(resource, params, :sound_key, Types::SOUND_KEYS)
98
- tempo = param(resource, params, :sound_tempo)
99
- if tempo && !(1..300).cover?(tempo.to_i)
100
- raise Core::ValidationError, "sound_tempo must be between 1 and 300"
101
- end
102
- end
103
-
104
- def validate_voice_to_validation_phrase!(params, resource)
105
- require_all!(resource, params, :voice_url, :vocal_start_seconds, :vocal_end_seconds)
106
- validate_optional!(resource, params, :language, Types::VALIDATION_PHRASE_LANGUAGES)
107
-
108
- start_seconds = param(resource, params, :vocal_start_seconds).to_i
109
- end_seconds = param(resource, params, :vocal_end_seconds).to_i
110
- return if end_seconds > start_seconds
111
-
112
- raise Core::ValidationError, "vocal_end_seconds must be greater than vocal_start_seconds"
113
- end
114
-
115
- def validate_regenerate_validation_phrase!(params, resource)
116
- require_param!(resource, params, :task_id)
117
- end
118
-
119
- def validate_generate_voice!(params, resource)
120
- require_all!(resource, params, :task_id, :verify_url)
121
- validate_optional!(resource, params, :singer_skill_level, Types::SINGER_SKILL_LEVELS)
122
- end
123
-
124
- def validate_check_voice!(params, resource)
125
- require_param!(resource, params, :task_id)
126
- end
127
-
128
- def validate_generate_persona!(params, resource)
129
- require_all!(resource, params, :task_id, :audio_id, :name, :description)
130
- end
131
-
132
- def validate_boost_style!(params, resource)
133
- require_param!(resource, params, :description)
134
- end
135
-
136
- def validate_personas!(params, resource)
137
- resource.send(:validate_contract!, CONTRACT["personas"], params)
138
- end
139
-
140
- def validate_voices!(params, resource)
141
- resource.send(:validate_contract!, CONTRACT["voices"], params)
142
- end
143
-
144
- def validate_style_expansions!(params, resource)
145
- resource.send(:validate_contract!, CONTRACT["style-expansions"], params)
146
- end
147
-
148
- def validate_timestamped_lyrics!(params, resource)
149
- resource.send(:validate_contract!, CONTRACT["timestamped-lyrics"], params)
150
- end
151
-
152
- def validate_audio_exports!(params, resource)
153
- resource.send(:validate_contract!, CONTRACT["audio-exports"], params)
154
- end
155
-
156
- def validate_music_visualizations!(params, resource)
157
- resource.send(:validate_contract!, CONTRACT["music-visualizations"], params)
158
- end
159
-
160
- def validate_music_from_sample!(params, resource)
161
- resource.send(:validate_contract!, CONTRACT["music-from-sample"], params)
162
- end
163
-
164
- def validate_extend_music_prompt_shape!(params, resource)
165
- return unless truthy_presence?(param(resource, params, :lyrics))
166
-
167
- if truthy_presence?(param(resource, params, :prompt))
168
- raise Core::ValidationError, "prompt cannot be combined with lyrics"
169
- end
170
-
171
- if truthy?(param(resource, params, :instrumental))
172
- raise Core::ValidationError, "lyrics cannot be used when instrumental is true"
173
- end
174
-
175
- upload_mode = %i[audio_url upload_url].any? { |key| truthy_presence?(param(resource, params, key)) }
176
- return if param(resource, params, :parameter_mode) == "custom" && upload_mode
177
-
178
- raise Core::ValidationError, "lyrics can only be used when extending uploaded audio with custom parameters"
179
- end
180
-
181
- def validate_replace_section_source!(params, resource)
182
- has_existing_source = %i[task_id audio_id].any? { |key| truthy_presence?(param(resource, params, key)) }
183
- has_uploaded_source = %i[upload_url model].any? { |key| truthy_presence?(param(resource, params, key)) }
184
-
185
- if has_existing_source && has_uploaded_source
186
- raise Core::ValidationError, "task_id/audio_id cannot be combined with upload_url/model"
187
- end
188
-
189
- if has_existing_source
190
- require_all!(resource, params, :task_id, :audio_id)
191
- elsif has_uploaded_source
192
- require_all!(resource, params, :upload_url, :model)
193
- else
194
- raise Core::ValidationError, "task_id and audio_id, or upload_url and model are required"
195
- end
196
- end
197
-
198
- def replace_section_time!(params, resource, key)
199
- value = param(resource, params, key)
200
- return value.to_f if value.is_a?(Numeric) && value.finite?
201
-
202
- raise Core::ValidationError, "#{key} must be a finite number"
203
- end
204
-
205
- def require_all!(resource, params, *keys)
206
- keys.each { |key| require_param!(resource, params, key) }
207
- end
208
-
209
- def require_param!(resource, params, key)
210
- raise Core::ValidationError, "#{key} is required" if param(resource, params, key).nil?
211
- end
212
-
213
- def param(resource, params, key)
214
- resource.send(:param, params, key)
215
- end
216
-
217
- def validate_optional!(resource, params, key, allowed)
218
- resource.send(:validate_optional!, params, key, allowed)
219
- end
220
-
221
- def truthy?(value)
222
- [true, 1, "1", "true", "TRUE", "True"].include?(value)
223
- end
224
-
225
- def truthy_presence?(value)
226
- return !value.empty? if value.respond_to?(:empty?)
227
-
228
- !value.nil?
229
- end
230
- end
231
- end
232
- end