* } */ class AlibabaCloudModelMetadataDirectory extends AbstractOpenAiCompatibleModelMetadataDirectory { /** * {@inheritDoc} * * @since 0.1.0 */ protected function createRequest(HttpMethodEnum $method, string $path, array $headers = [], $data = null): Request { return new Request( $method, AlibabaCloudProvider::url($path), $headers, $data ); } /** * {@inheritDoc} * * @since 0.1.0 */ protected function parseResponseToModelMetadataList(Response $response): array { /** @var ModelsResponseData $responseData */ $responseData = $response->getData(); if (!isset($responseData['data']) || !$responseData['data']) { throw ResponseException::fromMissingData('Alibaba Cloud', 'data'); } $textCapabilities = [ CapabilityEnum::textGeneration(), CapabilityEnum::chatHistory(), ]; $textOptions = [ new SupportedOption(OptionEnum::systemInstruction()), new SupportedOption(OptionEnum::candidateCount()), new SupportedOption(OptionEnum::maxTokens()), new SupportedOption(OptionEnum::temperature()), new SupportedOption(OptionEnum::topP()), new SupportedOption(OptionEnum::stopSequences()), new SupportedOption(OptionEnum::presencePenalty()), new SupportedOption(OptionEnum::frequencyPenalty()), new SupportedOption(OptionEnum::outputMimeType(), ['text/plain', 'application/json']), new SupportedOption(OptionEnum::outputSchema()), new SupportedOption(OptionEnum::functionDeclarations()), new SupportedOption(OptionEnum::customOptions()), new SupportedOption(OptionEnum::inputModalities(), [[ModalityEnum::text()]]), new SupportedOption(OptionEnum::outputModalities(), [[ModalityEnum::text()]]), ]; $modelsData = (array) $responseData['data']; $models = array_values( array_map( static function (array $modelData) use ($textCapabilities, $textOptions): ModelMetadata { $modelId = $modelData['id']; return new ModelMetadata( $modelId, $modelId, $textCapabilities, $textOptions ); }, $modelsData ) ); return $models; } }