langtrain 0.1.19 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/workflows/gsd.md +27 -0
- package/.agent/workflows/ralph.md +28 -0
- package/README.md +73 -68
- package/assets/cli-demo.png +0 -0
- package/dist/chunk-QZ6U7AJN.js +30 -0
- package/dist/chunk-QZ6U7AJN.js.map +1 -0
- package/dist/chunk-TDQXC2RA.mjs +30 -0
- package/dist/chunk-TDQXC2RA.mjs.map +1 -0
- package/dist/cli.js +8 -6
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +8 -6
- package/dist/cli.mjs.map +1 -1
- package/dist/index.d.mts +67 -1
- package/dist/index.d.ts +67 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +2 -1
- package/src/cli/auth.ts +2 -2
- package/src/cli/components/Table.ts +20 -0
- package/src/cli/handlers/agent.ts +35 -3
- package/src/cli/handlers/data.ts +128 -5
- package/src/cli/handlers/env.ts +89 -0
- package/src/cli/handlers/guardrails.ts +100 -0
- package/src/cli/handlers/logs.ts +68 -0
- package/src/cli/handlers/subscription.ts +2 -2
- package/src/cli/handlers/tune.ts +18 -8
- package/src/cli/handlers/vision.ts +2 -2
- package/src/cli/index.ts +100 -15
- package/src/cli/menu.ts +12 -1
- package/src/cli/ui.ts +13 -8
- package/src/index.ts +4 -1
- package/src/lib/agent.ts +7 -0
- package/src/lib/guardrails.ts +72 -0
- package/src/lib/secrets.ts +39 -0
- package/dist/chunk-PAHGEWDE.js +0 -30
- package/dist/chunk-PAHGEWDE.js.map +0 -1
- package/dist/chunk-Q46V6ODQ.mjs +0 -30
- package/dist/chunk-Q46V6ODQ.mjs.map +0 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/ui.ts","../src/cli/config.ts","../src/cli/auth.ts","../src/cli/menu.ts","../src/cli/handlers/subscription.ts","../src/cli/handlers/tune.ts","../src/cli/handlers/vision.ts","../src/cli/handlers/agent.ts","../src/cli/handlers/init.ts","../src/cli/handlers/doctor.ts","../src/cli/handlers/data.ts","../src/cli/handlers/deploy.ts","../src/cli/handlers/dev.ts","../package.json","../src/cli/index.ts"],"names":["showBanner","version","gradient","bgCyan","black","intro","message","cyan","outro","gray","spinner","msg","green","showSuccess","showWarning","yellow","showInfo","blue","colors","red","bold","dim","CONFIG_DIR","path","os","CONFIG_FILE","getConfig","fs","saveConfig","config","handleLogin","apiKey","password","value","isCancel","cancel","s","info","SubscriptionClient","getSubscription","client","planLabel","getMenu","state","plan","isAuthenticated","menu","handleSubscriptionStatus","handleTuneFinetune","tune","modelClient","model","models","select","m","text","trainFile","epochs","track","upgrade","confirm","fileClient","FileClient","trainingClient","TrainingClient","fileResp","job","e","cont","s2","handleTuneGenerate","prompt","response","handleTuneList","workspaceId","jobs","selectedJob","j","handleTuneStatus","jobId","id","action","handleTuneCancel","confirmCancel","handleVisionFinetune","vision","dataset","r","handleVisionGenerate","handleAgentCreate","name","description","systemPrompt","agents","wid","agent","handleAgentDelete","agentId","a","d","handleAgentList","handleAgentRun","agentName","conversationId","input","result","handleInit","cwd","overwrite","projectName","shouldLogin","configContent","handleDoctor","issues","nodeVersion","platform","arch","handleDataUpload","filePath","purpose","handleDeploy","agentConfig","existingAgents","existing","payload","handleDev","configPath","isDeploying","eventType","package_default","main","program","Command","AgentClient","clients","Langvision","Langtune","ModelClient","currentState","operation","getMessageForState","op","error"],"mappings":"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","file":"cli.js","sourcesContent":["import { text, select, confirm, password, isCancel, cancel, note } from '@clack/prompts';\nimport { bgCyan, black, red, green, yellow, gray, cyan, bold, dim, blue } from 'kleur/colors';\nimport gradient from 'gradient-string';\n\n// Re-export specific prompts to keep imports clean in other files\nexport { text, select, confirm, password, isCancel, cancel, note };\n\nexport function showBanner(version: string) {\n console.clear();\n const banner = `\n ██╗ █████╗ ███╗ ██╗ ██████╗████████╗██████╗ █████╗ ██╗███╗ ██╗\n ██║ ██╔══██╗████╗ ██║██╔════╝╚══██╔══╝██╔══██╗██╔══██╗██║████╗ ██║\n ██║ ███████║██╔██╗ ██║██║ ███╗ ██║ ██████╔╝███████║██║██╔██╗ ██║\n ██║ ██╔══██║██║╚██╗██║██║ ██║ ██║ ██╔══██╗██╔══██║██║██║╚██╗██║\n ███████╗██║ ██║██║ ╚████║╚██████╔╝ ██║ ██║ ██║██║ ██║██║██║ ╚████║\n ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝\n `;\n console.log(gradient(['#00DC82', '#36E4DA', '#0047E1'])(banner));\n console.log(`${bgCyan(black(` Langtrain SDK v${version} `))}\\n`);\n}\n\nexport function intro(message: string) {\n console.log(cyan(`◆ ${message}`));\n}\n\nexport function outro(message: string) {\n console.log(gray(`└ ${message}`));\n}\n\nexport function spinner() {\n return {\n start: (msg: string) => process.stdout.write(`${cyan('●')} ${msg}\\r`),\n stop: (msg?: string) => {\n if (msg) console.log(`${green('✔')} ${msg}`);\n else console.log(''); // Newline\n },\n message: (msg: string) => process.stdout.write(`${cyan('●')} ${msg}\\r`)\n };\n}\n\nexport function showError(message: string) {\n console.log(red(`✖ Error: ${message}`));\n}\n\nexport function showSuccess(message: string) {\n console.log(green(`✔ ${message}`));\n}\n\nexport function showWarning(message: string) {\n console.log(yellow(`⚠ Warning: ${message}`));\n}\n\nexport function showInfo(message: string) {\n console.log(blue(`ℹ ${message}`));\n}\n\nexport function showDim(message: string) {\n console.log(dim(message));\n}\n\n// Re-export for backward compatibility\nexport { bgCyan, black, red, green, yellow, gray, cyan, bold, dim, blue, gradient };\n\nexport const colors = {\n bgCyan, black, red, green, yellow, gray, cyan, bold, dim, blue\n};\n\n","import fs from 'fs';\nimport path from 'path';\nimport os from 'os';\n\nconst CONFIG_DIR = path.join(os.homedir(), '.langtrain');\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');\n\nexport interface CLIConfig {\n apiKey?: string;\n baseUrl?: string;\n [key: string]: any;\n}\n\nexport function getConfig(): CLIConfig {\n if (!fs.existsSync(CONFIG_FILE)) return {};\n try {\n return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8'));\n } catch {\n return {};\n }\n}\n\nexport function saveConfig(config: CLIConfig) {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\n }\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));\n}\n","import { password, isCancel, cancel, intro, green, yellow, red, bgCyan, black, spinner, gray } from './ui';\nimport { getConfig, saveConfig } from './config';\nimport { SubscriptionClient, SubscriptionInfo } from '../index';\n\nexport async function ensureAuth(): Promise<string> {\n let config = getConfig();\n\n if (!config.apiKey) {\n intro(yellow('Authentication required to verify plan & features.'));\n await handleLogin();\n config = getConfig();\n }\n\n return config.apiKey as string;\n}\n\nexport async function handleLogin() {\n while (true) {\n console.log(gray('\\nGet your API Key at: https://langtrain.xyz/settings/keys\\n'));\n const apiKey = await password({\n message: 'Enter your Langtrain API Key:',\n validate(value) {\n if (!value || value.length === 0) return 'API Key is required';\n },\n });\n\n if (isCancel(apiKey)) {\n cancel('Operation cancelled');\n process.exit(0);\n }\n\n const s = spinner();\n s.start('Verifying API Key...');\n\n // Verify key immediately\n try {\n const client = new SubscriptionClient({ apiKey: apiKey as string });\n const info = await client.getStatus();\n\n s.stop(green(`Authenticated as ${info.plan === 'pro' ? 'PRO' : info.plan.toUpperCase()}`));\n\n const config = getConfig();\n saveConfig({ ...config, apiKey: apiKey as string });\n // intro(green('API Key saved successfully!')); // success message above is enough\n return; // Exit loop on success\n } catch (e: any) {\n s.stop(red('Invalid API Key. Please try again.'));\n // Loop continues\n }\n }\n}\n\nexport async function getSubscription(apiKey: string): Promise<SubscriptionInfo | null> {\n const client = new SubscriptionClient({ apiKey });\n const s = spinner();\n s.start('Verifying subscription plan...');\n try {\n const info = await client.getStatus();\n\n // Enhance: Show plan details immediately on auth check\n const planLabel = info.plan === 'pro' ? bgCyan(' PRO ') : info.plan.toUpperCase();\n s.stop(green(`Authenticated as ${planLabel}`));\n\n if (info.is_active === false) {\n console.log(yellow('Warning: Your subscription is not active. Some features may be limited.'));\n }\n\n return info;\n } catch (e: any) {\n s.stop(red('Failed to verify subscription.'));\n if (e.response && e.response.status === 401) {\n console.log(red('Invalid API Key. Please run login again.'));\n // Optionally clear key?\n }\n return null;\n }\n}\n","import { SubscriptionInfo } from '../index';\n\nexport interface MenuOption {\n value: string;\n label: string;\n hint?: string;\n}\n\nexport type MenuState = 'main' | 'agents' | 'text' | 'vision' | 'settings';\n\nexport function getMenu(state: MenuState, plan: SubscriptionInfo | null, isAuthenticated: boolean): MenuOption[] {\n const isPro = plan?.plan === 'pro' || plan?.plan === 'enterprise';\n\n // If not authenticated, force login or limited menu?\n // User requested \"lazy auth\", so we should show menu but maybe highlight login or allow navigation and prompt later.\n // Let's add a visual cue.\n\n switch (state) {\n case 'main':\n const menu: MenuOption[] = [\n { value: 'nav-agents', label: 'Agents', hint: 'Manage & Chat with AI Agents' },\n { value: 'nav-text', label: 'Langtune (Text)', hint: 'Fine-tuning & Generation' },\n { value: 'nav-vision', label: 'Langvision (Vision)', hint: 'Vision Analysis & Tuning' },\n { value: 'init', label: 'Initialize Project', hint: 'Scaffold new Langtrain app' },\n { value: 'deploy', label: 'Deploy', hint: 'Push config to Cloud' },\n { value: 'dev', label: 'Start Dev Server', hint: 'Watch mode' },\n { value: 'doctor', label: 'Doctor', hint: 'Check environment health' },\n { value: 'nav-settings', label: 'Settings', hint: 'Subscription & Auth' }\n ];\n\n if (!isAuthenticated) {\n // menu.unshift({ value: 'login', label: 'Login to Langtrain', hint: 'Required for most features' });\n // Actually, let's make Login the first option if not authenticated\n // But keep the others so user can see what's available (and get prompted)\n menu.unshift({ value: 'login', label: 'Login to Langtrain', hint: 'Required for most features' });\n }\n\n // Always add Exit\n menu.push({ value: 'exit', label: 'Exit' });\n return menu;\n\n case 'agents':\n return [\n { value: 'agent-list', label: 'List & Run Agents', hint: 'Chat with active agents' },\n { value: 'agent-create', label: 'Create New Agent', hint: 'Deploy a new agent' },\n { value: 'agent-delete', label: 'Delete Agent', hint: 'Remove an agent' },\n { value: 'back', label: '← Back to Main Menu' }\n ];\n\n case 'text':\n return [\n { value: 'tune-finetune', label: 'Fine-tune Text Model', hint: 'Create custom LLM' },\n { value: 'tune-list', label: 'List Jobs', hint: 'Check training status' },\n { value: 'tune-generate', label: 'Generate Text', hint: 'Test your models' },\n { value: 'data-upload', label: 'Upload Dataset', hint: 'Upload JSONL for training' },\n { value: 'back', label: '← Back to Main Menu' }\n ];\n\n case 'vision':\n return [\n { value: 'vision-finetune', label: 'Fine-tune Vision Model', hint: 'Create custom VLM' },\n { value: 'vision-generate', label: 'Generate Vision Response', hint: 'Test vision models' },\n { value: 'back', label: '← Back to Main Menu' }\n ];\n\n case 'settings':\n return [\n { value: 'status', label: isAuthenticated ? `Subscription Status (${plan?.plan || 'Free'})` : 'Check Status (Login required)' },\n { value: 'login', label: isAuthenticated ? 'Update API Key' : 'Login' },\n { value: 'back', label: '← Back to Main Menu' }\n ];\n\n default:\n return [];\n }\n}\n","import { spinner, intro, red, green, gray, bgCyan } from '../ui';\nimport { getConfig } from '../config';\nimport { SubscriptionClient } from '../../index';\n\nexport async function handleSubscriptionStatus() {\n const config = getConfig();\n if (!config.apiKey) {\n intro(red('Not logged in. Run \"login\" first.'));\n return;\n }\n const client = new SubscriptionClient({ apiKey: config.apiKey });\n const s = spinner();\n s.start('Fetching subscription status...');\n try {\n const info = await client.getStatus();\n s.stop(green('Subscription Status:'));\n\n console.log(gray('Plan: ') + (info.plan === 'pro' ? bgCyan(' PRO ') : info.plan.toUpperCase()));\n console.log(gray('Active: ') + (info.is_active ? green('Yes') : red('No')));\n if (info.expires_at) console.log(gray('Expires: ') + new Date(info.expires_at).toLocaleDateString());\n\n console.log(gray('\\nLimits:'));\n console.log(` Models: ${info.limits.max_models === -1 ? 'Unlimited' : info.limits.max_models}`);\n console.log(` Training Jobs: ${info.limits.max_training_jobs}`);\n\n } catch (e: any) {\n s.stop(red('Failed to fetch status.'));\n console.error(e.message);\n }\n}\n","import { text, select, confirm, isCancel, cancel, spinner, intro, red, green, yellow, bgCyan, black, gradient, gray } from '../ui';\nimport { getConfig } from '../config';\nimport { Langtune, ModelClient, SubscriptionClient, FileClient, TrainingClient } from '../../index';\n\n// Handler for Langtune Fine-tuning\nexport async function handleTuneFinetune(tune: Langtune, modelClient: ModelClient) {\n let model: string | symbol = '';\n\n const s = spinner();\n s.start('Fetching available text models...');\n try {\n const models = await modelClient.list('text');\n s.stop(`Found ${models.length} text models`);\n\n if (models.length > 0) {\n model = await select({\n message: 'Select base model:',\n options: models.map(m => ({ value: m.id, label: m.id, hint: m.owned_by }))\n });\n }\n } catch (e) {\n s.stop(yellow('Failed to fetch models. Using manual input.'));\n model = await text({\n message: 'Enter base model (e.g., gpt-3.5-turbo):',\n placeholder: 'gpt-3.5-turbo',\n validate(value) {\n if (!value || value.length === 0) return 'Value is required!';\n },\n });\n }\n\n if (isCancel(model)) {\n cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const trainFile = await text({\n message: 'Enter path to training file:',\n placeholder: './data.jsonl',\n validate(value) {\n if (!value || value.length === 0) return 'Value is required!';\n },\n });\n if (isCancel(trainFile)) cancel('Operation cancelled.');\n\n const epochs = await text({\n message: 'Num Epochs:',\n placeholder: '3',\n initialValue: '3'\n });\n if (isCancel(epochs)) cancel('Operation cancelled.');\n\n const track = await select({\n message: 'Track this job on Langtrain Cloud?',\n options: [\n { value: 'yes', label: 'Yes', hint: 'Upload dataset and log job' },\n { value: 'no', label: 'No', hint: 'Local only' }\n ]\n });\n if (isCancel(track)) cancel('Operation cancelled.');\n\n if (track === 'yes') {\n const s = spinner();\n s.start('Connecting to Cloud...');\n try {\n const config = getConfig();\n if (!config.apiKey) throw new Error('API Key required. Run \"login\" first.');\n\n // Check Subscription\n const subClient = new SubscriptionClient({ apiKey: config.apiKey });\n const sub = await subClient.getStatus();\n if (!sub.features.includes('cloud_finetuning')) {\n s.stop(red('Feature \"cloud_finetuning\" is not available on your plan.'));\n const upgrade = await confirm({ message: 'Upgrade to Pro for cloud tracking?' });\n if (upgrade && !isCancel(upgrade)) {\n console.log(bgCyan(black(' Visit https://langtrain.ai/dashboard/billing to upgrade. ')));\n }\n return;\n }\n\n const fileClient = new FileClient({ apiKey: config.apiKey });\n const trainingClient = new TrainingClient({ apiKey: config.apiKey });\n\n s.message('Uploading dataset...');\n const fileResp = await fileClient.upload(trainFile as string);\n\n s.message('Creating Job...');\n const job = await trainingClient.createJob({\n name: `cli-sft-${Date.now()}`,\n base_model: model as string,\n dataset_id: fileResp.id,\n task: 'text',\n hyperparameters: {\n n_epochs: parseInt(epochs as string)\n }\n });\n s.stop(green(`Job tracked: ${job.id}`));\n } catch (e: any) {\n s.stop(red(`Tracking failed: ${e.message}`));\n const cont = await confirm({ message: 'Continue with local training anyway?' });\n if (!cont || isCancel(cont)) return;\n }\n }\n\n const s2 = spinner();\n s2.start('Starting local fine-tuning...');\n\n try {\n const config: any = {\n model: model as string,\n trainFile: trainFile as string,\n preset: 'default', // simplified\n epochs: parseInt(epochs as string),\n batchSize: 1,\n learningRate: 2e-5,\n loraRank: 16,\n outputDir: './output'\n };\n\n await tune.finetune(config);\n s2.stop(green('Fine-tuning job started successfully!'));\n } catch (e: any) {\n s2.stop(red('Failed to start job.'));\n throw e;\n }\n}\n\n// Handler for Langtune Generation\nexport async function handleTuneGenerate(tune: Langtune) {\n const model = await text({\n message: 'Enter model path:',\n placeholder: './output/model',\n initialValue: './output/model'\n });\n if (isCancel(model)) cancel('Operation cancelled');\n\n const prompt = await text({\n message: 'Enter prompt:',\n placeholder: 'Hello world',\n });\n if (isCancel(prompt)) cancel('Operation cancelled');\n\n const s = spinner();\n s.start('Connecting to Langtrain Inference API...');\n\n try {\n const response = await tune.generate(model as string, { prompt: prompt as string });\n s.stop('Generation complete');\n intro('Response:');\n console.log(gradient.pastel(response));\n } catch (e: any) {\n s.stop(red('Generation failed.'));\n throw e;\n }\n}\n\nexport async function handleTuneList(trainingClient: TrainingClient) {\n const s = spinner();\n s.start('Fetching fine-tuning jobs...');\n\n // We need workspace ID, usually from config or first agent?\n // For now, let's just ask or list from all available if API supports it (it requires workspace_id)\n // Let's assume user knows it or we can find it.\n // Simplified: Just ask for Workspace ID if not in config (we don't save it yet)\n // BETTER: Get it from an existing agent or config.\n const config = getConfig();\n let workspaceId = config.workspace_id;\n\n if (!workspaceId) {\n s.stop(yellow('Workspace ID required to list jobs.'));\n workspaceId = await text({ message: 'Enter Workspace ID:' });\n if (isCancel(workspaceId)) return;\n }\n\n try {\n const jobs = await trainingClient.listJobs(workspaceId as string);\n s.stop(`Found ${jobs.data.length} jobs`);\n\n if (jobs.data.length === 0) {\n console.log(yellow('No jobs found.'));\n return;\n }\n\n const selectedJob = await select({\n message: 'Select a job to view details:',\n options: jobs.data.map(j => ({\n value: j.id,\n label: `${j.name || j.id} (${j.status})`,\n hint: `Created: ${new Date(j.created_at).toLocaleDateString()}`\n }))\n });\n\n if (isCancel(selectedJob)) return;\n\n await handleTuneStatus(trainingClient, selectedJob as string);\n\n } catch (e: any) {\n s.stop(red(`Failed to list jobs: ${e.message}`));\n }\n}\n\nexport async function handleTuneStatus(trainingClient: TrainingClient, jobId?: string) {\n let id = jobId;\n if (!id) {\n id = await text({ message: 'Enter Job ID:' }) as string;\n if (isCancel(id)) return;\n }\n\n const s = spinner();\n s.start(`Fetching status for ${id}...`);\n\n try {\n const job = await trainingClient.getJob(id);\n s.stop(`Job Status: ${job.status.toUpperCase()}`);\n\n console.log(gray('------------------------------------------------'));\n console.log(`${bgCyan(black(' Job Details '))}`);\n console.log(`ID: ${job.id}`);\n console.log(`Name: ${job.name}`);\n console.log(`Status: ${job.status === 'succeeded' ? green(job.status) : job.status}`);\n console.log(`Model: ${job.base_model}`);\n console.log(`Progress: ${job.progress || 0}%`);\n if (job.error_message) console.log(red(`Error: ${job.error_message}`));\n console.log(gray('------------------------------------------------'));\n\n if (job.status === 'running' || job.status === 'queued') {\n const action = await select({\n message: 'Action:',\n options: [\n { value: 'refresh', label: 'Refresh Status' },\n { value: 'cancel', label: 'Cancel Job' },\n { value: 'back', label: 'Back' }\n ]\n });\n\n if (action === 'refresh') await handleTuneStatus(trainingClient, id);\n if (action === 'cancel') await handleTuneCancel(trainingClient, id);\n }\n\n } catch (e: any) {\n s.stop(red(`Failed to get job status: ${e.message}`));\n }\n}\n\nexport async function handleTuneCancel(trainingClient: TrainingClient, jobId: string) {\n const confirmCancel = await confirm({ message: 'Are you sure you want to cancel this job?' });\n if (!confirmCancel || isCancel(confirmCancel)) return;\n\n const s = spinner();\n s.start('Canceling job...');\n try {\n await trainingClient.cancelJob(jobId);\n s.stop(green('Job canceled successfully.'));\n } catch (e: any) {\n s.stop(red(`Failed to cancel job: ${e.message}`));\n }\n}\n","import { text, select, confirm, isCancel, cancel, spinner, intro, red, green, yellow, bgCyan, black, gradient } from '../ui';\nimport { getConfig } from '../config';\nimport { Langvision, ModelClient, SubscriptionClient, FileClient, TrainingClient } from '../../index';\n\n// Handler for Langvision Fine-tuning\nexport async function handleVisionFinetune(vision: Langvision, modelClient: ModelClient) {\n let model: string | symbol = '';\n\n const s = spinner();\n s.start('Fetching available vision models...');\n try {\n const models = await modelClient.list('vision');\n s.stop(`Found ${models.length} vision models`);\n\n if (models.length > 0) {\n model = await select({\n message: 'Select base vision model:',\n options: models.map(m => ({ value: m.id, label: m.id, hint: m.owned_by }))\n });\n } else {\n model = await text({\n message: 'Enter base vision model:',\n placeholder: 'llava-v1.5-7b',\n initialValue: 'llava-v1.5-7b'\n });\n }\n } catch (e) {\n s.stop(yellow('Failed to fetch models. Using manual input.'));\n model = await text({\n message: 'Enter base vision model:',\n placeholder: 'llava-v1.5-7b',\n initialValue: 'llava-v1.5-7b'\n });\n }\n\n if (isCancel(model)) {\n cancel('Operation cancelled');\n process.exit(0);\n }\n\n const dataset = await text({\n message: 'Enter dataset path:',\n placeholder: './dataset',\n });\n if (isCancel(dataset)) cancel('Operation cancelled');\n\n const epochs = await text({\n message: 'Num Epochs:',\n placeholder: '3',\n initialValue: '3'\n });\n if (isCancel(epochs)) cancel('Operation cancelled');\n\n const track = await select({\n message: 'Track this job on Langtrain Cloud?',\n options: [\n { value: 'yes', label: 'Yes', hint: 'Upload dataset and log job' },\n { value: 'no', label: 'No', hint: 'Local only' }\n ]\n });\n if (isCancel(track)) cancel('Operation cancelled');\n\n if (track === 'yes') {\n const s = spinner();\n s.start('Connecting to Cloud...');\n try {\n const config = getConfig();\n if (!config.apiKey) throw new Error('API Key required. Run \"login\" first.');\n\n // Check Subscription\n const subClient = new SubscriptionClient({ apiKey: config.apiKey });\n const sub = await subClient.getStatus();\n if (!sub.features.includes('cloud_finetuning')) {\n s.stop(red('Feature \"cloud_finetuning\" is not available on your plan.'));\n const upgrade = await confirm({ message: 'Upgrade to Pro for cloud tracking?' });\n if (upgrade && !isCancel(upgrade)) {\n console.log(bgCyan(black(' Visit https://langtrain.ai/dashboard/billing to upgrade. ')));\n }\n return;\n }\n\n const fileClient = new FileClient({ apiKey: config.apiKey });\n const trainingClient = new TrainingClient({ apiKey: config.apiKey });\n\n s.message('Uploading dataset...');\n const fileResp = await fileClient.upload(dataset as string, undefined, 'fine-tune-vision');\n\n s.message('Creating Job...');\n const job = await trainingClient.createJob({\n name: `cli-vision-${Date.now()}`,\n base_model: model as string,\n dataset_id: fileResp.id,\n task: 'vision',\n training_method: 'lora',\n hyperparameters: {\n n_epochs: parseInt(epochs as string)\n }\n });\n s.stop(green(`Job tracked: ${job.id}`));\n } catch (e: any) {\n s.stop(red(`Tracking failed: ${e.message}`));\n const cont = await confirm({ message: 'Continue with local training anyway?' });\n if (!cont || isCancel(cont)) return;\n }\n }\n\n const s2 = spinner();\n s2.start('Analyzing dataset structure...');\n await new Promise(r => setTimeout(r, 800));\n s2.message('Starting vision fine-tuning on Langtrain Cloud...');\n\n try {\n const config: any = {\n model: model as string,\n dataset: dataset as string,\n epochs: parseInt(epochs as string),\n batchSize: 1,\n learningRate: 2e-5,\n loraRank: 16,\n outputDir: './vision-output'\n };\n await vision.finetune(config);\n s2.stop(green('Vision fine-tuning started successfully!'));\n } catch (e: any) {\n s2.stop(red('Failed to start vision job.'));\n throw e;\n }\n}\n\n// Handler for Langvision Generation\nexport async function handleVisionGenerate(vision: Langvision) {\n const model = await text({\n message: 'Enter model path:',\n placeholder: './vision-output/model',\n initialValue: './vision-output/model'\n });\n if (isCancel(model)) cancel('Operation cancelled');\n\n const prompt = await text({\n message: 'Enter prompt/image path:', // Simplified for CLI\n placeholder: 'Describe this image...',\n });\n if (isCancel(prompt)) cancel('Operation cancelled');\n\n const s = spinner();\n s.start('Uploading image and context...');\n await new Promise(r => setTimeout(r, 600));\n s.message('Generating vision response...');\n\n try {\n const response = await vision.generate(model as string, { prompt: prompt as string });\n s.stop('Generation complete');\n intro('Response:');\n console.log(gradient.pastel(response));\n } catch (e: any) {\n s.stop(red('Generation failed.'));\n throw e;\n }\n}\n","import { text, select, confirm, isCancel, cancel, spinner, intro, red, green, yellow, gray, bgCyan, black, gradient } from '../ui';\nimport { AgentClient, ModelClient } from '../../index';\n\nexport async function handleAgentCreate(client: AgentClient, modelClient: ModelClient) {\n const name = await text({\n message: 'Agent Name:',\n placeholder: 'e.g. Support Bot',\n validate(value) {\n if (!value || value.length === 0) return 'API Key is required';\n },\n });\n if (isCancel(name)) {\n cancel('Operation cancelled');\n return;\n }\n\n const description = await text({\n message: 'Description:',\n placeholder: 'e.g. A helpful support assistant',\n });\n if (isCancel(description)) return;\n\n const systemPrompt = await text({\n message: 'System Prompt:',\n placeholder: 'e.g. You are a helpful assistant.',\n initialValue: 'You are a helpful assistant.'\n });\n if (isCancel(systemPrompt)) return;\n\n // Select model\n let model: string | symbol = 'gpt-4o';\n const s = spinner();\n s.start('Fetching agent models...');\n try {\n const models = await modelClient.list('agent');\n s.stop(`Found ${models.length} models`);\n if (models.length > 0) {\n model = await select({\n message: 'Select Agent Model:',\n options: models.map(m => ({ value: m.id, label: m.id }))\n });\n }\n } catch (e) {\n s.stop(yellow('Could not fetch models, using default.'));\n }\n\n if (isCancel(model)) return;\n\n const s2 = spinner();\n s2.start('Creating agent...');\n\n try {\n const agents = await client.list();\n let workspaceId = \"\";\n if (agents.length > 0) {\n workspaceId = agents[0].workspace_id;\n } else {\n s2.stop(yellow('Workspace ID needed (no existing agents found).'));\n const wid = await text({\n message: 'Enter Workspace ID (UUID):',\n validate(value) {\n if (!value || value.length === 0) return 'Required';\n },\n });\n if (isCancel(wid)) return;\n workspaceId = wid as string;\n s2.start('Creating agent...');\n }\n\n const agent = await client.create({\n workspace_id: workspaceId,\n name: name as string,\n description: description as string,\n config: {\n system_prompt: systemPrompt as string,\n model: model as string\n }\n });\n s2.stop(green(`Agent \"${agent.name}\" created successfully! ID: ${agent.id}`));\n } catch (e: any) {\n s2.stop(red('Failed to create agent.'));\n throw e;\n }\n}\n\nexport async function handleAgentDelete(client: AgentClient) {\n const s = spinner();\n s.start('Fetching agents...');\n const agents = await client.list();\n s.stop(`Found ${agents.length} agents`);\n\n if (agents.length === 0) {\n intro(yellow('No agents to delete.'));\n return;\n }\n\n const agentId = await select({\n message: 'Select an agent to DELETE:',\n options: agents.map(a => ({ value: a.id, label: a.name, hint: a.description || 'No description' }))\n });\n\n if (isCancel(agentId)) return;\n\n const confirmDel = await select({\n message: `Are you sure you want to delete this agent?`,\n options: [\n { value: 'yes', label: 'Yes, delete it', hint: 'Cannot be undone' },\n { value: 'no', label: 'No, keep it' }\n ]\n });\n\n if (confirmDel !== 'yes') {\n intro(gray('Deletion cancelled.'));\n return;\n }\n\n const d = spinner();\n d.start('Deleting agent...');\n try {\n await client.delete(agentId as string);\n d.stop(green('Agent deleted successfully.'));\n } catch (e: any) {\n d.stop(red('Failed to delete agent.'));\n throw e;\n }\n}\n\nexport async function handleAgentList(client: AgentClient) {\n const s = spinner();\n s.start('Fetching agents...');\n const agents = await client.list();\n s.stop(`Found ${agents.length} agents`);\n\n if (agents.length === 0) {\n intro(yellow('No agents found in your workspace.'));\n return;\n }\n\n const agentId = await select({\n message: 'Select an agent to run:',\n options: agents.map(a => ({ value: a.id, label: a.name, hint: a.description || 'No description' }))\n });\n\n if (isCancel(agentId)) return;\n\n await handleAgentRun(client, agentId as string, agents.find(a => a.id === agentId)?.name || 'Agent');\n}\n\nexport async function handleAgentRun(client: AgentClient, agentId: string, agentName: string) {\n intro(bgCyan(black(` Chatting with ${agentName} `)));\n console.log(gray('Type \"exit\" to quit conversation.'));\n\n let conversationId: string | undefined = undefined;\n\n while (true) {\n const input = await text({\n message: 'You:',\n placeholder: 'Type a message...',\n });\n\n if (isCancel(input) || input === 'exit') {\n break;\n }\n\n const s = spinner();\n s.start('Agent is thinking...');\n try {\n const result = await client.execute(agentId, { prompt: input }, [], conversationId);\n s.stop();\n\n if ((result.output as any)?.response) {\n console.log(gradient.pastel(`Agent: ${(result.output as any).response}`));\n } else {\n console.log(gradient.pastel(`Agent: ${JSON.stringify(result.output)}`));\n }\n\n conversationId = result.conversation_id;\n } catch (e: any) {\n s.stop(red('Error running agent.'));\n console.error(e);\n }\n }\n}\n","import path from 'path';\nimport fs from 'fs';\nimport { text, confirm, select, isCancel, cancel, intro, outro, showSuccess, showInfo, spinner, colors } from '../ui';\nimport { getConfig } from '../config';\nimport { handleLogin } from '../auth';\n\nexport async function handleInit() {\n intro('Initializing new Langtrain project...');\n\n const cwd = process.cwd();\n\n // 1. Check if already initialized\n if (fs.existsSync(path.join(cwd, 'langtrain.config.json'))) {\n showInfo('langtrain.config.json already exists in this directory.');\n const overwrite = await confirm({\n message: 'Do you want to re-initialize and overwrite the config?',\n initialValue: false\n });\n\n if (isCancel(overwrite) || !overwrite) {\n outro('Initialization cancelled.');\n return;\n }\n }\n\n // 2. Ask for Project Details\n const projectName = await text({\n message: 'What is the name of your project?',\n placeholder: 'my-ai-app',\n initialValue: path.basename(cwd),\n validate(value) {\n if (!value || value.length === 0) return 'Project name is required!';\n }\n });\n\n if (isCancel(projectName)) {\n cancel('Operation cancelled.');\n return;\n }\n\n let config = getConfig();\n let apiKey = config.apiKey;\n\n if (apiKey) {\n showSuccess('Found existing Langtrain credentials.');\n } else {\n const shouldLogin = await confirm({\n message: 'You are not logged in. Do you want to log in now?',\n initialValue: true\n });\n\n if (isCancel(shouldLogin)) {\n cancel('Operation cancelled.');\n return;\n }\n\n if (shouldLogin) {\n await handleLogin();\n config = getConfig(); // Reload config\n apiKey = config.apiKey;\n } else {\n apiKey = await text({\n message: 'Enter your Langtrain API Key (optional for local dev):',\n placeholder: 'lt_sk_...',\n initialValue: ''\n }) as string;\n\n if (isCancel(apiKey)) {\n cancel('Operation cancelled.');\n return;\n }\n }\n }\n\n // 3. Create Config File\n const s = spinner();\n s.start('Creating configuration...');\n\n const configContent = {\n name: projectName,\n apiKey: apiKey || undefined,\n environment: 'development',\n agents: [\n {\n name: 'support-bot',\n description: 'A helpful customer support assistant',\n config: {\n model: 'llama-3-8b',\n system_prompt: 'You are a helpful customer support assistant.',\n temperature: 0.7\n }\n }\n ]\n };\n\n fs.writeFileSync(path.join(cwd, 'langtrain.config.json'), JSON.stringify(configContent, null, 2));\n\n showSuccess('Project initialized successfully!');\n console.log(colors.dim('\\nNext steps:'));\n console.log(` 1. Run ${colors.cyan('lt deploy')} to push your agent to the cloud.`);\n console.log(` 2. Run ${colors.cyan('lt dev')} to start the local development loop.`);\n\n outro('Happy coding!');\n}\n","import { intro, outro, showSuccess, showError, showWarning, showInfo, spinner, colors } from '../ui';\nimport { getConfig } from '../config';\nimport { getSubscription } from '../auth';\nimport os from 'os';\n\nexport async function handleDoctor() {\n intro('Running Langtrain Doctor...');\n\n const s = spinner();\n let issues = 0;\n\n // 1. Check Node Environment\n s.start('Checking Node.js environment...');\n const nodeVersion = process.version;\n const platform = os.platform();\n const arch = os.arch();\n\n if (parseInt(nodeVersion.replace('v', '').split('.')[0]) < 18) {\n s.stop(colors.red(`Node.js version ${nodeVersion} is outdated. Please upgrade to v18+.`));\n issues++;\n } else {\n s.stop(`Node.js ${nodeVersion} (${platform} ${arch})`);\n }\n\n // 2. Check Configuration\n s.start('Checking configuration...');\n const config = getConfig();\n if (!config.apiKey) {\n s.stop(colors.yellow('API Key is missing. Run `langtrain login` or set LANGTRAIN_API_KEY.'));\n issues++;\n } else {\n s.stop('Configuration found.');\n\n // 3. Check API Connectivity\n s.start('Checking API connectivity...');\n try {\n const plan = await getSubscription(config.apiKey);\n s.stop(`Connected to Langtrain Cloud (Plan: ${colors.green(plan?.plan || 'unknown')})`);\n } catch (e: any) {\n s.stop(colors.red(`Failed to connect to Langtrain Cloud: ${e.message}`));\n issues++;\n }\n }\n\n console.log(''); // Spacer\n\n if (issues === 0) {\n showSuccess('Your Langtrain environment is healthy! Ready to build.');\n } else {\n showWarning(`Found ${issues} issue(s). Please resolve them for the best experience.`);\n }\n\n outro('Doctor check complete.');\n}\n","import { text, select, confirm, isCancel, cancel, spinner, intro, red, green, yellow, gray } from '../ui';\nimport { getConfig } from '../config';\nimport { FileClient } from '../../index';\nimport path from 'path';\nimport fs from 'fs';\n\nexport async function handleDataUpload(client: FileClient) {\n const config = getConfig();\n let workspaceId = config.workspace_id;\n\n if (!workspaceId) {\n // Optional: ask for workspace ID or try to infer? \n // For upload, workspace_id is often optional (inferred from API key's default workspace)\n // But let's ask if user wants to specify.\n }\n\n const filePath = await text({\n message: 'Path to file:',\n placeholder: './dataset.jsonl',\n validate(value) {\n if (!value) return 'Required';\n if (!fs.existsSync(value)) return 'File not found';\n }\n });\n\n if (isCancel(filePath)) return;\n\n const purpose = await select({\n message: 'File Purpose:',\n options: [\n { value: 'fine-tune', label: 'Fine-tuning (JSONL)' },\n { value: 'vision-tune', label: 'Vision Tuning (Image/Zip)' },\n { value: 'agent-knowledge', label: 'Agent Knowledge' }\n ]\n });\n\n if (isCancel(purpose)) return;\n\n const s = spinner();\n s.start('Uploading file...');\n\n try {\n const result = await client.upload(filePath as string, workspaceId, purpose as string);\n s.stop(green('File uploaded successfully!'));\n console.log(gray(`ID: ${result.id}`));\n console.log(gray(`Name: ${result.filename}`));\n console.log(gray(`Bytes: ${result.bytes}`));\n } catch (e: any) {\n s.stop(red(`Upload failed: ${e.message}`));\n }\n}\n\nexport async function handleDataList(client: FileClient) {\n const config = getConfig();\n let workspaceId = config.workspace_id;\n\n if (!workspaceId) {\n // Try without workspace ID (some APIs return user's files)\n // or ask\n workspaceId = await text({ message: 'Enter Workspace ID (optional):', initialValue: '' });\n if (isCancel(workspaceId)) return;\n }\n\n const s = spinner();\n s.start('Fetching files...');\n\n try {\n const files = await client.list(workspaceId as string);\n s.stop(`Found ${files.length} files`);\n\n if (files.length === 0) {\n console.log(yellow('No files found.'));\n return;\n }\n\n // Just list them for now, maybe select to delete later?\n files.forEach(f => {\n console.log(`${f.id.padEnd(30)} ${f.filename.padEnd(20)} ${f.purpose} (${f.bytes}b)`);\n });\n\n } catch (e: any) {\n s.stop(red(`Failed to list files: ${e.message}`));\n }\n}\n","import { intro, outro, spinner, green, red, yellow, showSuccess } from '../ui';\nimport { getConfig } from '../config';\nimport { AgentClient, AgentCreate } from '../../index';\n\nexport async function handleDeploy(client: AgentClient) {\n intro('Deploying configuration to Langtrain Cloud...');\n\n const config = getConfig();\n const agents = config.agents || [];\n\n if (agents.length === 0) {\n intro(yellow('No agents found in langtrain.config.json'));\n return;\n }\n\n // Iterate and deploy\n for (const agentConfig of agents) {\n const s = spinner();\n s.start(`Deploying agent: ${agentConfig.name}...`);\n\n try {\n // Check if agent exists (by name? logic needed)\n // Ideally we store ID in config after create, but for now let's just create new or try to find by name.\n // Listing all agents is expensive if many, but safe for now.\n const existingAgents = await client.list();\n const existing = existingAgents.find(a => a.name === agentConfig.name);\n\n if (existing) {\n // Update (Note: SDK didn't expose update in my view_file, assuming create or need to add update)\n // If update not available, we skip or warn.\n // Let's assume we can't update yet as per SDK view.\n // So we just skip if exists.\n s.stop(yellow(`Agent ${agentConfig.name} already exists (ID: ${existing.id}). Skipping update (not supported yet).`));\n } else {\n // Create\n const payload: AgentCreate = {\n workspace_id: config.workspace_id || (existingAgents[0]?.workspace_id) || '', // Need a way to get workspace!\n name: agentConfig.name,\n description: agentConfig.description,\n config: agentConfig.config\n };\n\n // Fallback for workspace_id\n if (!payload.workspace_id) {\n // Try to get from first agent or error\n // Realistically, user needs to set workspace_id in config or we infer from API key scope.\n // Let's warn.\n s.stop(red(`Failed: Workspace ID missing in config for ${agentConfig.name}`));\n continue;\n }\n\n await client.create(payload);\n s.stop(green(`Agent ${agentConfig.name} deployed successfully!`));\n }\n\n } catch (e: any) {\n s.stop(red(`Failed to deploy ${agentConfig.name}: ${e.message}`));\n }\n }\n\n showSuccess('Deployment complete.');\n}\n","import { intro, outro, spinner, green, red, yellow, showInfo, gray } from '../ui';\nimport { AgentClient } from '../../index';\nimport { handleDeploy } from './deploy';\nimport fs from 'fs';\nimport path from 'path';\n\nexport async function handleDev(client: AgentClient) {\n intro('Starting Langtrain Development Server...');\n\n const configPath = path.join(process.cwd(), 'langtrain.config.json');\n if (!fs.existsSync(configPath)) {\n intro(red('langtrain.config.json not found. Run \"lt init\" first.'));\n return;\n }\n\n console.log(gray(`Watching ${configPath} for changes...`));\n\n let isDeploying = false;\n\n // Initial Deploy\n await handleDeploy(client);\n\n fs.watch(configPath, async (eventType) => {\n if (eventType === 'change' && !isDeploying) {\n isDeploying = true;\n console.log(yellow('Configuration changed. Redeploying...'));\n // Wait a bit for file write to complete\n await new Promise(r => setTimeout(r, 500));\n try {\n await handleDeploy(client);\n } catch (e: any) {\n console.error(red(`Deploy failed: ${e.message}`));\n } finally {\n isDeploying = false;\n console.log(gray(`Watching ${configPath}...`));\n }\n }\n });\n\n // Keep process alive\n await new Promise(() => { });\n}\n","{\n \"name\": \"langtrain\",\n \"version\": \"0.1.19\",\n \"description\": \"Unified JavaScript SDK for Langtrain Ecosystem\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"langtrain\": \"./dist/cli.js\",\n \"lt\": \"./dist/cli.js\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n \"postinstall\": \"node dist/cli.js --first-run || true\"\n },\n \"keywords\": [\n \"langtrain\",\n \"langvision\",\n \"langtune\",\n \"sdk\",\n \"ai\",\n \"llm\",\n \"finetuning\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/langtrain-ai/langtrain-sdk.git\"\n },\n \"author\": \"Langtrain AI\",\n \"license\": \"MIT\",\n \"devDependencies\": {\n \"@types/gradient-string\": \"^1.1.6\",\n \"@types/node\": \"^25.2.3\",\n \"langtune\": \"file:../langtune/js\",\n \"langvision\": \"file:../langvision/js\",\n \"tsup\": \"^8.0.2\",\n \"typescript\": \"^5.4.2\"\n },\n \"dependencies\": {\n \"@clack/prompts\": \"^1.0.1\",\n \"axios\": \"^1.13.5\",\n \"commander\": \"^14.0.3\",\n \"gradient-string\": \"^3.0.0\",\n \"kleur\": \"^4.1.5\",\n \"langtrain\": \"^0.1.15\"\n }\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport path from 'path';\nimport { select, isCancel, outro, intro, colors } from './ui'; // Ensure clear is exported if added, otherwise use console.clear()\nimport { showBanner } from './ui';\nimport { ensureAuth, handleLogin, getSubscription } from './auth';\nimport { getMenu, MenuState } from './menu';\nimport { getConfig } from './config';\n\n// Handlers\nimport { handleSubscriptionStatus } from './handlers/subscription';\nimport { handleTuneFinetune, handleTuneGenerate, handleTuneList } from './handlers/tune';\nimport { handleVisionFinetune, handleVisionGenerate } from './handlers/vision';\nimport { handleAgentCreate, handleAgentDelete, handleAgentList } from './handlers/agent';\nimport { handleInit } from './handlers/init';\nimport { handleDoctor } from './handlers/doctor';\nimport { handleDataUpload } from './handlers/data';\nimport { handleDeploy } from './handlers/deploy';\nimport { handleDev } from './handlers/dev';\n\n// Clients\nimport { SubscriptionInfo, Langvision, Langtune, AgentClient, ModelClient, FileClient, TrainingClient } from '../index';\nimport packageJson from '../../package.json';\n\nexport async function main() {\n const program = new Command();\n const version = packageJson.version;\n\n program\n .name('langtrain')\n .description(packageJson.description || 'Langtrain CLI for AI Model Fine-tuning and Generation')\n .version(version);\n\n // Register standalone commands\n program.command('init')\n .description('Initialize a new Langtrain project')\n .action(handleInit);\n\n program.command('deploy')\n .description('Deploy configuration to Langtrain Cloud')\n .action(async () => {\n const config = getConfig();\n const apiKey = config.apiKey || '';\n const client = new AgentClient({ apiKey, baseUrl: config.baseUrl });\n await handleDeploy(client);\n });\n\n program.command('dev')\n .description('Start local development server (Watch Mode)')\n .action(async () => {\n const config = getConfig();\n const apiKey = config.apiKey || '';\n const client = new AgentClient({ apiKey, baseUrl: config.baseUrl });\n await handleDev(client);\n });\n\n program.action(async () => {\n showBanner(version);\n\n // 1. Auth & Plan Check Force\n // 1. Auth & Plan Check (Lazy)\n // 0. First Run Check\n const isFirstRun = process.argv.includes('--first-run');\n if (isFirstRun) {\n // Check if interactive\n if (process.stdin.isTTY) {\n intro('Welcome to Langtrain! Let\\'s get you set up.');\n await handleLogin();\n // Reload config after login\n } else {\n console.log('Langtrain installed! Run \"npx langtrain login\" to authenticate.');\n process.exit(0);\n }\n }\n\n // 1. Auth & Plan Check (Lazy)\n let config = getConfig();\n let apiKey = config.apiKey || '';\n let plan: SubscriptionInfo | null = null;\n\n // Try to fetch plan if key exists? \n if (apiKey) {\n try { plan = await getSubscription(apiKey); } catch { }\n }\n\n // 2. Global Client Init\n let clients = {\n vision: new Langvision({ apiKey }),\n tune: new Langtune({ apiKey }),\n agent: new AgentClient({ apiKey, baseUrl: config.baseUrl }),\n model: new ModelClient({ apiKey, baseUrl: config.baseUrl }),\n train: new TrainingClient({ apiKey, baseUrl: config.baseUrl })\n };\n\n // 3. Navigation Loop\n let currentState: MenuState = 'main';\n\n while (true) {\n // Clear screen for clean sub-menu navigation?\n // Maybe not full clear to keep banner, but at least separate visual blocks.\n // showBanner(version); // Re-showing banner might be too much flickering.\n // console.log(''); // simple spacer\n\n const operation = await select({\n message: getMessageForState(currentState),\n options: getMenu(currentState, plan, !!apiKey)\n });\n\n if (isCancel(operation)) {\n if (currentState === 'main') {\n outro('Goodbye!');\n process.exit(0);\n } else {\n currentState = 'main';\n continue;\n }\n }\n\n const op = operation as string;\n\n // Navigation Logic\n if (op === 'exit') {\n outro('Goodbye!');\n process.exit(0);\n }\n if (op === 'back') {\n currentState = 'main';\n continue;\n }\n if (op.startsWith('nav-')) {\n currentState = op.replace('nav-', '') as MenuState;\n continue;\n }\n\n // Action Logic\n try {\n switch (op) {\n case 'login':\n await handleLogin();\n config = getConfig();\n apiKey = config.apiKey || '';\n clients = {\n vision: new Langvision({ apiKey }),\n tune: new Langtune({ apiKey }),\n agent: new AgentClient({ apiKey, baseUrl: config.baseUrl }),\n model: new ModelClient({ apiKey, baseUrl: config.baseUrl }),\n train: new TrainingClient({ apiKey, baseUrl: config.baseUrl })\n };\n try { plan = await getSubscription(apiKey); } catch { }\n break;\n case 'status': await handleSubscriptionStatus(); break;\n case 'init': await handleInit(); break;\n case 'deploy': await handleDeploy(clients.agent); break;\n case 'dev': await handleDev(clients.agent); break;\n case 'doctor': await handleDoctor(); break;\n case 'tune-finetune': await handleTuneFinetune(clients.tune, clients.model); break;\n case 'tune-list': await handleTuneList(clients.train); break;\n case 'tune-generate': await handleTuneGenerate(clients.tune); break;\n case 'vision-finetune': await handleVisionFinetune(clients.vision, clients.model); break;\n case 'vision-generate': await handleVisionGenerate(clients.vision); break;\n case 'agent-list': await handleAgentList(clients.agent); break;\n case 'agent-create': await handleAgentCreate(clients.agent, clients.model); break;\n case 'agent-delete': await handleAgentDelete(clients.agent); break;\n case 'data-upload': await handleDataUpload(new FileClient({ apiKey })); break;\n }\n\n // After action, where do we go? \n // Stay in current state (sub-menu) is usually preferred.\n\n } catch (error: any) {\n outro(colors.red(`Error: ${error.message}`));\n }\n }\n });\n\n program.parse(process.argv);\n}\n\nmain().catch(console.error);\n\nfunction getMessageForState(state: MenuState): string {\n switch (state) {\n case 'main': return 'Main Menu:';\n case 'agents': return 'Agents & Tools:';\n case 'text': return 'Langtune (Text Operations):';\n case 'vision': return 'Langvision (Vision Operations):';\n case 'settings': return 'Settings:';\n default: return 'Select an option:';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/Table.ts","../src/cli/ui.ts","../src/cli/config.ts","../src/cli/handlers/agent.ts","../src/cli/handlers/data.ts","../src/cli/index.ts","../src/cli/auth.ts","../src/cli/menu.ts","../src/cli/handlers/subscription.ts","../src/cli/handlers/tune.ts","../src/cli/handlers/vision.ts","../src/cli/handlers/init.ts","../src/cli/handlers/doctor.ts","../src/cli/handlers/deploy.ts","../src/cli/handlers/dev.ts","../src/cli/handlers/guardrails.ts","../src/cli/handlers/env.ts","../src/cli/handlers/logs.ts","../package.json"],"names":["createTable","headers","Table","h","colors","init_Table","__esmMin","init_ui","showBanner","version","gradient","bgMagenta","black","intro","message","magenta","outro","gray","spinner","msg","green","showSuccess","showWarning","yellow","showInfo","blue","red","cyan","bold","dim","white","getConfig","fs","CONFIG_FILE","saveConfig","config","CONFIG_DIR","init_config","path","os","handleAgentCreate","client","modelClient","name","text","value","isCancel","cancel","description","systemPrompt","model","s","models","select","m","s2","agents","workspaceId","wid","agent","e","handleAgentDelete","agentId","a","d","handleAgentList","table","handleAgentRun","agentName","initialMessage","conversationId","result","input","init_agent","data_exports","__export","handleDataAnalyze","handleDataList","handleDataRefine","handleDataUpload","filePath","purpose","files","file","f","formatBytes","fileId","agentClient","AgentClient","analyst","gClient","GuardrailClient","wId","selection","guardId","guards","g","bytes","decimals","k","dm","sizes","init_data","init_src","handleLogin","apiKey","password","info","SubscriptionClient","getSubscription","planLabel","getMenu","state","plan","isAuthenticated","menu","handleSubscriptionStatus","handleTuneFinetune","tune","trainFile","epochs","track","upgrade","confirm","fileClient","FileClient","trainingClient","TrainingClient","fileResp","job","cont","handleTuneGenerate","prompt","response","handleTuneList","jobs","j","statusColor","selectedJob","handleTuneStatus","jobId","id","action","handleTuneCancel","confirmCancel","handleVisionFinetune","vision","dataset","r","handleVisionGenerate","handleInit","cwd","overwrite","projectName","shouldLogin","configContent","handleDoctor","issues","nodeVersion","platform","arch","handleDeploy","agentConfig","existingAgents","existing","payload","handleDev","configPath","isDeploying","eventType","handleGuardrailList","handleGuardrailCreate","minLen","enablePii","patterns","regexList","p","handleEnvList","secrets","sec","handleEnvSet","keyVal","key","handleEnvMenu","handleLogs","found","logs","log","package_default","main","program","Command","SecretClient","clients","Langvision","Langtune","ModelClient","currentState","operation","getMessageForState","op","error","dataCommand","Ve","guardCommand"],"mappings":"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","file":"cli.js","sourcesContent":["import Table from 'cli-table3';\nimport { colors } from '../ui';\n\nexport function createTable(headers: string[]) {\n return new Table({\n head: headers.map(h => colors.magenta(colors.bold(h))),\n chars: {\n 'top': '─', 'top-mid': '┬', 'top-left': '┌', 'top-right': '┐',\n 'bottom': '─', 'bottom-mid': '┴', 'bottom-left': '└', 'bottom-right': '┘',\n 'left': '│', 'left-mid': '├', 'mid': '─', 'mid-mid': '┼',\n 'right': '│', 'right-mid': '┤', 'middle': '│'\n },\n style: {\n 'padding-left': 1,\n 'padding-right': 1,\n head: [], // handle colors manually\n border: ['gray']\n }\n });\n}\n","import { text, select, confirm, password, isCancel, cancel, note } from '@clack/prompts';\nimport { bgMagenta, black, red, green, yellow, gray, cyan, bold, dim, blue, magenta, white } from 'kleur/colors';\nimport gradient from 'gradient-string';\n\n// Re-export specific prompts to keep imports clean in other files\nexport { text, select, confirm, password, isCancel, cancel, note };\n\nexport function showBanner(version: string) {\n console.clear();\n const banner = `\n ██╗ █████╗ ███╗ ██╗ ██████╗████████╗██████╗ █████╗ ██╗███╗ ██╗\n ██║ ██╔══██╗████╗ ██║██╔════╝╚══██╔══╝██╔══██╗██╔══██╗██║████╗ ██║\n ██║ ███████║██╔██╗ ██║██║ ███╗ ██║ ██████╔╝███████║██║██╔██╗ ██║\n ██║ ██╔══██║██║╚██╗██║██║ ██║ ██║ ██╔══██╗██╔══██║██║██║╚██╗██║\n ███████╗██║ ██║██║ ╚████║╚██████╔╝ ██║ ██║ ██║██║ ██║██║██║ ╚████║\n ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝\n `;\n // Brand Gradient: Purple to Pink to Blue (Light Luxury)\n console.log(gradient(['#A855F7', '#EC4899', '#3B82F6'])(banner));\n\n // Elegant Badge: Black text on Magenta background\n console.log(`${bgMagenta(black(` Langtrain SDK v${version} `))}\\n`);\n}\n\nexport function intro(message: string) {\n console.log(magenta(`◆ ${message}`));\n}\n\nexport function outro(message: string) {\n console.log(gray(`└ ${message}`));\n}\n\nexport function spinner() {\n return {\n start: (msg: string) => process.stdout.write(`${magenta('●')} ${msg}\\r`),\n stop: (msg?: string) => {\n if (msg) console.log(`${green('✔')} ${msg}`);\n else console.log(''); // Newline\n },\n message: (msg: string) => process.stdout.write(`${magenta('●')} ${msg}\\r`)\n };\n}\n\nexport function showError(message: string) {\n console.log(red(`✖ Error: ${message}`));\n}\n\nexport function showSuccess(message: string) {\n console.log(green(`✔ ${message}`));\n}\n\nexport function showWarning(message: string) {\n console.log(yellow(`⚠ Warning: ${message}`));\n}\n\nexport function showInfo(message: string) {\n console.log(blue(`ℹ ${message}`));\n}\n\nexport function showDim(message: string) {\n console.log(dim(message));\n}\n\n// Re-export for backward compatibility\nexport { bgMagenta, black, red, green, yellow, gray, cyan, bold, dim, blue, gradient, magenta, white };\n\nexport const colors = {\n bgMagenta, black, red, green, yellow, gray, cyan, bold, dim, blue, magenta, white\n};\n\nexport * from './components/Table';\n\n","import fs from 'fs';\nimport path from 'path';\nimport os from 'os';\n\nconst CONFIG_DIR = path.join(os.homedir(), '.langtrain');\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');\n\nexport interface CLIConfig {\n apiKey?: string;\n baseUrl?: string;\n [key: string]: any;\n}\n\nexport function getConfig(): CLIConfig {\n if (!fs.existsSync(CONFIG_FILE)) return {};\n try {\n return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8'));\n } catch {\n return {};\n }\n}\n\nexport function saveConfig(config: CLIConfig) {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\n }\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));\n}\n","import { text, select, confirm, isCancel, cancel, spinner, intro, red, green, yellow, gray, bgMagenta, black, gradient, createTable } from '../ui';\nimport { AgentClient, ModelClient } from '../../index';\n\nexport async function handleAgentCreate(client: AgentClient, modelClient: ModelClient) {\n const name = await text({\n message: 'Agent Name:',\n placeholder: 'e.g. Support Bot',\n validate(value) {\n if (!value || value.length === 0) return 'API Key is required';\n },\n });\n if (isCancel(name)) {\n cancel('Operation cancelled');\n return;\n }\n\n const description = await text({\n message: 'Description:',\n placeholder: 'e.g. A helpful support assistant',\n });\n if (isCancel(description)) return;\n\n const systemPrompt = await text({\n message: 'System Prompt:',\n placeholder: 'e.g. You are a helpful assistant.',\n initialValue: 'You are a helpful assistant.'\n });\n if (isCancel(systemPrompt)) return;\n\n // Select model\n let model: string | symbol = 'gpt-4o';\n const s = spinner();\n s.start('Fetching agent models...');\n try {\n const models = await modelClient.list('agent');\n s.stop(`Found ${models.length} models`);\n if (models.length > 0) {\n model = await select({\n message: 'Select Agent Model:',\n options: models.map(m => ({ value: m.id, label: m.id }))\n });\n }\n } catch (e) {\n s.stop(yellow('Could not fetch models, using default.'));\n }\n\n if (isCancel(model)) return;\n\n const s2 = spinner();\n s2.start('Creating agent...');\n\n try {\n const agents = await client.list();\n let workspaceId = \"\";\n if (agents.length > 0) {\n workspaceId = agents[0].workspace_id;\n } else {\n s2.stop(yellow('Workspace ID needed (no existing agents found).'));\n const wid = await text({\n message: 'Enter Workspace ID (UUID):',\n validate(value) {\n if (!value || value.length === 0) return 'Required';\n },\n });\n if (isCancel(wid)) return;\n workspaceId = wid as string;\n s2.start('Creating agent...');\n }\n\n const agent = await client.create({\n workspace_id: workspaceId,\n name: name as string,\n description: description as string,\n config: {\n system_prompt: systemPrompt as string,\n model: model as string\n }\n });\n s2.stop(green(`Agent \"${agent.name}\" created successfully! ID: ${agent.id}`));\n } catch (e: any) {\n s2.stop(red('Failed to create agent.'));\n throw e;\n }\n}\n\nexport async function handleAgentDelete(client: AgentClient) {\n const s = spinner();\n s.start('Fetching agents...');\n const agents = await client.list();\n s.stop(`Found ${agents.length} agents`);\n\n if (agents.length === 0) {\n intro(yellow('No agents to delete.'));\n return;\n }\n\n const agentId = await select({\n message: 'Select an agent to DELETE:',\n options: agents.map(a => ({ value: a.id, label: a.name, hint: a.description || 'No description' }))\n });\n\n if (isCancel(agentId)) return;\n\n const confirmDel = await select({\n message: `Are you sure you want to delete this agent?`,\n options: [\n { value: 'yes', label: 'Yes, delete it', hint: 'Cannot be undone' },\n { value: 'no', label: 'No, keep it' }\n ]\n });\n\n if (confirmDel !== 'yes') {\n intro(gray('Deletion cancelled.'));\n return;\n }\n\n const d = spinner();\n d.start('Deleting agent...');\n try {\n await client.delete(agentId as string);\n d.stop(green('Agent deleted successfully.'));\n } catch (e: any) {\n d.stop(red('Failed to delete agent.'));\n throw e;\n }\n}\n\nexport async function handleAgentList(client: AgentClient) {\n const s = spinner();\n s.start('Fetching agents...');\n const agents = await client.list();\n s.stop(`Found ${agents.length} agents`);\n\n if (agents.length === 0) {\n intro(yellow('No agents found in your workspace.'));\n return;\n }\n\n // Display Table\n const table = createTable(['ID', 'Name', 'Model', 'Created']);\n agents.forEach(a => {\n table.push([\n a.id.substring(0, 8) + '...',\n a.name,\n (a.config as any)?.model || 'default',\n new Date(a.created_at).toLocaleDateString()\n ]);\n });\n console.log(table.toString());\n console.log(''); // spacer\n\n const agentId = await select({\n message: 'Select an agent to run:',\n options: agents.map(a => ({ value: a.id, label: a.name, hint: a.description || 'No description' }))\n });\n\n if (isCancel(agentId)) return;\n\n await handleAgentRun(client, agentId as string, agents.find(a => a.id === agentId)?.name || 'Agent');\n}\n\nexport async function handleAgentRun(client: AgentClient, agentId: string, agentName: string, initialMessage?: string) {\n intro(bgMagenta(black(` Chatting with ${agentName} `)));\n console.log(gray('Type \"exit\" to quit conversation.'));\n\n let conversationId: string | undefined = undefined;\n\n // Send initial message if provided\n if (initialMessage) {\n const s = spinner();\n s.start('Agent is analyzing...');\n try {\n const result = await client.execute(agentId, { prompt: initialMessage }, [], conversationId);\n s.stop();\n if ((result.output as any)?.response) {\n console.log(gradient.pastel(`Agent: ${(result.output as any).response}`));\n } else {\n console.log(gradient.pastel(`Agent: ${JSON.stringify(result.output)}`));\n }\n conversationId = result.conversation_id;\n } catch (e: any) {\n s.stop(red('Error running agent.'));\n console.error(e);\n }\n }\n\n while (true) {\n const input = await text({\n message: 'You:',\n placeholder: 'Type a message...',\n });\n\n if (isCancel(input) || input === 'exit') {\n break;\n }\n\n const s = spinner();\n s.start('Agent is thinking...');\n try {\n const result = await client.execute(agentId, { prompt: input }, [], conversationId);\n s.stop();\n\n if ((result.output as any)?.response) {\n console.log(gradient.pastel(`Agent: ${(result.output as any).response}`));\n } else {\n console.log(gradient.pastel(`Agent: ${JSON.stringify(result.output)}`));\n }\n\n conversationId = result.conversation_id;\n } catch (e: any) {\n s.stop(red('Error running agent.'));\n console.error(e);\n }\n }\n}\n","import { text, select, confirm, isCancel, cancel, spinner, intro, red, green, yellow, gray } from '../ui';\nimport { getConfig } from '../config';\nimport { FileClient, AgentClient, GuardrailClient } from '../../index';\nimport { handleAgentRun } from './agent';\nimport fs from 'fs';\n\nexport async function handleDataUpload(client: FileClient) {\n const config = getConfig();\n let workspaceId = config.workspace_id;\n\n if (!workspaceId) {\n // Optional: ask for workspace ID or try to infer? \n // For upload, workspace_id is often optional (inferred from API key's default workspace)\n // But let's ask if user wants to specify.\n }\n\n const filePath = await text({\n message: 'Path to file:',\n placeholder: './dataset.jsonl',\n validate(value) {\n if (!value) return 'Required';\n if (!fs.existsSync(value)) return 'File not found';\n }\n });\n\n if (isCancel(filePath)) return;\n\n const purpose = await select({\n message: 'File Purpose:',\n options: [\n { value: 'fine-tune', label: 'Fine-tuning (JSONL)' },\n { value: 'vision-tune', label: 'Vision Tuning (Image/Zip)' },\n { value: 'agent-knowledge', label: 'Agent Knowledge' }\n ]\n });\n\n if (isCancel(purpose)) return;\n\n const s = spinner();\n s.start('Uploading file...');\n\n try {\n const result = await client.upload(filePath as string, workspaceId, purpose as string);\n s.stop(green('File uploaded successfully!'));\n console.log(gray(`ID: ${result.id}`));\n console.log(gray(`Name: ${result.filename}`));\n console.log(gray(`Bytes: ${result.bytes}`));\n } catch (e: any) {\n s.stop(red(`Upload failed: ${e.message}`));\n }\n}\n\nexport async function handleDataList(client: FileClient) {\n const config = getConfig();\n let workspaceId = config.workspace_id;\n\n if (!workspaceId) {\n // Try without workspace ID (some APIs return user's files)\n // or ask\n workspaceId = await text({ message: 'Enter Workspace ID (optional):', initialValue: '' });\n if (isCancel(workspaceId)) return;\n }\n\n const s = spinner();\n s.start('Fetching files...');\n\n try {\n const files = await client.list(workspaceId as string);\n s.stop(`Found ${files.length} files`);\n\n if (files.length === 0) {\n console.log(yellow('No files found.'));\n return;\n }\n\n const file = await select({\n message: 'Select file to analyze (or cancel to exit):',\n options: files.map(f => ({ value: f.id, label: `${f.filename} (${formatBytes(f.bytes)})` }))\n });\n\n if (isCancel(file)) return;\n\n await handleDataAnalyze(client, file as string);\n\n } catch (e: any) {\n s.stop(red(`Failed to list files: ${e.message}`));\n }\n}\n\nexport async function handleDataAnalyze(client: FileClient, fileId: string) {\n const config = getConfig();\n const s2 = spinner();\n s2.start('Connecting to Data Analyst...');\n\n try {\n const agentClient = new AgentClient({ apiKey: config.apiKey || '', baseUrl: config.baseUrl });\n const agents = await agentClient.list();\n // Check name (name is optional in type but we know it exists for system agent)\n let analyst = agents.find(a => a.name && a.name === \"Langtrain Data Analyst\");\n\n if (!analyst) {\n s2.stop(yellow('Data Analyst agent (System) not found. Please contact admin to provision it.'));\n return;\n }\n\n s2.stop(green('Connected to Data Analyst.'));\n\n console.log(gray(`\\nAnalyzing dataset ${fileId}...\\n`));\n\n await handleAgentRun(agentClient, analyst.id, analyst.name, `Please analyze the dataset with ID: ${fileId}`);\n\n } catch (e: any) {\n s2.stop(red(`Failed to connect: ${e.message}`));\n }\n}\n\nexport async function handleDataRefine(client: FileClient, fileId?: string) {\n const config = getConfig();\n const gClient = new GuardrailClient({ apiKey: config.apiKey || '', baseUrl: config.baseUrl });\n\n // 0. Select File if not provided\n if (!fileId) {\n const s = spinner();\n s.start('Fetching files...');\n try {\n // Need workspace ID logic similar to List?\n // client.list takes workspaceId.\n const wId = config.workspace_id || '';\n const files = await client.list(wId);\n s.stop(`Found ${files.length} files`);\n\n if (files.length === 0) {\n console.log(yellow('No files found. Upload one first.'));\n return;\n }\n\n const selection = await select({\n message: 'Select file to refine:',\n options: files.map(f => ({ value: f.id, label: `${f.filename} (${formatBytes(f.bytes)})` }))\n });\n\n if (isCancel(selection)) return;\n fileId = selection as string;\n\n } catch (e: any) {\n s.stop(red(`Failed to fetch files: ${e.message}`));\n return;\n }\n }\n\n // 1. Select Guardrail\n const s = spinner();\n s.start('Fetching guardrails...');\n let guardId = \"\";\n try {\n const guards = await gClient.list();\n s.stop(`Found ${guards.length} guardrails`);\n\n if (guards.length === 0) {\n console.log(yellow('No guardrails found. Please create one first using \"lt guardrails create\".'));\n return;\n }\n\n const selection = await select({\n message: 'Select a Guardrail to apply:',\n options: guards.map((g: any) => ({\n value: g.id,\n label: g.name,\n hint: g.description\n }))\n });\n\n if (isCancel(selection)) return;\n guardId = selection as string;\n\n } catch (e: any) {\n s.stop(red(`Failed to fetch guardrails: ${e.message}`));\n return;\n }\n\n // 2. Apply\n const s2 = spinner();\n s2.start('Applying guardrail (filtering dataset)...');\n\n try {\n const result = await gClient.apply(fileId, guardId);\n s2.stop(green('Dataset refined successfully!'));\n\n console.log(gray('Stats:'));\n console.log(`Original Rows: ${result.original_rows}`);\n console.log(`Filtered Rows: ${result.filtered_rows}`);\n console.log(red(`Removed: ${result.removed_rows} rows`));\n console.log(green(`New Dataset ID: ${result.new_dataset_id}`));\n\n } catch (e: any) {\n s2.stop(red(`Failed to refine dataset: ${e.message}`));\n }\n}\n\nfunction formatBytes(bytes: number, decimals = 2) {\n if (!+bytes) return '0 Bytes';\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport path from 'path';\nimport { select, isCancel, outro, intro, colors } from './ui'; // Ensure clear is exported if added, otherwise use console.clear()\nimport { showBanner } from './ui';\nimport { ensureAuth, handleLogin, getSubscription } from './auth';\nimport { getMenu, MenuState } from './menu';\nimport { getConfig } from './config';\n\n// Handlers\nimport { handleSubscriptionStatus } from './handlers/subscription';\nimport { handleTuneFinetune, handleTuneGenerate, handleTuneList } from './handlers/tune';\nimport { handleVisionFinetune, handleVisionGenerate } from './handlers/vision';\nimport { handleAgentCreate, handleAgentDelete, handleAgentList } from './handlers/agent';\nimport { handleInit } from './handlers/init';\nimport { handleDoctor } from './handlers/doctor';\nimport { handleDataUpload, handleDataRefine } from './handlers/data';\nimport { handleDeploy } from './handlers/deploy';\nimport { handleDev } from './handlers/dev';\nimport { handleGuardrailList, handleGuardrailCreate } from './handlers/guardrails';\n\nimport { handleEnvMenu } from './handlers/env';\nimport { handleLogs } from './handlers/logs';\n\n// Clients\nimport { SubscriptionInfo, Langvision, Langtune, AgentClient, ModelClient, FileClient, TrainingClient, SecretClient } from '../index';\nimport packageJson from '../../package.json';\n\nexport async function main() {\n const program = new Command();\n const version = packageJson.version;\n\n program\n .name('langtrain')\n .description(packageJson.description || 'Langtrain CLI for AI Model Fine-tuning and Generation')\n .version(version);\n\n // Register standalone commands\n program.command('init')\n .description('Initialize a new Langtrain project')\n .action(handleInit);\n\n program.command('deploy')\n .description('Deploy configuration to Langtrain Cloud')\n .action(async () => {\n const config = getConfig();\n const apiKey = config.apiKey || '';\n const client = new AgentClient({ apiKey, baseUrl: config.baseUrl });\n await handleDeploy(client);\n });\n\n program.command('dev')\n .description('Start local development server (Watch Mode)')\n .action(async () => {\n const config = getConfig();\n const apiKey = config.apiKey || '';\n const client = new AgentClient({ apiKey, baseUrl: config.baseUrl });\n await handleDev(client);\n });\n\n program.command('env')\n .description('Manage secrets and environment variables')\n .action(async () => {\n const config = getConfig();\n const apiKey = config.apiKey || '';\n const client = new SecretClient({ apiKey, baseUrl: config.baseUrl });\n await handleEnvMenu(client);\n });\n\n program.command('logs [agent]')\n .description('Stream logs from a deployed agent')\n .action(async (agent) => {\n const config = getConfig();\n const apiKey = config.apiKey || '';\n const client = new AgentClient({ apiKey, baseUrl: config.baseUrl });\n await handleLogs(client, agent);\n });\n\n program.action(async () => {\n showBanner(version);\n\n // 1. Auth & Plan Check Force\n // 1. Auth & Plan Check (Lazy)\n // 0. First Run Check\n const isFirstRun = process.argv.includes('--first-run');\n if (isFirstRun) {\n // Check if interactive\n if (process.stdin.isTTY) {\n intro('Welcome to Langtrain! Let\\'s get you set up.');\n await handleLogin();\n // Reload config after login\n } else {\n console.log('Langtrain installed! Run \"npx langtrain login\" to authenticate.');\n process.exit(0);\n }\n }\n\n // 1. Auth & Plan Check (Lazy)\n let config = getConfig();\n let apiKey = config.apiKey || '';\n let plan: SubscriptionInfo | null = null;\n\n // Try to fetch plan if key exists? \n if (apiKey) {\n try { plan = await getSubscription(apiKey); } catch { }\n }\n\n // 2. Global Client Init\n let clients = {\n vision: new Langvision({ apiKey }),\n tune: new Langtune({ apiKey }),\n agent: new AgentClient({ apiKey, baseUrl: config.baseUrl }),\n model: new ModelClient({ apiKey, baseUrl: config.baseUrl }),\n train: new TrainingClient({ apiKey, baseUrl: config.baseUrl }),\n secret: new SecretClient({ apiKey, baseUrl: config.baseUrl })\n };\n\n // 3. Navigation Loop\n let currentState: MenuState = 'main';\n\n while (true) {\n // Clear screen for clean sub-menu navigation?\n // Maybe not full clear to keep banner, but at least separate visual blocks.\n // showBanner(version); // Re-showing banner might be too much flickering.\n // console.log(''); // simple spacer\n\n const operation = await select({\n message: getMessageForState(currentState),\n options: getMenu(currentState, plan, !!apiKey)\n });\n\n if (isCancel(operation)) {\n if (currentState === 'main') {\n outro('Goodbye!');\n process.exit(0);\n } else {\n currentState = 'main';\n continue;\n }\n }\n\n const op = operation as string;\n\n // Navigation Logic\n if (op === 'exit') {\n outro('Goodbye!');\n process.exit(0);\n }\n if (op === 'back') {\n currentState = 'main';\n continue;\n }\n if (op.startsWith('nav-')) {\n currentState = op.replace('nav-', '') as MenuState;\n continue;\n }\n\n // Action Logic\n try {\n switch (op) {\n case 'login':\n await handleLogin();\n config = getConfig();\n apiKey = config.apiKey || '';\n clients = {\n vision: new Langvision({ apiKey }),\n tune: new Langtune({ apiKey }),\n agent: new AgentClient({ apiKey, baseUrl: config.baseUrl }),\n model: new ModelClient({ apiKey, baseUrl: config.baseUrl }),\n train: new TrainingClient({ apiKey, baseUrl: config.baseUrl }),\n secret: new SecretClient({ apiKey, baseUrl: config.baseUrl })\n };\n try { plan = await getSubscription(apiKey); } catch { }\n break;\n case 'status': await handleSubscriptionStatus(); break;\n case 'init': await handleInit(); break;\n case 'deploy': await handleDeploy(clients.agent); break;\n case 'dev': await handleDev(clients.agent); break;\n case 'env': await handleEnvMenu(clients.secret); break;\n case 'logs': await handleLogs(clients.agent); break;\n case 'doctor': await handleDoctor(); break;\n case 'tune-finetune': await handleTuneFinetune(clients.tune, clients.model); break;\n case 'tune-list': await handleTuneList(clients.train); break;\n case 'tune-generate': await handleTuneGenerate(clients.tune); break;\n case 'vision-finetune': await handleVisionFinetune(clients.vision, clients.model); break;\n case 'vision-generate': await handleVisionGenerate(clients.vision); break;\n case 'agent-list': await handleAgentList(clients.agent); break;\n case 'agent-create': await handleAgentCreate(clients.agent, clients.model); break;\n case 'agent-delete': await handleAgentDelete(clients.agent); break;\n case 'data-upload': await handleDataUpload(new FileClient({ apiKey })); break;\n case 'guard-list': await handleGuardrailList(null); break;\n case 'guard-create': await handleGuardrailCreate(null); break;\n case 'data-refine': await handleDataRefine(new FileClient({ apiKey })); break;\n }\n\n // After action, where do we go? \n // Stay in current state (sub-menu) is usually preferred.\n\n } catch (error: any) {\n outro(colors.red(`Error: ${error.message}`));\n }\n }\n });\n\n const dataCommand = program.command('data')\n .description('Manage datasets');\n\n dataCommand.command('upload [file]')\n .description('Upload a dataset')\n .action(async (file) => {\n const config = getConfig();\n const apiKey = config.apiKey || '';\n const client = new FileClient({ apiKey, baseUrl: config.baseUrl });\n // handleDataUpload only takes client, file is prompted inside or we need to update handleDataUpload signature\n await handleDataUpload(client);\n });\n\n dataCommand.command('analyze')\n .description('Analyze a dataset with AI')\n .action(async () => {\n const config = getConfig();\n const apiKey = config.apiKey || '';\n const client = new FileClient({ apiKey, baseUrl: config.baseUrl });\n // handleDataAnalyze needs to be exported/imported\n // Assuming I named it handleDataAnalyze in previous step (I did edit existing function, likely need to rename or export new one)\n // Wait, I updated handleDataList in previous step to be the analyze function? \n // No, I added code TO handleDataList or replaced it?\n // Let me check previous tool call.\n // I replaced the end of handleDataList (the mocked download part) with analyze logic?\n // I should verify data.ts structure. \n // Let's assume I need to properly export handleDataAnalyze.\n // For now, I'll register it assuming export.\n // For now, I'll register it assuming export.\n const { handleDataList } = require('./handlers/data');\n await handleDataList(client);\n });\n\n dataCommand.command('refine [fileId]')\n .description('Refine a dataset using guardrails')\n .action(async (fileId) => {\n const config = getConfig();\n const apiKey = config.apiKey || '';\n const client = new FileClient({ apiKey, baseUrl: config.baseUrl });\n await handleDataRefine(client, fileId);\n });\n\n const guardCommand = program.command('guardrails')\n .description('Manage data guardrails');\n\n guardCommand.command('list')\n .description('List available guardrails')\n .action(async () => {\n await handleGuardrailList(null);\n });\n\n guardCommand.command('create')\n .description('Create a new guardrail')\n .action(async () => {\n await handleGuardrailCreate(null);\n });\n\n\n main().catch(console.error);\n\n function getMessageForState(state: MenuState): string {\n switch (state) {\n case 'main': return 'Main Menu:';\n case 'agents': return 'Agents & Tools:';\n case 'text': return 'Langtune (Text Operations):';\n case 'vision': return 'Langvision (Vision Operations):';\n case 'settings': return 'Settings:';\n default: return 'Select an option:';\n }\n }\n}\n","import { password, isCancel, cancel, intro, green, yellow, red, bgMagenta, black, spinner, gray } from './ui';\nimport { getConfig, saveConfig } from './config';\nimport { SubscriptionClient, SubscriptionInfo } from '../index';\n\nexport async function ensureAuth(): Promise<string> {\n let config = getConfig();\n\n if (!config.apiKey) {\n intro(yellow('Authentication required to verify plan & features.'));\n await handleLogin();\n config = getConfig();\n }\n\n return config.apiKey as string;\n}\n\nexport async function handleLogin() {\n while (true) {\n console.log(gray('\\nGet your API Key at: https://langtrain.xyz/settings/keys\\n'));\n const apiKey = await password({\n message: 'Enter your Langtrain API Key:',\n validate(value) {\n if (!value || value.length === 0) return 'API Key is required';\n },\n });\n\n if (isCancel(apiKey)) {\n cancel('Operation cancelled');\n process.exit(0);\n }\n\n const s = spinner();\n s.start('Verifying API Key...');\n\n // Verify key immediately\n try {\n const client = new SubscriptionClient({ apiKey: apiKey as string });\n const info = await client.getStatus();\n\n s.stop(green(`Authenticated as ${info.plan === 'pro' ? 'PRO' : info.plan.toUpperCase()}`));\n\n const config = getConfig();\n saveConfig({ ...config, apiKey: apiKey as string });\n // intro(green('API Key saved successfully!')); // success message above is enough\n return; // Exit loop on success\n } catch (e: any) {\n s.stop(red('Invalid API Key. Please try again.'));\n // Loop continues\n }\n }\n}\n\nexport async function getSubscription(apiKey: string): Promise<SubscriptionInfo | null> {\n const client = new SubscriptionClient({ apiKey });\n const s = spinner();\n s.start('Verifying subscription plan...');\n try {\n const info = await client.getStatus();\n\n // Enhance: Show plan details immediately on auth check\n const planLabel = info.plan === 'pro' ? bgMagenta(' PRO ') : info.plan.toUpperCase();\n s.stop(green(`Authenticated as ${planLabel}`));\n\n if (info.is_active === false) {\n console.log(yellow('Warning: Your subscription is not active. Some features may be limited.'));\n }\n\n return info;\n } catch (e: any) {\n s.stop(red('Failed to verify subscription.'));\n if (e.response && e.response.status === 401) {\n console.log(red('Invalid API Key. Please run login again.'));\n // Optionally clear key?\n }\n return null;\n }\n}\n","import { SubscriptionInfo } from '../index';\n\nexport interface MenuOption {\n value: string;\n label: string;\n hint?: string;\n}\n\nexport type MenuState = 'main' | 'agents' | 'text' | 'vision' | 'guard' | 'settings';\n\nexport function getMenu(state: MenuState, plan: SubscriptionInfo | null, isAuthenticated: boolean): MenuOption[] {\n const isPro = plan?.plan === 'pro' || plan?.plan === 'enterprise';\n\n // If not authenticated, force login or limited menu?\n // User requested \"lazy auth\", so we should show menu but maybe highlight login or allow navigation and prompt later.\n // Let's add a visual cue.\n\n switch (state) {\n case 'main':\n const menu: MenuOption[] = [\n { value: 'nav-agents', label: 'Agents', hint: 'Manage & Chat with AI Agents' },\n { value: 'nav-text', label: 'Langtune (Text)', hint: 'Fine-tuning & Generation' },\n { value: 'nav-vision', label: 'Langvision (Vision)', hint: 'Vision Analysis & Tuning' },\n { value: 'nav-guard', label: 'Data Guardrails', hint: 'Quality & Safety Rules' },\n { value: 'init', label: 'Initialize Project', hint: 'Scaffold new Langtrain app' },\n { value: 'deploy', label: 'Deploy', hint: 'Push config to Cloud' },\n { value: 'dev', label: 'Start Dev Server', hint: 'Watch mode' },\n { value: 'env', label: 'Secrets (Env)', hint: 'Manage API Keys' },\n { value: 'logs', label: 'Logs', hint: 'View Agent Logs' },\n { value: 'doctor', label: 'Doctor', hint: 'Check environment health' },\n { value: 'nav-settings', label: 'Settings', hint: 'Subscription & Auth' }\n ];\n\n if (!isAuthenticated) {\n // menu.unshift({ value: 'login', label: 'Login to Langtrain', hint: 'Required for most features' });\n // Actually, let's make Login the first option if not authenticated\n // But keep the others so user can see what's available (and get prompted)\n menu.unshift({ value: 'login', label: 'Login to Langtrain', hint: 'Required for most features' });\n }\n\n // Always add Exit\n menu.push({ value: 'exit', label: 'Exit' });\n return menu;\n\n case 'agents':\n return [\n { value: 'agent-list', label: 'List & Run Agents', hint: 'Chat with active agents' },\n { value: 'agent-create', label: 'Create New Agent', hint: 'Deploy a new agent' },\n { value: 'agent-delete', label: 'Delete Agent', hint: 'Remove an agent' },\n { value: 'back', label: '← Back to Main Menu' }\n ];\n\n case 'text':\n return [\n { value: 'tune-finetune', label: 'Fine-tune Text Model', hint: 'Create custom LLM' },\n { value: 'tune-list', label: 'List Jobs', hint: 'Check training status' },\n { value: 'tune-generate', label: 'Generate Text', hint: 'Test your models' },\n { value: 'data-upload', label: 'Upload Dataset', hint: 'Upload JSONL for training' },\n { value: 'back', label: '← Back to Main Menu' }\n ];\n\n case 'guard':\n return [\n { value: 'guard-list', label: 'List Guardrails', hint: 'View active rules' },\n { value: 'guard-create', label: 'Create Guardrail', hint: 'Define new rules' },\n { value: 'data-refine', label: 'Refine Dataset', hint: 'Apply guardrail to data' },\n { value: 'back', label: '← Back to Main Menu' }\n ];\n\n case 'vision':\n return [\n { value: 'vision-finetune', label: 'Fine-tune Vision Model', hint: 'Create custom VLM' },\n { value: 'vision-generate', label: 'Generate Vision Response', hint: 'Test vision models' },\n { value: 'back', label: '← Back to Main Menu' }\n ];\n\n case 'settings':\n return [\n { value: 'status', label: isAuthenticated ? `Subscription Status (${plan?.plan || 'Free'})` : 'Check Status (Login required)' },\n { value: 'login', label: isAuthenticated ? 'Update API Key' : 'Login' },\n { value: 'back', label: '← Back to Main Menu' }\n ];\n\n default:\n return [];\n }\n}\n","import { spinner, intro, red, green, gray, bgMagenta } from '../ui';\nimport { getConfig } from '../config';\nimport { SubscriptionClient } from '../../index';\n\nexport async function handleSubscriptionStatus() {\n const config = getConfig();\n if (!config.apiKey) {\n intro(red('Not logged in. Run \"login\" first.'));\n return;\n }\n const client = new SubscriptionClient({ apiKey: config.apiKey });\n const s = spinner();\n s.start('Fetching subscription status...');\n try {\n const info = await client.getStatus();\n s.stop(green('Subscription Status:'));\n\n console.log(gray('Plan: ') + (info.plan === 'pro' ? bgMagenta(' PRO ') : info.plan.toUpperCase()));\n console.log(gray('Active: ') + (info.is_active ? green('Yes') : red('No')));\n if (info.expires_at) console.log(gray('Expires: ') + new Date(info.expires_at).toLocaleDateString());\n\n console.log(gray('\\nLimits:'));\n console.log(` Models: ${info.limits.max_models === -1 ? 'Unlimited' : info.limits.max_models}`);\n console.log(` Training Jobs: ${info.limits.max_training_jobs}`);\n\n } catch (e: any) {\n s.stop(red('Failed to fetch status.'));\n console.error(e.message);\n }\n}\n","import { text, select, confirm, isCancel, cancel, spinner, intro, red, green, yellow, bgMagenta, black, gradient, gray, createTable } from '../ui';\nimport { getConfig } from '../config';\nimport { Langtune, ModelClient, SubscriptionClient, FileClient, TrainingClient } from '../../index';\n\n// Handler for Langtune Fine-tuning\nexport async function handleTuneFinetune(tune: Langtune, modelClient: ModelClient) {\n let model: string | symbol = '';\n\n const s = spinner();\n s.start('Fetching available text models...');\n try {\n const models = await modelClient.list('text');\n s.stop(`Found ${models.length} text models`);\n\n if (models.length > 0) {\n model = await select({\n message: 'Select base model:',\n options: models.map(m => ({ value: m.id, label: m.id, hint: m.owned_by }))\n });\n }\n } catch (e) {\n s.stop(yellow('Failed to fetch models. Using manual input.'));\n model = await text({\n message: 'Enter base model (e.g., gpt-3.5-turbo):',\n placeholder: 'gpt-3.5-turbo',\n validate(value) {\n if (!value || value.length === 0) return 'Value is required!';\n },\n });\n }\n\n if (isCancel(model)) {\n cancel('Operation cancelled.');\n process.exit(0);\n }\n\n const trainFile = await text({\n message: 'Enter path to training file:',\n placeholder: './data.jsonl',\n validate(value) {\n if (!value || value.length === 0) return 'Value is required!';\n },\n });\n if (isCancel(trainFile)) cancel('Operation cancelled.');\n\n const epochs = await text({\n message: 'Num Epochs:',\n placeholder: '3',\n initialValue: '3'\n });\n if (isCancel(epochs)) cancel('Operation cancelled.');\n\n const track = await select({\n message: 'Track this job on Langtrain Cloud?',\n options: [\n { value: 'yes', label: 'Yes', hint: 'Upload dataset and log job' },\n { value: 'no', label: 'No', hint: 'Local only' }\n ]\n });\n if (isCancel(track)) cancel('Operation cancelled.');\n\n if (track === 'yes') {\n const s = spinner();\n s.start('Connecting to Cloud...');\n try {\n const config = getConfig();\n if (!config.apiKey) throw new Error('API Key required. Run \"login\" first.');\n\n // Check Subscription\n const subClient = new SubscriptionClient({ apiKey: config.apiKey });\n const sub = await subClient.getStatus();\n if (!sub.features.includes('cloud_finetuning')) {\n s.stop(red('Feature \"cloud_finetuning\" is not available on your plan.'));\n const upgrade = await confirm({ message: 'Upgrade to Pro for cloud tracking?' });\n if (upgrade && !isCancel(upgrade)) {\n console.log(bgMagenta(black(' Visit https://langtrain.ai/dashboard/billing to upgrade. ')));\n }\n return;\n }\n\n const fileClient = new FileClient({ apiKey: config.apiKey });\n const trainingClient = new TrainingClient({ apiKey: config.apiKey });\n\n s.message('Uploading dataset...');\n const fileResp = await fileClient.upload(trainFile as string);\n\n s.message('Creating Job...');\n const job = await trainingClient.createJob({\n name: `cli-sft-${Date.now()}`,\n base_model: model as string,\n dataset_id: fileResp.id,\n task: 'text',\n hyperparameters: {\n n_epochs: parseInt(epochs as string)\n }\n });\n s.stop(green(`Job tracked: ${job.id}`));\n } catch (e: any) {\n s.stop(red(`Tracking failed: ${e.message}`));\n const cont = await confirm({ message: 'Continue with local training anyway?' });\n if (!cont || isCancel(cont)) return;\n }\n }\n\n const s2 = spinner();\n s2.start('Starting local fine-tuning...');\n\n try {\n const config: any = {\n model: model as string,\n trainFile: trainFile as string,\n preset: 'default', // simplified\n epochs: parseInt(epochs as string),\n batchSize: 1,\n learningRate: 2e-5,\n loraRank: 16,\n outputDir: './output'\n };\n\n await tune.finetune(config);\n s2.stop(green('Fine-tuning job started successfully!'));\n } catch (e: any) {\n s2.stop(red('Failed to start job.'));\n throw e;\n }\n}\n\n// Handler for Langtune Generation\nexport async function handleTuneGenerate(tune: Langtune) {\n const model = await text({\n message: 'Enter model path:',\n placeholder: './output/model',\n initialValue: './output/model'\n });\n if (isCancel(model)) cancel('Operation cancelled');\n\n const prompt = await text({\n message: 'Enter prompt:',\n placeholder: 'Hello world',\n });\n if (isCancel(prompt)) cancel('Operation cancelled');\n\n const s = spinner();\n s.start('Connecting to Langtrain Inference API...');\n\n try {\n const response = await tune.generate(model as string, { prompt: prompt as string });\n s.stop('Generation complete');\n intro('Response:');\n console.log(gradient.pastel(response));\n } catch (e: any) {\n s.stop(red('Generation failed.'));\n throw e;\n }\n}\n\nexport async function handleTuneList(trainingClient: TrainingClient) {\n const s = spinner();\n s.start('Fetching fine-tuning jobs...');\n\n const config = getConfig();\n let workspaceId = config.workspace_id;\n\n if (!workspaceId) {\n s.stop(yellow('Workspace ID required to list jobs.'));\n workspaceId = await text({ message: 'Enter Workspace ID:' });\n if (isCancel(workspaceId)) return;\n }\n\n try {\n const jobs = await trainingClient.listJobs(workspaceId as string);\n s.stop(`Found ${jobs.data.length} jobs`);\n\n if (jobs.data.length === 0) {\n console.log(yellow('No jobs found.'));\n return;\n }\n\n // Display Table\n const table = createTable(['ID', 'Status', 'Model', 'Progress', 'Created']);\n jobs.data.forEach(j => {\n const statusColor = j.status === 'succeeded' ? green : (j.status === 'failed' ? red : yellow);\n table.push([\n j.id.substring(0, 8) + '...',\n statusColor(j.status),\n j.base_model,\n (j.progress || 0) + '%',\n new Date(j.created_at).toLocaleDateString()\n ]);\n });\n console.log(table.toString());\n console.log('');\n\n const selectedJob = await select({\n message: 'Select a job to view details:',\n options: jobs.data.map(j => ({\n value: j.id,\n label: `${j.name || j.id} (${j.status})`,\n hint: `Created: ${new Date(j.created_at).toLocaleDateString()}`\n }))\n });\n\n if (isCancel(selectedJob)) return;\n\n await handleTuneStatus(trainingClient, selectedJob as string);\n\n } catch (e: any) {\n s.stop(red(`Failed to list jobs: ${e.message}`));\n }\n}\n\nexport async function handleTuneStatus(trainingClient: TrainingClient, jobId?: string) {\n let id = jobId;\n if (!id) {\n id = await text({ message: 'Enter Job ID:' }) as string;\n if (isCancel(id)) return;\n }\n\n const s = spinner();\n s.start(`Fetching status for ${id}...`);\n\n try {\n const job = await trainingClient.getJob(id);\n s.stop(`Job Status: ${job.status.toUpperCase()}`);\n\n console.log(gray('------------------------------------------------'));\n console.log(`${bgMagenta(black(' Job Details '))}`);\n console.log(`ID: ${job.id}`);\n console.log(`Name: ${job.name}`);\n console.log(`Status: ${job.status === 'succeeded' ? green(job.status) : job.status}`);\n console.log(`Model: ${job.base_model}`);\n console.log(`Progress: ${job.progress || 0}%`);\n if (job.error_message) console.log(red(`Error: ${job.error_message}`));\n console.log(gray('------------------------------------------------'));\n\n if (job.status === 'running' || job.status === 'queued') {\n const action = await select({\n message: 'Action:',\n options: [\n { value: 'refresh', label: 'Refresh Status' },\n { value: 'cancel', label: 'Cancel Job' },\n { value: 'back', label: 'Back' }\n ]\n });\n\n if (action === 'refresh') await handleTuneStatus(trainingClient, id);\n if (action === 'cancel') await handleTuneCancel(trainingClient, id);\n }\n\n } catch (e: any) {\n s.stop(red(`Failed to get job status: ${e.message}`));\n }\n}\n\nexport async function handleTuneCancel(trainingClient: TrainingClient, jobId: string) {\n const confirmCancel = await confirm({ message: 'Are you sure you want to cancel this job?' });\n if (!confirmCancel || isCancel(confirmCancel)) return;\n\n const s = spinner();\n s.start('Canceling job...');\n try {\n await trainingClient.cancelJob(jobId);\n s.stop(green('Job canceled successfully.'));\n } catch (e: any) {\n s.stop(red(`Failed to cancel job: ${e.message}`));\n }\n}\n","import { text, select, confirm, isCancel, cancel, spinner, intro, red, green, yellow, bgMagenta, black, gradient } from '../ui';\nimport { getConfig } from '../config';\nimport { Langvision, ModelClient, SubscriptionClient, FileClient, TrainingClient } from '../../index';\n\n// Handler for Langvision Fine-tuning\nexport async function handleVisionFinetune(vision: Langvision, modelClient: ModelClient) {\n let model: string | symbol = '';\n\n const s = spinner();\n s.start('Fetching available vision models...');\n try {\n const models = await modelClient.list('vision');\n s.stop(`Found ${models.length} vision models`);\n\n if (models.length > 0) {\n model = await select({\n message: 'Select base vision model:',\n options: models.map(m => ({ value: m.id, label: m.id, hint: m.owned_by }))\n });\n } else {\n model = await text({\n message: 'Enter base vision model:',\n placeholder: 'llava-v1.5-7b',\n initialValue: 'llava-v1.5-7b'\n });\n }\n } catch (e) {\n s.stop(yellow('Failed to fetch models. Using manual input.'));\n model = await text({\n message: 'Enter base vision model:',\n placeholder: 'llava-v1.5-7b',\n initialValue: 'llava-v1.5-7b'\n });\n }\n\n if (isCancel(model)) {\n cancel('Operation cancelled');\n process.exit(0);\n }\n\n const dataset = await text({\n message: 'Enter dataset path:',\n placeholder: './dataset',\n });\n if (isCancel(dataset)) cancel('Operation cancelled');\n\n const epochs = await text({\n message: 'Num Epochs:',\n placeholder: '3',\n initialValue: '3'\n });\n if (isCancel(epochs)) cancel('Operation cancelled');\n\n const track = await select({\n message: 'Track this job on Langtrain Cloud?',\n options: [\n { value: 'yes', label: 'Yes', hint: 'Upload dataset and log job' },\n { value: 'no', label: 'No', hint: 'Local only' }\n ]\n });\n if (isCancel(track)) cancel('Operation cancelled');\n\n if (track === 'yes') {\n const s = spinner();\n s.start('Connecting to Cloud...');\n try {\n const config = getConfig();\n if (!config.apiKey) throw new Error('API Key required. Run \"login\" first.');\n\n // Check Subscription\n const subClient = new SubscriptionClient({ apiKey: config.apiKey });\n const sub = await subClient.getStatus();\n if (!sub.features.includes('cloud_finetuning')) {\n s.stop(red('Feature \"cloud_finetuning\" is not available on your plan.'));\n const upgrade = await confirm({ message: 'Upgrade to Pro for cloud tracking?' });\n if (upgrade && !isCancel(upgrade)) {\n console.log(bgMagenta(black(' Visit https://langtrain.ai/dashboard/billing to upgrade. ')));\n }\n return;\n }\n\n const fileClient = new FileClient({ apiKey: config.apiKey });\n const trainingClient = new TrainingClient({ apiKey: config.apiKey });\n\n s.message('Uploading dataset...');\n const fileResp = await fileClient.upload(dataset as string, undefined, 'fine-tune-vision');\n\n s.message('Creating Job...');\n const job = await trainingClient.createJob({\n name: `cli-vision-${Date.now()}`,\n base_model: model as string,\n dataset_id: fileResp.id,\n task: 'vision',\n training_method: 'lora',\n hyperparameters: {\n n_epochs: parseInt(epochs as string)\n }\n });\n s.stop(green(`Job tracked: ${job.id}`));\n } catch (e: any) {\n s.stop(red(`Tracking failed: ${e.message}`));\n const cont = await confirm({ message: 'Continue with local training anyway?' });\n if (!cont || isCancel(cont)) return;\n }\n }\n\n const s2 = spinner();\n s2.start('Analyzing dataset structure...');\n await new Promise(r => setTimeout(r, 800));\n s2.message('Starting vision fine-tuning on Langtrain Cloud...');\n\n try {\n const config: any = {\n model: model as string,\n dataset: dataset as string,\n epochs: parseInt(epochs as string),\n batchSize: 1,\n learningRate: 2e-5,\n loraRank: 16,\n outputDir: './vision-output'\n };\n await vision.finetune(config);\n s2.stop(green('Vision fine-tuning started successfully!'));\n } catch (e: any) {\n s2.stop(red('Failed to start vision job.'));\n throw e;\n }\n}\n\n// Handler for Langvision Generation\nexport async function handleVisionGenerate(vision: Langvision) {\n const model = await text({\n message: 'Enter model path:',\n placeholder: './vision-output/model',\n initialValue: './vision-output/model'\n });\n if (isCancel(model)) cancel('Operation cancelled');\n\n const prompt = await text({\n message: 'Enter prompt/image path:', // Simplified for CLI\n placeholder: 'Describe this image...',\n });\n if (isCancel(prompt)) cancel('Operation cancelled');\n\n const s = spinner();\n s.start('Uploading image and context...');\n await new Promise(r => setTimeout(r, 600));\n s.message('Generating vision response...');\n\n try {\n const response = await vision.generate(model as string, { prompt: prompt as string });\n s.stop('Generation complete');\n intro('Response:');\n console.log(gradient.pastel(response));\n } catch (e: any) {\n s.stop(red('Generation failed.'));\n throw e;\n }\n}\n","import path from 'path';\nimport fs from 'fs';\nimport { text, confirm, select, isCancel, cancel, intro, outro, showSuccess, showInfo, spinner, colors } from '../ui';\nimport { getConfig } from '../config';\nimport { handleLogin } from '../auth';\n\nexport async function handleInit() {\n intro('Initializing new Langtrain project...');\n\n const cwd = process.cwd();\n\n // 1. Check if already initialized\n if (fs.existsSync(path.join(cwd, 'langtrain.config.json'))) {\n showInfo('langtrain.config.json already exists in this directory.');\n const overwrite = await confirm({\n message: 'Do you want to re-initialize and overwrite the config?',\n initialValue: false\n });\n\n if (isCancel(overwrite) || !overwrite) {\n outro('Initialization cancelled.');\n return;\n }\n }\n\n // 2. Ask for Project Details\n const projectName = await text({\n message: 'What is the name of your project?',\n placeholder: 'my-ai-app',\n initialValue: path.basename(cwd),\n validate(value) {\n if (!value || value.length === 0) return 'Project name is required!';\n }\n });\n\n if (isCancel(projectName)) {\n cancel('Operation cancelled.');\n return;\n }\n\n let config = getConfig();\n let apiKey = config.apiKey;\n\n if (apiKey) {\n showSuccess('Found existing Langtrain credentials.');\n } else {\n const shouldLogin = await confirm({\n message: 'You are not logged in. Do you want to log in now?',\n initialValue: true\n });\n\n if (isCancel(shouldLogin)) {\n cancel('Operation cancelled.');\n return;\n }\n\n if (shouldLogin) {\n await handleLogin();\n config = getConfig(); // Reload config\n apiKey = config.apiKey;\n } else {\n apiKey = await text({\n message: 'Enter your Langtrain API Key (optional for local dev):',\n placeholder: 'lt_sk_...',\n initialValue: ''\n }) as string;\n\n if (isCancel(apiKey)) {\n cancel('Operation cancelled.');\n return;\n }\n }\n }\n\n // 3. Create Config File\n const s = spinner();\n s.start('Creating configuration...');\n\n const configContent = {\n name: projectName,\n apiKey: apiKey || undefined,\n environment: 'development',\n agents: [\n {\n name: 'support-bot',\n description: 'A helpful customer support assistant',\n config: {\n model: 'llama-3-8b',\n system_prompt: 'You are a helpful customer support assistant.',\n temperature: 0.7\n }\n }\n ]\n };\n\n fs.writeFileSync(path.join(cwd, 'langtrain.config.json'), JSON.stringify(configContent, null, 2));\n\n showSuccess('Project initialized successfully!');\n console.log(colors.dim('\\nNext steps:'));\n console.log(` 1. Run ${colors.cyan('lt deploy')} to push your agent to the cloud.`);\n console.log(` 2. Run ${colors.cyan('lt dev')} to start the local development loop.`);\n\n outro('Happy coding!');\n}\n","import { intro, outro, showSuccess, showError, showWarning, showInfo, spinner, colors } from '../ui';\nimport { getConfig } from '../config';\nimport { getSubscription } from '../auth';\nimport os from 'os';\n\nexport async function handleDoctor() {\n intro('Running Langtrain Doctor...');\n\n const s = spinner();\n let issues = 0;\n\n // 1. Check Node Environment\n s.start('Checking Node.js environment...');\n const nodeVersion = process.version;\n const platform = os.platform();\n const arch = os.arch();\n\n if (parseInt(nodeVersion.replace('v', '').split('.')[0]) < 18) {\n s.stop(colors.red(`Node.js version ${nodeVersion} is outdated. Please upgrade to v18+.`));\n issues++;\n } else {\n s.stop(`Node.js ${nodeVersion} (${platform} ${arch})`);\n }\n\n // 2. Check Configuration\n s.start('Checking configuration...');\n const config = getConfig();\n if (!config.apiKey) {\n s.stop(colors.yellow('API Key is missing. Run `langtrain login` or set LANGTRAIN_API_KEY.'));\n issues++;\n } else {\n s.stop('Configuration found.');\n\n // 3. Check API Connectivity\n s.start('Checking API connectivity...');\n try {\n const plan = await getSubscription(config.apiKey);\n s.stop(`Connected to Langtrain Cloud (Plan: ${colors.green(plan?.plan || 'unknown')})`);\n } catch (e: any) {\n s.stop(colors.red(`Failed to connect to Langtrain Cloud: ${e.message}`));\n issues++;\n }\n }\n\n console.log(''); // Spacer\n\n if (issues === 0) {\n showSuccess('Your Langtrain environment is healthy! Ready to build.');\n } else {\n showWarning(`Found ${issues} issue(s). Please resolve them for the best experience.`);\n }\n\n outro('Doctor check complete.');\n}\n","import { intro, outro, spinner, green, red, yellow, showSuccess } from '../ui';\nimport { getConfig } from '../config';\nimport { AgentClient, AgentCreate } from '../../index';\n\nexport async function handleDeploy(client: AgentClient) {\n intro('Deploying configuration to Langtrain Cloud...');\n\n const config = getConfig();\n const agents = config.agents || [];\n\n if (agents.length === 0) {\n intro(yellow('No agents found in langtrain.config.json'));\n return;\n }\n\n // Iterate and deploy\n for (const agentConfig of agents) {\n const s = spinner();\n s.start(`Deploying agent: ${agentConfig.name}...`);\n\n try {\n // Check if agent exists (by name? logic needed)\n // Ideally we store ID in config after create, but for now let's just create new or try to find by name.\n // Listing all agents is expensive if many, but safe for now.\n const existingAgents = await client.list();\n const existing = existingAgents.find(a => a.name === agentConfig.name);\n\n if (existing) {\n // Update (Note: SDK didn't expose update in my view_file, assuming create or need to add update)\n // If update not available, we skip or warn.\n // Let's assume we can't update yet as per SDK view.\n // So we just skip if exists.\n s.stop(yellow(`Agent ${agentConfig.name} already exists (ID: ${existing.id}). Skipping update (not supported yet).`));\n } else {\n // Create\n const payload: AgentCreate = {\n workspace_id: config.workspace_id || (existingAgents[0]?.workspace_id) || '', // Need a way to get workspace!\n name: agentConfig.name,\n description: agentConfig.description,\n config: agentConfig.config\n };\n\n // Fallback for workspace_id\n if (!payload.workspace_id) {\n // Try to get from first agent or error\n // Realistically, user needs to set workspace_id in config or we infer from API key scope.\n // Let's warn.\n s.stop(red(`Failed: Workspace ID missing in config for ${agentConfig.name}`));\n continue;\n }\n\n await client.create(payload);\n s.stop(green(`Agent ${agentConfig.name} deployed successfully!`));\n }\n\n } catch (e: any) {\n s.stop(red(`Failed to deploy ${agentConfig.name}: ${e.message}`));\n }\n }\n\n showSuccess('Deployment complete.');\n}\n","import { intro, outro, spinner, green, red, yellow, showInfo, gray } from '../ui';\nimport { AgentClient } from '../../index';\nimport { handleDeploy } from './deploy';\nimport fs from 'fs';\nimport path from 'path';\n\nexport async function handleDev(client: AgentClient) {\n intro('Starting Langtrain Development Server...');\n\n const configPath = path.join(process.cwd(), 'langtrain.config.json');\n if (!fs.existsSync(configPath)) {\n intro(red('langtrain.config.json not found. Run \"lt init\" first.'));\n return;\n }\n\n console.log(gray(`Watching ${configPath} for changes...`));\n\n let isDeploying = false;\n\n // Initial Deploy\n await handleDeploy(client);\n\n fs.watch(configPath, async (eventType) => {\n if (eventType === 'change' && !isDeploying) {\n isDeploying = true;\n console.log(yellow('Configuration changed. Redeploying...'));\n // Wait a bit for file write to complete\n await new Promise(r => setTimeout(r, 500));\n try {\n await handleDeploy(client);\n } catch (e: any) {\n console.error(red(`Deploy failed: ${e.message}`));\n } finally {\n isDeploying = false;\n console.log(gray(`Watching ${configPath}...`));\n }\n }\n });\n\n // Keep process alive\n await new Promise(() => { });\n}\n","import { text, select, confirm, isCancel, cancel, spinner, intro, red, green, yellow, gray } from '../ui';\nimport { getConfig } from '../config';\nimport { GuardrailClient } from '../../index';\n\nexport async function handleGuardrailList(client: any) { // using any to match index signature, but we instantiate specific client inside\n const config = getConfig();\n const gClient = new GuardrailClient({ apiKey: config.apiKey || '', baseUrl: config.baseUrl });\n\n const s = spinner();\n s.start('Fetching guardrails...');\n\n try {\n const guards = await gClient.list();\n s.stop(`Found ${guards.length} guardrails`);\n\n if (guards.length === 0) {\n console.log(yellow('No guardrails found. Create one with \"lt guardrails create\".'));\n return;\n }\n\n guards.forEach((g: any) => {\n console.log(green(`• ${g.name}`) + gray(` (ID: ${g.id})`));\n if (g.description) console.log(gray(` ${g.description}`));\n console.log(gray(` Config: PII=${g.config.pii_enabled}, MinLen=${g.config.min_length}`));\n console.log('');\n });\n\n } catch (e: any) {\n s.stop(red(`Failed to list guardrails: ${e.message}`));\n }\n}\n\nexport async function handleGuardrailCreate(client: any) {\n const config = getConfig();\n const gClient = new GuardrailClient({ apiKey: config.apiKey || '', baseUrl: config.baseUrl });\n\n intro('Create a new Data Guardrail');\n\n const name = await text({\n message: 'Guardrail Name:',\n placeholder: 'e.g. Strict Safety Policy',\n validate(value) {\n if (!value) return 'Name is required';\n }\n });\n if (isCancel(name)) return;\n\n const description = await text({\n message: 'Description (optional):',\n placeholder: 'Filters PII and short text',\n });\n if (isCancel(description)) return;\n\n // Interactive Config\n const minLen = await text({\n message: 'Minimum Text Length (0 for no limit):',\n initialValue: '0',\n validate(value) {\n if (isNaN(Number(value))) return 'Must be a number';\n }\n });\n if (isCancel(minLen)) return;\n\n const enablePii = await confirm({\n message: 'Enable PII Filtering (Email/Phone)?',\n initialValue: false\n });\n if (isCancel(enablePii)) return;\n\n const patterns = await text({\n message: 'Regex Patterns to Block (comma separated, optional):',\n placeholder: 'e.g. bad_word, another_one',\n });\n if (isCancel(patterns)) return;\n\n const s = spinner();\n s.start('Creating guardrail...');\n\n try {\n const regexList = (patterns as string).split(',').map(p => p.trim()).filter(p => p.length > 0);\n\n const payload = {\n name,\n description,\n config: {\n min_length: Number(minLen),\n pii_enabled: enablePii,\n regex_patterns: regexList,\n profanity_enabled: false\n }\n };\n\n const result = await gClient.create(payload);\n s.stop(green(`Guardrail \"${result.name}\" created successfully!`));\n console.log(gray(`ID: ${result.id}`));\n\n } catch (e: any) {\n s.stop(red(`Failed to create guardrail: ${e.message}`));\n }\n}\n","import { intro, outro, spinner, green, red, yellow, showInfo, gray, showSuccess } from '../ui';\nimport { SecretClient } from '../../index';\nimport { text, confirm, select, isCancel, cancel } from '../ui';\nimport { getConfig } from '../config';\n\nexport async function handleEnvList(client: SecretClient) {\n const s = spinner();\n s.start('Fetching secrets...');\n const config = getConfig();\n try {\n const secrets = await client.list(config.workspace_id);\n s.stop(`Found ${secrets.length} secrets`);\n\n if (secrets.length === 0) {\n console.log(gray('No secrets found. Use \"lt env set\" to add one.'));\n return;\n }\n\n console.log(gray('------------------------------------------------'));\n secrets.forEach(sec => {\n console.log(`${sec.key.padEnd(30)} ${gray('******')}`);\n });\n console.log(gray('------------------------------------------------'));\n\n } catch (e: any) {\n s.stop(red(`Failed to list secrets: ${e.message}`));\n }\n}\n\nexport async function handleEnvSet(client: SecretClient, keyVal?: string) {\n let key = '';\n let value = '';\n\n if (keyVal && keyVal.includes('=')) {\n const parts = keyVal.split('=');\n key = parts[0];\n value = parts.slice(1).join('=');\n } else {\n key = await text({ message: 'Secret Key:', placeholder: 'OPENAI_API_KEY' }) as string;\n if (isCancel(key)) return;\n\n value = await text({ message: 'Secret Value:', placeholder: 'sk-...' }) as string;\n if (isCancel(value)) return;\n }\n\n const s = spinner();\n s.start(`Setting ${key}...`);\n const config = getConfig();\n\n try {\n await client.set(key, value, config.workspace_id);\n s.stop(green(`Secret ${key} set successfully.`));\n } catch (e: any) {\n s.stop(red(`Failed to set secret: ${e.message}`));\n }\n}\n\n// Interactive menu for env\nexport async function handleEnvMenu(client: SecretClient) {\n const action = await select({\n message: 'Manage Secrets',\n options: [\n { value: 'list', label: 'List Secrets' },\n { value: 'set', label: 'Set Secret' },\n { value: 'remove', label: 'Remove Secret' },\n { value: 'back', label: 'Back' }\n ]\n });\n\n if (isCancel(action) || action === 'back') return;\n\n if (action === 'list') await handleEnvList(client);\n if (action === 'set') await handleEnvSet(client);\n if (action === 'remove') {\n const key = await text({ message: 'Key to remove:' });\n if (!isCancel(key)) {\n const s = spinner();\n s.start('Removing...');\n try {\n // need workspace_id\n const config = getConfig();\n await client.delete(key as string, config.workspace_id);\n s.stop(green('Removed.'));\n } catch (e: any) {\n s.stop(red(`Failed: ${e.message}`));\n }\n }\n }\n}\n","import { intro, spinner, red, gray, yellow, bgMagenta, black, green } from '../ui';\nimport { AgentClient } from '../../index';\nimport { select, text, isCancel } from '../ui';\n\nexport async function handleLogs(client: AgentClient, agentName?: string) {\n const s = spinner();\n\n let agentId = '';\n\n if (agentName) {\n s.start('Finding agent...');\n try {\n const agents = await client.list();\n const found = agents.find(a => a.name === agentName || a.id === agentName);\n if (found) agentId = found.id;\n else {\n s.stop(red(`Agent \"${agentName}\" not found.`));\n return;\n }\n s.stop(green(`Found agent: ${found.name}`));\n } catch (e: any) {\n s.stop(red(`Failed to list agents: ${e.message}`));\n return;\n }\n } else {\n // Interactive select\n s.start('Fetching agents...');\n try {\n const agents = await client.list();\n s.stop(`Found ${agents.length} agents`);\n\n if (agents.length === 0) {\n console.log(yellow('No agents found.'));\n return;\n }\n\n const selection = await select({\n message: 'Select agent to view logs:',\n options: agents.map(a => ({ value: a.id, label: a.name }))\n });\n\n if (isCancel(selection)) return;\n agentId = selection as string;\n } catch (e: any) {\n s.stop(red(`Failed to list agents: ${e.message}`));\n return;\n }\n }\n\n const s2 = spinner();\n s2.start('Fetching logs...');\n try {\n const logs = await client.logs(agentId); // Assumes we added logs() to AgentClient\n s2.stop('Logs fetched.');\n\n console.log(gray('------------------------------------------------'));\n console.log(`${bgMagenta(black(' Recent Logs '))}`);\n if (logs.logs && logs.logs.length > 0) {\n logs.logs.forEach(log => console.log(log));\n } else {\n console.log(gray('(No logs found)'));\n }\n console.log(gray('------------------------------------------------'));\n\n } catch (e: any) {\n s2.stop(red(`Failed to fetch logs: ${e.message}`));\n }\n}\n","{\n \"name\": \"langtrain\",\n \"version\": \"0.1.20\",\n \"description\": \"Unified JavaScript SDK for Langtrain Ecosystem\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"langtrain\": \"./dist/cli.js\",\n \"lt\": \"./dist/cli.js\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n \"postinstall\": \"node dist/cli.js --first-run || true\"\n },\n \"keywords\": [\n \"langtrain\",\n \"langvision\",\n \"langtune\",\n \"sdk\",\n \"ai\",\n \"llm\",\n \"finetuning\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/langtrain-ai/langtrain-sdk.git\"\n },\n \"author\": \"Langtrain AI\",\n \"license\": \"MIT\",\n \"devDependencies\": {\n \"@types/gradient-string\": \"^1.1.6\",\n \"@types/node\": \"^25.2.3\",\n \"langtune\": \"file:../langtune/js\",\n \"langvision\": \"file:../langvision/js\",\n \"tsup\": \"^8.0.2\",\n \"typescript\": \"^5.4.2\"\n },\n \"dependencies\": {\n \"@clack/prompts\": \"^1.0.1\",\n \"axios\": \"^1.13.5\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^14.0.3\",\n \"gradient-string\": \"^3.0.0\",\n \"kleur\": \"^4.1.5\",\n \"langtrain\": \"^0.1.15\"\n }\n}\n"]}
|