Skip to content

Commit 75af78e

Browse files
author
Alexander Cherednikov
committed
FIX phpstan
1 parent c4ff907 commit 75af78e

21 files changed

Lines changed: 129 additions & 51 deletions

phpstan.neon

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,3 @@ parameters:
44
- src
55
bootstrapFiles:
66
- vendor/autoload.php
7-
ignoreErrors:
8-
# Ignore Symfony framework internals
9-
- '#Call to an undefined method Symfony\\Component\\DependencyInjection\\ContainerInterface::\w+\(\)#'

src/Command/ProductsChatCommand.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ private function handleSearchQuery(string $query, SymfonyStyle $io): void
7575
}
7676
}
7777

78+
/**
79+
* @param array<int, array<string, mixed>> $results
80+
*/
7881
private function displayChatResults(array $results, string $aiResponse, SymfonyStyle $io): void
7982
{
8083
$io->section('Рекомендации');

src/Command/ProductsSearchCommand.php

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,22 @@ private function initializeServices(): void
6868
$this->embedder = pipeline(Task::Embeddings, 'onnx-community/Qwen3-Embedding-0.6B-ONNX');
6969
}
7070

71+
/**
72+
* @return array<int, array<string, mixed>>
73+
*/
7174
private function searchProducts(string $query): array
7275
{
7376
$embedding = ($this->embedder)($query, pooling: 'mean', normalize: true);
74-
$searchVector = new VectorStruct($embedding[0], 'default');
77+
78+
// Handle different embedding result types
79+
if (is_array($embedding)) {
80+
$vector = $embedding[0];
81+
} else {
82+
// For Tensor objects, convert to array and take first element
83+
$vector = $embedding instanceof \Codewithkyrian\Transformers\Tensor\Tensor ? $embedding[0] : [];
84+
}
85+
86+
$searchVector = new VectorStruct($vector, 'default');
7587
$searchRequest = new SearchRequest($searchVector);
7688
$searchRequest->setLimit(5)->setWithPayload(true)->setScoreThreshold(0.5);
7789

@@ -80,6 +92,9 @@ private function searchProducts(string $query): array
8092
return $response['result'] ?? [];
8193
}
8294

95+
/**
96+
* @param array<int, array<string, mixed>> $results
97+
*/
8398
private function displayResults(array $results, string $query, SymfonyStyle $io): void
8499
{
85100
if (empty($results)) {

src/Command/ProductsVectorizeCommand.php

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ private function loadProductData(): \Generator
7575
}
7676

7777
$json = file_get_contents(self::DATA_FILE);
78+
if (false === $json) {
79+
throw new \RuntimeException('Failed to read products data file');
80+
}
81+
7882
$products = json_decode($json, true);
7983

8084
if (!$products) {
@@ -117,6 +121,9 @@ private function vectorizeAndStore(\Generator $products): void
117121
}
118122
}
119123

124+
/**
125+
* @param array<int, array<string, mixed>> $batch
126+
*/
120127
private function processBatch(array $batch): void
121128
{
122129
$pointsStruct = new PointsStruct();
@@ -143,10 +150,18 @@ private function processBatch(array $batch): void
143150
'description' => $product['description'],
144151
];
145152

153+
// Handle different embedding result types
154+
if (is_array($embedding)) {
155+
$vector = $embedding[0];
156+
} else {
157+
// For Tensor objects, convert to array and take first element
158+
$vector = $embedding instanceof \Codewithkyrian\Transformers\Tensor\Tensor ? $embedding[0] : [];
159+
}
160+
146161
$pointsStruct->addPoint(
147162
new PointStruct(
148163
$product['id'],
149-
new VectorStruct($embedding[0], 'default'),
164+
new VectorStruct($vector, 'default'),
150165
$payload
151166
)
152167
);

src/Contract/ContextServiceInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function getSearchContext(string $sessionId): ?string;
3333
/**
3434
* Extract category from search results.
3535
*
36-
* @param array $searchResults Array of search results with payload
36+
* @param array<int, array<string, mixed>> $searchResults Array of search results with payload
3737
*
3838
* @return string|null Extracted category or null
3939
*/

src/Contract/DocumentRetrieverInterface.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ interface DocumentRetrieverInterface
2020
* @param int $limit Maximum number of documents to retrieve
2121
* @param float $threshold Minimum relevance score threshold
2222
*
23-
* @return array Array of retrieved documents with scores and metadata
23+
* @return array<int, array<string, mixed>> Array of retrieved documents with scores and metadata
2424
*
2525
* @throws \App\Exception\RAGException If retrieval fails
2626
*/
@@ -34,7 +34,7 @@ public function retrieveDocuments(
3434
/**
3535
* Get collection statistics.
3636
*
37-
* @return array Collection statistics including vector count and status
37+
* @return array<string, mixed> Collection statistics including vector count and status
3838
*/
3939
public function getCollectionStats(): array;
4040
}

src/Contract/EmbeddingServiceInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ interface EmbeddingServiceInterface
1717
*
1818
* @param string $text Input text to convert to vector
1919
*
20-
* @return array Numerical vector representation of the text
20+
* @return array<int, float> Numerical vector representation of the text
2121
*
2222
* @throws \App\Exception\RAGException If embedding generation fails
2323
*/

src/Contract/LoggerInterface.php

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,64 +15,64 @@ interface LoggerInterface
1515
/**
1616
* Log emergency message.
1717
*
18-
* @param string $message Log message
19-
* @param array $context Additional context data
18+
* @param string $message Log message
19+
* @param array<string, mixed> $context Additional context data
2020
*/
2121
public function emergency(string $message, array $context = []): void;
2222

2323
/**
2424
* Log alert message.
2525
*
26-
* @param string $message Log message
27-
* @param array $context Additional context data
26+
* @param string $message Log message
27+
* @param array<string, mixed> $context Additional context data
2828
*/
2929
public function alert(string $message, array $context = []): void;
3030

3131
/**
3232
* Log critical error.
3333
*
34-
* @param string $message Log message
35-
* @param array $context Additional context data
34+
* @param string $message Log message
35+
* @param array<string, mixed> $context Additional context data
3636
*/
3737
public function critical(string $message, array $context = []): void;
3838

3939
/**
4040
* Log error message.
4141
*
42-
* @param string $message Log message
43-
* @param array $context Additional context data
42+
* @param string $message Log message
43+
* @param array<string, mixed> $context Additional context data
4444
*/
4545
public function error(string $message, array $context = []): void;
4646

4747
/**
4848
* Log warning message.
4949
*
50-
* @param string $message Log message
51-
* @param array $context Additional context data
50+
* @param string $message Log message
51+
* @param array<string, mixed> $context Additional context data
5252
*/
5353
public function warning(string $message, array $context = []): void;
5454

5555
/**
5656
* Log notice message.
5757
*
58-
* @param string $message Log message
59-
* @param array $context Additional context data
58+
* @param string $message Log message
59+
* @param array<string, mixed> $context Additional context data
6060
*/
6161
public function notice(string $message, array $context = []): void;
6262

6363
/**
6464
* Log informational message.
6565
*
66-
* @param string $message Log message
67-
* @param array $context Additional context data
66+
* @param string $message Log message
67+
* @param array<string, mixed> $context Additional context data
6868
*/
6969
public function info(string $message, array $context = []): void;
7070

7171
/**
7272
* Log debug message.
7373
*
74-
* @param string $message Log message
75-
* @param array $context Additional context data
74+
* @param string $message Log message
75+
* @param array<string, mixed> $context Additional context data
7676
*/
7777
public function debug(string $message, array $context = []): void;
7878
}

src/Contract/ResponseGeneratorInterface.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ interface ResponseGeneratorInterface
1515
/**
1616
* Generate AI response based on retrieved documents.
1717
*
18-
* @param array $documents Retrieved documents from vector database
19-
* @param string $originalQuery Original user query
18+
* @param array<int, array<string, mixed>> $documents Retrieved documents from vector database
19+
* @param string $originalQuery Original user query
2020
*
2121
* @return string Generated natural language response
2222
*

src/DTO/ImprovedRAGSearchResult.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
final readonly class ImprovedRAGSearchResult
1616
{
1717
/**
18-
* @param SearchResult[] $results
18+
* @param array<int, SearchResult> $results
1919
*/
2020
public function __construct(
2121
public SearchQuery $originalQuery,
@@ -83,7 +83,7 @@ public function getAverageRelevanceScore(): ?float
8383
/**
8484
* Get results with high relevance only.
8585
*
86-
* @return SearchResult[] High relevance results
86+
* @return array<int, SearchResult> High relevance results
8787
*/
8888
public function getHighRelevanceResults(): array
8989
{
@@ -96,7 +96,7 @@ public function getHighRelevanceResults(): array
9696
/**
9797
* Get unique categories from results.
9898
*
99-
* @return string[] Array of unique categories
99+
* @return array<int, string> Array of unique categories
100100
*/
101101
public function getCategories(): array
102102
{
@@ -111,7 +111,7 @@ public function getCategories(): array
111111
/**
112112
* Get unique brands from results.
113113
*
114-
* @return string[] Array of unique brands
114+
* @return array<int, string> Array of unique brands
115115
*/
116116
public function getBrands(): array
117117
{
@@ -148,7 +148,7 @@ public function getPriceRange(): ?array
148148
/**
149149
* Convert to array for API responses.
150150
*
151-
* @return array Complete array representation
151+
* @return array<string, mixed> Complete array representation
152152
*/
153153
public function toArray(): array
154154
{

0 commit comments

Comments
 (0)