Commit fd45e13

mo khan <mo@mokhan.ca>
2026-02-02 05:43:08
docs: describe the provider plugin API
1 parent c33aa90
Changed files (1)
lib
lib/elelem/providers.rb
@@ -1,6 +1,32 @@
 # frozen_string_literal: true
 
 module Elelem
+  # Registry for LLM provider plugins.
+  #
+  # Providers must implement:
+  #
+  #   fetch(messages, tools = []) { |event| ... } -> Array<tool_calls>
+  #
+  # Messages (OpenAI format):
+  #   { role: "system"|"user"|"assistant", content: "..." }
+  #   { role: "tool", tool_call_id: "...", content: "..." }
+  #
+  # Tools (OpenAI format):
+  #   { type: "function", function: { name:, description:, parameters: } }
+  #
+  # Streaming events (yield to block):
+  #   { type: "saying", text: "..." }
+  #   { type: "thinking", text: "..." }
+  #   { type: "tool_call", id:, name:, arguments: }
+  #
+  # Returns: [{ id:, name:, arguments: }, ...]
+  #
+  # Example:
+  #
+  #   Elelem::Providers.register(:gemini) do
+  #     MyGeminiClient.new(model: ENV.fetch("GEMINI_MODEL", "gemini-pro"))
+  #   end
+  #
   module Providers
     def self.register(name, &factory)
       registry[name.to_s] = factory