* @author Maximum Software Inc * @license GPL-3.0-only * @link https://agenistrator.com/ * * SPDX-FileCopyrightText: 2025-2026 Alex Ruban * SPDX-FileCopyrightText: 2025-2026 Maximum Software Inc * SPDX-License-Identifier: GPL-3.0-only */ namespace Agenistrator; // Direct access prevention if ( ! defined( 'ABSPATH' ) ) { exit; } /** * LLM_Chat class. */ abstract class LLM_Chat extends LLM { /** * Create a new context object specific to this model's provider * * @param string $system_message Optional custom system message * @return Context A context object specific to this provider * @since 1.0.0 */ abstract public function create_context( $system_message = null ); /** * Generate a synchronous (non-streaming) chat completion * * @param Context $context Context object containing all request information * @return array Response data * @since 1.0.0 */ abstract public function generate_sync_completion( $context ); /** * Generate a streaming chat completion * * @param Context $context Context object containing all request information * @param callable $stream_callback Callback function for streaming. Should return bool: true to continue, false to stop. * @return bool Success flag (true if streaming completed successfully) * @since 1.0.0 */ abstract public function generate_streaming_completion( $context, $stream_callback = null ); /** * Convert a tool to a provider-specific tool definition format * * @param Tool $tool The tool to convert * @return array Tool definition in provider-specific format * @since 1.0.0 */ abstract public function convert_tool_to_definition( $tool ); /** * Convert an array of tools to provider-specific tool definitions * * All tools are included regardless of enabled status. * Disabled tools will throw an error when executed, allowing * the LLM to inform the user that the tool needs to be enabled. * * @param array $tools Array of Tool objects * @return array Array of tool definitions in provider-specific format * @since 1.0.0 */ public function convert_tools_to_definitions( $tools ) { $definitions = array(); foreach ( $tools as $tool ) { if ( $tool instanceof Tool ) { $definitions[] = $this->convert_tool_to_definition( $tool ); } } return $definitions; } }