Files
lora/docs/specialists/prism.md
T

4.2 KiB
Raw Blame History

Prism — TypeScript Specialist LoRA

Adapter codename: prism Agent: build-ts Base model: Qwen/Qwen3.5-27B

Objective

Teach the model TypeScript-idiomatic code generation aligned with the build-ts agent's system prompt. The adapter should internalize:

  • Strict TypeScript — no any without justification
  • const over let, never var
  • Named exports, type over interface (unless extending)
  • Package manager detection (bun/pnpm/npm)
  • Framework-aware patterns (Next.js, Vite, Astro, SvelteKit, Remix, Bun)
  • tsc → lint → test verification cycle

Data Sources

Session extraction (~200350 examples)

Classify from opencode build sessions by:

  • File paths: .ts, .tsx, .js, .jsx, package.json, tsconfig.json
  • Bash commands: npm, pnpm, bun, npx, tsc, vitest, jest, biome
  • Error patterns: TS2, TS7, error TS, type errors
  • Framework config files in context: next.config.*, vite.config.*

Git repo mining (~150250 examples)

Target repos:

  • ~/.config/opencode/plugins/ — opencode plugins (TypeScript)
  • madcat-os/sere-kit — UI component library
  • madcat-os/visor — HUD/display system
  • Any package.json-rooted repos in madcat-os org

Extract patterns:

  • React component implementations (hooks, state management)
  • Plugin/tool development (opencode tools, MCP servers)
  • Type-safe API integrations
  • Build configuration (tsconfig, vite, next)

Synthetic (~50100 examples)

  • Generic type patterns and constraints
  • Discriminated unions and type narrowing
  • Zod schema → TypeScript type inference
  • React Server Components vs Client Components
  • Edge runtime constraints (Cloudflare Workers, Vercel Edge)

Example Format

{
  "messages": [
    {
      "role": "system",
      "content": "<build-ts agent system prompt>"
    },
    {
      "role": "user",
      "content": "Add a new visor widget component for displaying memory graph connections"
    },
    {
      "role": "assistant",
      "content": null,
      "tool_calls": [
        {
          "type": "function",
          "function": {
            "name": "glob",
            "arguments": {"pattern": "src/components/**/*.tsx"}
          }
        }
      ]
    },
    {
      "role": "tool",
      "content": "<file list>"
    },
    {
      "role": "assistant",
      "content": null,
      "tool_calls": [
        {
          "type": "function",
          "function": {
            "name": "read",
            "arguments": {"filePath": "src/components/widgets/LogWidget.tsx"}
          }
        }
      ]
    },
    {
      "role": "tool",
      "content": "<existing widget pattern>"
    },
    {
      "role": "assistant",
      "content": null,
      "tool_calls": [
        {
          "type": "function",
          "function": {
            "name": "write",
            "arguments": {
              "filePath": "src/components/widgets/GraphWidget.tsx",
              "content": "<new component following existing patterns>"
            }
          }
        }
      ]
    },
    {
      "role": "tool",
      "content": "File written successfully"
    },
    {
      "role": "assistant",
      "content": null,
      "tool_calls": [
        {
          "type": "function",
          "function": {
            "name": "bash",
            "arguments": {"command": "npx tsc --noEmit"}
          }
        }
      ]
    },
    {
      "role": "tool",
      "content": "<type check passes>"
    },
    {
      "role": "assistant",
      "content": "GraphWidget created. Follows LogWidget's pattern — named export, typed props, const component. Type check clean."
    }
  ]
}

Evaluation Criteria

  1. Generated TypeScript passes tsc --noEmit with strict mode
  2. No any types without explicit justification
  3. Correct import/export patterns (named exports)
  4. Framework-appropriate patterns (detects Next.js vs Vite etc.)
  5. Package manager awareness (correct lockfile, correct run command)
  6. Tool call sequence: explore → read → implement → type-check
  7. React patterns: proper hook usage, no stale closures

Training Config Overrides

MAX_SEQ = 8192
LR      = 5e-5

Estimated Size

  • 400600 examples total (largest dataset — most session history)
  • ~3M tokens
  • Training time: ~3 hrs on H100
  • Adapter size: ~305 MB