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,
];
}
}
