Class: TurnKit::Adapters::RubyLLM
- Defined in:
- lib/turnkit/adapters/ruby_llm.rb
Constant Summary collapse
- KEY_BY_PROVIDER =
{ openai: "OPENAI_API_KEY", gemini: "GEMINI_API_KEY", anthropic: "ANTHROPIC_API_KEY", openrouter: "OPENROUTER_API_KEY" }.freeze
Instance Method Summary collapse
- #chat(model:, messages:, tools:, instructions:, temperature: nil, thinking: nil, output_schema: nil, metadata: nil, on_event: nil) ⇒ Object
- #paint(prompt:, model:, provider: nil, size: nil, assume_model_exists: nil, input_images: nil, mask: nil, params: {}, metadata: nil, on_event: nil) ⇒ Object
- #validate!(model:) ⇒ Object
- #view_media(media:, objective:, model:, provider: nil, output_schema: nil, params: {}, metadata: nil, on_event: nil) ⇒ Object
Instance Method Details
#chat(model:, messages:, tools:, instructions:, temperature: nil, thinking: nil, output_schema: nil, metadata: nil, on_event: nil) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/turnkit/adapters/ruby_llm.rb', line 27 def chat(model:, messages:, tools:, instructions:, temperature: nil, thinking: nil, output_schema: nil, metadata: nil, on_event: nil) require "ruby_llm" configure_from_environment chat = ::RubyLLM.chat(model: model) add_instructions(chat, instructions, model: model) chat.with_temperature(temperature) if temperature apply_thinking(chat, thinking) chat.with_schema(normalize_schema(output_schema)) if output_schema Array(tools).each { |tool| chat.with_tool(ruby_llm_tool(tool)) } Array().each { || (chat, ) } response = complete_without_tool_execution(chat) normalize_response(response, model: model) end |
#paint(prompt:, model:, provider: nil, size: nil, assume_model_exists: nil, input_images: nil, mask: nil, params: {}, metadata: nil, on_event: nil) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/turnkit/adapters/ruby_llm.rb', line 44 def paint(prompt:, model:, provider: nil, size: nil, assume_model_exists: nil, input_images: nil, mask: nil, params: {}, metadata: nil, on_event: nil) require "ruby_llm" configure_from_environment kwargs = paint_kwargs( model: model, provider: provider, assume_model_exists: assume_model_exists || false, size: size || "1024x1024", with: input_images, mask: mask, params: params || {} ) image = ::RubyLLM.paint(prompt, **kwargs) normalize_image_response(image, model: model, provider: provider, params: { "size" => size || "1024x1024" }.merge(params || {}), metadata: ) end |
#validate!(model:) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/turnkit/adapters/ruby_llm.rb', line 13 def validate!(model:) require "ruby_llm" raise ModelAccessError, "model is required" if model.to_s.empty? configure_from_environment provider = provider_for(model) key_name = KEY_BY_PROVIDER[provider] return true unless key_name return true if ENV[key_name].to_s != "" || config_key_present?(provider) raise ModelAccessError, "#{key_name} is required for #{model}. Set ENV[#{key_name.inspect}] or configure RubyLLM before running TurnKit." end |
#view_media(media:, objective:, model:, provider: nil, output_schema: nil, params: {}, metadata: nil, on_event: nil) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/turnkit/adapters/ruby_llm.rb', line 61 def view_media(media:, objective:, model:, provider: nil, output_schema: nil, params: {}, metadata: nil, on_event: nil) require "ruby_llm" configure_from_environment media_input = MediaInput.wrap(media) content = ::RubyLLM::Content.new(objective.to_s) content.(media_input., filename: media_input.filename) chat = ::RubyLLM.chat(model: model) chat.with_schema(normalize_schema(output_schema)) if output_schema chat.with_params(**params) if params && !params.empty? chat.(role: :user, content: content) response = complete_without_tool_execution(chat) normalize_media_analysis_response(response, media: media_input, model: model, provider: provider, params: params || {}, metadata: ) end |