Skip to content

Commit 88ccd9e

Browse files
committed
Vectors: Split out vector search and llm query runs
Added a formal object type to carry across vector search results. Added permission application and entity combining with vector search results. Also updated namespace from vectors to queries.
1 parent 2c3100e commit 88ccd9e

18 files changed

+155
-78
lines changed

app/Console/Commands/RegenerateVectorsCommand.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
use BookStack\Entities\EntityProvider;
66
use BookStack\Entities\Models\Entity;
7-
use BookStack\Search\Vectors\SearchVector;
8-
use BookStack\Search\Vectors\StoreEntityVectorsJob;
7+
use BookStack\Search\Queries\SearchVector;
8+
use BookStack\Search\Queries\StoreEntityVectorsJob;
99
use Illuminate\Console\Command;
1010

1111
class RegenerateVectorsCommand extends Command

app/Search/Vectors/EntityVectorGenerator.php renamed to app/Search/Queries/EntityVectorGenerator.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<?php
22

3-
namespace BookStack\Search\Vectors;
3+
declare(strict_types=1);
4+
5+
namespace BookStack\Search\Queries;
46

57
use BookStack\Activity\Models\Tag;
68
use BookStack\Entities\Models\Entity;
7-
use BookStack\Search\Vectors\Services\VectorQueryService;
9+
use BookStack\Search\Queries\Services\VectorQueryService;
810
use Illuminate\Support\Facades\DB;
911

1012
class EntityVectorGenerator
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace BookStack\Search\Queries;
4+
5+
use Exception;
6+
7+
class LlmQueryRunner
8+
{
9+
public function __construct(
10+
protected VectorQueryServiceProvider $vectorQueryServiceProvider,
11+
) {
12+
}
13+
14+
/**
15+
* Run a query against the configured LLM to produce a text response.
16+
* @param VectorSearchResult[] $vectorResults
17+
* @throws Exception
18+
*/
19+
public function run(string $query, array $vectorResults): string
20+
{
21+
$queryService = $this->vectorQueryServiceProvider->get();
22+
23+
$matchesText = array_values(array_map(fn (VectorSearchResult $result) => $result->matchText, $vectorResults));
24+
return $queryService->query($query, $matchesText);
25+
}
26+
}

app/Search/QueryController.php renamed to app/Search/Queries/QueryController.php

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
<?php
22

3-
namespace BookStack\Search;
3+
namespace BookStack\Search\Queries;
44

55
use BookStack\Http\Controller;
6-
use BookStack\Search\Vectors\VectorSearchRunner;
6+
use BookStack\Search\SearchOptions;
7+
use BookStack\Search\SearchRunner;
78
use Illuminate\Http\Request;
89

910
class QueryController extends Controller
@@ -35,19 +36,13 @@ public function show(Request $request)
3536
/**
3637
* Perform a vector/LLM-based query search.
3738
*/
38-
public function run(Request $request, VectorSearchRunner $runner)
39+
public function run(Request $request, VectorSearchRunner $searchRunner, LlmQueryRunner $llmRunner)
3940
{
4041
// TODO - Validate if query system is active
4142
$query = $request->get('query', '');
4243

43-
if ($query) {
44-
$results = $runner->run($query);
45-
} else {
46-
$results = null;
47-
}
48-
49-
return view('search.query', [
50-
'results' => $results,
51-
]);
44+
$results = $query ? $searchRunner->run($query) : [];
45+
$llmResult = $llmRunner->run($query, $results);
46+
dd($results, $llmResult);
5247
}
5348
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace BookStack\Search\Queries;
6+
7+
use BookStack\Permissions\Models\JointPermission;
8+
use Illuminate\Database\Eloquent\Model;
9+
use Illuminate\Database\Eloquent\Relations\HasMany;
10+
11+
/**
12+
* @property string $entity_type
13+
* @property int $entity_id
14+
* @property string $text
15+
* @property string $embedding
16+
*/
17+
class SearchVector extends Model
18+
{
19+
public $timestamps = false;
20+
21+
public function jointPermissions(): HasMany
22+
{
23+
return $this->hasMany(JointPermission::class, 'entity_id', 'entity_id')
24+
->whereColumn('search_vectors.entity_type', '=', 'joint_permissions.entity_type');
25+
}
26+
}

app/Search/Vectors/Services/OpenAiVectorQueryService.php renamed to app/Search/Queries/Services/OpenAiVectorQueryService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace BookStack\Search\Vectors\Services;
3+
namespace BookStack\Search\Queries\Services;
44

55
use BookStack\Http\HttpRequestService;
66

app/Search/Vectors/Services/VectorQueryService.php renamed to app/Search/Queries/Services/VectorQueryService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace BookStack\Search\Vectors\Services;
3+
namespace BookStack\Search\Queries\Services;
44

55
interface VectorQueryService
66
{

app/Search/Vectors/StoreEntityVectorsJob.php renamed to app/Search/Queries/StoreEntityVectorsJob.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?php
22

3-
namespace BookStack\Search\Vectors;
3+
declare(strict_types=1);
4+
5+
namespace BookStack\Search\Queries;
46

57
use BookStack\Entities\Models\Entity;
68
use Illuminate\Contracts\Queue\ShouldQueue;

app/Search/Vectors/TextChunker.php renamed to app/Search/Queries/TextChunker.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?php
22

3-
namespace BookStack\Search\Vectors;
3+
declare(strict_types=1);
4+
5+
namespace BookStack\Search\Queries;
46

57
use InvalidArgumentException;
68

app/Search/Vectors/VectorQueryServiceProvider.php renamed to app/Search/Queries/VectorQueryServiceProvider.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<?php
22

3-
namespace BookStack\Search\Vectors;
3+
declare(strict_types=1);
4+
5+
namespace BookStack\Search\Queries;
46

57
use BookStack\Http\HttpRequestService;
6-
use BookStack\Search\Vectors\Services\OpenAiVectorQueryService;
7-
use BookStack\Search\Vectors\Services\VectorQueryService;
8+
use BookStack\Search\Queries\Services\OpenAiVectorQueryService;
9+
use BookStack\Search\Queries\Services\VectorQueryService;
810

911
class VectorQueryServiceProvider
1012
{

0 commit comments

Comments
 (0)