Module: Legion::LLM::Call::Embeddings
- Extended by:
- Legion::Logging::Helper
- Defined in:
- lib/legion/llm/call/embeddings.rb
Class Method Summary collapse
- .default_model ⇒ Object
- .generate(text:, model: nil, provider: nil, dimensions: nil, task: :document) ⇒ Object
- .generate_batch(texts:, model: nil, provider: nil, dimensions: nil, task: :document) ⇒ Object
Class Method Details
.default_model ⇒ Object
60 61 62 |
# File 'lib/legion/llm/call/embeddings.rb', line 60 def default_model resolve_model(resolve_provider) end |
.generate(text:, model: nil, provider: nil, dimensions: nil, task: :document) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/legion/llm/call/embeddings.rb', line 13 def generate(text:, model: nil, provider: nil, dimensions: nil, task: :document) return { vector: nil, model: model, provider: provider, error: 'LLM not started' } unless LLM.started? provider ||= resolve_provider return { vector: nil, model: model, provider: provider, error: "provider #{provider} is disabled" } if provider_disabled?(provider) model ||= resolve_model(provider) text = coerce_text_input(text) text = apply_prefix(text, model: model, task: task) return generate_ollama(text: text, model: model) if provider&.to_sym == :ollama return generate_azure(text: text, model: model, dimensions: dimensions) if provider&.to_sym == :azure return { vector: nil, model: model, provider: provider, error: "provider #{provider} does not support embeddings" } \ if provider && !(provider) response = RubyLLM.(text, **build_opts(model, provider, dimensions)) vector = apply_dimension_enforcement(response.vectors.first, provider) return dimension_error(model, provider, vector) if vector.is_a?(String) { vector: vector, model: model, provider: provider, dimensions: vector&.size || 0, tokens: response.input_tokens } rescue StandardError => e handle_exception(e, level: :warn) (e, text: text, failed_provider: provider, failed_model: model) end |
.generate_batch(texts:, model: nil, provider: nil, dimensions: nil, task: :document) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/legion/llm/call/embeddings.rb', line 38 def generate_batch(texts:, model: nil, provider: nil, dimensions: nil, task: :document) return texts.map { |_| { vector: nil, error: 'LLM not started' } } unless LLM.started? provider ||= resolve_provider disabled_result = disabled_batch_result(texts, provider, model) return disabled_result if disabled_result model ||= resolve_model(provider) texts = texts.map { |t| apply_prefix(coerce_text_input(t), model: model, task: task) } return generate_ollama_batch(texts: texts, model: model) if provider&.to_sym == :ollama return generate_azure_batch(texts: texts, model: model, dimensions: dimensions) if provider&.to_sym == :azure response = RubyLLM.(texts, **build_opts(model, provider, dimensions)) response.vectors.each_with_index.map do |vec, i| build_batch_entry(vec, model, provider, i) end rescue StandardError => e handle_exception(e, level: :warn) texts.map { |_| { vector: nil, model: model, provider: provider, error: e. } } end |