* Use types from typing for better compatibility with older Python versions
* Split last double end of line token as per BlinkDL's suggestion
* Fix MSVC warnings
* Drop Q4_2 support
* Update ggml
* Bump file format version for quantization changes
* Apply suggestions
I realized I didn't give enough space for additional failure modes
to be added in the future, and I should do this as soon as possible
to prevent things from being made that depend on the old constants
* Add rwkv_set_print_errors and rwkv_get_last_error
Fixes#63
This allows retrieving errors from the library without having to
pipe stderr. Also it was annoying that rwkv.cpp assumed control of
the caller process by doing things like calling abort() when it
shouldn't, so I also fixed that.
The basic way this works is:
1. by default, not much is different, except more errors are caught,
and rwkv.cpp should never abort the process or throw a C++
exception.
2. the difference comes when you call rwkv_set_print_errors
(working title):
1. errors will no longer be printed to stderr automatically
2. errors will be assigned to a thread-local variable (during
init/quantization) or a context-local variable (during eval)
3. the last error can be retrieved using rwkv_get_last_error
I also overhauled the assert macros so more error cases are
handled:
- the file is now closed if rwkv_init_from_file exits early
- the ggml context is freed if rwkv_init_from_file exits early
- if parameters cannot be found an error will be set about it
I also made some optimizations:
- just use fstat instead of opening the file twice
- deduplicated some code / removed edge cases that do not exist
- switched to ggml inplace operations where they exist
test_tiny_rwkv.c seems to run perfectly fine. The Python scripts
also.
The built DLL is perfectly backwards compatible with existing API
consumers like the python library, because it does not remove or
change any functions, only adds some optional ones.
The sad thing is that this will break every PR because the error
handling in this library was terrible and needed to be totally
redone. But I think it is worth it.
* Fix typo
Co-authored-by: Alex <saharNooby@users.noreply.github.com>
* Visual Studio lied and _fileno is incorrect
* Fix trailing comma in assert macros
This was an accident left over from something that didn't pan out,
some compilers do not like when function arguments have a trailing
comma.
* Include header file for fstat
* Remove uses of std::make_unique
* Fix width of format string argument on all platforms
* Use C free for smart pointers
* Revert "Use C free for smart pointers" and try nothrow
* Initialize cgraph to zero
* Fix ggml_cgraph initialization
* Zero-initialize allocations
---------
Co-authored-by: Alex <saharNooby@users.noreply.github.com>
* Update ggml
* Pack only rwkv.dll for Windows releases
Test executables would not be packed anymore.
* Move test code into a separate file
* Remove redundant zeroing
* Refactor chat script
* Remove Q4_3 support
* Add Q5_0, Q5_1, Q8_0 support
* Add more clear message when loading Q4_3 model
* Remove Q4_1_O format
* Fix indentation in .gitmodules
* Simplify sanitizer matrix