dsfr_typesense-2.1.x-dev/src/Plugin/Block/TypeSenseRagBlock.php

src/Plugin/Block/TypeSenseRagBlock.php
<?php

namespace Drupal\dsfr_typesense\Plugin\Block;

use Drupal\Core\Block\BlockBase;

use Drupal\search_api\IndexInterface;
use Drupal\search_api_typesense\AiModels;
use Drupal\search_api_typesense\Api\SearchApiTypesenseException;
use Drupal\search_api_typesense\Plugin\search_api\backend\SearchApiTypesenseBackend;

use Drupal\search_api\Entity\Index;

/**
 * Provides a "Typesense Search" block.
 *
 * @Block(
 *   id = "dsfr_typesense_index_rag",
 *   admin_label = @Translation("DSFR Typesense RAG Block")
 * )
 */
class TypesenseRagBlock extends BlockBase {

  /**
   * {@inheritdoc}
   * 
   * @param \Drupal\search_api\IndexInterface $search_api_index
   *   The search index.
   */
  public function build() {
 
    $search_api_index = Index::load('typesense_index_rag');
    $backend = $search_api_index->getServerInstance()->getBackend();

    $configuration = $backend->getConfiguration();
    $typesense_client = $backend->getTypesenseClient();

    // $all_fields = $typesense_client->getFields($search_api_index->id());
    // $query_by_fields = $typesense_client->getFieldsForQueryBy($search_api_index->id());
    // $facet_number_fields = $typesense_client->getFieldsForFacetNumber($search_api_index->id());
    // $facet_string_fields = $typesense_client->getFieldsForFacetString($search_api_index->id());
    // $schema = $backend->getSchema($search_api_index->id())?->getSchema();
    // $query_by_weights = $schema['fields'] ? $typesense_client->getQueryByWeight($schema['fields']) : '';
    // $sort_by_fields = $typesense_client->getFieldsForSortBy($schema['fields']);

    $search_api_typesense = [
      'api_key' => $configuration['admin_api_key'],
      'url' => \sprintf(
        '%s://%s:%s',
        $configuration['nodes'][0]['protocol'],
        $configuration['nodes'][0]['host'],
        $configuration['nodes'][0]['port'],
      ),
      'index' => $search_api_index->id(),
      // 'all_fields' => $all_fields,
      // 'query_by_fields' => \implode(',', $query_by_fields),
      // 'query_by_weights' => \implode(',', $query_by_weights),
      // 'sort_by_fields' => \implode(',', $sort_by_fields),
      // 'facet_number_fields' => $facet_number_fields,
      // 'facet_string_fields' => $facet_string_fields,
    ];

    return [
      '#theme' => 'search_api_typesense_converse',
      '#models' => $typesense_client->retrieveConversationModels(),
      '#attached' => [
        'library' => [
          // 'search_api_typesense/converse',
          'dsfr_typesense/converse',
        ],
        'drupalSettings' => [
          'search_api_typesense' => $search_api_typesense
        ],
      ],
      // '#facet_number_fields' => $facet_number_fields,
      // '#facet_string_fields' => $facet_string_fields,
    ];
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc