@@ -7,20 +7,22 @@ class ReplyToMessage
77
88 def initialize ( message )
99 @message = message
10+ @conversation = @message . conversation
1011 end
1112
1213 def execute
13- search if collections_to_search . any?
14+ augment_message_prompt
15+ chat . chat_history
1416
1517 @reply = Message . create! (
1618 content : "" ,
17- author : @message . conversation . model_config ,
18- conversation : @message . conversation
19+ author : @conversation . model_config ,
20+ conversation : @conversation
1921 )
2022
2123 prepend ( reply_id , "messages/spinner" )
2224
23- streamer . stream do |message |
25+ streamer . chat ( chat ) do |message |
2426 Rails . logger . info ( "Got back: #{ message } " )
2527 @reply . update! ( content : @reply . content + message )
2628
@@ -29,22 +31,28 @@ def execute
2931
3032 @reply . update! ( statistics :)
3133 rescue LlmClients ::ResponseError , Errno ::ECONNREFUSED , EOFError , ResponseStreamer ::ResponseStreamerError ,
32- ResponseStreamer ::NetworkError => e
34+ ResponseStreamer ::NetworkError => e
3335 Rails . logger . error ( "\n #{ e . class . name } : #{ e . message } #{ e . backtrace . join ( "\n " ) } " )
3436
3537 active_message . update! ( error : { message : e } )
3638 end
3739
3840 private
3941
42+ def augment_message_prompt
43+ return unless collections_to_search . any?
44+
45+ @message . update! ( prompt : prompt_augmentor . prompt )
46+ end
47+
4048 def active_message
4149 @reply || @message
4250 end
4351
4452 def collections_to_search
45- @collections_to_search ||= if @message . conversation . search_collections
46- message_collections = @message . conversation . collections
47- message_collections . any? ? message_collections : @message . conversation . user . collections
53+ @collections_to_search ||= if @conversation . search_collections
54+ message_collections = @conversation . collections
55+ message_collections . any? ? message_collections : @conversation . user . collections
4856 else
4957 [ ]
5058 end
@@ -68,55 +76,44 @@ def prepend(target, partial, locals = {})
6876 end
6977
7078 def streamer
79+ # TODO: add api_key to ModelServer
7180 @streamer ||= ResponseStreamer . new (
72- {
73- endpoint : ModelServer . active_server . url ,
74- model : model_config . model ,
75- provider : ModelServer . active_server . provider ,
76- } ,
77- prompt || @message . content
81+ endpoint : ModelServer . active_server . url ,
82+ model : model_config . model ,
83+ provider : ModelServer . active_server . provider
7884 )
7985 end
8086
81- def search_hits
82- @search_hits ||= searcher . search ( @message . content )
83- end
84-
85- def prompt
86- return unless collections_to_search . any?
87-
88- @prompt ||= begin
89- prompt = "Here is some context that may help you answer the following question:\n \n "
90- search_hits . each do |hit |
91- prompt << "#{ hit . chunk . content } \n \n "
92- end
93-
94- prompt << "Question: #{ @message . content } "
95- end
96- end
97-
98- def search
99- @message . update! ( prompt :) if prompt . present?
100- end
101-
10287 def searcher
103- @searcher ||= Search ::SearchMultiple . new ( collections_to_search , num_results : 10 )
88+ @searcher ||= Search ::SearchMultiple . new ( collections_to_search , num_results : 5 )
10489 end
10590
10691 def model_config
107- @message . conversation . model_config
92+ @conversation . model_config
10893 end
10994
11095 def reply_id
11196 @reply_id ||= "message_#{ @reply . id } "
11297 end
11398
11499 def channel_name
115- "#{ @message . conversation . user . id } _conversations"
100+ "#{ @conversation . user . id } _conversations"
116101 end
117102
118103 def statistics
119104 streamer . stats . merge ( { server : ModelServer . active_server . name } )
120105 end
106+
107+ def chat
108+ @chat ||= LlmClients ::Ollama ::Chat . new ( @conversation . messages . sort )
109+ end
110+
111+ def prompt_augmentor
112+ @prompt_augmentor ||= begin
113+ search_hits = searcher . search ( @message . content )
114+
115+ PromptAugmentor . new ( @message , search_hits )
116+ end
117+ end
121118end
122119# rubocop:enable Metrics/AbcSize
0 commit comments