Class: Riffer::Providers::Base
- Inherits:
-
Object
- Object
- Riffer::Providers::Base
- Defined in:
- lib/riffer/providers/base.rb
Overview
Base class for all LLM providers. A template-method flow: subclasses implement the hooks (build_request_params, execute_generate, execute_stream, extract_token_usage, extract_content, extract_tool_calls) and the base class orchestrates them.
Direct Known Subclasses
Constant Summary collapse
- WIRE_SEPARATOR =
"__"
Class Method Summary collapse
-
.skills_adapter(model = nil) ⇒ Object
Returns the preferred skill adapter for this provider; override in subclasses (optionally introspecting
model) for provider-specific formats.
Instance Method Summary collapse
-
#generate_text(prompt: nil, system: nil, messages: nil, model: nil, files: nil, **options) ⇒ Object
Generates text using the provider.
-
#stream_text(prompt: nil, system: nil, messages: nil, model: nil, files: nil, **options) ⇒ Object
Streams text from the provider.
Class Method Details
.skills_adapter(model = nil) ⇒ Object
Returns the preferred skill adapter for this provider; override in subclasses (optionally introspecting model) for provider-specific formats. – : (?String?) -> singleton(Riffer::Skills::Adapter)
19 20 21 |
# File 'lib/riffer/providers/base.rb', line 19 def self.skills_adapter(model = nil) Riffer::Skills::MarkdownAdapter end |
Instance Method Details
#generate_text(prompt: nil, system: nil, messages: nil, model: nil, files: nil, **options) ⇒ Object
Generates text using the provider.
– : (?prompt: String?, ?system: String?, ?messages: Array[Hash[Symbol, untyped] | Riffer::Messages::Base]?, ?model: String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, **untyped) -> Riffer::Messages::Assistant
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/riffer/providers/base.rb', line 27 def generate_text(prompt: nil, system: nil, messages: nil, model: nil, files: nil, **) validate_input!(prompt: prompt, system: system, messages: ) @current_tools = [:tools] || [] #: Array[singleton(Riffer::Tool)] = (prompt: prompt, system: system, messages: , files: files) () = () params = build_request_params(, model, ) response = execute_generate(params) content = extract_content(response) tool_calls = extract_tool_calls(response) token_usage = extract_token_usage(response) structured_output = parse_structured_output(content) if [:structured_output] && tool_calls.empty? Riffer::Messages::Assistant.new( content, tool_calls: tool_calls, token_usage: token_usage, structured_output: structured_output ) end |
#stream_text(prompt: nil, system: nil, messages: nil, model: nil, files: nil, **options) ⇒ Object
Streams text from the provider.
– : (?prompt: String?, ?system: String?, ?messages: Array[Hash[Symbol, untyped] | Riffer::Messages::Base]?, ?model: String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?, **untyped) -> Enumerator[Riffer::StreamEvents::Base, void]
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/riffer/providers/base.rb', line 53 def stream_text(prompt: nil, system: nil, messages: nil, model: nil, files: nil, **) validate_input!(prompt: prompt, system: system, messages: ) @current_tools = [:tools] || [] #: Array[singleton(Riffer::Tool)] = (prompt: prompt, system: system, messages: , files: files) () = () params = build_request_params(, model, ) Enumerator.new do |yielder| execute_stream(params, yielder) end end |