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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -10
- data/README.cn.md +307 -64
- data/README.md +311 -64
- data/Rakefile +10 -1
- data/config/anthropic_config.yml +151 -0
- data/config/image_generation_config.yml +22 -0
- data/config/multimodal_config.yml +85 -0
- data/config/sensenova_config.yml +63 -0
- data/config/zhipu_config.yml +73 -0
- data/examples/anthropic_basic_chat.rb +143 -0
- data/examples/anthropic_example.rb +232 -0
- data/examples/anthropic_multimodal.rb +212 -0
- data/examples/anthropic_streaming.rb +312 -0
- data/examples/anthropic_tool_calling.rb +393 -0
- data/examples/automatic_cleanup_example.rb +109 -0
- data/examples/history_management_examples.rb +522 -0
- data/examples/image_generation_example.rb +130 -0
- data/examples/monitoring_example.rb +121 -0
- data/examples/multimodal_example.rb +63 -0
- data/examples/relevance_based_strategy_example.rb +87 -0
- data/examples/sensenova_example.rb +129 -0
- data/examples/stt_example.rb +287 -0
- data/examples/tts_example.rb +244 -0
- data/examples/video_generation_example.rb +189 -0
- data/examples/zhipu_example.rb +151 -0
- data/lib/smart_prompt/anthropic_adapter.rb +363 -281
- data/lib/smart_prompt/compression_engine.rb +201 -0
- data/lib/smart_prompt/context_strategy.rb +22 -0
- data/lib/smart_prompt/conversation.rb +81 -191
- data/lib/smart_prompt/engine.rb +36 -19
- data/lib/smart_prompt/history_manager.rb +596 -0
- data/lib/smart_prompt/hybrid_strategy.rb +222 -0
- data/lib/smart_prompt/image_generation_adapter.rb +297 -0
- data/lib/smart_prompt/lru_cache.rb +133 -0
- data/lib/smart_prompt/message.rb +57 -0
- data/lib/smart_prompt/multimodal_adapter.rb +277 -0
- data/lib/smart_prompt/openai_adapter.rb +1 -25
- data/lib/smart_prompt/persistence_layer.rb +197 -0
- data/lib/smart_prompt/relevance_based_strategy.rb +221 -0
- data/lib/smart_prompt/sensenova_adapter.rb +410 -0
- data/lib/smart_prompt/session.rb +140 -0
- data/lib/smart_prompt/sliding_window_strategy.rb +100 -0
- data/lib/smart_prompt/stt_adapter.rb +381 -0
- data/lib/smart_prompt/summary_based_strategy.rb +152 -0
- data/lib/smart_prompt/token_counter.rb +74 -0
- data/lib/smart_prompt/tts_adapter.rb +403 -0
- data/lib/smart_prompt/version.rb +1 -1
- data/lib/smart_prompt/video_generation_adapter.rb +330 -0
- data/lib/smart_prompt/worker.rb +25 -3
- data/lib/smart_prompt/zhipu_adapter.rb +616 -0
- data/lib/smart_prompt.rb +22 -2
- data/workers/history_management_examples.rb +407 -0
- data/workers/image_generation_workers.rb +119 -0
- data/workers/multimodal_workers.rb +110 -0
- data/workers/sensenova_workers.rb +62 -0
- data/workers/stt_workers.rb +195 -0
- data/workers/tts_workers.rb +388 -0
- data/workers/video_generation_workers.rb +264 -0
- data/workers/zhipu_workers.rb +113 -0
- 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
|
+
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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:
|
|
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.
|
|
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.
|
|
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
|