feat: Implement LLM streaming support and enhance event handling in review process
This commit is contained in:
@@ -32,6 +32,7 @@ export const ReviewStream: React.FC<ReviewStreamProps> = ({ reviewId }) => {
|
||||
const [currentStep, setCurrentStep] = useState<string>('');
|
||||
const [isConnected, setIsConnected] = useState(false);
|
||||
const [llmMessages, setLlmMessages] = useState<string[]>([]);
|
||||
const [llmStreamingText, setLlmStreamingText] = useState<string>('');
|
||||
|
||||
useEffect(() => {
|
||||
console.log('🔌 Connecting to WebSocket:', WS_URL);
|
||||
@@ -126,6 +127,12 @@ export const ReviewStream: React.FC<ReviewStreamProps> = ({ reviewId }) => {
|
||||
setCurrentStep(step || '');
|
||||
}
|
||||
|
||||
// Handle LLM streaming chunks
|
||||
if (data.type === 'llm_chunk' || data.data?.type === 'llm_chunk') {
|
||||
const chunk = data.data?.chunk || data.chunk || '';
|
||||
setLlmStreamingText((prev) => prev + chunk);
|
||||
}
|
||||
|
||||
// Collect LLM messages
|
||||
if (data.type === 'llm_message' || data.data?.type === 'llm_message') {
|
||||
const message = data.data?.message || data.message;
|
||||
@@ -136,6 +143,8 @@ export const ReviewStream: React.FC<ReviewStreamProps> = ({ reviewId }) => {
|
||||
// Handle special events
|
||||
if (data.type === 'review_started') {
|
||||
console.log('🎬 Review started:', data.data?.message);
|
||||
// Сбрасываем streaming текст при начале нового review
|
||||
setLlmStreamingText('');
|
||||
}
|
||||
|
||||
if (data.type === 'review_completed') {
|
||||
@@ -319,6 +328,21 @@ export const ReviewStream: React.FC<ReviewStreamProps> = ({ reviewId }) => {
|
||||
|
||||
{renderStepProgress()}
|
||||
|
||||
{/* LLM Streaming текст */}
|
||||
{llmStreamingText && (
|
||||
<div className="mt-6">
|
||||
<h3 className="text-lg font-semibold text-dark-text-primary mb-3 flex items-center gap-2">
|
||||
<span className="animate-pulse">🤖</span> AI генерирует ответ...
|
||||
</h3>
|
||||
<div className="bg-dark-card border border-dark-border rounded-lg p-4">
|
||||
<pre className="text-sm text-dark-text-secondary font-mono whitespace-pre-wrap break-words max-h-96 overflow-y-auto">
|
||||
{llmStreamingText}
|
||||
<span className="animate-pulse">▋</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="mt-6">
|
||||
<h3 className="text-lg font-semibold text-dark-text-primary mb-3">
|
||||
📝 События
|
||||
|
||||
Reference in New Issue
Block a user