DEV: adding a concept of prompt builder

This is half baked and not working, but starts demonstrating the idea
This commit is contained in:
Sam Saffron 2023-08-25 15:54:16 +10:00
parent 7790313b1b
commit a8f54e2709
No known key found for this signature in database
GPG Key ID: B9606168D2FFD9F5
4 changed files with 54 additions and 0 deletions

View File

@ -219,6 +219,22 @@ module DiscourseAi
0
end
def bot_prompt_with_topic_context2(post)
builder = tokenizer.build_prompt(max_tokens: prompt_limit)
builder << { user: bot_user.username, content: rendered_system_prompt, type: :system }
conversation_context(post).each do |raw, username, function|
builder.unshift(
user: username,
content: raw,
type: :username == bot_user.username ? :assistant : :user,
)
break if builder.full?
end
builder.generate
end
def bot_prompt_with_topic_context(post, prompt: "topic")
messages = []
conversation = conversation_context(post)

View File

@ -0,0 +1,38 @@
# frozen_string_literal: true
module DiscourseAi
module Prompting
class PromptBuilder
def initialize(tokenizer:, max_tokens:)
@tokenizer = tokenizer
@max_tokens = max_tokens
@contents = []
end
def full?
end
def <<(content:, type:, user: nil)
validate_type(type)
@contents << { content: content, type: type, user: user }
end
def unshift(content:, type:, user: nil)
validate_type(type)
@contents.unshift(content: content, type: type, user: user)
end
def generate
raise NotImplemented
end
def validate_type(type)
if !%i[system assistant user].include?(type)
raise ArgumentError, "type must be one of :system, :assistant, :user"
end
end
end
end
end