Class: Riffer::Providers::Base
- Inherits:
-
Object
- Object
- Riffer::Providers::Base
- Includes:
- Helpers::Dependencies, Messages::Converter
- Defined in:
- lib/riffer/providers/base.rb
Overview
Base class for all LLM providers in the Riffer framework.
Provides a template-method flow for text generation and streaming. Subclasses implement five hook methods; the base class orchestrates them.
Hook methods
- build_request_params
-
convert messages, tools, and options into SDK params
- execute_generate
-
call the SDK and return the raw response
- execute_stream
-
call the streaming SDK, mapping events to the yielder
- extract_token_usage
-
pull token counts from the SDK response
- extract_content
-
extract text content from the SDK response
- extract_tool_calls
-
extract tool calls from the SDK response
Direct Known Subclasses
Constant Summary collapse
- WIRE_SEPARATOR =
: String
"__"
Class Method Summary collapse
-
.skills_adapter ⇒ Object
Returns the preferred skill adapter for this provider.
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.
Methods included from Messages::Converter
#convert_to_file_part, #convert_to_message_object
Methods included from Helpers::Dependencies
Class Method Details
.skills_adapter ⇒ Object
Returns the preferred skill adapter for this provider.
Override in subclasses for provider-specific formats.
– : () -> singleton(Riffer::Skills::Adapter)
31 32 33 |
# File 'lib/riffer/providers/base.rb', line 31 def self.skills_adapter 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::FilePart]?, **untyped) -> Riffer::Messages::Assistant
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/riffer/providers/base.rb', line 39 def generate_text(prompt: nil, system: nil, messages: nil, model: nil, files: nil, **) validate_input!(prompt: prompt, system: system, messages: ) @current_tools = [:tools] || [] = (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::FilePart]?, **untyped) -> Enumerator[Riffer::StreamEvents::Base, void]
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/riffer/providers/base.rb', line 65 def stream_text(prompt: nil, system: nil, messages: nil, model: nil, files: nil, **) validate_input!(prompt: prompt, system: system, messages: ) @current_tools = [:tools] || [] = (prompt: prompt, system: system, messages: , files: files) () = () params = build_request_params(, model, ) Enumerator.new do |yielder| execute_stream(params, yielder) end end |