@ui-tars/sdk
Version:
A powerful cross-platform(ANY device/platform) toolkit for building GUI automation agents for UI-TARS
1 lines • 18.8 kB
Source Map (JSON)
{"version":3,"file":"GUIAgent.mjs","sources":["webpack://@ui-tars/sdk/./src/GUIAgent.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { GUIAgentData, StatusEnum, ShareVersion } from '@ui-tars/shared/types';\nimport { IMAGE_PLACEHOLDER, MAX_LOOP_COUNT } from '@ui-tars/shared/constants';\nimport { sleep } from '@ui-tars/shared/utils';\nimport asyncRetry from 'async-retry';\nimport { Jimp } from 'jimp';\n\nimport { setContext } from './context/useContext';\nimport { Operator, GUIAgentConfig } from './types';\nimport { UITarsModel } from './Model';\nimport { BaseGUIAgent } from './base';\nimport {\n getSummary,\n processVlmParams,\n replaceBase64Prefix,\n toVlmModelFormat,\n} from './utils';\nimport {\n INTERNAL_ACTION_SPACES_ENUM,\n MAX_SNAPSHOT_ERR_CNT,\n SYSTEM_PROMPT,\n SYSTEM_PROMPT_TEMPLATE,\n} from './constants';\n\nexport class GUIAgent<T extends Operator> extends BaseGUIAgent<\n GUIAgentConfig<T>\n> {\n private readonly operator: T;\n private readonly model: InstanceType<typeof UITarsModel>;\n private readonly logger: NonNullable<GUIAgentConfig<T>['logger']>;\n private systemPrompt: string;\n\n constructor(config: GUIAgentConfig<T>) {\n super(config);\n this.operator = config.operator;\n\n this.model =\n config.model instanceof UITarsModel\n ? config.model\n : new UITarsModel(config.model);\n this.logger = config.logger || console;\n this.systemPrompt = config.systemPrompt || this.buildSystemPrompt();\n }\n\n async run(instruction: string) {\n const { operator, model, logger } = this;\n const {\n signal,\n onData,\n onError,\n retry = {},\n maxLoopCount = MAX_LOOP_COUNT,\n } = this.config;\n\n const currentTime = Date.now();\n const data: GUIAgentData = {\n version: ShareVersion.V1,\n systemPrompt: this.systemPrompt,\n instruction,\n modelName: this.model.modelName,\n status: StatusEnum.INIT,\n logTime: currentTime,\n conversations: [\n {\n from: 'human',\n value: instruction,\n timing: {\n start: currentTime,\n end: currentTime,\n cost: 0,\n },\n },\n ],\n };\n\n // inject guiAgent config for operator to get\n setContext(\n Object.assign(this.config, {\n logger: this.logger,\n systemPrompt: this.systemPrompt,\n factors: this.model.factors,\n model: this.model,\n }),\n );\n\n let loopCnt = 0;\n let snapshotErrCnt = 0;\n\n // start running agent\n data.status = StatusEnum.RUNNING;\n await onData?.({ data: { ...data, conversations: [] } });\n\n try {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n console.log('[run_data_status]', data.status);\n\n if (data.status !== StatusEnum.RUNNING || signal?.aborted) {\n signal?.aborted && (data.status = StatusEnum.END);\n await onData?.({ data: { ...data, conversations: [] } });\n break;\n }\n\n if (loopCnt >= maxLoopCount || snapshotErrCnt >= MAX_SNAPSHOT_ERR_CNT) {\n Object.assign(data, {\n status: StatusEnum.MAX_LOOP,\n errMsg:\n loopCnt >= maxLoopCount\n ? 'Exceeds the maximum number of loops'\n : 'Too many screenshot failures',\n });\n await onData?.({ data: { ...data, conversations: [] } });\n break;\n }\n\n loopCnt += 1;\n const start = Date.now();\n\n const snapshot = await asyncRetry(() => operator.screenshot(), {\n retries: retry?.screenshot?.maxRetries ?? 0,\n onRetry: retry?.screenshot?.onRetry,\n });\n\n const { width, height, mime } = await Jimp.fromBuffer(\n Buffer.from(replaceBase64Prefix(snapshot.base64), 'base64'),\n ).catch((e) => {\n logger.error('[GUIAgent] screenshot error', e);\n return {\n width: null,\n height: null,\n mime: '',\n };\n });\n\n const isValidImage = !!(snapshot?.base64 && width && height);\n\n if (!isValidImage) {\n loopCnt -= 1;\n snapshotErrCnt += 1;\n await sleep(1000);\n continue;\n }\n\n let end = Date.now();\n\n if (isValidImage) {\n data.conversations.push({\n from: 'human',\n value: IMAGE_PLACEHOLDER,\n screenshotBase64: snapshot.base64,\n screenshotContext: {\n size: {\n width,\n height,\n },\n mime,\n scaleFactor: snapshot.scaleFactor,\n },\n timing: {\n start,\n end,\n cost: end - start,\n },\n });\n await onData?.({\n data: {\n ...data,\n conversations: data.conversations.slice(-1),\n },\n });\n }\n\n // conversations -> messages, images\n const modelFormat = toVlmModelFormat({\n conversations: data.conversations,\n systemPrompt: data.systemPrompt,\n });\n // sliding images window to vlm model\n const vlmParams = {\n ...processVlmParams(modelFormat.conversations, modelFormat.images),\n screenContext: {\n width,\n height,\n },\n mime,\n scaleFactor: snapshot.scaleFactor,\n };\n const { prediction, parsedPredictions } = await asyncRetry(\n async (bail) => {\n try {\n const result = await model.invoke(vlmParams);\n return result;\n } catch (error: unknown) {\n if (\n error instanceof Error &&\n (error?.name === 'APIUserAbortError' ||\n error?.message?.includes('aborted'))\n ) {\n bail(error as unknown as Error);\n return {\n prediction: '',\n parsedPredictions: [],\n };\n }\n throw error;\n }\n },\n {\n retries: retry?.model?.maxRetries ?? 0,\n onRetry: retry?.model?.onRetry,\n },\n );\n\n logger.info('[GUIAgent Response]:', prediction);\n logger.info(\n 'GUIAgent Parsed Predictions:',\n JSON.stringify(parsedPredictions),\n );\n\n if (!prediction) {\n logger.error('[GUIAgent Response Empty]:', prediction);\n continue;\n }\n\n const predictionSummary = getSummary(prediction);\n\n end = Date.now();\n data.conversations.push({\n from: 'gpt',\n value: predictionSummary,\n timing: {\n start,\n end,\n cost: end - start,\n },\n screenshotContext: {\n size: {\n width,\n height,\n },\n scaleFactor: snapshot.scaleFactor,\n },\n predictionParsed: parsedPredictions,\n });\n await onData?.({\n data: {\n ...data,\n conversations: data.conversations.slice(-1),\n },\n });\n\n // start execute action\n for (const parsedPrediction of parsedPredictions) {\n const actionType = parsedPrediction.action_type;\n\n logger.info('GUIAgent Action:', actionType);\n\n // handle internal action spaces\n if (\n [\n INTERNAL_ACTION_SPACES_ENUM.CALL_USER,\n INTERNAL_ACTION_SPACES_ENUM.ERROR_ENV,\n INTERNAL_ACTION_SPACES_ENUM.FINISHED,\n ].includes(actionType as unknown as INTERNAL_ACTION_SPACES_ENUM)\n ) {\n data.status = StatusEnum.END;\n break;\n } else if (actionType === INTERNAL_ACTION_SPACES_ENUM.MAX_LOOP) {\n data.status = StatusEnum.MAX_LOOP;\n break;\n }\n\n if (!signal?.aborted) {\n logger.info(\n 'GUIAgent Action Inputs:',\n parsedPrediction.action_inputs,\n parsedPrediction.action_type,\n );\n // TODO: pass executeOutput to onData\n const executeOutput = await asyncRetry(\n () =>\n operator.execute({\n prediction,\n parsedPrediction,\n screenWidth: width,\n screenHeight: height,\n scaleFactor: snapshot.scaleFactor,\n factors: this.model.factors,\n }),\n {\n retries: retry?.execute?.maxRetries ?? 0,\n onRetry: retry?.execute?.onRetry,\n },\n ).catch((e) => {\n logger.error('GUIAgent execute error', e);\n });\n\n if (executeOutput && executeOutput?.status) {\n data.status = executeOutput.status;\n }\n }\n }\n }\n } catch (error) {\n if (\n error instanceof Error &&\n (error.name === 'AbortError' || error.message?.includes('aborted'))\n ) {\n logger.info('Request was aborted');\n return;\n }\n\n logger.error('[GUIAgent] run error', error);\n onError?.({\n data,\n error: {\n code: -1,\n error: 'GUIAgent Service Error',\n stack: `${error}`,\n },\n });\n throw error;\n } finally {\n const prevStatus = data.status;\n data.status = StatusEnum.END;\n\n if (data.status !== prevStatus) {\n await onData?.({\n data: {\n ...data,\n conversations: [],\n },\n });\n }\n\n logger.info('[GUIAgent] finally: status', data.status);\n }\n }\n\n private buildSystemPrompt() {\n const actionSpaces = (this.operator.constructor as typeof Operator)?.MANUAL\n ?.ACTION_SPACES;\n\n return actionSpaces == null || actionSpaces.length === 0\n ? SYSTEM_PROMPT\n : SYSTEM_PROMPT_TEMPLATE.replace(\n '{{action_spaces_holder}}',\n actionSpaces.join('\\n'),\n );\n }\n}\n"],"names":["GUIAgent","BaseGUIAgent","instruction","operator","model","logger","signal","onData","onError","retry","maxLoopCount","MAX_LOOP_COUNT","currentTime","Date","data","ShareVersion","StatusEnum","setContext","Object","loopCnt","snapshotErrCnt","_retry_screenshot","_retry_screenshot1","_retry_model","_retry_model1","console","MAX_SNAPSHOT_ERR_CNT","start","snapshot","asyncRetry","width","height","mime","Jimp","Buffer","replaceBase64Prefix","e","isValidImage","sleep","end","IMAGE_PLACEHOLDER","modelFormat","toVlmModelFormat","vlmParams","processVlmParams","prediction","parsedPredictions","bail","result","error","_error_message","Error","JSON","predictionSummary","getSummary","parsedPrediction","actionType","INTERNAL_ACTION_SPACES_ENUM","_retry_execute","_retry_execute1","executeOutput","prevStatus","_this_operator_constructor_MANUAL","_this_operator_constructor","actionSpaces","SYSTEM_PROMPT","SYSTEM_PROMPT_TEMPLATE","config","UITarsModel"],"mappings":"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"}