UNPKG

arc-agents

Version:

A library for creating and deploying gaming agents at scale

117 lines (104 loc) 3.03 kB
const { AgentCore } = require('./agent-core') const AgentVars = require('./agent-vars') const { addRequestInterceptor, addAuthorizationInterceptor } = require('../backend-utils/interceptors') const { default: axios } = require('axios') class BaseAgent extends AgentCore { constructor( architectureId, userId, slotIdx=0, agentConfig={ useAgentWrapper: false }, delayInit=true ) { super(agentConfig) if (userId === undefined) { throw Error("User ID Not Provided") } this.architectureId = architectureId this.userId = userId this.slotIdx = slotIdx if (!delayInit) { this.initialize() } } static overrideBackendUrl(newBackend) { AgentVars.backend = newBackend } static addRequestInterceptor(data) { addRequestInterceptor(data) } static addAuthorizationInterceptor(token) { addAuthorizationInterceptor(token) } static getHeaders() { return { "x-api-key": AgentVars.apiKey, "authorization": AgentVars.authorization } } getModelSlotQuery() { return 'gameId=' + AgentVars.gameId + '&architectureId=' + this.architectureId + '&userId=' + this.userId + '&slotIdx=' + this.slotIdx } async initialize() { try { const validBool = await this.getModelData() if (validBool) { const createdNewModel = this.createAgent(this.modelData) delete this.modelData if (createdNewModel) { await this.save(true) } } else { throw Error("Could not fetch model") } } catch { throw Error("Failed to initialize model") } } async getModelData() { try { const modelDataResult = await axios.get( `${AgentVars.backend}training/get-model-data?${this.getModelSlotQuery()}`, { headers: BaseAgent.getHeaders() } ) this.modelData = {} if (modelDataResult.data.modelData && modelDataResult.data.metadata) { this.modelData.parameters = modelDataResult.data.modelData.parameters this.modelData.config = { ...modelDataResult.data.modelData.config, modelType: modelDataResult.data.metadata.modelType } } return true } catch (err) { console.log(err.response?.data) return false } } // async switchModelSlot(slotIdx) { // this.slotIdx = slotIdx // await this.initialize() // } async save(newModelBool=false) { this.model.formatModelToSave() await axios.post(`${AgentVars.backend}training/save-model`, { gameId: AgentVars.gameId, architectureId: this.architectureId, userId: this.userId, slotIdx: this.slotIdx, modelData: newModelBool ? this.model.modelData : this.trainedModelData }, { headers: BaseAgent.getHeaders() } ) } } module.exports = BaseAgent