Class: SmartPrompt::SiliconFlowAdapter
- Inherits:
-
LLMAdapter
- Object
- LLMAdapter
- SmartPrompt::SiliconFlowAdapter
- Includes:
- HTTPClient, ImagePersistence, MultimodalMessages, OpenAIChatShaping, SmartPrompt::SiliconFlow::Embed, SmartPrompt::SiliconFlow::Image, SmartPrompt::SiliconFlow::Rerank, SmartPrompt::SiliconFlow::Text, SmartPrompt::SiliconFlow::Video, SmartPrompt::SiliconFlow::Voice
- Defined in:
- lib/smart_prompt/siliconflow_adapter.rb
Overview
Adapter for 硅基流动 (SiliconFlow / SiliconCloud) — one adapter owns the whole provider: every category shares the base URL api.siliconflow.cn/v1 and Bearer auth.
Per-modality behavior lives in capability modules under adapters/siliconflow/ (Text / Embed / Image / Video / Voice / Rerank); cross-provider plumbing (HTTP, multimodal normalization, chat shaping, image saving) comes from the shared concerns. This class wires them together + holds config/credentials.
Provider-specific quirks (all vs docs.siliconflow.cn/cn/api-reference):
chat/vision — POST {base}/chat/completions (reasoning_content, no remap)
embeddings — POST {base}/embeddings (dimensions only for Qwen3-Embedding)
rerank — POST {base}/rerank (results[].relevance_score)
image/edit — POST {base}/images/generations (images[].url; image_size/batch_size/guidance_scale)
video — POST {base}/video/submit -> POST {base}/video/status (async; results.videos[].url)
tts — POST {base}/audio/speech (binary audio response)
asr — POST {base}/audio/transcriptions (multipart, field "file")
voice — /uploads/audio/voice, /audio/voice/list, /audio/voice/deletions
Constant Summary collapse
- DEFAULT_BASE_URL =
"https://api.siliconflow.cn/v1".freeze
Constants included from SmartPrompt::SiliconFlow::Video
SmartPrompt::SiliconFlow::Video::DEFAULT_VIDEO_SIZE, SmartPrompt::SiliconFlow::Video::VALID_VIDEO_SIZES
Constants included from SmartPrompt::SiliconFlow::Image
SmartPrompt::SiliconFlow::Image::DEFAULT_IMAGE_SIZE
Constants included from SmartPrompt::SiliconFlow::Text
SmartPrompt::SiliconFlow::Text::CHAT_OPTIONAL_KEYS
Constants included from MultimodalMessages
MultimodalMessages::SUPPORTED_IMAGE_FORMATS
Instance Attribute Summary
Attributes inherited from LLMAdapter
Instance Method Summary collapse
- #default_image_prefix ⇒ Object
-
#initialize(config) ⇒ SiliconFlowAdapter
constructor
A new instance of SiliconFlowAdapter.
-
#provider_label ⇒ Object
—- hooks for shared concerns ——————————————-.
Methods included from SmartPrompt::SiliconFlow::Rerank
Methods included from SmartPrompt::SiliconFlow::Voice
#delete_voice, #list_voices, #synthesize_speech, #synthesize_to_file, #transcribe_audio, #upload_voice
Methods included from SmartPrompt::SiliconFlow::Video
#check_video_status, #download_video, #generate_video, #wait_for_video_completion
Methods included from SmartPrompt::SiliconFlow::Image
Methods included from SmartPrompt::SiliconFlow::Embed
Methods included from SmartPrompt::SiliconFlow::Text
Methods included from HTTPClient
#http_get_json, #http_post_binary, #http_post_json, #http_post_multipart, #stream_chat
Methods included from MultimodalMessages
#normalize_content_item, #normalize_image_url, #normalize_input_image, #normalize_media_part, #normalize_media_url, #process_multimodal_messages, #stringify_hash
Methods included from OpenAIChatShaping
#build_completion_response, #build_stream_chunk, #extra_top_level_fields, #reasoning_field_name
Methods included from ImagePersistence
#save_image, #save_single_image
Methods inherited from LLMAdapter
Constructor Details
#initialize(config) ⇒ SiliconFlowAdapter
Returns a new instance of SiliconFlowAdapter.
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/smart_prompt/siliconflow_adapter.rb', line 62 def initialize(config) super SmartPrompt.logger.info "Start create the SmartPrompt SiliconFlowAdapter." api_key = @config["api_key"] if api_key.is_a?(String) && api_key.start_with?("ENV[") && api_key.end_with?("]") api_key = eval(api_key) end # Tolerate a missing key at construction (e.g. when the ENV var isn't set yet) # and let the first request fail with a clear auth error. SmartPrompt.logger.warn "SiliconFlow api_key is empty — API calls will fail until it is set." if api_key.nil? || api_key.to_s.strip.empty? @api_key = api_key @base_url = (@config["url"] || DEFAULT_BASE_URL).to_s.chomp("/") # Optional per-method URL overrides (default to the standard paths off @base_url). @image_url = (@config["image_url"] || "#{@base_url}/images/generations").to_s @video_submit_url = (@config["video_submit_url"] || "#{@base_url}/video/submit").to_s @video_status_url = (@config["video_status_url"] || "#{@base_url}/video/status").to_s @speech_url = (@config["speech_url"] || "#{@base_url}/audio/speech").to_s @transcription_url = (@config["transcription_url"] || "#{@base_url}/audio/transcriptions").to_s @voice_upload_url = (@config["voice_upload_url"] || "#{@base_url}/uploads/audio/voice").to_s @voice_list_url = (@config["voice_list_url"] || "#{@base_url}/audio/voice/list").to_s @voice_delete_url = (@config["voice_delete_url"] || "#{@base_url}/audio/voice/deletions").to_s SmartPrompt.logger.info "SiliconFlow base_url=#{@base_url}" rescue => e SmartPrompt.logger.error "Failed to initialize SiliconFlow client: #{e.}" raise e.is_a?(SmartPrompt::Error) ? e : LLMAPIError, "Invalid SiliconFlow configuration: #{e.}" end |
Instance Method Details
#default_image_prefix ⇒ Object
58 59 60 |
# File 'lib/smart_prompt/siliconflow_adapter.rb', line 58 def default_image_prefix "siliconflow_image" end |
#provider_label ⇒ Object
—- hooks for shared concerns ——————————————-
54 55 56 |
# File 'lib/smart_prompt/siliconflow_adapter.rb', line 54 def provider_label "SiliconFlow" end |