From 1e70a60e6cb0fc1e0de8320217cb17946554b8ce Mon Sep 17 00:00:00 2001 From: Matt Williams Date: Tue, 20 Aug 2024 20:14:23 -0700 Subject: [PATCH] add quant tester Signed-off-by: Matt Williams --- 2024-08-20-quant-tester/.gitignore | 175 ++++++++++++++++++++++++++ 2024-08-20-quant-tester/README.md | 15 +++ 2024-08-20-quant-tester/bun.lockb | Bin 0 -> 29650 bytes 2024-08-20-quant-tester/index.ts | 77 ++++++++++++ 2024-08-20-quant-tester/package.json | 17 +++ 2024-08-20-quant-tester/tsconfig.json | 27 ++++ 6 files changed, 311 insertions(+) create mode 100644 2024-08-20-quant-tester/.gitignore create mode 100644 2024-08-20-quant-tester/README.md create mode 100755 2024-08-20-quant-tester/bun.lockb create mode 100644 2024-08-20-quant-tester/index.ts create mode 100644 2024-08-20-quant-tester/package.json create mode 100644 2024-08-20-quant-tester/tsconfig.json diff --git a/2024-08-20-quant-tester/.gitignore b/2024-08-20-quant-tester/.gitignore new file mode 100644 index 0000000..9b1ee42 --- /dev/null +++ b/2024-08-20-quant-tester/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/2024-08-20-quant-tester/README.md b/2024-08-20-quant-tester/README.md new file mode 100644 index 0000000..4c51db7 --- /dev/null +++ b/2024-08-20-quant-tester/README.md @@ -0,0 +1,15 @@ +# quant-tester + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.1.24. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/2024-08-20-quant-tester/bun.lockb b/2024-08-20-quant-tester/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..8d6656717cc9b30fcd290655e35a391887d3fa6c GIT binary patch literal 29650 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 `${model.name}:${model.details.parameter_size}`) + .map((name) => { + const splitname = name.split(":") + return `${splitname[0]} - ${splitname[2]}` + } ) + .filter((value, index, self) => self.indexOf(value) === index) + .sort(); + return names; +} + +async function getSelectedModel(names: string[]) { + const questions: QuestionCollection = [ + { + type: "list", + name: "selectedName", + message: "Select a model name:", + choices: names, + }, + ]; + const answer = await inquirer.prompt(questions); + return answer.selectedName; +} + +async function getSelectedQuants(name: string, size: string, allmodels: { name: string, details: { parameter_size: string, quantization_level: string}}[]) { + const modelNames = allmodels.filter((model) => model.name.split(":")[0] === name && model.details.parameter_size === size).map((model) => model.name); + + return modelNames; +} +async function getUserPrompt(): Promise { + const questions: QuestionCollection = [ + { + type: "input", + name: "userPrompt", + message: "Enter a prompt you want to test:", + }, + ]; + const answer = await inquirer.prompt(questions); + return answer.userPrompt; +} + +const names = processModelNames(allmodels.models); + +const selected = await getSelectedModel(names); +const modelName = selected.split(" - ")[0]; +const selectedSize = selected.split(" - ")[1]; + + +const quants = await getSelectedQuants(modelName, selectedSize, allmodels.models); + +const userPrompt = await getUserPrompt(); + +for (const quant of quants) { + for (let index = 0; index < qrepeat; index++) { + let format = "" + if (userPrompt.toLowerCase().includes("json")) { + format = "json" + } + const output = await ollama.generate({model: quant, prompt: userPrompt, format: format}); + console.log(`\n${quant} round ${index + 1}:\n${output.response}\nGenerated in ${(output.eval_duration / 1000000000).toFixed(2)} seconds\n`); + if (index < qrepeat - 1) { + console.log('--------\n'); + } + } + console.log('========\n'); +} \ No newline at end of file diff --git a/2024-08-20-quant-tester/package.json b/2024-08-20-quant-tester/package.json new file mode 100644 index 0000000..8382cc4 --- /dev/null +++ b/2024-08-20-quant-tester/package.json @@ -0,0 +1,17 @@ +{ + "name": "quant-tester", + "module": "index.ts", + "type": "module", + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": { + "@types/inquirer": "^9.0.7", + "cheerio": "^1.0.0", + "inquirer": "^10.1.8", + "ollama": "^0.5.8" + } +} \ No newline at end of file diff --git a/2024-08-20-quant-tester/tsconfig.json b/2024-08-20-quant-tester/tsconfig.json new file mode 100644 index 0000000..238655f --- /dev/null +++ b/2024-08-20-quant-tester/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +}