forked from forthfate/openorbit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuse-control-room.ts
More file actions
19 lines (17 loc) · 2.86 KB
/
Copy pathuse-control-room.ts
File metadata and controls
19 lines (17 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { useCallback, useEffect, useRef, useState } from 'react'
import type { Build, Dashboard, ExecutionEnvironment, OrbitLog, PromptTemplate, Run, RunnerAsset, Settings, TargetEnvironment, TargetTestCaseSet } from '../domain/models'
import { useToast, type ToastTone } from '../components/ui/toast-context'
import { localeMessages, resolveLocale } from '../locales'
import { api } from './api'
const defaults:Settings={profile_name:'Default',provider:'azure-openai',model:'',endpoint:'',region:'us-east-1',secret_env:'AZURE_OPENAI_API_KEY',aws_profile:''}
export function useControlRoom(){
const ui=localeMessages<Record<string,string>>(resolveLocale(localStorage.getItem('orbit.locale')),'ui')
const[data,setData]=useState<Dashboard|null>(null),[builds,setBuilds]=useState<Build[]>([]),[runners,setRunners]=useState<RunnerAsset[]>([]),[runs,setRuns]=useState<Run[]>([]),[orbitLogs,setOrbitLogs]=useState<OrbitLog[]>([]),[promptTemplates,setPromptTemplates]=useState<PromptTemplate[]>([]),[testCaseSets,setTestCaseSets]=useState<TargetTestCaseSet[]>([]),[executionEnvironments,setExecutionEnvironments]=useState<ExecutionEnvironment[]>([]),[targetEnvironments,setTargetEnvironments]=useState<TargetEnvironment[]>([]),[profiles,setProfiles]=useState<Settings[]>([]),[settings,setSettingsState]=useState<Settings>(defaults),[settingsTested,setSettingsTested]=useState(false),[loading,setLoading]=useState(true)
const {pushToast}=useToast()
const settingsLoaded=useRef(false)
const setNotice=useCallback((message:string,tone:ToastTone='error')=>pushToast(message,tone),[pushToast])
const setSettings=useCallback((values:Settings)=>{setSettingsState(values);setSettingsTested(false)},[])
const refresh=useCallback(()=>Promise.all([api<Dashboard>('/api/dashboard'),api<Build[]>('/api/builds'),api<RunnerAsset[]>('/api/runners'),api<Run[]>('/api/runs'),api<OrbitLog[]>('/api/orbit-logs'),api<PromptTemplate[]>('/api/prompt-templates'),api<TargetTestCaseSet[]>('/api/target-test-case-sets'),api<ExecutionEnvironment[]>('/api/execution-environments'),api<TargetEnvironment[]>('/api/target-environments'),api<Settings>('/api/settings'),api<Settings[]>('/api/settings/profiles')]).then(([d,b,rr,r,o,t,tc,ee,te,s,p])=>{setData(d);setBuilds(b);setRunners(rr);setRuns(r);setOrbitLogs(o);setPromptTemplates(t);setTestCaseSets(tc);setExecutionEnvironments(ee);setTargetEnvironments(te);setProfiles(p);if(!settingsLoaded.current){setSettingsState(s);settingsLoaded.current=true}}).catch(()=>setNotice(ui.apiConnectionFailed,'warning')).finally(()=>setLoading(false)),[setNotice,ui])
useEffect(()=>{refresh();const timer=window.setInterval(refresh,3000);return()=>window.clearInterval(timer)},[refresh])
return{data,builds,workflows:[],runners,runs,orbitLogs,promptTemplates,testCaseSets,executionEnvironments,targetEnvironments,profiles,settings,setSettings,settingsTested,setSettingsTested,loading,setNotice,refresh}
}