* fix: update new api from cortex to support 0.5.0 Signed-off-by: James <namnh0122@gmail.com> * fix stop button for streaming Signed-off-by: James <namnh0122@gmail.com> * fix stop inference for nonstreaming Signed-off-by: James <namnh0122@gmail.com> * chore: remove umami prevent tracking call to vercel Signed-off-by: James <namnh0122@gmail.com> * add warning modal when running more than 2 model concurrently Signed-off-by: James <namnh0122@gmail.com> * fix: skip summarize if abort Signed-off-by: James <namnh0122@gmail.com> * 0.5.0-3 * add inference error popup Signed-off-by: James <namnh0122@gmail.com> * add back import local model Signed-off-by: James <namnh0122@gmail.com> * fix: max token issue (#3225) Signed-off-by: James <namnh0122@gmail.com> * format status Signed-off-by: James <namnh0122@gmail.com> * fix migration missing instructions Signed-off-by: James <namnh0122@gmail.com> * fix: wait for cortex process overlay should be on top (#3224) * fix: wait for cortex process overlay should be on top * chore: update cortex.js * Cortex 0.5.0-5 * add import model to my model screen Signed-off-by: James <namnh0122@gmail.com> * fix: should migrate symlink models (#3226) * fix import on windows (#3229) Signed-off-by: James <namnh0122@gmail.com> * fix yarn lint Signed-off-by: James <namnh0122@gmail.com> * fix: clean up port before start jan (#3232) Signed-off-by: James <namnh0122@gmail.com> --------- Signed-off-by: James <namnh0122@gmail.com> Co-authored-by: Van Pham <64197333+Van-QA@users.noreply.github.com> Co-authored-by: Louis <louis@jan.ai>
85 lines
2.3 KiB
TypeScript
85 lines
2.3 KiB
TypeScript
import { useCallback } from 'react'
|
|
|
|
import { Model } from '@janhq/core'
|
|
import { Button, Badge } from '@janhq/joi'
|
|
|
|
import { useAtomValue } from 'jotai'
|
|
|
|
import useModelStop from '@/hooks/useModelStop'
|
|
|
|
import {
|
|
activeModelsAtom,
|
|
downloadedModelsAtom,
|
|
} from '@/helpers/atoms/Model.atom'
|
|
|
|
const Column = ['Name', 'Engine', '']
|
|
|
|
const TableActiveModel: React.FC = () => {
|
|
const stopModelMutation = useModelStop()
|
|
const activeModels = useAtomValue(activeModelsAtom)
|
|
const downloadedModels = useAtomValue(downloadedModelsAtom)
|
|
|
|
const models: Model[] = []
|
|
activeModels.forEach((m) => {
|
|
const model = downloadedModels.find((dm) => dm.model === m.model)
|
|
if (model) {
|
|
models.push(model)
|
|
}
|
|
})
|
|
|
|
const onStopModelClick = useCallback(
|
|
(modelId: string) => {
|
|
stopModelMutation.mutate(modelId)
|
|
},
|
|
[stopModelMutation]
|
|
)
|
|
|
|
return (
|
|
<div className="m-4 mr-0 w-1/2">
|
|
<div className="overflow-hidden rounded-lg border border-[hsla(var(--app-border))]">
|
|
<table className="w-full px-8">
|
|
<thead className="w-full border-b border-[hsla(var(--app-border))]">
|
|
<tr>
|
|
{Column.map((col, i) => (
|
|
<th
|
|
key={i}
|
|
className="px-4 py-2 text-left font-normal last:text-center"
|
|
>
|
|
{col}
|
|
</th>
|
|
))}
|
|
</tr>
|
|
</thead>
|
|
{models.map((model) => (
|
|
<tbody key={model.model}>
|
|
<tr>
|
|
<td
|
|
className="max-w-[200px] px-4 py-2 font-bold"
|
|
title={model.name}
|
|
>
|
|
<p className="line-clamp-2">{model.model}</p>
|
|
</td>
|
|
<td className="px-4 py-2">
|
|
<Badge theme="secondary">
|
|
{!model.engine ? '-' : `${model.engine}`}
|
|
</Badge>
|
|
</td>
|
|
<td className="px-4 py-2 text-center">
|
|
<Button
|
|
theme="destructive"
|
|
onClick={() => onStopModelClick(model.model)}
|
|
>
|
|
Stop
|
|
</Button>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
))}
|
|
</table>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default TableActiveModel
|