| 
									
										
										
										
											2023-05-05 15:28:31 -03:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module DiscourseAi | 
					
						
							|  |  |  |   module AiBot | 
					
						
							|  |  |  |     class EntryPoint | 
					
						
							| 
									
										
										
										
											2023-05-11 10:03:03 -03:00
										 |  |  |       GPT4_ID = -110
 | 
					
						
							|  |  |  |       GPT3_5_TURBO_ID = -111
 | 
					
						
							|  |  |  |       CLAUDE_V1_ID = -112
 | 
					
						
							|  |  |  |       BOTS = [ | 
					
						
							|  |  |  |         [GPT4_ID, "gpt4_bot"], | 
					
						
							|  |  |  |         [GPT3_5_TURBO_ID, "gpt3.5_bot"], | 
					
						
							|  |  |  |         [CLAUDE_V1_ID, "claude_v1_bot"], | 
					
						
							|  |  |  |       ] | 
					
						
							| 
									
										
										
										
											2023-05-05 15:28:31 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-16 14:38:21 -03:00
										 |  |  |       def self.map_bot_model_to_user_id(model_name) | 
					
						
							|  |  |  |         case model_name | 
					
						
							|  |  |  |         in "gpt-3.5-turbo" | 
					
						
							|  |  |  |           GPT3_5_TURBO_ID | 
					
						
							|  |  |  |         in "gpt-4" | 
					
						
							|  |  |  |           GPT4_ID | 
					
						
							|  |  |  |         in "claude-v1" | 
					
						
							|  |  |  |           CLAUDE_V1_ID | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           nil | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-05 15:28:31 -03:00
										 |  |  |       def load_files | 
					
						
							|  |  |  |         require_relative "jobs/regular/create_ai_reply" | 
					
						
							| 
									
										
										
										
											2023-05-16 14:38:21 -03:00
										 |  |  |         require_relative "jobs/regular/update_ai_bot_pm_title" | 
					
						
							| 
									
										
										
										
											2023-05-11 10:03:03 -03:00
										 |  |  |         require_relative "bot" | 
					
						
							|  |  |  |         require_relative "anthropic_bot" | 
					
						
							|  |  |  |         require_relative "open_ai_bot" | 
					
						
							| 
									
										
										
										
											2023-05-20 17:45:54 +10:00
										 |  |  |         require_relative "commands/command" | 
					
						
							|  |  |  |         require_relative "commands/search_command" | 
					
						
							|  |  |  |         require_relative "commands/categories_command" | 
					
						
							|  |  |  |         require_relative "commands/tags_command" | 
					
						
							|  |  |  |         require_relative "commands/time_command" | 
					
						
							|  |  |  |         require_relative "commands/summarize_command" | 
					
						
							|  |  |  |         require_relative "commands/image_command" | 
					
						
							|  |  |  |         require_relative "commands/google_command" | 
					
						
							| 
									
										
										
										
											2023-05-05 15:28:31 -03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def inject_into(plugin) | 
					
						
							|  |  |  |         plugin.register_seedfu_fixtures( | 
					
						
							|  |  |  |           Rails.root.join("plugins", "discourse-ai", "db", "fixtures", "ai_bot"), | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-16 14:38:21 -03:00
										 |  |  |         plugin.register_svg_icon("robot") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-05 15:28:31 -03:00
										 |  |  |         plugin.on(:post_created) do |post| | 
					
						
							| 
									
										
										
										
											2023-05-11 10:03:03 -03:00
										 |  |  |           bot_ids = BOTS.map(&:first) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-20 17:45:54 +10:00
										 |  |  |           if post.post_type == Post.types[:regular] && post.topic.private_message? && | 
					
						
							|  |  |  |                !bot_ids.include?(post.user_id) | 
					
						
							| 
									
										
										
										
											2023-05-11 10:03:03 -03:00
										 |  |  |             if (SiteSetting.ai_bot_allowed_groups_map & post.user.group_ids).present? | 
					
						
							|  |  |  |               bot_id = post.topic.topic_allowed_users.where(user_id: bot_ids).first&.user_id | 
					
						
							| 
									
										
										
										
											2023-05-05 15:28:31 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-16 14:38:21 -03:00
										 |  |  |               if bot_id | 
					
						
							|  |  |  |                 Jobs.enqueue(:create_ai_reply, post_id: post.id, bot_user_id: bot_id) | 
					
						
							|  |  |  |                 Jobs.enqueue_in( | 
					
						
							|  |  |  |                   5.minutes, | 
					
						
							|  |  |  |                   :update_ai_bot_pm_title, | 
					
						
							|  |  |  |                   post_id: post.id, | 
					
						
							|  |  |  |                   bot_user_id: bot_id, | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |               end | 
					
						
							| 
									
										
										
										
											2023-05-11 10:03:03 -03:00
										 |  |  |             end | 
					
						
							| 
									
										
										
										
											2023-05-05 15:28:31 -03:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |