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
73 74 75 |
# File 'lib/legion/llm/call/embeddings.rb', line 73 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 37 38 39 40 |
# 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 (model, provider) unless 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 = (text: text, model: model, provider: provider, dimensions: dimensions) tokens = extract_input_tokens(response) (provider: provider, model: model, tokens: tokens) vector = normalize_vectors_first(response[:result]) vector = apply_dimension_enforcement(vector, provider) return dimension_error(model, provider, vector) if vector.is_a?(String) { vector: vector, model: model, provider: provider, dimensions: vector&.size || 0, tokens: 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
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/legion/llm/call/embeddings.rb', line 42 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 return unavailable_batch_result(texts, provider, model) unless 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 unless !provider || (provider) return texts.each_with_index.map do |_, i| { vector: nil, model: model, provider: provider, dimensions: 0, index: i, error: "provider #{provider} does not support embeddings" } end end response = (text: texts, model: model, provider: provider, dimensions: dimensions) normalize_vectors(response[:result]).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 |