discourse-ai/lib/completions/dialects/open_ai_compatible.rb
Sam 5b6d39a206
FEATURE: flexible image handling within messages (#1214)
* DEV: refactor bot internals

This introduces a proper object for bot context, this makes
it simpler to improve context management as we go cause we
have a nice object to work with

Starts refactoring allowing for a single message to have
multiple uploads throughout

* transplant method to message builder

* chipping away at inline uploads

* image support is improved but not fully fixed yet

partially working in anthropic, still got quite a few dialects to go

* open ai and claude are now working

* Gemini is now working as well

* fix nova

* more dialects...

* fix ollama

* fix specs

* update artifact fixed

* more tests

* spam scanner

* pass more specs

* bunch of specs improved

* more bug fixes.

* all the rest of the tests are working

* improve tests coverage and ensure custom tools are aware of new context object

* tests are working, but we need more tests

* resolve merge conflict

* new preamble and expanded specs on ai tool

* remove concept of "standalone tools"

This is no longer needed, we can set custom raw, tool details are injected into tool calls
2025-03-31 12:39:07 -03:00

50 lines
1.2 KiB
Ruby

# frozen_string_literal: true
module DiscourseAi
module Completions
module Dialects
class OpenAiCompatible < ChatGpt
class << self
def can_translate?(_llm_model)
# fallback dialect
true
end
end
def tokenizer
llm_model&.tokenizer_class || DiscourseAi::Tokenizer::Llama3Tokenizer
end
def tools
@tools ||= tools_dialect.translated_tools
end
def max_prompt_tokens
return llm_model.max_prompt_tokens if llm_model&.max_prompt_tokens
32_000
end
def translate
translated = super
return translated unless llm_model.lookup_custom_param("disable_system_prompt")
system_msg, user_msg = translated.shift(2)
if user_msg[:content].is_a?(Array) # Has inline images.
user_msg[:content].first[:text] = [
system_msg[:content],
user_msg[:content].first[:text],
].join("\n")
else
user_msg[:content] = [system_msg[:content], user_msg[:content]].join("\n")
end
translated.unshift(user_msg)
end
end
end
end
end