Files
droidclaw/src/constants.ts
Sanju Sivalingam 75fb725744 Add Ollama provider for local LLM support
Reuses OpenAIProvider via Ollama's OpenAI-compatible API at localhost:11434.
No API key needed - just install Ollama, pull a model, and set LLM_PROVIDER=ollama.
Vision models (llava, llama3.2-vision) supported for screenshot fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 13:28:37 +05:30

122 lines
4.3 KiB
TypeScript

/**
* Constants for DroidClaw.
* All magic strings, URLs, and fixed values in one place.
*/
// ===========================================
// API Endpoints
// ===========================================
export const GROQ_API_BASE_URL = "https://api.groq.com/openai/v1";
export const OLLAMA_API_BASE_URL = "http://localhost:11434/v1";
// ===========================================
// ADB Key Codes
// ===========================================
export const KEYCODE_ENTER = "66";
export const KEYCODE_HOME = "KEYCODE_HOME";
export const KEYCODE_BACK = "KEYCODE_BACK";
export const KEYCODE_DEL = "67";
export const KEYCODE_FORWARD_DEL = "112";
export const KEYCODE_MOVE_HOME = "122";
export const KEYCODE_MOVE_END = "123";
export const KEYCODE_MENU = "82";
export const KEYCODE_TAB = "61";
export const KEYCODE_ESCAPE = "111";
export const KEYCODE_DPAD_UP = "19";
export const KEYCODE_DPAD_DOWN = "20";
export const KEYCODE_DPAD_LEFT = "21";
export const KEYCODE_DPAD_RIGHT = "22";
export const KEYCODE_VOLUME_UP = "24";
export const KEYCODE_VOLUME_DOWN = "25";
export const KEYCODE_POWER = "26";
export const KEYCODE_PASTE = "279";
// ===========================================
// Default Screen Coordinates (for swipe actions)
// Adjust based on target device resolution
// ===========================================
export const SCREEN_CENTER_X = 540;
export const SCREEN_CENTER_Y = 1200;
// Swipe coordinates: [start_x, start_y, end_x, end_y]
// These are the fallback values for 1080x2400 screens
export const SWIPE_COORDS: Record<string, [number, number, number, number]> = {
up: [SCREEN_CENTER_X, 1500, SCREEN_CENTER_X, 500],
down: [SCREEN_CENTER_X, 500, SCREEN_CENTER_X, 1500],
left: [800, SCREEN_CENTER_Y, 200, SCREEN_CENTER_Y],
right: [200, SCREEN_CENTER_Y, 800, SCREEN_CENTER_Y],
};
/**
* Derives swipe coordinates from actual screen dimensions using ratios
* from the hardcoded 1080x2400 reference values.
*/
export function computeSwipeCoords(
width: number,
height: number
): Record<string, [number, number, number, number]> {
const cx = Math.floor(width / 2);
const cy = Math.floor(height / 2);
// Vertical swipe: from 62.5% to 20.8% of height (mirrors 1500→500 on 2400h)
const vTop = Math.floor(height * 0.208);
const vBottom = Math.floor(height * 0.625);
// Horizontal swipe: from 74% to 18.5% of width (mirrors 800→200 on 1080w)
const hLeft = Math.floor(width * 0.185);
const hRight = Math.floor(width * 0.741);
return {
up: [cx, vBottom, cx, vTop],
down: [cx, vTop, cx, vBottom],
left: [hRight, cy, hLeft, cy],
right: [hLeft, cy, hRight, cy],
};
}
export const SWIPE_DURATION_MS = "300";
export const LONG_PRESS_DURATION_MS = "1000";
// ===========================================
// Default Models
// ===========================================
export const DEFAULT_GROQ_MODEL = "llama-3.3-70b-versatile";
export const DEFAULT_OPENAI_MODEL = "gpt-4o";
export const DEFAULT_BEDROCK_MODEL = "us.meta.llama3-3-70b-instruct-v1:0";
export const DEFAULT_OPENROUTER_MODEL = "anthropic/claude-3.5-sonnet";
export const DEFAULT_OLLAMA_MODEL = "llama3.2";
// ===========================================
// Bedrock Model Identifiers
// ===========================================
export const BEDROCK_ANTHROPIC_MODELS = ["anthropic"];
export const BEDROCK_META_MODELS = ["meta", "llama"];
// ===========================================
// File Paths
// ===========================================
export const DEVICE_DUMP_PATH = "/sdcard/window_dump.xml";
export const LOCAL_DUMP_PATH = "window_dump.xml";
export const DEVICE_SCREENSHOT_PATH = "/sdcard/kernel_screenshot.png";
export const LOCAL_SCREENSHOT_PATH = "kernel_screenshot.png";
// ===========================================
// Agent Defaults
// ===========================================
export const DEFAULT_MAX_STEPS = 30;
export const DEFAULT_STEP_DELAY = 2.0;
export const DEFAULT_MAX_RETRIES = 3;
export const DEFAULT_STUCK_THRESHOLD = 3;
export const DEFAULT_VISION_ENABLED = true;
// Phase 2: Context Quality
export const DEFAULT_MAX_ELEMENTS = 40;
export const DEFAULT_LOG_DIR = "logs";
// Phase 3: Vision Mode
export type VisionMode = "off" | "fallback" | "always";
export const DEFAULT_VISION_MODE: VisionMode = "fallback";
// Phase 4: Multi-turn Memory
export const DEFAULT_MAX_HISTORY_STEPS = 10;
// Phase 5: Streaming
export const DEFAULT_STREAMING_ENABLED = true;