@@ -64,85 +64,38 @@ def parse_model_mappings
6464 end
6565
6666 def acts_as_chat_declaration
67- acts_as_chat_params = [ ]
68- messages_assoc = message_model_name . tableize . to_sym
69- model_assoc = model_model_name . underscore . to_sym
70-
71- if messages_assoc != :messages
72- acts_as_chat_params << "messages: :#{ messages_assoc } "
73- if message_model_name != messages_assoc . to_s . classify
74- acts_as_chat_params << "message_class: '#{ message_model_name } '"
75- end
76- end
67+ params = [ ]
7768
78- if model_assoc != :model
79- acts_as_chat_params << "model: :#{ model_assoc } "
80- acts_as_chat_params << "model_class: '#{ model_model_name } '" if model_model_name != model_assoc . to_s . classify
81- end
69+ add_association_params ( params , :messages , message_table_name , message_model_name , plural : true )
70+ add_association_params ( params , :model , model_table_name , model_model_name )
8271
83- if acts_as_chat_params . any?
84- "acts_as_chat #{ acts_as_chat_params . join ( ', ' ) } "
85- else
86- 'acts_as_chat'
87- end
72+ "acts_as_chat#{ " #{ params . join ( ', ' ) } " if params . any? } "
8873 end
8974
9075 def acts_as_message_declaration
9176 params = [ ]
9277
93- add_message_association_params ( params , :chat , chat_model_name )
94- add_message_association_params ( params , :tool_calls , tool_call_model_name , tableize : true )
95- add_message_association_params ( params , :model , model_model_name )
78+ add_association_params ( params , :chat , chat_table_name , chat_model_name )
79+ add_association_params ( params , :tool_calls , tool_call_table_name , tool_call_model_name , plural : true )
80+ add_association_params ( params , :model , model_table_name , model_model_name )
9681
97- params . any? ? "acts_as_message #{ params . join ( ', ' ) } " : 'acts_as_message'
82+ "acts_as_message#{ " #{ params . join ( ', ' ) } " if params . any? } "
9883 end
9984
100- private
85+ def acts_as_model_declaration
86+ params = [ ]
10187
102- def add_message_association_params ( params , default_assoc , model_name , tableize : false )
103- assoc = tableize ? model_name . tableize . to_sym : model_name . underscore . to_sym
88+ add_association_params ( params , :chats , chat_table_name , chat_model_name , plural : true )
10489
105- return if assoc == default_assoc
106-
107- params << "#{ default_assoc } : :#{ assoc } "
108- expected_class = assoc . to_s . classify
109- params << "#{ default_assoc . to_s . singularize } _class: '#{ model_name } '" if model_name != expected_class
90+ "acts_as_model#{ " #{ params . join ( ', ' ) } " if params . any? } "
11091 end
11192
112- public
113-
11493 def acts_as_tool_call_declaration
115- acts_as_tool_call_params = [ ]
116- message_assoc = message_model_name . underscore . to_sym
94+ params = [ ]
11795
118- if message_assoc != :message
119- acts_as_tool_call_params << "message: :#{ message_assoc } "
120- if message_model_name != message_assoc . to_s . classify
121- acts_as_tool_call_params << "message_class: '#{ message_model_name } '"
122- end
123- end
96+ add_association_params ( params , :message , message_table_name , message_model_name )
12497
125- if acts_as_tool_call_params . any?
126- "acts_as_tool_call #{ acts_as_tool_call_params . join ( ', ' ) } "
127- else
128- 'acts_as_tool_call'
129- end
130- end
131-
132- def acts_as_model_declaration
133- acts_as_model_params = [ ]
134- chats_assoc = chat_model_name . tableize . to_sym
135-
136- if chats_assoc != :chats
137- acts_as_model_params << "chats: :#{ chats_assoc } "
138- acts_as_model_params << "chat_class: '#{ chat_model_name } '" if chat_model_name != chats_assoc . to_s . classify
139- end
140-
141- if acts_as_model_params . any?
142- "acts_as_model #{ acts_as_model_params . join ( ', ' ) } "
143- else
144- 'acts_as_model'
145- end
98+ "acts_as_tool_call#{ " #{ params . join ( ', ' ) } " if params . any? } "
14699 end
147100
148101 def create_migration_files
@@ -186,12 +139,6 @@ def install_active_storage
186139 rails_command 'active_storage:install'
187140 end
188141
189- def table_name_for ( model_name )
190- # Convert namespaced model names to proper table names
191- # e.g., "Assistant::Chat" -> "assistant_chats" (not "assistant/chats")
192- model_name . underscore . pluralize . tr ( '/' , '_' )
193- end
194-
195142 def show_install_info
196143 say "\n ✅ RubyLLM installed!" , :green
197144
@@ -223,5 +170,22 @@ def show_install_info
223170 say ' • 🐦 Follow for updates: https://x.com/paolino'
224171 say "\n "
225172 end
173+
174+ private
175+
176+ def add_association_params ( params , default_assoc , table_name , model_name , plural : false )
177+ assoc = plural ? table_name . to_sym : table_name . singularize . to_sym
178+
179+ return if assoc == default_assoc
180+
181+ params << "#{ default_assoc } : :#{ assoc } "
182+ params << "#{ default_assoc . to_s . singularize } _class: '#{ model_name } '" if model_name != assoc . to_s . classify
183+ end
184+
185+ def table_name_for ( model_name )
186+ # Convert namespaced model names to proper table names
187+ # e.g., "Assistant::Chat" -> "assistant_chats" (not "assistant/chats")
188+ model_name . underscore . pluralize . tr ( '/' , '_' )
189+ end
226190 end
227191end
0 commit comments