- Created `quick-replies.blade.php` for managing quick replies. - Added `settings.blade.php` for admin settings management. - Implemented `ticket-show.blade.php` to display ticket details. - Introduced `timeline-card.blade.php` component for displaying timeline information. Enhance quick reply management functionality - Developed `quick-reply-manager.blade.php` for creating and editing quick replies. - Integrated Livewire for dynamic interaction and validation. Implement settings page for AI configuration - Created `settings-page.blade.php` for managing AI settings, including prompts and provider instances. - Added functionality for managing models and embeddings. Add ticket show functionality with real-time updates - Implemented ticket details view with processing status and tool call logs. - Added support for displaying article suggestions and error messages. Create unit tests for AI classifier and domain info tool - Added `AIClassifierServiceTest.php` to validate AI classifier functionality. - Implemented `DomainInfoToolTest.php` for domain parameter validation. - Created `OxxaClientTest.php` to test API interactions and password hashing.
40 lines
1014 B
PHP
40 lines
1014 B
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
class ArticleChunkerService
|
|
{
|
|
/** @return array<int, string> */
|
|
public function chunk(string $text, int $targetTokens = 100, int $overlapTokens = 20): array
|
|
{
|
|
$text = trim(preg_replace('/\s+/', ' ', $text) ?? $text);
|
|
if ($text === '') {
|
|
return [];
|
|
}
|
|
|
|
// Approximate tokenization by words for deterministic local chunking.
|
|
$words = preg_split('/\s+/', $text) ?: [];
|
|
$count = count($words);
|
|
if ($count === 0) {
|
|
return [];
|
|
}
|
|
|
|
$step = max(1, $targetTokens - $overlapTokens);
|
|
$chunks = [];
|
|
|
|
for ($start = 0; $start < $count; $start += $step) {
|
|
$slice = array_slice($words, $start, $targetTokens);
|
|
if ($slice === []) {
|
|
continue;
|
|
}
|
|
$chunks[] = implode(' ', $slice);
|
|
|
|
if (($start + $targetTokens) >= $count) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $chunks;
|
|
}
|
|
}
|