Keep model guides concise and use the Cactus package
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- README.md +17 -93
- android-arm64/libneedle.a +0 -3
- android-arm64/needle +0 -3
- android-arm64/needle.h +0 -122
- android-armv7/libneedle.a +0 -3
- android-armv7/needle +0 -3
- android-armv7/needle.h +0 -122
- android-riscv64/libneedle.a +0 -3
- android-riscv64/needle +0 -3
- android-riscv64/needle.h +0 -122
- ios-arm64/libneedle.a +0 -3
- ios-arm64/needle.h +0 -122
- ios-sim-arm64/libneedle.a +0 -3
- ios-sim-arm64/needle.h +0 -122
- linux-arm64/libneedle.a +0 -3
- linux-arm64/needle +0 -3
- linux-arm64/needle.h +0 -122
- linux-armv7/libneedle.a +0 -3
- linux-armv7/needle +0 -3
- linux-armv7/needle.h +0 -122
- linux-mipsel/libneedle.a +0 -3
- linux-mipsel/needle +0 -3
- linux-mipsel/needle.h +0 -122
- linux-riscv64/libneedle.a +0 -3
- linux-riscv64/needle +0 -3
- linux-riscv64/needle.h +0 -122
- linux-x86_64/libneedle.a +0 -3
- linux-x86_64/needle +0 -3
- linux-x86_64/needle.h +0 -122
- macos-arm64/libneedle.a +0 -3
- macos-arm64/needle +0 -3
- macos-arm64/needle.h +0 -122
- python/cactus_needle-3.0.0-py3-none-macosx_11_0_arm64.whl +0 -3
- python/cactus_needle-3.0.0-py3-none-macosx_11_0_x86_64.whl +0 -3
- python/cactus_needle-3.0.0-py3-none-manylinux2014_aarch64.whl +0 -3
- python/cactus_needle-3.0.0-py3-none-manylinux2014_x86_64.whl +0 -3
- python/cactus_needle-3.0.0-py3-none-musllinux_1_2_aarch64.whl +0 -3
- python/cactus_needle-3.0.0-py3-none-musllinux_1_2_x86_64.whl +0 -3
- python/cactus_needle-3.0.0-py3-none-win_amd64.whl +0 -3
- python/cactus_needle-3.0.0-py3-none-win_arm64.whl +0 -3
- python/cactus_needle-3.0.1-py3-none-macosx_11_0_arm64.whl +0 -3
- python/cactus_needle-3.0.1-py3-none-macosx_11_0_x86_64.whl +0 -3
- python/cactus_needle-3.0.1-py3-none-manylinux2014_aarch64.whl +0 -3
- python/cactus_needle-3.0.1-py3-none-manylinux2014_x86_64.whl +0 -3
- python/cactus_needle-3.0.1-py3-none-musllinux_1_2_aarch64.whl +0 -3
- python/cactus_needle-3.0.1-py3-none-musllinux_1_2_x86_64.whl +0 -3
- python/cactus_needle-3.0.1-py3-none-win_amd64.whl +0 -3
- python/cactus_needle-3.0.1-py3-none-win_arm64.whl +0 -3
- python/cactus_needle-3.0.2-py3-none-macosx_11_0_arm64.whl +0 -3
- python/cactus_needle-3.0.2-py3-none-macosx_11_0_x86_64.whl +0 -3
README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
---
|
| 2 |
-
library_name: cactus-
|
| 3 |
pipeline_tag: text-generation
|
| 4 |
license: apache-2.0
|
| 5 |
tags:
|
|
@@ -11,114 +11,38 @@ tags:
|
|
| 11 |
- webassembly
|
| 12 |
---
|
| 13 |
|
| 14 |
-

|
| 15 |
|
| 16 |
-
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
- **Tool calls**: given the functions your app exposes, Needle picks the right ones and fills every argument from what the user said. Ask for two things and you get two calls in order; ask for something no tool covers and you get an empty list, not a guess.
|
| 21 |
-
- **Structured extraction**: declare a shape, hand over messy text, get typed fields back: an invoice, a booking, a notification, a form. The decode grammar guarantees the output parses, and extraction generalises to classification.
|
| 22 |
-
- **Text embedding**: the same model returns a vector for a sentence, so an app can search, match and route locally.
|
| 23 |
-
|
| 24 |
-
The same engine also runs [Whistle](https://huggingface.co/Cactus-Compute/whistle), our 16.9 MB speech-to-text model in seven languages. Load `whistle.cact` beside `needle3.cact` and the one binary transcribes a clip on its own, or answers it against your tools in a single call and returns the calls and the transcript in one JSON object.
|
| 25 |
-
|
| 26 |
-
## Model
|
| 27 |
-
|
| 28 |
-

|
| 29 |
-
|
| 30 |
-
Needle 3 is a Laddered Simple Attention Network, our small-model recipe: a Monarch Hadamard MLP in place of the FFN, GQA attention with causal conv taps, engram n-gram memory read by gather, and multi-lane hyper-connections, trained so that every depth from 2 to 20 layers is a deployable model. Most of its parameters sit in the engram, so the 121M model does the arithmetic of a 50M one. The weights are compressed to CQ2-bit with Cactus Quants; a byte-level grammar compiled from your schemas constrains every token, and every response carries a calibrated confidence score from a learned head. The architecture diagram is on the [release page](https://cactuscompute.com/needle). The repo holds the 20-layer `needle3.cact`, the `needle3.safetensors` checkpoint to fine-tune, and an engine per platform.
|
| 31 |
-
|
| 32 |
-
## Benchmarks
|
| 33 |
-
|
| 34 |
-
Tool calling is exact-match accuracy on the full test splits, extraction is field micro-F1 on the full test splits.
|
| 35 |
-
|
| 36 |
-

|
| 37 |
-
|
| 38 |
-
The interactive frontier plot, the architecture and the fine-tuning results are at [cactuscompute.com/needle](https://cactuscompute.com/needle).
|
| 39 |
|
| 40 |
## Get started
|
| 41 |
|
| 42 |
```sh
|
| 43 |
-
pip install cactus-
|
| 44 |
```
|
| 45 |
|
| 46 |
-
Try it in the browser at [cactuscompute.com/needle](https://cactuscompute.com/needle); the Python package and the source are on [GitHub](https://github.com/cactus-compute/needle).
|
| 47 |
-
|
| 48 |
```python
|
| 49 |
-
import
|
| 50 |
|
| 51 |
-
@
|
| 52 |
def get_weather(city: str):
|
| 53 |
"Get the current weather for a city."
|
| 54 |
return {"city": city, "temp_c": 27, "sky": "clear"}
|
| 55 |
|
| 56 |
-
|
| 57 |
-
print(agent.run("
|
| 58 |
-
# [{'city': 'Lagos', 'temp_c': 27, 'sky': 'clear'}]
|
| 59 |
```
|
| 60 |
|
| 61 |
-
|
|
|
|
|
|
|
| 62 |
|
| 63 |
## Guides
|
| 64 |
|
| 65 |
-
- [
|
| 66 |
-
- [
|
| 67 |
-
- [
|
| 68 |
-
- [
|
| 69 |
-
- [Needle Python docs](https://cactuscompute.com/blog/needle-python-docs): the API, the response shape, the behaviour contract, system facts, tool retrieval, offline devices, environments, the CLI.
|
| 70 |
-
- [What devices are supported on Needle](https://cactuscompute.com/blog/needle-supported-devices): every platform folder, the CLI runner, the C API, the browser, WASI, air-gapped setup.
|
| 71 |
-
- [The .cact format](https://cactuscompute.com/blog/cact-format): the file the engine maps and reads in place, Cactus Quants at 2.125 bits per weight, and how to parse it yourself.
|
| 72 |
-
- [Porting Needle 3](https://cactuscompute.com/blog/porting-needle): notes for writing your own runtime, the oracle to test against, the tensor order the container promises, the prompt on the wire, the ladder rule, retrieval with `needle_embed`.
|
| 73 |
-
|
| 74 |
-
## Customisation
|
| 75 |
-
|
| 76 |
-
Needle was designed to be customised. Its capacity is a ladder, and a subnetwork as small as 2 layers, fine-tuned on one product's tools, runs optimally on devices far smaller than the full model needs. Fine-tuning on DroidCall lifts every subnetwork by 18 to 36 points, and from 4 layers up the tuned subnetwork passes DeepSeek V4 Flash, starting at 29M parameters.
|
| 77 |
-
|
| 78 |
-

|
| 79 |
-
|
| 80 |
-
The Python package fine-tunes with LoRA on the frozen base at the full 20 layers, then `needle build [--layers N]` merges the adapter, slices any subnetwork from 2 to 20 layers and exports a 4-bit `.cact` that runs on the same engine. The 2-bit post-training and quantisation behind the shipped model, enriched with Cactus proprietary datasets, run on the [Cactus Platform](https://cactuscompute.com/dashboard).
|
| 81 |
-
|
| 82 |
-
## Deploy
|
| 83 |
-
|
| 84 |
-
Every platform folder in this repo holds an engine that loads `needle3.cact` at start. `needle build --platform <folder> [--layers N]` fetches the engine and header and puts the weights beside them at any depth, or download the folder here:
|
| 85 |
-
|
| 86 |
-

|
| 87 |
-
|
| 88 |
-
```sh
|
| 89 |
-
./needle --model needle3.cact --tools tools.json --prompt "dim the living room to 30"
|
| 90 |
-
./needle --model needle3.cact --tools tools.json --serve
|
| 91 |
-
|
| 92 |
-
# speech to text, live from a stream, and speech straight to tool calls
|
| 93 |
-
./needle --model whistle.cact --audio clip.wav
|
| 94 |
-
./needle --model whistle.cact --audio talk.wav --audio-stream
|
| 95 |
-
./needle --model needle3.cact --model whistle.cact --tools tools.json --audio clip.wav
|
| 96 |
-
```
|
| 97 |
-
|
| 98 |
-
Tool schemas share the model context with the system prompt and conversation.
|
| 99 |
-
`needle_init` returns the tokenized static-prefix length on success and fails
|
| 100 |
-
when that prefix does not fit the model context. In the C API, call
|
| 101 |
-
`needle_last_error()` after a negative return to get the measured prefix tokens
|
| 102 |
-
and context limit. Reduce tool descriptions/schema text, split large catalogues,
|
| 103 |
-
or declare more than five tools so Needle can keep only retrieved tools in the
|
| 104 |
-
per-turn prefix. At completion time, `max_new_tokens` also reserves context room,
|
| 105 |
-
so larger generation caps leave less space for the current turn and history.
|
| 106 |
-
|
| 107 |
-
The [devices guide](https://cactuscompute.com/blog/needle-supported-devices) covers the runner flags, the C API, the WASI component and air-gapped setup.
|
| 108 |
-
|
| 109 |
-
## Citation
|
| 110 |
-
|
| 111 |
-
Needle 3 is built by the Cactus Compute team. If you use it in your work, please cite:
|
| 112 |
-
|
| 113 |
-
```bibtex
|
| 114 |
-
@misc{needle3_2026,
|
| 115 |
-
title = {Needle: Foundation Tool-Calling Model for Tiny Devices},
|
| 116 |
-
author = {Ndubuaku, Henry and Mosoyan, Karen and Mroz, Jakub and Cylich, Noah and
|
| 117 |
-
Kumar, Satyajit and Sandhu, Parkirat and Shemet, Roman and Lee, Justin H.},
|
| 118 |
-
year = {2026},
|
| 119 |
-
organization = {Cactus Compute, Inc.},
|
| 120 |
-
howpublished = {\url{https://github.com/cactus-compute/needle}}
|
| 121 |
-
}
|
| 122 |
-
```
|
| 123 |
-
|
| 124 |
-
Reach out on founders@cactuscompute.com for partnerships, collaborations, synergies and deploying Needle in your product.
|
|
|
|
| 1 |
---
|
| 2 |
+
library_name: cactus-compute
|
| 3 |
pipeline_tag: text-generation
|
| 4 |
license: apache-2.0
|
| 5 |
tags:
|
|
|
|
| 11 |
- webassembly
|
| 12 |
---
|
| 13 |
|
| 14 |
+

|
| 15 |
|
| 16 |
+
# Needle 3
|
| 17 |
|
| 18 |
+
An on-device model for tool calling, structured extraction and text embeddings.
|
| 19 |
+
See the [Needle website](https://cactuscompute.com/needle) for model details, benchmarks and the browser demo.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
## Get started
|
| 22 |
|
| 23 |
```sh
|
| 24 |
+
pip install -U cactus-compute
|
| 25 |
```
|
| 26 |
|
|
|
|
|
|
|
| 27 |
```python
|
| 28 |
+
import cactus
|
| 29 |
|
| 30 |
+
@cactus.tool
|
| 31 |
def get_weather(city: str):
|
| 32 |
"Get the current weather for a city."
|
| 33 |
return {"city": city, "temp_c": 27, "sky": "clear"}
|
| 34 |
|
| 35 |
+
with cactus.Cactus(tools=[get_weather]) as agent:
|
| 36 |
+
print(agent.run("What's the weather in Lagos?")["results"])
|
|
|
|
| 37 |
```
|
| 38 |
|
| 39 |
+
The package downloads and caches the engine and weights on first use.
|
| 40 |
+
This repository provides `needle3.cact` and `checkpoints/needle3.safetensors`.
|
| 41 |
+
[Runtime binaries and supported platforms](https://huggingface.co/Cactus-Compute/cactus) live in the Cactus repository.
|
| 42 |
|
| 43 |
## Guides
|
| 44 |
|
| 45 |
+
- [Python API](https://cactuscompute.com/blog/needle-python-docs)
|
| 46 |
+
- [Designing tools](https://cactuscompute.com/blog/designing-tools-for-needle) and [structured extraction](https://cactuscompute.com/blog/structured-extraction-with-needle)
|
| 47 |
+
- [Fine-tuning](https://cactuscompute.com/blog/finetuning-needle)
|
| 48 |
+
- [Source code](https://github.com/cactus-compute/cactus)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
android-arm64/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:7aa6de6132a22bf45f5e903425feb66f159ad46f47fa558921bc4fd02c3a2fa0
|
| 3 |
-
size 2177676
|
|
|
|
|
|
|
|
|
|
|
|
android-arm64/needle
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:02a044e15489e19fa9f4f1cd1d5943d39dc0eefc08e0ba99d36279daf2351d46
|
| 3 |
-
size 1586416
|
|
|
|
|
|
|
|
|
|
|
|
android-arm64/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
android-armv7/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:9f559a287b201c213e5c753d3cd1076a1849c73f94b445c85d11e4969422a135
|
| 3 |
-
size 1700760
|
|
|
|
|
|
|
|
|
|
|
|
android-armv7/needle
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:8de71d0a00538ff3a64c2023f9d27121148295e50d414de284ac86586336127f
|
| 3 |
-
size 967396
|
|
|
|
|
|
|
|
|
|
|
|
android-armv7/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
android-riscv64/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:a8eb2313c04b113b774794cfe0aa5361ecdc6f17bc4930deebbb1b924a891a8e
|
| 3 |
-
size 5092414
|
|
|
|
|
|
|
|
|
|
|
|
android-riscv64/needle
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:7bdf932bd9eed6c2f49d5b83e6c3061766b49738ddfeb8a88b3d113b318630ab
|
| 3 |
-
size 1431792
|
|
|
|
|
|
|
|
|
|
|
|
android-riscv64/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ios-arm64/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:3e931f1d52319c1396901f3a16244ea47776d18acbf28543b62da408de45158a
|
| 3 |
-
size 1501688
|
|
|
|
|
|
|
|
|
|
|
|
ios-arm64/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ios-sim-arm64/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:75f836ada53fc55cd27a30e0edaea8bf5dcbcca6e30c9f0202fa192db20cea80
|
| 3 |
-
size 1535472
|
|
|
|
|
|
|
|
|
|
|
|
ios-sim-arm64/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
linux-arm64/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:d54f0d83963c56eb79181929827c9f9ff405891d50cd12974c2b0f6485dd07af
|
| 3 |
-
size 2024824
|
|
|
|
|
|
|
|
|
|
|
|
linux-arm64/needle
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:a7dd07f740763507edbca760dc7e7065b6da6b6bd6c3a05288ca974f14ce0fcb
|
| 3 |
-
size 1439720
|
|
|
|
|
|
|
|
|
|
|
|
linux-arm64/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
linux-armv7/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:972ce9802664307b681ef39dd86e0aa0164b4c3380d195476fe9e954b7804130
|
| 3 |
-
size 1783478
|
|
|
|
|
|
|
|
|
|
|
|
linux-armv7/needle
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:1200e2b2d5005f969c30f321df72f0eff24b51a2862059b666da3f2dfef9ad2f
|
| 3 |
-
size 1247772
|
|
|
|
|
|
|
|
|
|
|
|
linux-armv7/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
linux-mipsel/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:6f071b386e187b3b4905274f67e026d3ccecc3e2bebf7d49bd4d31616e593d6a
|
| 3 |
-
size 1689382
|
|
|
|
|
|
|
|
|
|
|
|
linux-mipsel/needle
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:b3d6abd16a1ba41870c1e4a1134cf4ffc0060eb66e9181e180882008063fe549
|
| 3 |
-
size 1745296
|
|
|
|
|
|
|
|
|
|
|
|
linux-mipsel/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
linux-riscv64/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:e0bb8e19fae59b0f969c5fad999a020817f8d2081773329c9651f7701f9e4dfa
|
| 3 |
-
size 1939344
|
|
|
|
|
|
|
|
|
|
|
|
linux-riscv64/needle
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:c87d816358cefbd12a2dd33ea8cc0767a9b361a1a1ed138eaf3006ed3845d5b2
|
| 3 |
-
size 1186320
|
|
|
|
|
|
|
|
|
|
|
|
linux-riscv64/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
linux-x86_64/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:2f281877e24fed2658187a32d9a26e74c32d4f273ac9a2b36180b3a6e85942da
|
| 3 |
-
size 2204068
|
|
|
|
|
|
|
|
|
|
|
|
linux-x86_64/needle
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:77cd35ee75c53df8532b397e11ed7cf94a45d89a9f14f50881fd9c68ba54a2d0
|
| 3 |
-
size 1550176
|
|
|
|
|
|
|
|
|
|
|
|
linux-x86_64/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
macos-arm64/libneedle.a
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:7d1368a4a42a745aba055f310913c3ed6d929dee98a89dcb955b9032b2335700
|
| 3 |
-
size 1534472
|
|
|
|
|
|
|
|
|
|
|
|
macos-arm64/needle
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:0a480f7e01d1fcf9df2e6dbc29af29411406720a5c5cb73024fcd6d16aa25b60
|
| 3 |
-
size 1107096
|
|
|
|
|
|
|
|
|
|
|
|
macos-arm64/needle.h
DELETED
|
@@ -1,122 +0,0 @@
|
|
| 1 |
-
#ifndef NEEDLE_H
|
| 2 |
-
#define NEEDLE_H
|
| 3 |
-
|
| 4 |
-
#ifndef NEEDLE_API
|
| 5 |
-
#define NEEDLE_API __attribute__((visibility("default")))
|
| 6 |
-
#endif
|
| 7 |
-
|
| 8 |
-
#define NEEDLE_TEXT 1
|
| 9 |
-
#define NEEDLE_SPEECH 2
|
| 10 |
-
|
| 11 |
-
#ifdef __cplusplus
|
| 12 |
-
extern "C" {
|
| 13 |
-
#endif
|
| 14 |
-
|
| 15 |
-
/* One process-global, non-thread-safe model per kind, text and speech.
|
| 16 |
-
Negative returns indicate failure; call needle_last_error() for the specific
|
| 17 |
-
reason. needle_load reads whichever kind the .cact holds and keeps the other,
|
| 18 |
-
so a build with both models takes one call per model. */
|
| 19 |
-
NEEDLE_API int needle_load(
|
| 20 |
-
const unsigned char* cact,
|
| 21 |
-
unsigned long long n
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
/* NEEDLE_TEXT, NEEDLE_SPEECH or both, for the models this process has loaded. */
|
| 25 |
-
NEEDLE_API int needle_models(void);
|
| 26 |
-
|
| 27 |
-
/* Last process-global error, owned by the runtime and valid until the next API call. */
|
| 28 |
-
NEEDLE_API const char* needle_last_error(void);
|
| 29 |
-
|
| 30 |
-
/* needle_init returns the tokenized static-prefix length on success. It can fail
|
| 31 |
-
when the system prompt plus statically-declared tools exceed the context
|
| 32 |
-
window, and reports the measured token count when it does. */
|
| 33 |
-
NEEDLE_API int needle_init(
|
| 34 |
-
const char* system_prompt,
|
| 35 |
-
const char* tools_json,
|
| 36 |
-
const char* tool_index_path
|
| 37 |
-
);
|
| 38 |
-
|
| 39 |
-
/* Answers text or speech: exactly one of input and pcm is non-null. Given pcm,
|
| 40 |
-
the engine transcribes the clip with the loaded speech model, answers the
|
| 41 |
-
transcript, and merges the speech fields into the same JSON object under an
|
| 42 |
-
audio_ prefix. needle_set_audio chooses how that transcription runs. */
|
| 43 |
-
NEEDLE_API int needle_complete(
|
| 44 |
-
const char* input,
|
| 45 |
-
const float* pcm,
|
| 46 |
-
int samples,
|
| 47 |
-
int max_new_tokens,
|
| 48 |
-
char* out,
|
| 49 |
-
int out_capacity
|
| 50 |
-
);
|
| 51 |
-
|
| 52 |
-
/* Language, keywords and word timestamps for the transcription needle_complete
|
| 53 |
-
runs for itself, with the meanings they have in needle_transcribe. The
|
| 54 |
-
strings are copied. Defaults: detect the language, no keywords, no times. */
|
| 55 |
-
NEEDLE_API void needle_set_audio(
|
| 56 |
-
const char* language,
|
| 57 |
-
const char* keywords,
|
| 58 |
-
int word_timestamps
|
| 59 |
-
);
|
| 60 |
-
|
| 61 |
-
NEEDLE_API void needle_reset(void);
|
| 62 |
-
|
| 63 |
-
/* Transcribes 16 kHz mono float PCM in [-1, 1] of any length and returns the
|
| 64 |
-
number of tokens in the transcript. Up to 30 s runs as one pass; longer audio
|
| 65 |
-
runs as consecutive 30 s windows, each decoded once and cut at its last
|
| 66 |
-
sentence end, with word times counted from the start of the clip. language is "en", "de", "fr", "es", "it", "nl" or
|
| 67 |
-
"pl", or NULL to detect it. keywords is NULL or newline-separated words and
|
| 68 |
-
phrases for keyword biasing. out receives JSON with the transcript, the
|
| 69 |
-
language used, the milliseconds to the first token and the decoder's tokens
|
| 70 |
-
per second after it; silence and steady noise give an empty text and language:
|
| 71 |
-
{"text":"...","language":"en","ttft_ms":0.0,"decode_tps":0.0}
|
| 72 |
-
A non-zero word_timestamps adds each word with times in seconds:
|
| 73 |
-
"words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}] */
|
| 74 |
-
NEEDLE_API int needle_transcribe(
|
| 75 |
-
const float* pcm,
|
| 76 |
-
int samples,
|
| 77 |
-
const char* language,
|
| 78 |
-
const char* keywords,
|
| 79 |
-
int word_timestamps,
|
| 80 |
-
char* out,
|
| 81 |
-
int out_capacity
|
| 82 |
-
);
|
| 83 |
-
|
| 84 |
-
/* Live transcription: appends 16 kHz mono float PCM, about one second at a
|
| 85 |
-
time, re-transcribes the buffered audio and commits the words two consecutive
|
| 86 |
-
passes agree on; a feed longer than 30 s is taken in one-second pieces. language and keywords are as in
|
| 87 |
-
needle_transcribe. out receives the words this call committed, with times in
|
| 88 |
-
seconds from the start of the stream, and the unconfirmed tail; returns the
|
| 89 |
-
number of words committed:
|
| 90 |
-
{"text":"...","words":[{"word":"...","start":0.00,"end":0.00,"probability":0.000}],
|
| 91 |
-
"pending":"...","language":"en","received":0.00,"pass_ms":0.0} */
|
| 92 |
-
NEEDLE_API int needle_stream_transcribe_process(
|
| 93 |
-
const float* pcm,
|
| 94 |
-
int samples,
|
| 95 |
-
const char* language,
|
| 96 |
-
const char* keywords,
|
| 97 |
-
char* out,
|
| 98 |
-
int out_capacity
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
/* Ends the stream: the tail becomes the committed words of out, and the next
|
| 102 |
-
needle_stream_transcribe_process starts a new stream. */
|
| 103 |
-
NEEDLE_API int needle_stream_transcribe_stop(
|
| 104 |
-
char* out,
|
| 105 |
-
int out_capacity
|
| 106 |
-
);
|
| 107 |
-
|
| 108 |
-
/* Embeds text or speech: exactly one of input and pcm is non-null. Text returns
|
| 109 |
-
the model's embedding dimension, speech one row of that width per 80 ms frame,
|
| 110 |
-
flattened. A null output returns the float count without computing. */
|
| 111 |
-
NEEDLE_API int needle_embed(
|
| 112 |
-
const char* input,
|
| 113 |
-
const float* pcm,
|
| 114 |
-
int samples,
|
| 115 |
-
float* out,
|
| 116 |
-
int out_capacity
|
| 117 |
-
);
|
| 118 |
-
|
| 119 |
-
#ifdef __cplusplus
|
| 120 |
-
}
|
| 121 |
-
#endif
|
| 122 |
-
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.0-py3-none-macosx_11_0_arm64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:f5c05efdd195c92effd8507d1259d6e509b9c5a8823939e67f2be4e83811b44b
|
| 3 |
-
size 376196
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.0-py3-none-macosx_11_0_x86_64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:01c1d8874266013e32b539c7b154b811f8268a01e7ea992eea40e5e1d541c55a
|
| 3 |
-
size 430782
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.0-py3-none-manylinux2014_aarch64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:653f41d440f14ad53cf0c4597fc9d960cbf059ae51a38ec0fb4f54a8873d5c0c
|
| 3 |
-
size 500887
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.0-py3-none-manylinux2014_x86_64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:a1eae4b94675ae025ebdb380401e0d9cab1d1f6c34d4fe1251166f1ba2faf16e
|
| 3 |
-
size 530108
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.0-py3-none-musllinux_1_2_aarch64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:4f826703197c3654ec426b3a2651057eb07496afb669c7d46f0aacf7844478a4
|
| 3 |
-
size 500458
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.0-py3-none-musllinux_1_2_x86_64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:f2b132474722ac032269782c2fa7ec459758ab43624843be4e3b16bf7cf7abee
|
| 3 |
-
size 530918
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.0-py3-none-win_amd64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:06fde9731929f53a7033e57f037f9262f99a3cdc2758d8d7bffae91404fb8665
|
| 3 |
-
size 547384
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.0-py3-none-win_arm64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:5b1da56516304bbc2ba6ec819ab9e6f72aad2525f14d9327f15d2d5edc1f9423
|
| 3 |
-
size 477839
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.1-py3-none-macosx_11_0_arm64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:161c3aacfb6e54443925b389a69eb58a1861e60af19bbdf8f39d89992c5d7436
|
| 3 |
-
size 387232
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.1-py3-none-macosx_11_0_x86_64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:941883e51fb2530706f1a115a0ea0062bb37501edaad8a6f08b85e12c4f5ca76
|
| 3 |
-
size 431615
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.1-py3-none-manylinux2014_aarch64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:fc0c550b64627ed20101d1ac6de736bf0d15fb592d649f24bacba4e7340fc3df
|
| 3 |
-
size 517746
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.1-py3-none-manylinux2014_x86_64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:05770ef9a85686583968ea15f62f9ad44217e078efdaa99559d3208bb8a369b0
|
| 3 |
-
size 536871
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.1-py3-none-musllinux_1_2_aarch64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:ec307274ed14d8a11be448e1546d3a330704a8d76a96a2f99de12ca14ed8ee64
|
| 3 |
-
size 517367
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.1-py3-none-musllinux_1_2_x86_64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:1b2f5f560fcf8d2033c0ade7ea48d8f2f228cb17f53331bf844fcceb955440e0
|
| 3 |
-
size 537929
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.1-py3-none-win_amd64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:7d4467726814ab18d9ce32a8a5cc23d1198a2c0557c613a00bef738121903e2f
|
| 3 |
-
size 553581
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.1-py3-none-win_arm64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:dfa6f8c15ca979bbe7c3e0579efdd8bf7b7afc75355e063cd00e6ac7732c9896
|
| 3 |
-
size 493234
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.2-py3-none-macosx_11_0_arm64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:aa6e730f3b3b46f103ba2bc1b268c402d497086030cce735846bee4d3abbf3d3
|
| 3 |
-
size 387420
|
|
|
|
|
|
|
|
|
|
|
|
python/cactus_needle-3.0.2-py3-none-macosx_11_0_x86_64.whl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:cdec5cd39868f51204671cff18ca82d79de2809819f83284abade16088b1b779
|
| 3 |
-
size 431850
|
|
|
|
|
|
|
|
|
|
|
|