Class: SmartPrompt::Conversation
- Inherits:
-
Object
- Object
- SmartPrompt::Conversation
- Includes:
- APIHandler
- Defined in:
- lib/smart_prompt/conversation.rb
Instance Attribute Summary collapse
-
#config_file ⇒ Object
readonly
Returns the value of attribute config_file.
-
#last_response ⇒ Object
readonly
Returns the value of attribute last_response.
-
#messages ⇒ Object
readonly
Returns the value of attribute messages.
Instance Method Summary collapse
- #embeddings(length) ⇒ Object
-
#initialize(engine) ⇒ Conversation
constructor
A new instance of Conversation.
- #model(model_name) ⇒ Object
- #normalize(x, length) ⇒ Object
- #prompt(template_name, params = {}) ⇒ Object
- #safe_send_msg ⇒ Object
- #send_msg ⇒ Object
- #sys_msg(message) ⇒ Object
- #use(llm_name) ⇒ Object
Constructor Details
#initialize(engine) ⇒ Conversation
Returns a new instance of Conversation.
10 11 12 13 14 15 16 17 18 19 |
# File 'lib/smart_prompt/conversation.rb', line 10 def initialize(engine) SmartPrompt.logger.info "Create Conversation" @messages = [] @engine = engine @adapters = engine.adapters @llms = engine.llms @templates = engine.templates @current_adapter = engine.current_adapter @last_response = nil end |
Instance Attribute Details
#config_file ⇒ Object (readonly)
Returns the value of attribute config_file.
8 9 10 |
# File 'lib/smart_prompt/conversation.rb', line 8 def config_file @config_file end |
#last_response ⇒ Object (readonly)
Returns the value of attribute last_response.
8 9 10 |
# File 'lib/smart_prompt/conversation.rb', line 8 def last_response @last_response end |
#messages ⇒ Object (readonly)
Returns the value of attribute messages.
8 9 10 |
# File 'lib/smart_prompt/conversation.rb', line 8 def @messages end |
Instance Method Details
#embeddings(length) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/smart_prompt/conversation.rb', line 81 def (length) Retriable.retriable(RETRY_OPTIONS) do raise ConfigurationError, "No LLM selected" if @current_llm.nil? text = "" @messages.each do |msg| if msg[:role]=="user" text = msg[:content] end end @last_response = @current_llm.(text, @model_name) @messages=[] @messages << { role: 'system', content: @sys_msg } normalize(@last_response, length) end end |
#model(model_name) ⇒ Object
27 28 29 |
# File 'lib/smart_prompt/conversation.rb', line 27 def model(model_name) @model_name = model_name end |
#normalize(x, length) ⇒ Object
71 72 73 74 75 76 77 78 79 |
# File 'lib/smart_prompt/conversation.rb', line 71 def normalize(x, length) if x.length > length x = Numo::NArray.cast(x[0..length-1]) norm = Math.sqrt((x * x).sum) return (x / norm).to_a else return x.concat([0] * (x.length - length)) end end |
#prompt(template_name, params = {}) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/smart_prompt/conversation.rb', line 31 def prompt(template_name, params = {}) if template_name.class == Symbol template_name = template_name.to_s SmartPrompt.logger.info "Use template #{template_name}" raise "Template #{template_name} not found" unless @templates.key?(template_name) content = @templates[template_name].render(params) @messages << { role: 'user', content: content } self else @messages << { role: 'user', content: template_name } self end end |
#safe_send_msg ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/smart_prompt/conversation.rb', line 59 def safe_send_msg Retriable.retriable(RETRY_OPTIONS) do raise ConfigurationError, "No LLM selected" if @current_llm.nil? @last_response = @current_llm.send_request(@messages, @model_name) @messages=[] @messages << { role: 'system', content: @sys_msg } @last_response end rescue => e return "Failed to call LLM after #{MAX_RETRIES} attempts: #{e.}" end |
#send_msg ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/smart_prompt/conversation.rb', line 51 def send_msg raise "No LLM selected" if @current_llm.nil? @last_response = @current_llm.send_request(@messages, @model_name) @messages=[] @messages << { role: 'system', content: @sys_msg } @last_response end |
#sys_msg(message) ⇒ Object
45 46 47 48 49 |
# File 'lib/smart_prompt/conversation.rb', line 45 def sys_msg() @sys_msg = @messages << { role: 'system', content: } self end |
#use(llm_name) ⇒ Object
21 22 23 24 25 |
# File 'lib/smart_prompt/conversation.rb', line 21 def use(llm_name) raise "Adapter #{adapter_name} not configured" unless @llms.key?(llm_name) @current_llm = @llms[llm_name] self end |