Module: Legion::LLM::NativeDispatch

Extended by:
NativeDispatch, Legion::Logging::Helper
Included in:
NativeDispatch
Defined in:
lib/legion/llm/native_dispatch.rb

Instance Method Summary collapse

Instance Method Details

#available?(provider) ⇒ Boolean

Returns true when the provider is registered in ProviderRegistry.

Parameters:

  • provider (Symbol, String)

Returns:

  • (Boolean)


90
91
92
# File 'lib/legion/llm/native_dispatch.rb', line 90

def available?(provider)
  ProviderRegistry.registered?(provider)
end

#dispatch_chat(provider:, model:, messages:) ⇒ Hash

Dispatch a chat request to a registered lex-* extension.

Parameters:

  • provider (Symbol, String)

    provider name

  • model (String, nil)

    model identifier forwarded to the extension

  • messages (Array<Hash>)

    array of { role:, content: } message hashes

Returns:

  • (Hash)

    standardized { result:, usage: } hash

Raises:



36
37
38
39
40
41
# File 'lib/legion/llm/native_dispatch.rb', line 36

def dispatch_chat(provider:, model:, messages:, **)
  ext = fetch_extension!(provider)
  log.info("[llm][native] dispatch_chat provider=#{provider} model=#{model} messages=#{messages.size}")
  raw = ext.chat(model: model, messages: messages, **)
  normalize_response(raw)
end

#dispatch_count_tokens(provider:, model:, messages:) ⇒ Hash

Dispatch a token count request to a registered lex-* extension.

Parameters:

  • provider (Symbol, String)

    provider name

  • model (String, nil)

    model identifier

  • messages (Array<Hash>)

    message hashes

Returns:

  • (Hash)

    standardized { result:, usage: } hash

Raises:



79
80
81
82
83
84
# File 'lib/legion/llm/native_dispatch.rb', line 79

def dispatch_count_tokens(provider:, model:, messages:, **)
  ext = fetch_extension!(provider)
  log.debug("[llm][native] dispatch_count_tokens provider=#{provider} model=#{model} messages=#{messages.size}")
  raw = ext.count_tokens(model: model, messages: messages, **)
  normalize_response(raw)
end

#dispatch_embed(provider:, model:, text:) ⇒ Hash

Dispatch an embedding request to a registered lex-* extension.

Parameters:

  • provider (Symbol, String)

    provider name

  • model (String, nil)

    model identifier

  • text (String)

    text to embed

Returns:

  • (Hash)

    standardized { result:, usage: } hash

Raises:



50
51
52
53
54
55
# File 'lib/legion/llm/native_dispatch.rb', line 50

def dispatch_embed(provider:, model:, text:, **)
  ext = fetch_extension!(provider)
  log.info("[llm][native] dispatch_embed provider=#{provider} model=#{model} text_chars=#{text.to_s.length}")
  raw = ext.embed(model: model, text: text, **)
  normalize_response(raw)
end

#dispatch_stream(provider:, model:, messages:) ⇒ Hash

Dispatch a streaming chat request to a registered lex-* extension.

Parameters:

  • provider (Symbol, String)

    provider name

  • model (String, nil)

    model identifier

  • messages (Array<Hash>)

    message hashes

  • block (Proc)

    receives each chunk as it arrives

Returns:

  • (Hash)

    standardized { result:, usage: } hash

Raises:



65
66
67
68
69
70
# File 'lib/legion/llm/native_dispatch.rb', line 65

def dispatch_stream(provider:, model:, messages:, **, &)
  ext = fetch_extension!(provider)
  log.info("[llm][native] dispatch_stream provider=#{provider} model=#{model} messages=#{messages.size}")
  raw = ext.stream(model: model, messages: messages, **, &)
  normalize_response(raw)
end