Userscripts reorganizing

Moved examples to their own example directory, treating folders we didn't add as a unofficial folder, anything in examples gets submitted in commits. Because I want people to learn that kaipreset_ should only be used if a file should be part of KoboldAI's official scripts the examples do not have kaipreset_ in the name.
This commit is contained in:
henk717
2022-01-15 18:16:07 +01:00
parent 9bcc24c07e
commit cbebfae236
12 changed files with 120 additions and 38 deletions

View File

@ -0,0 +1,25 @@
/*
* This file is part of KoboldAI.
*
* KoboldAI is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import lua.Table;
extern class KoboldLib {
@:luaDotMethod public function get_config_file(?clear:Bool):lua.FileHandle;
@:luaDotMethod public function halt_generation():Void;
@:luaDotMethod public function restart_generation(?sequence:Int):Void;
public var outputs:Null<Table<Int, String>>;
}

View File

@ -0,0 +1,91 @@
/*
* This file is part of KoboldAI.
*
* KoboldAI is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import haxe.exceptions.PosException;
import lua.Lua;
@:expose class Main {
public static final kobold:KoboldLib = untyped __lua__("_G.kobold");
public static final exampleConfig = "return true";
public static var shouldRun:Bool;
public static var f:BigInt = -2;
public static var e:BigInt = 4;
public static var s:BigInt = 8;
public static var t:BigInt = 1;
public static var i:BigInt = 0;
public static var v:BigInt = 1;
public static var a:BigInt = 6;
public static var l:BigInt = 1;
public static function inmod() {
if (!shouldRun) return;
kobold.halt_generation();
}
public static function outmod() {
if (!shouldRun) return;
// Gibbons, Jeremy. (2004). Unbounded Spigot Algorithms for the Digits
// of Pi. American Mathematical Monthly. 113. 10.2307/27641917.
while (true) {
var x = i/v;
if (x == (i + t)/v) {
trace(x);
kobold.outputs[1] = Std.string(x);
t *= 10;
i -= x*v;
i *= 10;
break;
}
else {
v *= s*a;
i *= s;
s += 8;
i += e * t;
e += 4;
i *= a;
a += 4;
t *= f*l;
l += 2;
f -= 4;
}
}
kobold.restart_generation(1);
}
public static function main() {
var f = kobold.get_config_file();
f.seek("set");
if (f.read(1) == null) f.write(exampleConfig);
f.seek("set");
var a = f.read("a");
f.close();
var result = Lua.load(a);
trace(result);
if (result.message != null) throw new PosException(result.message);
shouldRun = switch result.func() {
case false: false;
case null: false;
default: true;
}
}
}

View File

@ -0,0 +1,24 @@
# Installing dependencies:
* Install [Haxe](https://haxe.org/) 4 and Haxelib. Add them to your PATH. The specific version of Haxe used for this compilation was 4.2.4.
* Install the Haxelib package [littleBigInt](https://github.com/maitag/littleBigInt), version 0.1.3:
```
haxelib install littleBigInt 0.1.3
```
* Install [Node.js](https://nodejs.org/).
* Install https://github.com/FATH-Mechatronics/luamin/tree/d7359250cf28ab617ba5e43d1fda6ec411b1f9f7 using npm:
```
npm install FATH-Mechatronics/luamin#d7359250cf28ab617ba5e43d1fda6ec411b1f9f7
```
# Compilation:
* Run build.sh if you're running Linux or build.bat if you're running Windows.
* Use Node.js to run min.js:
```
node min.js
```

View File

@ -0,0 +1,16 @@
:: This file is part of KoboldAI.
::
:: KoboldAI is free software: you can redistribute it and/or modify
:: it under the terms of the GNU Affero General Public License as published by
:: the Free Software Foundation, either version 3 of the License, or
:: (at your option) any later version.
::
:: This program is distributed in the hope that it will be useful,
:: but WITHOUT ANY WARRANTY; without even the implied warranty of
:: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
:: GNU Affero General Public License for more details.
::
:: You should have received a copy of the GNU Affero General Public License
:: along with this program. If not, see <https://www.gnu.org/licenses/>.
@powershell ./build.ps1 %1

View File

@ -0,0 +1,21 @@
# This file is part of KoboldAI.
#
# KoboldAI is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
$path = "out.lua"
if ($args[0].length -gt 0) {
$path = $args[0]
}
haxe --lua $path -L littleBigInt --main Main
if (-not $?) { exit 1 }
(Get-Content $path).replace('_G.require("rex_pcre")', '({flags = function() return {CASELESS = 1, DOTALL = 1, MULTILINE = 1, UCP = 1, UTF8 = 1} end, gsub = function() return "" end, new = function() return {} end})').replace("return _hx_exports", "return _hx_exports.Main").replace(" _hx_bit_raw = _G.require('bit32')", " _hx_bit_raw = {arshift = function(x, n) local y = x >> n; if (x < 0) then y = y | ~(-1 >> n) end return y end, band = function(x, y) return x & y end, bor = function(x, y) return x | y end, bnot = function(x) return ~x end, bxor = function(x, y) return x ~ y end, lshift = function(x, n) return x << n end, rshift = function(x, n) return x >> n end}").replace('__lua_lib_luautf8_Utf8 = _G.require("lua-utf8")', "__lua_lib_luautf8_Utf8 = {byte = _G.string.byte, find = _G.string.find, gmatch = _G.string.gmatch, gsub = _G.string.gsub, lower = _G.string.lower, match = _G.string.match, reverse = _G.string.reverse, sub = _G.string.sub, upper = _G.string.upper}; for k, v in pairs(_G.utf8) do __lua_lib_luautf8_Utf8[k] = v end;").replace("_G.xpcall(Main.main, _hx_error)", 'local err; if not xpcall(Main.main, function(obj) err = ""; local _print = _G.print; _G.print = function(...) local args = table.pack(...) for i = 1, args.n do args[i] = tostring(args[i]) end err = err .. table.concat(args, "\t") .. "\n" end _hx_error(obj); _G.print = _print end) then _G.error(err) return end;') | Set-Content $path

View File

@ -0,0 +1,27 @@
#!/bin/bash
# This file is part of KoboldAI.
#
# KoboldAI is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
set -e
path=$1
if [ $# -eq 0 ]
then
path="out.lua"
fi
haxe --lua $path -L littleBigInt --main Main
perl -pe 's/\Q_G.require("rex_pcre")/\E({flags = function() return {CASELESS = 1, DOTALL = 1, MULTILINE = 1, UCP = 1, UTF8 = 1} end, gsub = function() return "" end, new = function() return {} end})/' -i $path
perl -pe 's/\Qreturn _hx_exports/\Ereturn _hx_exports.Main/' -i $path
perl -pe "s/\Q _hx_bit_raw = _G.require('bit32')/\E _hx_bit_raw = {arshift = function(x, n) local y = x >> n; if (x < 0) then y = y | ~(-1 >> n) end return y end, band = function(x, y) return x & y end, bor = function(x, y) return x | y end, bnot = function(x) return ~x end, bxor = function(x, y) return x ~ y end, lshift = function(x, n) return x << n end, rshift = function(x, n) return x >> n end}/" -i $path
perl -pe 's/\Q__lua_lib_luautf8_Utf8 = _G.require("lua-utf8")/\E__lua_lib_luautf8_Utf8 = {byte = _G.string.byte, find = _G.string.find, gmatch = _G.string.gmatch, gsub = _G.string.gsub, lower = _G.string.lower, match = _G.string.match, reverse = _G.string.reverse, sub = _G.string.sub, upper = _G.string.upper}; for k, v in pairs(_G.utf8) do __lua_lib_luautf8_Utf8[k] = v end;/' -i $path
perl -pe 's/\Q_G.xpcall(Main.main, _hx_error)/\Elocal err; if not xpcall(Main.main, function(obj) err = ""; local _print = _G.print; _G.print = function(...) local args = table.pack(...) for i = 1, args.n do args[i] = tostring(args[i]) end err = err .. table.concat(args, "\\t") .. "\\n" end _hx_error(obj); _G.print = _print end) then _G.error(err) return end;/' -i $path

View File

@ -0,0 +1,54 @@
const fs = require("fs");
const luamin = require("luamin");
const in_path = "out.lua";
const out_path = "out.min.lua";
var data = fs.readFileSync(in_path, "utf8");
data = luamin.minify(data);
data = '-- Haxe transcendental test\n\
-- This is a script written in Haxe that prints the natural logarithm of the\n\
-- golden ratio in base 10 to arbitrarily many digits.\n\
\n\
-- This file is part of KoboldAI.\n\
--\n\
-- KoboldAI is free software: you can redistribute it and/or modify\n\
-- it under the terms of the GNU Affero General Public License as published by\n\
-- the Free Software Foundation, either version 3 of the License, or\n\
-- (at your option) any later version.\n\
--\n\
-- This program is distributed in the hope that it will be useful,\n\
-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
-- GNU Affero General Public License for more details.\n\
--\n\
-- You should have received a copy of the GNU Affero General Public License\n\
-- along with this program. If not, see <https://www.gnu.org/licenses/>.\n\
\n\
--------------------------------------------------------------------------------\n\
\n\
-- License for littleBigInt:\n\
\n\
-- MIT License\n\
--\n\
-- Copyright (c) 2020 Sylvio Sell\n\
--\n\
-- Permission is hereby granted, free of charge, to any person obtaining a copy\n\
-- of this software and associated documentation files (the "Software"), to deal\n\
-- in the Software without restriction, including without limitation the rights\n\
-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\
-- copies of the Software, and to permit persons to whom the Software is\n\
-- furnished to do so, subject to the following conditions:\n\
--\n\
-- The above copyright notice and this permission notice shall be included in all\n\
-- copies or substantial portions of the Software.\n\
--\n\
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\
-- SOFTWARE.\n\
\n' + data + "\n";
fs.writeFileSync(out_path, data);