Class: SmartPrompt::Conversation
- Inherits:
-
Object
- Object
- SmartPrompt::Conversation
show all
- Includes:
- APIHandler
- Defined in:
- lib/smart_prompt/conversation.rb
Constant Summary
Constants included
from APIHandler
APIHandler::MAX_RETRIES, APIHandler::RETRY_OPTIONS
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(engine, tools = nil) ⇒ Conversation
Returns a new instance of Conversation.
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/smart_prompt/conversation.rb', line 10
def initialize(engine, tools = nil)
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
@tools = tools
end
|
Instance Attribute Details
#config_file ⇒ Object
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
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
Returns the value of attribute messages.
8
9
10
|
# File 'lib/smart_prompt/conversation.rb', line 8
def messages
@messages
end
|
Instance Method Details
#embeddings(length) ⇒ Object
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# File 'lib/smart_prompt/conversation.rb', line 100
def embeddings(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.embeddings(text, @model_name)
@messages = []
@messages << { role: "system", content: @sys_msg }
normalize(@last_response, length)
end
end
|
#model(model_name) ⇒ Object
28
29
30
|
# File 'lib/smart_prompt/conversation.rb', line 28
def model(model_name)
@model_name = model_name
end
|
#normalize(x, length) ⇒ Object
90
91
92
93
94
95
96
97
98
|
# File 'lib/smart_prompt/conversation.rb', line 90
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
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/smart_prompt/conversation.rb', line 36
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
|
#send_msg ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/smart_prompt/conversation.rb', line 64
def 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, @temperature, @tools, nil)
if @last_response == ""
@last_response = @current_llm.last_response
end
@messages = []
@messages << { role: "system", content: @sys_msg }
@last_response
end
rescue => e
return "Failed to call LLM after #{MAX_RETRIES} attempts: #{e.message}"
end
|
#send_msg_by_stream(&proc) ⇒ Object
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/smart_prompt/conversation.rb', line 79
def send_msg_by_stream(&proc)
Retriable.retriable(RETRY_OPTIONS) do
raise ConfigurationError, "No LLM selected" if @current_llm.nil?
@current_llm.send_request(@messages, @model_name, @temperature, @tools, proc)
@messages = []
@messages << { role: "system", content: @sys_msg }
end
rescue => e
return "Failed to call LLM after #{MAX_RETRIES} attempts: #{e.message}"
end
|
#send_msg_once ⇒ Object
56
57
58
59
60
61
62
|
# File 'lib/smart_prompt/conversation.rb', line 56
def send_msg_once
raise "No LLM selected" if @current_llm.nil?
@last_response = @current_llm.send_request(@messages, @model_name, @temperature)
@messages = []
@messages << { role: "system", content: @sys_msg }
@last_response
end
|
#sys_msg(message) ⇒ Object
50
51
52
53
54
|
# File 'lib/smart_prompt/conversation.rb', line 50
def sys_msg(message)
@sys_msg = message
@messages << { role: "system", content: message }
self
end
|
#temperature(temperature) ⇒ Object
32
33
34
|
# File 'lib/smart_prompt/conversation.rb', line 32
def temperature(temperature)
@temperature = temperature
end
|
#use(llm_name) ⇒ Object
22
23
24
25
26
|
# File 'lib/smart_prompt/conversation.rb', line 22
def use(llm_name)
raise "Adapter #{adapter_name} not configured" unless @llms.key?(llm_name)
@current_llm = @llms[llm_name]
self
end
|