Vokturz commited on
Commit
0c10cf2
·
1 Parent(s): 852dc0d

Move results state to TextClassification component

Browse files
src/components/ModelLoader.tsx CHANGED
@@ -16,7 +16,6 @@ const ModelLoader = () => {
16
  activeWorker,
17
  setActiveWorker,
18
  pipeline,
19
- setResults,
20
  hasBeenLoaded,
21
  setHasBeenLoaded
22
  } = useModel()
@@ -74,12 +73,6 @@ const ModelLoader = () => {
74
  ) {
75
  setProgress(output.progress)
76
  }
77
- } else if (status === 'output') {
78
- setStatus('output')
79
- const result = e.data.output!
80
- setResults((prev: any[]) => [...prev, result])
81
-
82
- // console.log(result)
83
  } else if (status === 'error') {
84
  setStatus('error')
85
  console.error(e.data.output)
@@ -99,7 +92,6 @@ const ModelLoader = () => {
99
  setActiveWorker,
100
  setStatus,
101
  setProgress,
102
- setResults,
103
  hasBeenLoaded,
104
  setHasBeenLoaded
105
  ])
 
16
  activeWorker,
17
  setActiveWorker,
18
  pipeline,
 
19
  hasBeenLoaded,
20
  setHasBeenLoaded
21
  } = useModel()
 
73
  ) {
74
  setProgress(output.progress)
75
  }
 
 
 
 
 
 
76
  } else if (status === 'error') {
77
  setStatus('error')
78
  console.error(e.data.output)
 
92
  setActiveWorker,
93
  setStatus,
94
  setProgress,
 
95
  hasBeenLoaded,
96
  setHasBeenLoaded
97
  ])
src/components/TextClassification.tsx CHANGED
@@ -1,5 +1,5 @@
1
  import { useState, useCallback, useEffect } from 'react'
2
- import { TextClassificationWorkerInput } from '../types'
3
  import { useModel } from '../contexts/ModelContext'
4
 
5
  const PLACEHOLDER_TEXTS: string[] = [
@@ -18,12 +18,12 @@ const PLACEHOLDER_TEXTS: string[] = [
18
  function TextClassification() {
19
  const [text, setText] = useState<string>(PLACEHOLDER_TEXTS.join('\n'))
20
  const [numberExamples, setNumberExamples] = useState(PLACEHOLDER_TEXTS.length)
 
21
  const {
22
  activeWorker,
23
  status,
 
24
  modelInfo,
25
- results,
26
- setResults,
27
  hasBeenLoaded,
28
  selectedQuantization
29
  } = useModel()
@@ -56,6 +56,23 @@ function TextClassification() {
56
  activeWorker.postMessage(message)
57
  }, [text, modelInfo, activeWorker, selectedQuantization, setResults])
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  const busy: boolean = status !== 'ready'
60
 
61
  const handleClear = (): void => {
 
1
  import { useState, useCallback, useEffect } from 'react'
2
+ import { TextClassificationWorkerInput, WorkerMessage } from '../types'
3
  import { useModel } from '../contexts/ModelContext'
4
 
5
  const PLACEHOLDER_TEXTS: string[] = [
 
18
  function TextClassification() {
19
  const [text, setText] = useState<string>(PLACEHOLDER_TEXTS.join('\n'))
20
  const [numberExamples, setNumberExamples] = useState(PLACEHOLDER_TEXTS.length)
21
+ const [results, setResults] = useState<any[]>([])
22
  const {
23
  activeWorker,
24
  status,
25
+ setStatus,
26
  modelInfo,
 
 
27
  hasBeenLoaded,
28
  selectedQuantization
29
  } = useModel()
 
56
  activeWorker.postMessage(message)
57
  }, [text, modelInfo, activeWorker, selectedQuantization, setResults])
58
 
59
+ // Handle worker messages
60
+ useEffect(() => {
61
+ if (!activeWorker) return
62
+
63
+ const onMessageReceived = (e: MessageEvent<WorkerMessage>) => {
64
+ const status = e.data.status
65
+ if (status === 'output') {
66
+ setStatus('output')
67
+ const result = e.data.output!
68
+ setResults((prev: any[]) => [...prev, result])
69
+ }
70
+ }
71
+
72
+ activeWorker.addEventListener('message', onMessageReceived)
73
+ return () => activeWorker.removeEventListener('message', onMessageReceived)
74
+ }, [activeWorker, setStatus])
75
+
76
  const busy: boolean = status !== 'ready'
77
 
78
  const handleClear = (): void => {
src/contexts/ModelContext.tsx CHANGED
@@ -1,9 +1,4 @@
1
- import React, {
2
- createContext,
3
- useContext,
4
- useEffect,
5
- useState
6
- } from 'react'
7
  import {
8
  ModelInfo,
9
  ModelInfoResponse,
@@ -28,8 +23,6 @@ interface ModelContextType {
28
  setActiveWorker: (worker: Worker | null) => void
29
  isFetching: boolean
30
  setIsFetching: (isFetching: boolean) => void
31
- results: any[]
32
- setResults: React.Dispatch<React.SetStateAction<any[]>>
33
  hasBeenLoaded: boolean
34
  setHasBeenLoaded: (hasBeenLoaded: boolean) => void
35
  }
@@ -48,10 +41,8 @@ export function ModelProvider({ children }: { children: React.ReactNode }) {
48
  useState<QuantizationType>('int8')
49
  const [activeWorker, setActiveWorker] = useState<Worker | null>(null)
50
  const [isFetching, setIsFetching] = useState(false)
51
- const [results, setResults] = useState<any[]>([])
52
  const [hasBeenLoaded, setHasBeenLoaded] = useState(false)
53
 
54
-
55
  // set progress to 0 when model is changed
56
  useEffect(() => {
57
  setProgress(0)
@@ -76,8 +67,6 @@ export function ModelProvider({ children }: { children: React.ReactNode }) {
76
  setActiveWorker,
77
  isFetching,
78
  setIsFetching,
79
- results,
80
- setResults,
81
  hasBeenLoaded,
82
  setHasBeenLoaded
83
  }}
 
1
+ import React, { createContext, useContext, useEffect, useState } from 'react'
 
 
 
 
 
2
  import {
3
  ModelInfo,
4
  ModelInfoResponse,
 
23
  setActiveWorker: (worker: Worker | null) => void
24
  isFetching: boolean
25
  setIsFetching: (isFetching: boolean) => void
 
 
26
  hasBeenLoaded: boolean
27
  setHasBeenLoaded: (hasBeenLoaded: boolean) => void
28
  }
 
41
  useState<QuantizationType>('int8')
42
  const [activeWorker, setActiveWorker] = useState<Worker | null>(null)
43
  const [isFetching, setIsFetching] = useState(false)
 
44
  const [hasBeenLoaded, setHasBeenLoaded] = useState(false)
45
 
 
46
  // set progress to 0 when model is changed
47
  useEffect(() => {
48
  setProgress(0)
 
67
  setActiveWorker,
68
  isFetching,
69
  setIsFetching,
 
 
70
  hasBeenLoaded,
71
  setHasBeenLoaded
72
  }}