smart_prompt 0.4.4 → 0.5.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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -10
  3. data/README.cn.md +307 -64
  4. data/README.md +311 -64
  5. data/Rakefile +10 -1
  6. data/config/anthropic_config.yml +151 -0
  7. data/config/image_generation_config.yml +22 -0
  8. data/config/multimodal_config.yml +85 -0
  9. data/config/sensenova_config.yml +63 -0
  10. data/config/zhipu_config.yml +73 -0
  11. data/examples/anthropic_basic_chat.rb +143 -0
  12. data/examples/anthropic_example.rb +232 -0
  13. data/examples/anthropic_multimodal.rb +212 -0
  14. data/examples/anthropic_streaming.rb +312 -0
  15. data/examples/anthropic_tool_calling.rb +393 -0
  16. data/examples/automatic_cleanup_example.rb +109 -0
  17. data/examples/history_management_examples.rb +522 -0
  18. data/examples/image_generation_example.rb +130 -0
  19. data/examples/monitoring_example.rb +121 -0
  20. data/examples/multimodal_example.rb +63 -0
  21. data/examples/relevance_based_strategy_example.rb +87 -0
  22. data/examples/sensenova_example.rb +129 -0
  23. data/examples/stt_example.rb +287 -0
  24. data/examples/tts_example.rb +244 -0
  25. data/examples/video_generation_example.rb +189 -0
  26. data/examples/zhipu_example.rb +151 -0
  27. data/lib/smart_prompt/anthropic_adapter.rb +363 -281
  28. data/lib/smart_prompt/compression_engine.rb +201 -0
  29. data/lib/smart_prompt/context_strategy.rb +22 -0
  30. data/lib/smart_prompt/conversation.rb +81 -191
  31. data/lib/smart_prompt/engine.rb +36 -19
  32. data/lib/smart_prompt/history_manager.rb +596 -0
  33. data/lib/smart_prompt/hybrid_strategy.rb +222 -0
  34. data/lib/smart_prompt/image_generation_adapter.rb +297 -0
  35. data/lib/smart_prompt/lru_cache.rb +133 -0
  36. data/lib/smart_prompt/message.rb +57 -0
  37. data/lib/smart_prompt/multimodal_adapter.rb +277 -0
  38. data/lib/smart_prompt/openai_adapter.rb +1 -25
  39. data/lib/smart_prompt/persistence_layer.rb +197 -0
  40. data/lib/smart_prompt/relevance_based_strategy.rb +221 -0
  41. data/lib/smart_prompt/sensenova_adapter.rb +410 -0
  42. data/lib/smart_prompt/session.rb +140 -0
  43. data/lib/smart_prompt/sliding_window_strategy.rb +100 -0
  44. data/lib/smart_prompt/stt_adapter.rb +381 -0
  45. data/lib/smart_prompt/summary_based_strategy.rb +152 -0
  46. data/lib/smart_prompt/token_counter.rb +74 -0
  47. data/lib/smart_prompt/tts_adapter.rb +403 -0
  48. data/lib/smart_prompt/version.rb +1 -1
  49. data/lib/smart_prompt/video_generation_adapter.rb +330 -0
  50. data/lib/smart_prompt/worker.rb +25 -3
  51. data/lib/smart_prompt/zhipu_adapter.rb +616 -0
  52. data/lib/smart_prompt.rb +22 -2
  53. data/workers/history_management_examples.rb +407 -0
  54. data/workers/image_generation_workers.rb +119 -0
  55. data/workers/multimodal_workers.rb +110 -0
  56. data/workers/sensenova_workers.rb +62 -0
  57. data/workers/stt_workers.rb +195 -0
  58. data/workers/tts_workers.rb +388 -0
  59. data/workers/video_generation_workers.rb +264 -0
  60. data/workers/zhipu_workers.rb +113 -0
  61. metadata +84 -8
@@ -0,0 +1,264 @@
1
+ # Video Generation Workers for SmartPrompt
2
+ # These workers demonstrate the new video generation capabilities
3
+
4
+ # Text-to-video generation worker
5
+ SmartPrompt.define_worker :video_generator do
6
+ use "video_gen"
7
+ model "Wan-AI/Wan2.2-T2V-A14B"
8
+
9
+ # Prepare parameters for video generation
10
+ generation_params = {
11
+ prompt: params[:prompt],
12
+ duration: params[:duration] || 4,
13
+ resolution: params[:resolution] || "720p",
14
+ fps: params[:fps] || 24,
15
+ seed: params[:seed]
16
+ }
17
+
18
+ # Call the video generation adapter directly
19
+ adapter = engine.llms["video_gen"]
20
+ video_data = adapter.generate_video(
21
+ generation_params[:prompt],
22
+ model: params[:model],
23
+ duration: generation_params[:duration],
24
+ resolution: generation_params[:resolution],
25
+ fps: generation_params[:fps],
26
+ seed: generation_params[:seed]
27
+ )
28
+
29
+ # Wait for completion and download if requested
30
+ if params[:wait_for_completion]
31
+ completed_video = adapter.wait_for_video_completion(
32
+ video_data[:job_id],
33
+ check_interval: params[:check_interval] || 10,
34
+ timeout: params[:timeout] || 600
35
+ )
36
+
37
+ # Download video if URL is available
38
+ if completed_video[:video_url] && params[:download_to_file]
39
+ output_dir = params[:output_dir] || "./generated_videos"
40
+ filename_prefix = params[:filename_prefix] || "generated_video"
41
+ output_path = File.join(output_dir, "#{filename_prefix}_#{video_data[:job_id]}.mp4")
42
+
43
+ downloaded_file = adapter.download_video(completed_video[:video_url], output_path)
44
+ { video_data: completed_video, downloaded_file: downloaded_file }
45
+ else
46
+ { video_data: completed_video }
47
+ end
48
+ else
49
+ { video_data: video_data }
50
+ end
51
+ end
52
+
53
+ # Image-to-video generation worker
54
+ SmartPrompt.define_worker :image_to_video_generator do
55
+ use "video_gen"
56
+ model "Wan-AI/Wan2.2-I2V-A14B"
57
+
58
+ # Prepare parameters for image-to-video generation
59
+ generation_params = {
60
+ image_file: params[:image_file],
61
+ prompt: params[:prompt],
62
+ duration: params[:duration] || 4,
63
+ resolution: params[:resolution] || "720p",
64
+ fps: params[:fps] || 24,
65
+ seed: params[:seed]
66
+ }
67
+
68
+ # Call the image-to-video adapter directly
69
+ adapter = engine.llms["video_gen"]
70
+ video_data = adapter.create_video_from_image(
71
+ generation_params[:image_file],
72
+ generation_params[:prompt],
73
+ model: params[:model],
74
+ duration: generation_params[:duration],
75
+ resolution: generation_params[:resolution],
76
+ fps: generation_params[:fps],
77
+ seed: generation_params[:seed]
78
+ )
79
+
80
+ # Wait for completion and download if requested
81
+ if params[:wait_for_completion]
82
+ completed_video = adapter.wait_for_video_completion(
83
+ video_data[:job_id],
84
+ check_interval: params[:check_interval] || 10,
85
+ timeout: params[:timeout] || 600
86
+ )
87
+
88
+ # Download video if URL is available
89
+ if completed_video[:video_url] && params[:download_to_file]
90
+ output_dir = params[:output_dir] || "./generated_videos"
91
+ filename_prefix = params[:filename_prefix] || "image_to_video"
92
+ output_path = File.join(output_dir, "#{filename_prefix}_#{video_data[:job_id]}.mp4")
93
+
94
+ downloaded_file = adapter.download_video(completed_video[:video_url], output_path)
95
+ { video_data: completed_video, downloaded_file: downloaded_file }
96
+ else
97
+ { video_data: completed_video }
98
+ end
99
+ else
100
+ { video_data: video_data }
101
+ end
102
+ end
103
+
104
+ # Video status checker worker
105
+ SmartPrompt.define_worker :video_status_checker do
106
+ use "video_gen"
107
+
108
+ # Check video generation status
109
+ adapter = engine.llms["video_gen"]
110
+ status_data = adapter.check_video_status(params[:job_id])
111
+
112
+ # Download video if completed and requested
113
+ if status_data[:status] == "completed" && status_data[:video_url] && params[:download_to_file]
114
+ output_dir = params[:output_dir] || "./generated_videos"
115
+ filename_prefix = params[:filename_prefix] || "video"
116
+ output_path = File.join(output_dir, "#{filename_prefix}_#{params[:job_id]}.mp4")
117
+
118
+ downloaded_file = adapter.download_video(status_data[:video_url], output_path)
119
+ { status_data: status_data, downloaded_file: downloaded_file }
120
+ else
121
+ { status_data: status_data }
122
+ end
123
+ end
124
+
125
+ # Creative video generation worker
126
+ SmartPrompt.define_worker :creative_video_generator do
127
+ use "video_gen"
128
+ model "Wan-AI/Wan2.2-T2V-A14B"
129
+
130
+ # Prepare creative parameters
131
+ creative_params = {
132
+ prompt: params[:prompt] || "A beautiful animated scene",
133
+ duration: params[:duration] || 4,
134
+ resolution: params[:resolution] || "720p",
135
+ fps: params[:fps] || 24,
136
+ seed: params[:seed]
137
+ }
138
+
139
+ # Add creative style to prompt if specified
140
+ style_prompt = creative_params[:prompt]
141
+ if params[:video_style]
142
+ style_prompt = "#{style_prompt}, in the style of #{params[:video_style]}"
143
+ end
144
+
145
+ adapter = engine.llms["video_gen"]
146
+ video_data = adapter.generate_video(
147
+ style_prompt,
148
+ model: params[:model],
149
+ duration: creative_params[:duration],
150
+ resolution: creative_params[:resolution],
151
+ fps: creative_params[:fps],
152
+ seed: creative_params[:seed]
153
+ )
154
+
155
+ # Wait for completion and download if requested
156
+ if params[:wait_for_completion]
157
+ completed_video = adapter.wait_for_video_completion(
158
+ video_data[:job_id],
159
+ check_interval: params[:check_interval] || 10,
160
+ timeout: params[:timeout] || 600
161
+ )
162
+
163
+ if completed_video[:video_url] && params[:download_to_file]
164
+ output_dir = params[:output_dir] || "./creative_videos"
165
+ filename_prefix = params[:filename_prefix] || "creative_video"
166
+ output_path = File.join(output_dir, "#{filename_prefix}_#{video_data[:job_id]}.mp4")
167
+
168
+ downloaded_file = adapter.download_video(completed_video[:video_url], output_path)
169
+ { video_data: completed_video, downloaded_file: downloaded_file }
170
+ else
171
+ { video_data: completed_video }
172
+ end
173
+ else
174
+ { video_data: video_data }
175
+ end
176
+ end
177
+
178
+ # Product video generation worker
179
+ SmartPrompt.define_worker :product_video_generator do
180
+ use "video_gen"
181
+ model "Wan-AI/Wan2.2-T2V-A14B"
182
+
183
+ # Prepare product-specific parameters
184
+ product_params = {
185
+ prompt: params[:prompt] || "Professional product showcase",
186
+ duration: params[:duration] || 4,
187
+ resolution: params[:resolution] || "720p",
188
+ fps: params[:fps] || 24,
189
+ seed: params[:seed]
190
+ }
191
+
192
+ # Enhance prompt for product video
193
+ enhanced_prompt = "Professional product video, smooth animation, cinematic quality, #{product_params[:prompt]}"
194
+
195
+ adapter = engine.llms["video_gen"]
196
+ video_data = adapter.generate_video(
197
+ enhanced_prompt,
198
+ model: params[:model],
199
+ duration: product_params[:duration],
200
+ resolution: product_params[:resolution],
201
+ fps: product_params[:fps],
202
+ seed: product_params[:seed]
203
+ )
204
+
205
+ # Wait for completion and download if requested
206
+ if params[:wait_for_completion]
207
+ completed_video = adapter.wait_for_video_completion(
208
+ video_data[:job_id],
209
+ check_interval: params[:check_interval] || 10,
210
+ timeout: params[:timeout] || 600
211
+ )
212
+
213
+ if completed_video[:video_url] && params[:download_to_file]
214
+ output_dir = params[:output_dir] || "./product_videos"
215
+ filename_prefix = params[:filename_prefix] || "product_video"
216
+ output_path = File.join(output_dir, "#{filename_prefix}_#{video_data[:job_id]}.mp4")
217
+
218
+ downloaded_file = adapter.download_video(completed_video[:video_url], output_path)
219
+ { video_data: completed_video, downloaded_file: downloaded_file }
220
+ else
221
+ { video_data: completed_video }
222
+ end
223
+ else
224
+ { video_data: video_data }
225
+ end
226
+ end
227
+
228
+ # Batch video generation worker
229
+ SmartPrompt.define_worker :batch_video_generator do
230
+ use "video_gen"
231
+ model "Wan-AI/Wan2.2-T2V-A14B"
232
+
233
+ results = []
234
+
235
+ # Process multiple prompts
236
+ prompts = params[:prompts] || [params[:prompt]]
237
+ prompts.each_with_index do |prompt, index|
238
+ generation_params = {
239
+ prompt: prompt,
240
+ duration: params[:duration] || 4,
241
+ resolution: params[:resolution] || "720p",
242
+ fps: params[:fps] || 24,
243
+ seed: params[:seed] ? params[:seed] + index : nil
244
+ }
245
+
246
+ adapter = engine.llms["video_gen"]
247
+ video_data = adapter.generate_video(
248
+ generation_params[:prompt],
249
+ model: params[:model],
250
+ duration: generation_params[:duration],
251
+ resolution: generation_params[:resolution],
252
+ fps: generation_params[:fps],
253
+ seed: generation_params[:seed]
254
+ )
255
+
256
+ results << {
257
+ prompt: prompt,
258
+ video_data: video_data,
259
+ index: index
260
+ }
261
+ end
262
+
263
+ { batch_results: results }
264
+ end
@@ -0,0 +1,113 @@
1
+ # 智谱 AI (Zhipu BigModel) workers for SmartPrompt
2
+ #
3
+ # One worker per model category, reusing the standard DSL (`use`, `model`, `sys_msg`,
4
+ # `prompt`, `send_msg`) and the media helpers. Chat/vision/embed/image go through
5
+ # Conversation-delegated methods; video/tts/asr reach the adapter directly via
6
+ # engine.llms[...] (same pattern as workers/video_generation_workers.rb).
7
+ #
8
+ # `send_msg` transparently becomes streaming when the engine invokes the worker via
9
+ # call_worker_by_stream — so :glm_chat serves both sync and stream callers.
10
+
11
+ # 1. 文本对话 (sync + stream)
12
+ SmartPrompt.define_worker :glm_chat do
13
+ use "glm"
14
+ model params[:model] if params[:model]
15
+ sys_msg(params[:system] || "你是一个有帮助的中文助手,回答简洁准确。", params)
16
+ prompt(params[:prompt] || "你好,请介绍一下智谱GLM。")
17
+ send_msg
18
+ end
19
+
20
+ # 2. 图文多模态 (single image_url or image_urls array)
21
+ SmartPrompt.define_worker :glm_vision do
22
+ use "glm_vision"
23
+ model params[:model] if params[:model]
24
+ sys_msg("你是一个专业的多模态图像分析助手。", params)
25
+
26
+ content = [{ type: "text", text: params[:question] || "请描述这张图片中的内容。" }]
27
+ images = params[:image_urls] || [params[:image_url]]
28
+ images.each do |url|
29
+ content << { type: "image_url", image_url: { url: url } }
30
+ end
31
+ add_message({ role: "user", content: content })
32
+
33
+ send_msg
34
+ end
35
+
36
+ # 3. 向量模型
37
+ SmartPrompt.define_worker :glm_embed do
38
+ use "embedding"
39
+ model params[:model] if params[:model]
40
+ prompt(params[:text] || "智谱GLM大模型")
41
+ embeddings(params[:length] || 1024)
42
+ end
43
+
44
+ # 4. 文生图 (CogView / GLM-Image)
45
+ SmartPrompt.define_worker :cogview_image do
46
+ use "cogview"
47
+ model params[:model] if params[:model]
48
+ images = generate_image(params[:prompt], params)
49
+ if params[:save_to_file]
50
+ saved = save_image(images, params[:output_dir] || "./generated_images", params[:filename_prefix] || "zhipu")
51
+ { images: images, saved_files: saved }
52
+ else
53
+ images
54
+ end
55
+ end
56
+
57
+ # 5. 文生视频 (async: submit -> wait -> download)
58
+ SmartPrompt.define_worker :cogvideo_video do
59
+ use "cogvideo"
60
+ model params[:model] if params[:model]
61
+ adapter = engine.llms["cogvideo"]
62
+
63
+ submitted = adapter.generate_video(params[:prompt], params)
64
+ result = { submitted: submitted }
65
+
66
+ if params[:wait_for_completion]
67
+ completed = adapter.wait_for_video_completion(
68
+ submitted[:task_id],
69
+ check_interval: params[:check_interval] || 10,
70
+ timeout: params[:timeout] || 600
71
+ )
72
+ if completed[:video_url] && params[:download_to_file]
73
+ output_dir = params[:output_dir] || "./generated_videos"
74
+ prefix = params[:filename_prefix] || "zhipu_video"
75
+ output_path = File.join(output_dir, "#{prefix}_#{submitted[:task_id]}.mp4")
76
+ downloaded = adapter.download_video(completed[:video_url], output_path)
77
+ result = { submitted: submitted, video: completed, downloaded_file: downloaded }
78
+ else
79
+ result = { submitted: submitted, video: completed }
80
+ end
81
+ end
82
+ result
83
+ end
84
+
85
+ # 6. 语音合成 (GLM-TTS)
86
+ SmartPrompt.define_worker :glm_tts do
87
+ use "glm_tts"
88
+ model params[:model] if params[:model]
89
+ adapter = engine.llms["glm_tts"]
90
+
91
+ output_path = params[:output_path] || "./generated_audio/zhipu_tts.wav"
92
+ info = adapter.synthesize_to_file(
93
+ params[:text],
94
+ output_path,
95
+ voice: params[:voice],
96
+ model: params[:model],
97
+ response_format: params[:response_format] || "wav"
98
+ )
99
+ info
100
+ end
101
+
102
+ # 7. 语音识别 (GLM-ASR-2512)
103
+ SmartPrompt.define_worker :glm_asr do
104
+ use "glm_asr"
105
+ model params[:model] if params[:model]
106
+ adapter = engine.llms["glm_asr"]
107
+
108
+ adapter.transcribe_audio(
109
+ params[:audio_file],
110
+ model: params[:model],
111
+ language: params[:language]
112
+ )
113
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_prompt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - zhuang biaowei
@@ -29,28 +29,42 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: 8.3.0
32
+ version: 8.1.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 8.3.0
39
+ version: 8.1.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: json
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 2.19.4
46
+ version: 2.12.0
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 2.19.4
53
+ version: 2.12.0
54
+ - !ruby/object:Gem::Dependency
55
+ name: base64
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.2.0
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.2.0
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: safe_ruby
56
70
  requirement: !ruby/object:Gem::Requirement
@@ -94,19 +108,33 @@ dependencies:
94
108
  - !ruby/object:Gem::Version
95
109
  version: 0.9.2.1
96
110
  - !ruby/object:Gem::Dependency
97
- name: base64
111
+ name: better_prompt
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 0.2.1
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 0.2.1
124
+ - !ruby/object:Gem::Dependency
125
+ name: tiktoken_ruby
98
126
  requirement: !ruby/object:Gem::Requirement
99
127
  requirements:
100
128
  - - "~>"
101
129
  - !ruby/object:Gem::Version
102
- version: 0.3.0
130
+ version: 0.0.6
103
131
  type: :runtime
104
132
  prerelease: false
105
133
  version_requirements: !ruby/object:Gem::Requirement
106
134
  requirements:
107
135
  - - "~>"
108
136
  - !ruby/object:Gem::Version
109
- version: 0.3.0
137
+ version: 0.0.6
110
138
  description: SmartPrompt provides a flexible DSL for managing prompts, interacting
111
139
  with multiple LLMs, and creating composable task workers.
112
140
  email:
@@ -120,19 +148,67 @@ files:
120
148
  - README.cn.md
121
149
  - README.md
122
150
  - Rakefile
151
+ - config/anthropic_config.yml
152
+ - config/image_generation_config.yml
153
+ - config/multimodal_config.yml
154
+ - config/sensenova_config.yml
155
+ - config/zhipu_config.yml
156
+ - examples/anthropic_basic_chat.rb
157
+ - examples/anthropic_example.rb
158
+ - examples/anthropic_multimodal.rb
159
+ - examples/anthropic_streaming.rb
160
+ - examples/anthropic_tool_calling.rb
161
+ - examples/automatic_cleanup_example.rb
162
+ - examples/history_management_examples.rb
163
+ - examples/image_generation_example.rb
164
+ - examples/monitoring_example.rb
165
+ - examples/multimodal_example.rb
166
+ - examples/relevance_based_strategy_example.rb
167
+ - examples/sensenova_example.rb
168
+ - examples/stt_example.rb
169
+ - examples/tts_example.rb
170
+ - examples/video_generation_example.rb
171
+ - examples/zhipu_example.rb
123
172
  - lib/smart_prompt.rb
124
173
  - lib/smart_prompt/anthropic_adapter.rb
125
174
  - lib/smart_prompt/api_handler.rb
175
+ - lib/smart_prompt/compression_engine.rb
176
+ - lib/smart_prompt/context_strategy.rb
126
177
  - lib/smart_prompt/conversation.rb
127
178
  - lib/smart_prompt/db_adapter.rb
128
179
  - lib/smart_prompt/engine.rb
180
+ - lib/smart_prompt/history_manager.rb
181
+ - lib/smart_prompt/hybrid_strategy.rb
182
+ - lib/smart_prompt/image_generation_adapter.rb
129
183
  - lib/smart_prompt/llamacpp_adapter.rb
130
184
  - lib/smart_prompt/llm_adapter.rb
185
+ - lib/smart_prompt/lru_cache.rb
186
+ - lib/smart_prompt/message.rb
187
+ - lib/smart_prompt/multimodal_adapter.rb
131
188
  - lib/smart_prompt/openai_adapter.rb
189
+ - lib/smart_prompt/persistence_layer.rb
132
190
  - lib/smart_prompt/prompt_template.rb
191
+ - lib/smart_prompt/relevance_based_strategy.rb
192
+ - lib/smart_prompt/sensenova_adapter.rb
193
+ - lib/smart_prompt/session.rb
194
+ - lib/smart_prompt/sliding_window_strategy.rb
195
+ - lib/smart_prompt/stt_adapter.rb
196
+ - lib/smart_prompt/summary_based_strategy.rb
197
+ - lib/smart_prompt/token_counter.rb
198
+ - lib/smart_prompt/tts_adapter.rb
133
199
  - lib/smart_prompt/version.rb
200
+ - lib/smart_prompt/video_generation_adapter.rb
134
201
  - lib/smart_prompt/worker.rb
202
+ - lib/smart_prompt/zhipu_adapter.rb
135
203
  - sig/smart_prompt.rbs
204
+ - workers/history_management_examples.rb
205
+ - workers/image_generation_workers.rb
206
+ - workers/multimodal_workers.rb
207
+ - workers/sensenova_workers.rb
208
+ - workers/stt_workers.rb
209
+ - workers/tts_workers.rb
210
+ - workers/video_generation_workers.rb
211
+ - workers/zhipu_workers.rb
136
212
  homepage: https://github.com/zhuangbiaowei/smart_prompt
137
213
  licenses:
138
214
  - MIT