Add API prefix settings (#2528)

Co-authored-by: Van Pham <64197333+Van-QA@users.noreply.github.com>
This commit is contained in:
GenkaOk 2024-04-04 15:45:45 +03:00 committed by GitHub
parent c93283ec5e
commit 089e311bfd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 51 additions and 2 deletions

View File

@ -83,6 +83,7 @@ export class App implements Processor {
isVerboseEnabled: args?.isVerboseEnabled,
schemaPath: join(await appResourcePath(), 'docs', 'openapi', 'jan.yaml'),
baseDir: join(await appResourcePath(), 'docs', 'openapi'),
prefix: args?.prefix,
})
}

View File

@ -39,6 +39,7 @@ export interface ServerConfig {
isVerboseEnabled?: boolean
schemaPath?: string
baseDir?: string
prefix?: string
storageAdataper?: any
}
@ -119,7 +120,7 @@ export const startServer = async (configs?: ServerConfig): Promise<boolean> => {
server.addHook('preHandler', configs.storageAdataper)
// Register API routes
await server.register(v1Router, { prefix: '/v1' })
await server.register(v1Router, { prefix: configs?.prefix ?? '/v1' })
// Start listening for requests
await server
.listen({

View File

@ -4,6 +4,7 @@ export const hostOptions = ['127.0.0.1', '0.0.0.0']
export const apiServerPortAtom = atomWithStorage('apiServerPort', '1337')
export const apiServerHostAtom = atomWithStorage('apiServerHost', '127.0.0.1')
export const apiServerPrefix = atomWithStorage('apiServerPrefix', '/v1')
export const apiServerCorsEnabledAtom = atomWithStorage(
'apiServerCorsEnabled',

View File

@ -56,6 +56,7 @@ import {
apiServerCorsEnabledAtom,
apiServerHostAtom,
apiServerPortAtom,
apiServerPrefix,
apiServerVerboseLogEnabledAtom,
hostOptions,
} from '@/helpers/atoms/ApiServer.atom'
@ -63,6 +64,7 @@ import { serverEnabledAtom } from '@/helpers/atoms/LocalServer.atom'
const LocalServerScreen = () => {
const [errorRangePort, setErrorRangePort] = useState(false)
const [errorPrefix, setErrorPrefix] = useState(false)
const [serverEnabled, setServerEnabled] = useAtom(serverEnabledAtom)
const showRightSideBar = useAtomValue(showRightSideBarAtom)
const setModalTroubleShooting = useSetAtom(modalTroubleShootingAtom)
@ -80,6 +82,7 @@ const LocalServerScreen = () => {
)
const [host, setHost] = useAtom(apiServerHostAtom)
const [port, setPort] = useAtom(apiServerPortAtom)
const [prefix, setPrefix] = useAtom(apiServerPrefix)
const [loadModelError, setLoadModelError] = useAtom(loadModelErrorAtom)
const FIRST_TIME_VISIT_API_SERVER = 'firstTimeVisitAPIServer'
@ -95,6 +98,14 @@ const LocalServerScreen = () => {
[setPort]
)
const handleChangePrefix = useCallback(
(value: string) => {
setErrorPrefix(!value.length || !value.startsWith('/'))
setPrefix(value)
},
[setPrefix]
)
useEffect(() => {
if (localStorage.getItem(FIRST_TIME_VISIT_API_SERVER) == null) {
setFirstTimeVisitAPIServer(true)
@ -105,12 +116,17 @@ const LocalServerScreen = () => {
handleChangePort(port)
}, [handleChangePort, port])
useEffect(() => {
handleChangePrefix(prefix)
}, [handleChangePrefix, prefix])
const onStartServerClick = async () => {
if (selectedModel == null) return
try {
const isStarted = await window.core?.api?.startServer({
host,
port,
prefix,
isCorsEnabled,
isVerboseEnabled,
})
@ -159,7 +175,12 @@ const LocalServerScreen = () => {
<Button
block
themes={serverEnabled ? 'danger' : 'primary'}
disabled={stateModel.loading || errorRangePort || !selectedModel}
disabled={
stateModel.loading ||
errorRangePort ||
errorPrefix ||
!selectedModel
}
onClick={onToggleServer}
>
{serverEnabled ? 'Stop' : 'Start'} Server
@ -225,6 +246,31 @@ const LocalServerScreen = () => {
<p className="mt-2 text-xs text-danger">{`The port range should be from 0 to 65536`}</p>
)}
</div>
<div>
<label
id="prefix"
className="mb-2 inline-flex items-start gap-x-2 font-bold text-zinc-500 dark:text-gray-300"
>
API Prefix
</label>
<div className="flex items-center justify-between">
<Input
className={twMerge(
'w-full flex-shrink-0',
errorPrefix && 'border-danger'
)}
type="text"
value={prefix}
onChange={(e) => {
handleChangePrefix(e.target.value)
}}
disabled={serverEnabled}
/>
</div>
{errorPrefix && (
<p className="mt-2 text-xs text-danger">{`Prefix should start with /`}</p>
)}
</div>
<div>
<label
id="cors"