, * models?: list * } */ class CursorModelMetadataDirectory extends AbstractOpenAiCompatibleModelMetadataDirectory { /** * {@inheritDoc} * * @since 0.1.0 */ protected function createRequest(HttpMethodEnum $method, string $path, array $headers = [], $data = null): Request { return new Request( $method, CursorProvider::url('v1/' . ltrim($path, '/')), $headers, $data ); } /** * {@inheritDoc} * * @since 0.1.0 */ protected function parseResponseToModelMetadataList(Response $response): array { /** @var ModelsResponseData $responseData */ $responseData = $response->getData(); $items = array(); if (isset($responseData['items']) && is_array($responseData['items'])) { $items = $responseData['items']; } elseif (isset($responseData['models']) && is_array($responseData['models'])) { $items = $responseData['models']; } else { throw ResponseException::fromMissingData('Cursor', 'items'); } $capabilities = array( CapabilityEnum::textGeneration(), CapabilityEnum::chatHistory(), ); // Declare options commonly set by the WordPress AI plugin so model // matching succeeds. Cursor Cloud Agents ignore sampling params at // the HTTP layer; system instructions are folded into the prompt text. $options = array( new SupportedOption(OptionEnum::systemInstruction()), new SupportedOption(OptionEnum::temperature()), new SupportedOption(OptionEnum::maxTokens()), new SupportedOption(OptionEnum::outputMimeType(), array('text/plain', 'application/json')), new SupportedOption(OptionEnum::outputSchema()), new SupportedOption(OptionEnum::customOptions()), new SupportedOption(OptionEnum::inputModalities(), array(array(ModalityEnum::text()))), new SupportedOption(OptionEnum::outputModalities(), array(array(ModalityEnum::text()))), ); $models = array(); foreach ($items as $item) { if (is_string($item)) { $modelId = $item; $modelName = $item; } elseif (is_array($item) && isset($item['id']) && is_string($item['id'])) { $modelId = $item['id']; $modelName = isset($item['displayName']) && is_string($item['displayName']) ? $item['displayName'] : $modelId; } else { continue; } $models[] = new ModelMetadata( $modelId, $modelName, $capabilities, $options ); } return array_values($models); } }