83 lines
2.7 KiB
TypeScript
83 lines
2.7 KiB
TypeScript
/**
|
|
* Configuration management for Android Action Kernel.
|
|
* Bun natively loads .env files — no dotenv needed.
|
|
*/
|
|
|
|
import {
|
|
DEVICE_DUMP_PATH,
|
|
LOCAL_DUMP_PATH,
|
|
DEVICE_SCREENSHOT_PATH,
|
|
LOCAL_SCREENSHOT_PATH,
|
|
DEFAULT_MAX_STEPS,
|
|
DEFAULT_STEP_DELAY,
|
|
DEFAULT_GROQ_MODEL,
|
|
DEFAULT_OPENAI_MODEL,
|
|
DEFAULT_BEDROCK_MODEL,
|
|
DEFAULT_MAX_RETRIES,
|
|
DEFAULT_STUCK_THRESHOLD,
|
|
DEFAULT_VISION_ENABLED,
|
|
} from "./constants.js";
|
|
|
|
function env(key: string, fallback = ""): string {
|
|
return process.env[key] ?? fallback;
|
|
}
|
|
|
|
export const Config = {
|
|
// ADB Configuration
|
|
ADB_PATH: env("ADB_PATH", "adb"),
|
|
SCREEN_DUMP_PATH: DEVICE_DUMP_PATH,
|
|
LOCAL_DUMP_PATH: LOCAL_DUMP_PATH,
|
|
DEVICE_SCREENSHOT_PATH: DEVICE_SCREENSHOT_PATH,
|
|
LOCAL_SCREENSHOT_PATH: LOCAL_SCREENSHOT_PATH,
|
|
|
|
// Agent Configuration
|
|
MAX_STEPS: parseInt(env("MAX_STEPS", String(DEFAULT_MAX_STEPS)), 10),
|
|
STEP_DELAY: parseFloat(env("STEP_DELAY", String(DEFAULT_STEP_DELAY))),
|
|
MAX_RETRIES: parseInt(env("MAX_RETRIES", String(DEFAULT_MAX_RETRIES)), 10),
|
|
STUCK_THRESHOLD: parseInt(env("STUCK_THRESHOLD", String(DEFAULT_STUCK_THRESHOLD)), 10),
|
|
|
|
// Vision fallback (when accessibility tree is empty)
|
|
VISION_ENABLED: env("VISION_ENABLED", String(DEFAULT_VISION_ENABLED)) === "true",
|
|
|
|
// LLM Provider: "groq", "openai", "bedrock", or "openrouter"
|
|
LLM_PROVIDER: env("LLM_PROVIDER", "groq"),
|
|
|
|
// Groq Configuration
|
|
GROQ_API_KEY: env("GROQ_API_KEY"),
|
|
GROQ_MODEL: env("GROQ_MODEL", DEFAULT_GROQ_MODEL),
|
|
|
|
// OpenAI Configuration
|
|
OPENAI_API_KEY: env("OPENAI_API_KEY"),
|
|
OPENAI_MODEL: env("OPENAI_MODEL", DEFAULT_OPENAI_MODEL),
|
|
|
|
// AWS Bedrock Configuration
|
|
AWS_REGION: env("AWS_REGION", "us-east-1"),
|
|
BEDROCK_MODEL: env("BEDROCK_MODEL", DEFAULT_BEDROCK_MODEL),
|
|
|
|
// OpenRouter Configuration (via Vercel AI SDK)
|
|
OPENROUTER_API_KEY: env("OPENROUTER_API_KEY"),
|
|
OPENROUTER_MODEL: env("OPENROUTER_MODEL", "anthropic/claude-3.5-sonnet"),
|
|
|
|
getModel(): string {
|
|
const provider = Config.LLM_PROVIDER;
|
|
if (provider === "groq") return Config.GROQ_MODEL;
|
|
if (provider === "bedrock") return Config.BEDROCK_MODEL;
|
|
if (provider === "openrouter") return Config.OPENROUTER_MODEL;
|
|
return Config.OPENAI_MODEL;
|
|
},
|
|
|
|
validate(): void {
|
|
const provider = Config.LLM_PROVIDER;
|
|
if (provider === "groq" && !Config.GROQ_API_KEY) {
|
|
throw new Error("GROQ_API_KEY is required when using Groq provider");
|
|
}
|
|
if (provider === "openai" && !Config.OPENAI_API_KEY) {
|
|
throw new Error("OPENAI_API_KEY is required when using OpenAI provider");
|
|
}
|
|
if (provider === "openrouter" && !Config.OPENROUTER_API_KEY) {
|
|
throw new Error("OPENROUTER_API_KEY is required when using OpenRouter provider");
|
|
}
|
|
// Bedrock uses AWS credential chain, no explicit validation needed
|
|
},
|
|
};
|