#llama #bindings #cpp-bindings #llm #llama-cpp

rs-llama-cpp

为LLaMA.cpp生成自动Rust绑定

60个版本

0.1.67 2023年8月9日
0.1.66 2023年8月8日
0.1.58 2023年7月31日
0.1.28 2023年6月30日

#298 in 科学

MIT许可证

2MB
44K SLoC

C 18K SLoC // 0.1% comments C++ 15K SLoC // 0.2% comments CUDA 4.5K SLoC // 0.0% comments Python 2K SLoC // 0.1% comments Metal Shading Language 1.5K SLoC // 0.0% comments Shell 1K SLoC // 0.1% comments Objective-C 899 SLoC // 0.1% comments Rust 727 SLoC // 0.0% comments JavaScript 262 SLoC // 0.2% comments Vim Script 131 SLoC // 0.1% comments Zig 74 SLoC // 0.0% comments Batch 48 SLoC Swift 21 SLoC

rs-llama-cpp

为LLaMA.cpp生成自动Rust绑定

描述

LLaMA.cpp 正在快速发展,每天都有众多个人为其贡献力量。目前,它的C API非常底层,由于项目发展迅速,跟上这些变化并将示例移植到更高层次的API比较困难。作为权衡,本项目优先考虑自动化,自动为LLaMA.cpp的主示例生成Rust绑定。

限制

本项目的主要设计目标是通过尽可能自动化步骤来最小化更新LLaMA.cpp的努力。然而,这种方法确实存在一些局限性

  1. API非常高级,类似于调用LLaMA.cpp的主函数,并通过回调函数接收令牌。
  2. 目前,该项目不暴露难以转换为Rust的类型参数,例如 std::unordered_mapstd::vector
  3. 通过Rust API暴露的一些参数仅对CLI相关。
  4. 生成的C++库向 stderrstdout 输出大量调试信息。目前无法配置

用法

use rs_llama_cpp::{gpt_params_c, run_inference, str_to_mut_i8};

fn main() {
    let params: gpt_params_c = {
        gpt_params_c {
            model: str_to_mut_i8("/path/to/model.bin"),
            prompt: str_to_mut_i8("Hello "),
            ..Default::default()
        }
    };

    run_inference(params, |token| {
        println!("Token: {}", token);

        if token.ends_with("\n") {
            return false; // stop inference
        }

        return true; // continue inference
    });
}

无运行时依赖