0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-07 13:19:19 +08:00
discourse/plugins/discourse-ai/lib/completions/dialects/ollama.rb
Sam 11d2abf277
FIX: Embed user IDs in vLLM prompts (#42295)
vLLM accepts "user" as a parameter but depends on templates to actually
present to LLM.

Out of the box both Qwen and DeepSeek throw this info away.

Username is important for Discourse discussions, so we now embed
username
vs supply to the API
2026-08-05 10:03:55 +10:00

96 lines
2.3 KiB
Ruby
Vendored

# frozen_string_literal: true
module DiscourseAi
module Completions
module Dialects
class Ollama < Dialect
class << self
def can_translate?(llm_model)
llm_model.provider == "ollama"
end
end
def native_tool_support?
enable_native_tool?
end
def max_prompt_tokens
llm_model.max_prompt_tokens
end
private
def tools_dialect
if enable_native_tool?
@tools_dialect ||= DiscourseAi::Completions::Dialects::OllamaTools.new(prompt.tools)
else
super
end
end
def tokenizer
llm_model.tokenizer_class
end
def model_msg(msg)
{ role: "assistant", content: msg[:content] }
end
def tool_call_msg(msg)
if enable_native_tool?
tools_dialect.from_raw_tool_call(msg)
else
super
end
end
def tool_msg(msg)
if enable_native_tool?
tools_dialect.from_raw_tool(msg)
else
super
end
end
def system_msg(msg)
msg = { role: "system", content: msg[:content] }
if tools_dialect.instructions.present?
msg[:content] = msg[:content].dup << "\n\n#{tools_dialect.instructions}"
end
msg
end
def enable_native_tool?
return @enable_native_tool if defined?(@enable_native_tool)
@enable_native_tool = llm_model.lookup_custom_param("enable_native_tool")
end
def user_msg(msg)
content = prepend_user_id(DiscourseAi::Completions::Prompt.text_only(msg), msg)
user_message = { role: "user", content: content }
encoded_uploads = prompt.encoded_uploads(msg)
if encoded_uploads.present?
images =
encoded_uploads
.map do |upload|
if upload[:mime_type].start_with?("image/")
upload[:base64]
else
nil
end
end
.compact
user_message[:images] = images if images.present?
end
user_message
end
end
end
end
end