register( 'api.chatgpt', function( $c ) { // Use the short class name because of the 'use' statement above return new ChatGPT_API(); } ); $container->register( 'context.database_agent', function( $c ) { // Use the short class name because of the 'use' statement above return new Database_Agent(); } ); // Register the local context retriever $container->register( 'context.local_retriever', function( $c ) { // Use the short class name because of the 'use' statement above return new Local_Context_Retriever( $c->get( 'api.chatgpt' ), $c->get( 'context.database_agent' ) ); } ); // Register the remote context retriever $container->register( 'context.remote_retriever', function( $c ) { // Use the short class name because of the 'use' statement above return new Remote_Context_Retriever(); } ); // Register the forum structure provider $container->register( 'context.forum_structure_provider', function( $c ) { // Use the short class name because of the 'use' statement above return new Forum_Structure_Provider(); } ); // Register the system prompt builder $container->register( 'core.system_prompt_builder', function( $c ) { return new System_Prompt_Builder( $c->get( 'context.forum_structure_provider' ), $c->get( 'api.chatgpt' ) ); } ); // Register the bot trigger service $container->register( 'core.bot_trigger_service', function( $c ) { return new Bot_Trigger_Service(); } ); // Register the content interaction service $container->register( 'context.interaction_service', function( $c ) { // Use the short class name because of the 'use' statement above return new Content_Interaction_Service( $c->get( 'context.database_agent' ), $c->get( 'context.local_retriever' ), $c->get( 'context.remote_retriever' ), $c->get( 'api.chatgpt' ), $c->get( 'core.system_prompt_builder' ) ); } ); // Register the response generation service $container->register( 'core.generate_bot_response', function( $c ) { // Use the short class name because of the 'use' statement above return new Generate_Bot_Response( $c->get( 'api.chatgpt' ), $c->get( 'context.interaction_service' ), $c->get( 'core.system_prompt_builder' ), $c // Pass the container itself ); } ); // Register the main bot class $container->register( 'bot.main', function( $c ) { // Use the short class name because of the 'use' statement above return new AiBot( $c->get( 'core.bot_trigger_service' ), $c->get( 'core.generate_bot_response' ), $c->get( 'context.interaction_service' ), $c->get( 'context.database_agent' ) ); } ); // Instantiate and Initialize the Bot via the Container $ai_bot_instance = $container->get( 'bot.main' ); // Check the init method exists on the main bot class if (method_exists($ai_bot_instance, 'init')) { $ai_bot_instance->init(); } else { // error_log('AI Bot for bbPress Error: init() method not found on main bot class.'); } // --- End Service Container Setup ---