Skip to content
Snippets Groups Projects
Unverified Commit 490cf6b2 authored by Tony Salomone's avatar Tony Salomone Committed by GitHub
Browse files

Merge pull request #78 from transformerlab/revert-76-main

Revert "update deps + fix some TS"
parents f42bf4fc a21fe088
Branches
Tags
No related merge requests found
Showing
with 355 additions and 463 deletions
......@@ -5,7 +5,7 @@
"requires": true,
"packages": {
"": {
"version": "0.3.3",
"version": "0.2.14",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
......@@ -61,7 +61,6 @@
"@teamsupercell/typings-for-css-modules-loader": "^2.5.2",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^14.0.0",
"@types/electron": "^1.6.10",
"@types/jest": "^29.5.2",
"@types/node": "20.2.5",
"@types/react": "^18.2.8",
......@@ -4541,16 +4540,6 @@
"@types/ms": "*"
}
},
"node_modules/@types/electron": {
"version": "1.6.10",
"resolved": "https://registry.npmjs.org/@types/electron/-/electron-1.6.10.tgz",
"integrity": "sha512-MOCVyzIwkBEloreoCVrTV108vSf8fFIJPsGruLCoAoBZdxtnJUqKA4lNonf/2u1twSjAspPEfmEheC+TLm/cMw==",
"deprecated": "This is a stub types definition for electron (https://github.com/electron/electron). electron provides its own type definitions, so you don't need @types/electron installed!",
"dev": true,
"dependencies": {
"electron": "*"
}
},
"node_modules/@types/eslint": {
"version": "8.44.3",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz",
......@@ -6659,13 +6648,13 @@
}
},
"node_modules/body-parser": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
"integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"dev": true,
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
......@@ -6673,7 +6662,7 @@
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
"raw-body": "2.5.2",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
},
......@@ -7818,9 +7807,9 @@
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
},
"node_modules/cookie": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
"dev": true,
"engines": {
"node": ">= 0.6"
......@@ -9135,9 +9124,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/ejs": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
"integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
"integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
"dev": true,
"dependencies": {
"jake": "^10.8.5"
......@@ -10882,17 +10871,17 @@
"dev": true
},
"node_modules/express": {
"version": "4.19.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
"integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"dev": true,
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.2",
"body-parser": "1.20.1",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.6.0",
"cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
......@@ -17865,9 +17854,9 @@
}
},
"node_modules/raw-body": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"dev": true,
"dependencies": {
"bytes": "3.1.2",
......@@ -19897,9 +19886,9 @@
}
},
"node_modules/tar": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
"integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
"integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
"dev": true,
"dependencies": {
"chownr": "^2.0.0",
......@@ -21380,9 +21369,9 @@
}
},
"node_modules/webpack-dev-middleware": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
"integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz",
"integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==",
"dev": true,
"dependencies": {
"colorette": "^2.0.10",
......@@ -22026,4 +22015,4 @@
}
}
}
}
}
\ No newline at end of file
......@@ -28,23 +28,18 @@
"version": "0.3.3",
"main": "./src/main/main.ts",
"scripts": {
" ----------------- BUILD -----------------": "",
"build": "concurrently \"npm run build:main\" \"npm run build:renderer\"",
"build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts",
"build:renderer": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts",
"postinstall": "ts-node .erb/scripts/check-native-dep.js && electron-builder install-app-deps && cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.ts",
"lint": "cross-env NODE_ENV=development eslint . --ext .js,.jsx,.ts,.tsx",
"package": "ts-node ./.erb/scripts/clean.js dist && npm run build && electron-builder build --publish never",
"rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app",
" ----------------- PROD -----------------": "",
"start": "ts-node ./.erb/scripts/check-port-in-use.js && npm run start:renderer",
"start:main": "cross-env NODE_ENV=development electronmon -r ts-node/register/transpile-only .",
"start:preload": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.preload.dev.ts",
"start:renderer": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack serve --config ./.erb/configs/webpack.config.renderer.dev.ts",
" ----------------- TEST -----------------": "",
"test": "jest",
" ----------------- UTILS -----------------": "",
"lint": "cross-env NODE_ENV=development eslint . --ext .js,.jsx,.ts,.tsx",
"typecheck": "tsc --noEmit"
"test": "jest"
},
"browserslist": [],
"prettier": {
......@@ -146,7 +141,6 @@
"@teamsupercell/typings-for-css-modules-loader": "^2.5.2",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^14.0.0",
"@types/electron": "^1.6.10",
"@types/jest": "^29.5.2",
"@types/node": "20.2.5",
"@types/react": "^18.2.8",
......@@ -274,7 +268,7 @@
}
},
"devEngines": {
"node": ">=20.x",
"node": ">=14.x",
"npm": ">=7.x"
},
"electronmon": {
......@@ -284,4 +278,4 @@
],
"logLevel": "quiet"
}
}
}
\ No newline at end of file
......@@ -6,7 +6,7 @@
"packages": {
"": {
"name": "transformerlab",
"version": "0.3.3",
"version": "0.2.14",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
......@@ -147,4 +147,4 @@
"integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
}
}
}
}
\ No newline at end of file
......@@ -81,13 +81,11 @@ contextBridge.exposeInMainWorld('storage', {
});
contextBridge.exposeInMainWorld('sshClient', {
connect: (data: string) => ipcRenderer.invoke('ssh:connect', data),
data: (data: string) => ipcRenderer.send('ssh:data', data),
connect: (data) => ipcRenderer.invoke('ssh:connect', data),
data: (data) => ipcRenderer.send('ssh:data', data),
onData: (data: any) => ipcRenderer.on('ssh:data', data),
onSSHConnected: (callback: {
(event: IpcRendererEvent, data: string): void;
}) => ipcRenderer.on('ssh:connected', callback),
onData: (data) => ipcRenderer.on('ssh:data', data),
onSSHConnected: (callback) => ipcRenderer.on('ssh:connected', callback),
removeAllListeners: () => {
ipcRenderer.removeAllListeners('ssh:data');
......@@ -96,5 +94,5 @@ contextBridge.exposeInMainWorld('sshClient', {
});
contextBridge.exposeInMainWorld('autoUpdater', {
onMessage: (data: any) => ipcRenderer.on('autoUpdater', data),
onMessage: (data) => ipcRenderer.on('autoUpdater', data),
});
......@@ -8,7 +8,7 @@ const HOME_DIR = app.getPath('home');
const default_private_key = '';
const default_private_key_location = HOME_DIR + '/.ssh/id_rsa';
let mainWindow = null;
var mainWindow = null;
function sendToRenderer(channel, data) {
if (mainWindow === null) {
......@@ -119,6 +119,6 @@ ipcMain.handle('ssh:connect', (event, key) => {
export default function setupSSHClient(browserWindow) {
console.log('setting up ssh client');
// console.log(browserWindow);
console.log(browserWindow);
mainWindow = browserWindow;
}
/* eslint import/prefer-default-export: off */
import { URL } from 'url';
import path from 'path';
import { ExecException } from 'child_process';
const fs = require('fs');
const os = require('os');
const { spawn, exec, ChildProcess } = require('child_process');
......@@ -133,21 +132,21 @@ export async function startLocalServer() {
console.log('Local server started with pid', localServer.pid);
return new Promise((resolve) => {
let err_msg: string;
let err_msg;
// if there was an error spawning then stderr will be null
if (localServer.stderr) {
localServer.stderr.on('data', (data: string) => {
localServer.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
}
localServer.on('error', (err: string) => {
console.log(`child process failed: ${err}`);
err_msg = err;
localServer.on('error', (error_msg) => {
console.log(`child process failed: ${error_msg}`);
err_msg = error_msg;
});
localServer.on('close', (code: number) => {
localServer.on('close', (code) => {
console.log(`child process exited with code ${code}`);
if (code === 0) {
......@@ -171,7 +170,7 @@ export function killLocalServer() {
`Killing local server with pid ${localServer.pid} and all it children`
);
var kill = require('tree-kill');
kill(localServer.pid, 'SIGTERM', function (err: string) {
kill(localServer.pid, 'SIGTERM', function (err) {
console.log('Finished killing local server');
console.log(err);
resolve(err);
......@@ -202,10 +201,10 @@ export async function installLocalServer() {
? {}
: { shell: '/bin/bash', cwd: root_dir };
try {
exec(
const child = exec(
installScriptCommand,
options,
(error: ExecException | null, stdout: string, stderr: string) => {
(error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
......@@ -236,7 +235,7 @@ export async function checkDependencies() {
let response = {
status: '',
message: '',
data: {},
data: [],
};
// check if we've done an install/update of dependencies with this build
......@@ -277,7 +276,7 @@ export async function checkDependencies() {
return response;
}
const pipListNames = pipList.map((x: { name: string }) => x.name);
const pipListNames = pipList.map((x) => x.name);
const keyDependencies = [
'fastapi',
'pydantic',
......@@ -300,9 +299,9 @@ export async function checkDependencies() {
response.data = missingDependencies;
console.log('missingDependencies', missingDependencies);
if (missingDependencies.length > 0) {
if (missingDependencies.legnth > 0) {
response.status = 'error';
const missingList = missingDependencies.join(', ');
const missingList = missingDependencies.data?.join(', ');
response.message = `Missing dependencies including: ${missingList}...`;
} else {
response.status = 'success';
......@@ -320,7 +319,7 @@ export async function checkIfCondaEnvironmentExists() {
let response = {
status: '',
message: '',
data: {},
data: [],
};
console.log(JSON.stringify({ error, stdout, stderr }));
......@@ -353,29 +352,18 @@ export async function checkIfCondaEnvironmentExists() {
}
}
interface ExecError extends Error {
code?: number; // Exit code of the shell command if the process exited on its own.
stdout?: string; // Standard output from the command.
stderr?: string; // Standard error output from the command.
}
/**
*
* @param argument parameter to pass to install.sh
* @returns the stdout of the process or false on failure.
*/
export async function executeInstallStep(argument: string): Promise<{
error: ExecException | null;
stdout: string;
stderr: string;
}> {
export async function executeInstallStep(argument: string) {
const server_dir = await getTransformerLabCodeDir();
if (!fs.existsSync(server_dir)) {
return {
error: new Error('TransformerLab directory has not been setup.'),
stdout: 'TransformerLab directory has not been setup.',
stderr: 'TransformerLab directory has not been setup.',
};
console.log(
'Install step failed. TransformerLab directory has not been setup.'
);
return false;
}
const installScriptFilename = 'install.sh';
......@@ -395,19 +383,14 @@ export async function executeInstallStep(argument: string): Promise<{
try {
({ error, stdout, stderr } = await awaitExec(exec_cmd, options));
} catch (err) {
console.log('Failed to execute install step', err);
console.log(JSON.stringify(err));
if (err instanceof Error) {
const execError = err as ExecError;
return {
error: new Error(String(execError.code)),
stdout: execError.stdout?.toString() ?? '',
stderr: execError.stderr?.toString() ?? '',
};
}
return {
error: err?.code,
stdout: err?.stdout?.toString(),
stderr: err?.stderr?.toString(),
};
}
if (stdout) console.log(`${installScriptFilename} stdout:`, stdout);
if (stderr) console.error(`${installScriptFilename} stderr:`, stderr);
return { error, stdout, stderr };
......
......@@ -18,7 +18,7 @@ import XtermJSDrawer from './components/Connect/XtermJS';
// import OutputTerminal from './components/OutputTerminal';
// import AutoUpdateModal from './components/AutoUpdateModal';
const fetcher = (url: string) => fetch(url).then((res) => res.json());
const fetcher = (url) => fetch(url).then((res) => res.json());
export default function App() {
const [experimentId, setExperimentId] = useState('');
......
import React from 'react';
import { Modal, ModalClose, Sheet, Typography } from '@mui/joy';
window.autoUpdater.onMessage((message: Node) => {
// console.log('autoupdate message', message);
const container = document.getElementById('messages') as HTMLDivElement;
// const m = document.createElement('div');
// m.innerHTML = text;
import { Modal, ModalClose, Sheet, Typography } from '@mui/joy';
window.autoUpdater.onMessage((message) => {
console.log('autoupdate message', message);
var container = document.getElementById('messages');
var m = document.createElement('div');
m.innerHTML = text;
container?.appendChild(message);
});
export default function AutoUpdateModal({}) {
const [open, setOpen] = React.useState<boolean>(true);
......
......@@ -24,25 +24,11 @@ import { formatBytes } from 'renderer/lib/utils';
import { useServerStats } from 'renderer/lib/transformerlab-api-sdk';
function getSystemProperties() {
const information = document.getElementById('info') as HTMLPreElement;
const information = document.getElementById('info');
information.innerText = `This app is using Chrome (v${window.platform.chrome()}), Node.js (v${window.platform.node()}), and Electron (v${window.platform.electron()})`;
}
interface ComputerCardProps {
title: string;
description?: string;
chip?: string;
icon: React.ReactNode;
children: React.ReactNode;
}
function ComputerCard({
children,
title,
description = '',
chip = '',
icon,
}: ComputerCardProps) {
function ComputerCard({ children, title, description = '', chip = '', icon }) {
return (
<Card variant="outlined">
<CardContent>
......@@ -113,7 +99,7 @@ export default function Computer() {
title="GPU Specs"
image={undefined}
>
{server.gpu?.map((g: Record<string, any>) => {
{server.gpu?.map((g) => {
return (
<>
🔥 {g.name}
......
This diff is collapsed.
export * from './localConnectionContext'
import { createContext, useContext, useState } from 'react';
interface LocalConnectionContext {
children?: React.ReactNode;
activeStep: number;
setActiveStep: React.Dispatch<React.SetStateAction<number>>;
}
const LocalConnectionContext = createContext<LocalConnectionContext>({
activeStep: 0,
setActiveStep: (_val) => {},
});
const LocalConnectionProvider: React.FC<{
children: React.ReactNode;
}> = ({ children }) => {
const [activeStep, setActiveStep] = useState<number>(0);
return (
<LocalConnectionContext.Provider value={{ activeStep, setActiveStep }}>
{children}
</LocalConnectionContext.Provider>
);
};
const useLocalConnectionContext = () => {
const context = useContext(LocalConnectionContext);
if (!context) {
throw new Error(
'useLocalConnectionContext must be used within a LocalConnectionProvider'
);
}
return context;
};
export { LocalConnectionProvider, useLocalConnectionContext };
export type Message = {
message: string;
data: any
} | null;
export * from './isStep'
export * from './setIntervalXTimes'
export const Steps = [
'CHECK_IF_INSTALLED',
'CHECK_VERSION',
'CHECK_IF_CONDA_INSTALLED',
'CHECK_IF_CONDA_ENVIRONMENT_EXISTS',
'CHECK_IF_PYTHON_DEPENDENCIES_INSTALLED',
'CHECK_IF_SERVER_RUNNING_ON_PORT_8000',
'CHECK_FOR_IMPORTANT_PLUGINS',
] as const;
export type Step = (typeof Steps)[number];
export function isStep(value: any): value is Step {
return Steps.includes(value as Step);
}
// Runs a callback every delay milliseconds, up to repetitions times.
// If the callback returns true, the interval is cleared.
// If the callback returns false, and the interval has run repetitions times, the notSuccessful callback is run.
export function setIntervalXTimes(
callback: () => any,
notSuccessful: () => void,
delay: number,
repetitions: number
) {
let x = 0;
const intervalID = window.setInterval(async function () {
console.log(`trying ${x} times`);
const response = await callback();
if (response) {
window.clearInterval(intervalID);
} else if (++x === repetitions) {
notSuccessful();
window.clearInterval(intervalID);
}
}, delay);
return intervalID;
}
......@@ -14,16 +14,14 @@ import * as chatAPI from 'renderer/lib/transformerlab-api-sdk';
import useSWR from 'swr';
const fetcher = (url: string) => fetch(url).then((res) => res.text());
const fetcher = (url) => fetch(url).then((res) => res.text());
function objectMinusPrompt({
prompt,
...rest
}: Record<string, any>): Record<string, any> {
function objectMinusPrompt(obj) {
const { prompt, ...rest } = obj;
return rest;
}
function renderJSONLinesLog(logs: string) {
function renderJSONLinesLog(logs) {
return logs?.split('\n').map((line, i) => {
try {
const line_object = JSON.parse(line);
......@@ -69,7 +67,7 @@ export default function Logs({}) {
flexDirection: 'column',
}}
>
<AccordionGroup>{renderJSONLinesLog(data ?? '')}</AccordionGroup>
<AccordionGroup>{renderJSONLinesLog(data)}</AccordionGroup>
</Box>
</Sheet>
);
......
......@@ -86,7 +86,7 @@ export default function MainAppPanel({
updateConfigs();
}
function setAdaptor(name: string) {
function setAdaptor(name) {
fetch(
chatAPI.GET_EXPERIMENT_UPDATE_CONFIG_URL(
experimentInfo?.id,
......
......@@ -6,13 +6,7 @@ import {
import { Box, Button, CircularProgress, Typography } from '@mui/joy';
import TinyCircle from './Shared/TinyCircle';
interface ModelCurrentlyPlayingProps {
experimentInfo: Record<string, any>;
}
export default function ModelCurrentlyPlaying({
experimentInfo,
}: ModelCurrentlyPlayingProps) {
export default function ModelCurrentlyPlaying({ experimentInfo }) {
const { models, isError, isLoading } = useModelStatus();
const inferenceParams = experimentInfo?.config?.inferenceParams
......@@ -56,7 +50,7 @@ export default function ModelCurrentlyPlaying({
variant="plain"
sx={{ display: models?.length > 0 ? 'flex' : 'none' }}
>
{models?.length === 0 ? (
{models?.length == 0 ? (
<CircularProgress color="warning" />
) : (
<StopCircleIcon />
......
......@@ -17,7 +17,7 @@ import * as chatAPI from 'renderer/lib/transformerlab-api-sdk';
import useSWR from 'swr';
import { EyeIcon, EyeOffIcon } from 'lucide-react';
const fetcher = (url: string) => fetch(url).then((res) => res.json());
const fetcher = (url) => fetch(url).then((res) => res.json());
export default function TransformerLabSettings({}) {
const [showPassword, setShowPassword] = React.useState(false);
......@@ -52,16 +52,12 @@ export default function TransformerLabSettings({}) {
endDecorator={
<IconButton
onClick={() => {
const hfToken = document.getElementsByName(
'hftoken'
)[0] as HTMLInputElement;
if (hfToken.type === 'text') {
hfToken.type = 'password';
var x = document.getElementsByName('hftoken')[0];
if (x.type === 'text') {
x.type = 'password';
} else {
hfToken.type = 'text';
x.type = 'text';
}
setShowPassword(!showPassword);
}}
>
......@@ -72,10 +68,7 @@ export default function TransformerLabSettings({}) {
)}
<Button
onClick={async () => {
const tokenElement = document.getElementsByName(
'hftoken'
)[0] as HTMLInputElement;
const token = tokenElement.value;
const token = document.getElementsByName('hftoken')[0].value;
await fetch(
chatAPI.Endpoints.Config.Set(
'HuggingfaceUserAccessToken',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment