Copy disabled (too large)
Download .txt
Showing preview only (13,292K chars total). Download the full file to get everything.
Repository: facebookresearch/seamless_communication
Branch: main
Commit: 90e2b57ac4d8
Files: 312
Total size: 12.6 MB
Directory structure:
gitextract_0arsiegg/
├── .gitignore
├── .gitmodules
├── .pre-commit-config.yaml
├── ACCEPTABLE_USE_POLICY
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── MIT_LICENSE
├── README.md
├── SEAMLESS_LICENSE
├── Seamless_Tutorial.ipynb
├── demo/
│ ├── .gitignore
│ ├── dino_pretssel/
│ │ ├── index.html
│ │ ├── jquery-3.5.js
│ │ ├── styles.css
│ │ └── wavesurfer.js
│ ├── expressive/
│ │ ├── app.py
│ │ ├── requirements.txt
│ │ └── utils.py
│ ├── m4tv1/
│ │ ├── app.py
│ │ └── requirements.txt
│ └── m4tv2/
│ ├── app.py
│ ├── lang_list.py
│ └── requirements.txt
├── dev_requirements.txt
├── docs/
│ ├── expressive/
│ │ ├── README.md
│ │ └── seamless_align_expressive_README.md
│ ├── m4t/
│ │ ├── README.md
│ │ ├── on_device_README.md
│ │ ├── seamless_align_README.md
│ │ └── unity2_aligner_README.md
│ └── streaming/
│ └── README.md
├── ggml/
│ ├── CMakeLists.txt
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build.zig
│ ├── ci/
│ │ └── run.sh
│ ├── cmake/
│ │ ├── BuildTypes.cmake
│ │ └── GitVars.cmake
│ ├── ctypes_utils.py
│ ├── examples/
│ │ ├── CMakeLists.txt
│ │ ├── common-ggml.cpp
│ │ ├── common-ggml.h
│ │ ├── common.cpp
│ │ ├── common.h
│ │ ├── dr_wav.h
│ │ ├── kaldi-native-fbank/
│ │ │ ├── CMakeLists.txt
│ │ │ └── csrc/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── feature-fbank.cc
│ │ │ ├── feature-fbank.h
│ │ │ ├── feature-functions.cc
│ │ │ ├── feature-functions.h
│ │ │ ├── feature-window.cc
│ │ │ ├── feature-window.h
│ │ │ ├── fftsg.c
│ │ │ ├── log.cc
│ │ │ ├── log.h
│ │ │ ├── mel-computations.cc
│ │ │ ├── mel-computations.h
│ │ │ ├── online-feature.cc
│ │ │ ├── online-feature.h
│ │ │ ├── rfft.cc
│ │ │ └── rfft.h
│ │ ├── python/
│ │ │ ├── README.md
│ │ │ ├── api.h
│ │ │ ├── example_add_quant.py
│ │ │ ├── example_test_all_quants.py
│ │ │ ├── ggml/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __init__.pyi
│ │ │ │ ├── cffi.py
│ │ │ │ ├── ffi/
│ │ │ │ │ └── __init__.pyi
│ │ │ │ └── utils.py
│ │ │ ├── regenerate.py
│ │ │ ├── stubs.py
│ │ │ └── test_tensor.py
│ │ └── unity/
│ │ ├── CMakeLists.txt
│ │ ├── fairseq2.cpp
│ │ ├── fairseq2.h
│ │ ├── lib/
│ │ │ ├── unity_lib.cpp
│ │ │ └── unity_lib.h
│ │ ├── model_loader.cpp
│ │ ├── model_loader.h
│ │ └── unity.cpp
│ ├── ggml.pc.in
│ ├── ggml.py
│ ├── ggml_convert.py
│ ├── include/
│ │ └── ggml/
│ │ ├── ggml-alloc.h
│ │ ├── ggml-backend.h
│ │ └── ggml.h
│ ├── mt.py
│ ├── requirements.txt
│ ├── scripts/
│ │ ├── sync-llama.sh
│ │ └── sync-whisper.sh
│ ├── src/
│ │ ├── CMakeLists.txt
│ │ ├── ggml-alloc.c
│ │ ├── ggml-backend-impl.h
│ │ ├── ggml-backend.c
│ │ ├── ggml-cuda.cu
│ │ ├── ggml-cuda.h
│ │ ├── ggml-impl.h
│ │ ├── ggml-metal.h
│ │ ├── ggml-metal.m
│ │ ├── ggml-metal.metal
│ │ ├── ggml-opencl.cpp
│ │ ├── ggml-opencl.h
│ │ ├── ggml-quants.c
│ │ ├── ggml-quants.h
│ │ └── ggml.c
│ ├── test_ggml_integration.py
│ ├── test_unity_cpp.py
│ ├── tests/
│ │ ├── CMakeLists.txt
│ │ ├── test-blas0.c
│ │ ├── test-conv-transpose.c
│ │ ├── test-customop.c
│ │ ├── test-grad0.cpp
│ │ ├── test-mul-mat0.c
│ │ ├── test-mul-mat1.c
│ │ ├── test-mul-mat2.c
│ │ ├── test-opt.cpp
│ │ ├── test-pool.c
│ │ ├── test-quantize-fns.cpp
│ │ ├── test-quantize-perf.cpp
│ │ ├── test-rel-pos.c
│ │ ├── test-svd0.c
│ │ ├── test-vec0.c
│ │ ├── test-vec1.c
│ │ ├── test-vec2.c
│ │ ├── test-xpos.c
│ │ ├── test0.c
│ │ ├── test0.zig
│ │ ├── test1.c
│ │ ├── test1.zig
│ │ ├── test2.c
│ │ ├── test2.zig
│ │ ├── test3.c
│ │ └── test3.zig
│ └── third_party_ggml.py
├── pyproject.toml
├── setup.py
├── src/
│ └── seamless_communication/
│ ├── __init__.py
│ ├── cards/
│ │ ├── conformer_shaw.yaml
│ │ ├── expresso.yaml
│ │ ├── mexpresso_text.yaml
│ │ ├── mintox.yaml
│ │ ├── mutox.yaml
│ │ ├── nano.yaml
│ │ ├── nar_t2u_aligner.yaml
│ │ ├── seamlessM4T_large.yaml
│ │ ├── seamlessM4T_medium.yaml
│ │ ├── seamlessM4T_v2_large.yaml
│ │ ├── seamless_expressivity.yaml
│ │ ├── seamless_streaming_monotonic_decoder.yaml
│ │ ├── seamless_streaming_unity.yaml
│ │ ├── unity_nllb-100.yaml
│ │ ├── unity_nllb-200.yaml
│ │ ├── vocoder_36langs.yaml
│ │ ├── vocoder_pretssel.yaml
│ │ ├── vocoder_pretssel_16khz.yaml
│ │ ├── vocoder_v2.yaml
│ │ └── xlsr2_1b_v2.yaml
│ ├── cli/
│ │ ├── __init__.py
│ │ ├── eval_utils/
│ │ │ ├── __init__.py
│ │ │ ├── compute_metrics.py
│ │ │ └── lang_mapping.py
│ │ ├── expressivity/
│ │ │ ├── __init__.py
│ │ │ ├── data/
│ │ │ │ ├── __init__.py
│ │ │ │ └── prepare_mexpresso.py
│ │ │ ├── evaluate/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── evaluate.py
│ │ │ │ ├── post_process_pauserate.py
│ │ │ │ └── run_asr_bleu.py
│ │ │ └── predict/
│ │ │ ├── __init__.py
│ │ │ ├── predict.py
│ │ │ └── pretssel_generator.py
│ │ ├── m4t/
│ │ │ ├── __init__.py
│ │ │ ├── audio_to_units/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ └── audio_to_units.py
│ │ │ ├── evaluate/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ └── evaluate.py
│ │ │ ├── finetune/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dataloader.py
│ │ │ │ ├── dataset.py
│ │ │ │ ├── dist_utils.py
│ │ │ │ ├── finetune.py
│ │ │ │ └── trainer.py
│ │ │ └── predict/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ └── predict.py
│ │ ├── streaming/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── evaluate.py
│ │ │ └── scorers/
│ │ │ ├── __init__.py
│ │ │ └── seamless_quality_scorer.py
│ │ └── toxicity/
│ │ ├── etox/
│ │ │ ├── README.md
│ │ │ ├── asr_etox.py
│ │ │ └── etox.py
│ │ ├── mutox/
│ │ │ ├── README.md
│ │ │ ├── mutox_example.ipynb
│ │ │ ├── mutox_speech.py
│ │ │ └── mutox_text.py
│ │ └── mutox_group_annotations/
│ │ └── README.md
│ ├── datasets/
│ │ ├── __init__.py
│ │ ├── datatypes.py
│ │ └── huggingface.py
│ ├── denoise/
│ │ ├── __init__.py
│ │ └── demucs.py
│ ├── inference/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── generator.py
│ │ ├── transcriber.py
│ │ └── translator.py
│ ├── models/
│ │ ├── __init__.py
│ │ ├── aligner/
│ │ │ ├── __init__.py
│ │ │ ├── alignment_extractor.py
│ │ │ ├── builder.py
│ │ │ ├── loader.py
│ │ │ └── model.py
│ │ ├── conformer_shaw/
│ │ │ ├── __init__.py
│ │ │ ├── builder.py
│ │ │ └── loader.py
│ │ ├── generator/
│ │ │ ├── __init__.py
│ │ │ ├── builder.py
│ │ │ ├── ecapa_tdnn.py
│ │ │ ├── ecapa_tdnn_builder.py
│ │ │ ├── loader.py
│ │ │ ├── streamable.py
│ │ │ └── vocoder.py
│ │ ├── monotonic_decoder/
│ │ │ ├── __init__.py
│ │ │ ├── builder.py
│ │ │ ├── loader.py
│ │ │ ├── model.py
│ │ │ ├── monotonic_decoder.py
│ │ │ ├── monotonic_decoder_layer.py
│ │ │ └── p_choose.py
│ │ ├── pretssel/
│ │ │ ├── __init__.py
│ │ │ ├── ecapa_tdnn.py
│ │ │ └── ecapa_tdnn_builder.py
│ │ ├── tokenizer.py
│ │ ├── unit_extractor/
│ │ │ ├── __init__.py
│ │ │ ├── kmeans.py
│ │ │ ├── unit_extractor.py
│ │ │ └── wav2vec2_layer_output.py
│ │ ├── unity/
│ │ │ ├── __init__.py
│ │ │ ├── adaptor_block.py
│ │ │ ├── builder.py
│ │ │ ├── char_tokenizer.py
│ │ │ ├── fft_decoder.py
│ │ │ ├── fft_decoder_layer.py
│ │ │ ├── film.py
│ │ │ ├── length_regulator.py
│ │ │ ├── loader.py
│ │ │ ├── model.py
│ │ │ ├── nar_decoder_frontend.py
│ │ │ ├── t2u_builder.py
│ │ │ └── unit_tokenizer.py
│ │ └── vocoder/
│ │ ├── __init__.py
│ │ ├── builder.py
│ │ ├── codehifigan.py
│ │ ├── hifigan.py
│ │ ├── loader.py
│ │ └── vocoder.py
│ ├── py.typed
│ ├── segment/
│ │ ├── __init__.py
│ │ └── silero_vad.py
│ ├── store.py
│ ├── streaming/
│ │ ├── __init__.py
│ │ ├── agents/
│ │ │ ├── __init__.py
│ │ │ ├── common.py
│ │ │ ├── detokenizer.py
│ │ │ ├── dual_vocoder_agent.py
│ │ │ ├── offline_w2v_bert_encoder.py
│ │ │ ├── online_feature_extractor.py
│ │ │ ├── online_text_decoder.py
│ │ │ ├── online_unit_decoder.py
│ │ │ ├── online_vocoder.py
│ │ │ ├── pretssel_vocoder.py
│ │ │ ├── seamless_s2st.py
│ │ │ ├── seamless_streaming_s2st.py
│ │ │ ├── seamless_streaming_s2t.py
│ │ │ ├── silero_vad.py
│ │ │ └── unity_pipeline.py
│ │ └── dataloaders/
│ │ ├── __init__.py
│ │ └── s2tt.py
│ └── toxicity/
│ ├── __init__.py
│ ├── etox_bad_word_checker.py
│ ├── mintox.py
│ └── mutox/
│ ├── builder.py
│ ├── classifier.py
│ ├── loader.py
│ └── speech_pipeline.py
└── tests/
├── __init__.py
├── common.py
├── conftest.py
├── integration/
│ ├── __init__.py
│ ├── inference/
│ │ ├── __init__.py
│ │ ├── test_mintox.py
│ │ └── test_translator.py
│ └── models/
│ ├── __init__.py
│ ├── test_conformer_shaw.py
│ └── test_unity2_aligner.py
└── unit/
├── __init__.py
├── denoise/
│ ├── __init__.py
│ └── test_demucs.py
├── models/
│ ├── __init__.py
│ └── unity/
│ ├── __init__.py
│ └── test_unity.py
└── segment/
├── __init__.py
└── test_silero_vad.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Editors
.idea/
.vscode/
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# macOS dir files
.DS_Store
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# Checkpoints
checkpoints
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# dotenv
.env
# virtualenv
.venv
venv/
ENV/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
# Generated files
/fairseq/temporal_convolution_tbc
/fairseq/modules/*_layer/*_forward.cu
/fairseq/modules/*_layer/*_backward.cu
/fairseq/version.py
# data
data-bin/
# reranking
/examples/reranking/rerank_data
# Cython-generated C++ source files
/fairseq/data/data_utils_fast.cpp
/fairseq/data/token_block_utils_fast.cpp
# VSCODE
.vscode/ftp-sync.json
.vscode/settings.json
# Experimental Folder
experimental/*
# Weights and Biases logs
wandb/
# Hydra artifacts
nohup.out
multirun
outputs
# symlinks
seamless_communication
# ignore src/seamless_communication
!*/seamless_communication
m4t_scripts
/ggml/test_data/
================================================
FILE: .gitmodules
================================================
[submodule "ggml/tracy"]
path = ggml/tracy
url = git@github.com:wolfpld/tracy.git
================================================
FILE: .pre-commit-config.yaml
================================================
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.1.0
hooks:
- id: trailing-whitespace
- id: check-ast
- id: check-merge-conflict
- id: check-added-large-files
args: ["--maxkb=2000"]
- id: end-of-file-fixer
- repo: https://github.com/psf/black
rev: 22.3.0
hooks:
- id: black
================================================
FILE: ACCEPTABLE_USE_POLICY
================================================
Seamless Acceptable Use Policy
Meta is committed to promoting safe and fair use of its tools and features, including Seamless. If you access or use Seamless, Seamless Materials or the Seamless Demo, you agree to this Acceptable Use Policy (“Policy”). The most recent copy of this policy can be found at [ai.meta.com/seamless/use-policy].
Prohibited Uses
We want everyone to use Seamless safely and responsibly. You agree you will not use, or allow others to use, Seamless to:
1. Violate the law or others’ rights, including to:
a. Engage in, promote, generate, contribute to, encourage, plan, incite, or further illegal or unlawful activity or content, such as:
i. Violence or terrorism
ii. Exploitation or harm to children, including the solicitation, creation, acquisition, or dissemination of child exploitative content or failure to report Child Sexual Abuse Material
iii. Human trafficking, exploitation, and sexual violence
iv. The illegal distribution of information or materials to minors, including obscene materials, or failure to employ legally required age-gating in connection with such information or materials
v. Sexual solicitation
vi. Any other criminal activity
b. Engage in, promote, incite, or facilitate the harassment, abuse, threatening, or bullying of individuals or groups of individuals
c. Engage in, promote, incite, or facilitate discrimination or other unlawful or harmful conduct in the provision of employment, employment benefits, credit, housing, other economic benefits, or other essential goods and services
d. Collect, process, disclose, generate, or infer health, demographic, biometric, or other sensitive personal or private information about individuals without rights and consents required by applicable laws
e. Engage in or facilitate any action or generate any content that infringes, misappropriates, or otherwise violates any third-party rights, including the outputs or results of any products or services using Seamless
f. Create, generate, or facilitate the creation of malicious code, malware, computer viruses or do anything else that could disable, overburden, interfere with or impair the proper working, integrity, operation or appearance of a website or computer system
2. Engage in, promote, incite, facilitate, or assist in the planning or development of activities that present a risk of death or bodily harm to individuals, including use of Seamless related to the following:
a. Military, warfare, nuclear industries or applications, espionage, use for materials or activities that are subject to the International Traffic Arms Regulations (ITAR) maintained by the United States Department of State
b. Guns and illegal weapons (including weapon development)
c. Illegal drugs and regulated/controlled substances
d. Operation of critical infrastructure, transportation technologies, or heavy machinery
e. Self-harm or harm to others, including suicide, cutting, and eating disorders
f. Any content intended to incite or promote violence, abuse, or any infliction of bodily harm to an individual
3. Intentionally deceive or mislead others, including use of Seamless related to the following:
a. Generating, promoting, or furthering fraud or the creation or promotion of disinformation
b. Generating, promoting, or furthering defamatory content, including the creation of defamatory statements, images, or other content
c. Generating, promoting, or further distributing spam
d. Impersonating another individual by depiction of their voice or likeness without consent, authorization, or legal right, including non-consensual sexual imagery
e. Representing that the use of Seamless or outputs are human-generated
f. Generating or facilitating false online engagement, including fake reviews and other means of fake online engagement
4. Fail to appropriately disclose to end users any known dangers of your AI system
5. Engage in automated government decision-making in high risk contexts, including, for example, law enforcement, criminal justice, immigration, or asylum, without a qualified person reviewing the outputs
6. Engage in any decision-making related to health, financial, safety, or legal matters
7. Create, develop, access, or disseminate adult content, including in relation to:
a. Erotic, sexual, or romantic chats
b. Sexual solicitation
c. Pornography
d. Content that describes or promotes sexual or adult services
Please report any violation of this Policy, software “bug,” or other problems that could lead to a violation of this Policy through one of the following means:
- Reporting issues with the model: github.com/facebookresearch/seamless_communication
- Reporting bugs and security concerns: facebook.com/whitehat/info
- Reporting violations of the Acceptable Use Policy or unlicensed uses of Seamless: SeamlessUseReport@meta.com
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to make participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies within all project spaces, and it also applies when
an individual is representing the project or its community in public spaces.
Examples of representing a project or community include using an official
project e-mail address, posting via an official social media account, or acting
as an appointed representative at an online or offline event. Representation of
a project may be further defined and clarified by project maintainers.
This Code of Conduct also applies outside the project spaces when there is a
reasonable belief that an individual's behavior may have a negative impact on
the project or its community.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at <opensource-conduct@fb.com>. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to `seamless_communication`
We want to make contributing to this project as easy and transparent as
possible.
## Our Development Process
`seamless_communication` is built for Meta AI Seamless Communication team public release.
We engage in multiple projects internally and will update this repository with our progress upon reaching specific milestones.
## Pull Requests
We actively welcome your pull requests.
1. Fork the repo and create your branch from `main`.
2. If you've added code that should be tested, add tests.
3. If you've changed APIs, update the documentation.
4. Ensure the test suite passes.
5. Make sure your code lints.
6. If you haven't already, complete the Contributor License Agreement ("CLA").
## Contributor License Agreement ("CLA")
In order to accept your pull request, we need you to submit a CLA. You only need
to do this once to work on any of Meta's open source projects.
Complete your CLA here: <https://code.facebook.com/cla>
## Issues
We use GitHub issues to track public bugs. Please ensure your description is
clear and has sufficient instructions to be able to reproduce the issue.
Meta has a [bounty program](https://www.facebook.com/whitehat/) for the safe
disclosure of security bugs. In those cases, please go through the process
outlined on that page and do not file a public issue.
## License
By contributing to `seamless_communication`, you agree that your contributions will be licensed
under the MIT_LICENSE file in the root directory of this source tree.
================================================
FILE: LICENSE
================================================
Attribution-NonCommercial 4.0 International
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: By using one of our public
licenses, a licensor grants the public permission to use the
licensed material under specified terms and conditions. If
the licensor's permission is not necessary for any reason--for
example, because of any applicable exception or limitation to
copyright--then that use is not regulated by the license. Our
licenses grant only permissions under copyright and certain
other rights that a licensor has authority to grant. Use of
the licensed material may still be restricted for other
reasons, including because others have copyright or other
rights in the material. A licensor may make special requests,
such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More_considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution-NonCommercial 4.0 International Public
License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution-NonCommercial 4.0 International Public License ("Public
License"). To the extent this Public License may be interpreted as a
contract, You are granted the Licensed Rights in consideration of Your
acceptance of these terms and conditions, and the Licensor grants You
such rights in consideration of benefits the Licensor receives from
making the Licensed Material available under these terms and
conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
d. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
e. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
f. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
g. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
h. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
i. NonCommercial means not primarily intended for or directed towards
commercial advantage or monetary compensation. For purposes of
this Public License, the exchange of the Licensed Material for
other material subject to Copyright and Similar Rights by digital
file-sharing or similar means is NonCommercial provided there is
no payment of monetary compensation in connection with the
exchange.
j. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
k. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
l. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part, for NonCommercial purposes only; and
b. produce, reproduce, and Share Adapted Material for
NonCommercial purposes only.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties, including when
the Licensed Material is used other than for NonCommercial
purposes.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
4. If You Share Adapted Material You produce, the Adapter's
License You apply must not prevent recipients of the Adapted
Material from complying with this Public License.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database for NonCommercial purposes
only;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public
licenses. Notwithstanding, Creative Commons may elect to apply one of
its public licenses to material it publishes and in those instances
will be considered the “Licensor.” The text of the Creative Commons
public licenses is dedicated to the public domain under the CC0 Public
Domain Dedication. Except for the limited purpose of indicating that
material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the
public licenses.
Creative Commons may be contacted at creativecommons.org.
================================================
FILE: MIT_LICENSE
================================================
MIT License
Copyright (c) Meta Platforms, Inc. and affiliates.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================

# Seamless Intro
Seamless is a family of AI models that enable more natural and authentic communication across languages. SeamlessM4T is a massive multilingual multimodal machine translation model supporting around 100 languages. SeamlessM4T serves as foundation for SeamlessExpressive, a model that preserves elements of prosody and voice style across languages and SeamlessStreaming, a model supporting simultaneous translation and streaming ASR for around 100 languages. SeamlessExpressive and SeamlessStreaming are combined into Seamless, a unified model featuring multilinguality, real-time and expressive translations.
## Links
### Demos
| | SeamlessM4T v2 | SeamlessExpressive | SeamlessStreaming |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- |
| Demo | [SeamlessM4T v2 Demo](https://seamless.metademolab.com/m4t?utm_source=github&utm_medium=web&utm_campaign=seamless&utm_content=readme) | [SeamlessExpressive Demo](https://seamless.metademolab.com/expressive?utm_source=github&utm_medium=web&utm_campaign=seamless&utm_content=readme) | |
| HuggingFace Space Demo | [🤗 SeamlessM4T v2 Space](https://huggingface.co/spaces/facebook/seamless-m4t-v2-large) | [🤗 SeamlessExpressive Space](https://huggingface.co/spaces/facebook/seamless-expressive) | [🤗 SeamlessStreaming Space](https://huggingface.co/spaces/facebook/seamless-streaming) |
### Papers
[Seamless](https://ai.facebook.com/research/publications/seamless-multilingual-expressive-and-streaming-speech-translation/)
[EMMA](https://ai.meta.com/research/publications/efficient-monotonic-multihead-attention/)
[SONAR](https://ai.meta.com/research/publications/sonar-expressive-zero-shot-expressive-speech-to-speech-translation/)
### Blog
[AI at Meta Blog](https://ai.meta.com/research/seamless-communication/)
## Tutorial
An exhaustive [tutorial](Seamless_Tutorial.ipynb) given at the NeurIPS 2023 - Seamless EXPO, which is a one-stop shop to learn how to use the entire suite of Seamless models. Please feel free to play with the notebook.
## SeamlessM4T
SeamlessM4T is our foundational all-in-one **M**assively **M**ultilingual and **M**ultimodal **M**achine **T**ranslation model delivering high-quality translation for speech and text in nearly 100 languages.
SeamlessM4T models support the tasks of:
- Speech-to-speech translation (S2ST)
- Speech-to-text translation (S2TT)
- Text-to-speech translation (T2ST)
- Text-to-text translation (T2TT)
- Automatic speech recognition (ASR)
:star2: We are releasing SeamlessM4T v2, an updated version with our novel *UnitY2* architecture. This new model improves over SeamlessM4T v1 in quality as well as inference latency in speech generation tasks.
To learn more about the collection of SeamlessM4T models, the approach used in each, their language coverage and their performance, visit the [SeamlessM4T README](docs/m4t/README.md) or [🤗 Model Card](https://huggingface.co/facebook/seamless-m4t-v2-large).
> [!NOTE]
> Seamless M4T is also available in the 🤗 Transformers library. Visit [this section](docs/m4t/README.md#transformers-usage) for more details.
## SeamlessExpressive
SeamlessExpressive is a speech-to-speech translation model that captures certain underexplored aspects of prosody such as speech rate and pauses, while preserving the style of one's voice and high content translation quality.
To learn more about SeamlessExpressive models, visit the [SeamlessExpressive README](docs/expressive/README.md) or [🤗 Model Card](https://huggingface.co/facebook/seamless-expressive)
## SeamlessStreaming
SeamlessStreaming is a streaming translation model. The model supports speech as input modality and speech/text as output modalities.
The SeamlessStreaming model supports the following tasks:
- Speech-to-speech translation (S2ST)
- Speech-to-text translation (S2TT)
- Automatic speech recognition (ASR)
To learn more about SeamlessStreaming models, visit the [SeamlessStreaming README](docs/streaming/README.md) or [🤗 Model Card](https://huggingface.co/facebook/seamless-streaming)
## Seamless
The Seamless model is the unified model for expressive streaming speech-to-speech translations.
## What's new
- [12/18/2023] We are open-sourcing our Conformer-based [W2v-BERT 2.0 speech encoder](#w2v-bert-20-speech-encoder) as described in Section 3.2.1 of the [paper](https://arxiv.org/pdf/2312.05187.pdf), which is at the core of our Seamless models.
- [12/14/2023] We are releasing the Seamless [tutorial](#tutorial) given at NeurIPS 2023.
# Quick Start
## Installation
> [!NOTE]
> One of the prerequisites is [fairseq2](https://github.com/facebookresearch/fairseq2) which has pre-built packages available only
> for Linux x86-64 and Apple-silicon Mac computers. In addition it has a dependency on [libsndfile](https://github.com/libsndfile/libsndfile) which
> might not be installed on your machine. If you experience any installation issues, please refer to its
> [README](https://github.com/facebookresearch/fairseq2) for further instructions.
```
pip install .
```
> [!NOTE]
> Transcribing inference audio for computing metric uses [Whisper](https://github.com/openai/whisper#setup), which is automatically installed. Whisper in turn requires the command-line tool [`ffmpeg`](https://ffmpeg.org/) to be installed on your system, which is available from most package managers.
## Running inference
### SeamlessM4T Inference
Here’s an example of using the CLI from the root directory to run inference.
S2ST task:
```bash
m4t_predict <path_to_input_audio> --task s2st --tgt_lang <tgt_lang> --output_path <path_to_save_audio>
```
T2TT task:
```bash
m4t_predict <input_text> --task t2tt --tgt_lang <tgt_lang> --src_lang <src_lang>
```
Please refer to the [inference README](src/seamless_communication/cli/m4t/predict) for detailed instruction on how to run inference and the list of supported languages on the source, target sides for speech, text modalities.
For running S2TT/ASR natively (without Python) using GGML, please refer to [the unity.cpp section](#unitycpp).
### SeamlessExpressive Inference
> [!NOTE]
> Please check the [section](#seamlessexpressive-models) on how to download the model.
Here’s an example of using the CLI from the root directory to run inference.
```bash
expressivity_predict <path_to_input_audio> --tgt_lang <tgt_lang> --model_name seamless_expressivity --vocoder_name vocoder_pretssel --output_path <path_to_save_audio>
```
### SeamlessStreaming and Seamless Inference
[Streaming Evaluation README](src/seamless_communication/cli/streaming) has detailed instructions for running evaluations for the SeamlessStreaming and Seamless models. The CLI has an `--no-scoring` option that can be used to skip the scoring part and just run inference.
Please check the inference [README](src/seamless_communication/inference) for more details.
## Running SeamlessStreaming Demo
You can duplicate the [SeamlessStreaming HF space](https://huggingface.co/spaces/facebook/seamless-streaming?duplicate=true) to run the streaming demo.
You can also run the demo locally, by cloning the space from [here](https://huggingface.co/spaces/facebook/seamless-streaming/tree/main). See the [README](https://huggingface.co/spaces/facebook/seamless-streaming/blob/main/README.md) of the SeamlessStreaming HF repo for more details on installation.
## Running SeamlessM4T & SeamlessExpressive [Gradio](https://github.com/gradio-app/gradio) demos locally
To launch the same demo Space we host on Hugging Face locally:
```bash
cd demo
pip install -r requirements.txt
python app.py
```
# Resources and usage
## Model
### SeamlessM4T models
| Model Name | #params | checkpoint | metrics |
| ----------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- |
| SeamlessM4T-Large v2 | 2.3B | [🤗 Model card](https://huggingface.co/facebook/seamless-m4t-v2-large) - [checkpoint](https://huggingface.co/facebook/seamless-m4t-v2-large/resolve/main/seamlessM4T_v2_large.pt ) | [metrics](https://dl.fbaipublicfiles.com/seamless/metrics/seamlessM4T_large_v2.zip) |
| SeamlessM4T-Large (v1) | 2.3B | [🤗 Model card](https://huggingface.co/facebook/seamless-m4t-large) - [checkpoint](https://huggingface.co/facebook/seamless-m4t-large/resolve/main/multitask_unity_large.pt) | [metrics](https://dl.fbaipublicfiles.com/seamless/metrics/seamlessM4T_large.zip) |
| SeamlessM4T-Medium (v1) | 1.2B | [🤗 Model card](https://huggingface.co/facebook/seamless-m4t-medium) - [checkpoint](https://huggingface.co/facebook/seamless-m4t-medium/resolve/main/multitask_unity_medium.pt) | [metrics](https://dl.fbaipublicfiles.com/seamless/metrics/seamlessM4T_medium.zip) |
### SeamlessExpressive models
[🤗 Model card](https://huggingface.co/facebook/seamless-expressive)
To access and download SeamlessExpressive, please request the model artifacts through [this request form](https://ai.meta.com/resources/models-and-libraries/seamless-downloads/). Upon approval, you will then receive an email with download links to each model artifact.
Please note that SeamlessExpressive is made available under its own [License](SEAMLESS_LICENSE) and [Acceptable Use Policy](ACCEPTABLE_USE_POLICY).
### SeamlessStreaming models
| Model Name | #params | checkpoint | metrics |
| ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| SeamlessStreaming | 2.5B | [🤗 Model card](https://huggingface.co/facebook/seamless-streaming) - [monotonic decoder checkpoint](https://huggingface.co/facebook/seamless-streaming/resolve/main/seamless_streaming_monotonic_decoder.pt) - [streaming UnitY2 checkpoint](https://huggingface.co/facebook/seamless-streaming/resolve/main/seamless_streaming_unity.pt) | [metrics](https://dl.fbaipublicfiles.com/seamless/metrics/streaming/seamless_streaming.zip) |
### Seamless models
Seamless model is simply the SeamlessStreaming model with the non-expressive `vocoder_v2` swapped out with the expressive `vocoder_pretssel`.
Please check out above [section](#seamlessexpressive-models) on how to acquire `vocoder_pretssel` checkpoint.
### W2v-BERT 2.0 speech encoder
| Model Name | #params | checkpoint |
| ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| W2v-BERT 2.0 | 600M | [🤗 Model card](https://huggingface.co/facebook/conformer-shaw) - [checkpoint](https://huggingface.co/facebook/conformer-shaw/resolve/main/conformer_shaw.pt)
Here's how you should do a foward pass through the speech encoder:
```python
import torch
from fairseq2.data.audio import AudioDecoder, WaveformToFbankConverter
from fairseq2.memory import MemoryBlock
from fairseq2.nn.padding import get_seqs_and_padding_mask
from fairseq2.data import Collater
from pathlib import Path
from seamless_communication.models.conformer_shaw import load_conformer_shaw_model
audio_wav_path, device, dtype = ...
audio_decoder = AudioDecoder(dtype=torch.float32, device=device)
fbank_converter = WaveformToFbankConverter(
num_mel_bins=80,
waveform_scale=2**15,
channel_last=True,
standardize=True,
device=device,
dtype=dtype,
)
collater = Collater(pad_value=1)
model = load_conformer_shaw_model("conformer_shaw", device=device, dtype=dtype)
model.eval()
with Path(audio_wav_path).open("rb") as fb:
block = MemoryBlock(fb.read())
decoded_audio = audio_decoder(block)
src = collater(fbank_converter(decoded_audio))["fbank"]
seqs, padding_mask = get_seqs_and_padding_mask(src)
with torch.inference_mode():
seqs, padding_mask = model.encoder_frontend(seqs, padding_mask)
seqs, padding_mask = model.encoder(seqs, padding_mask)
```
## Evaluation
### SeamlessM4T Evaluation
To reproduce our results, or to evaluate using the same metrics over your own test sets, please check out the [README here](src/seamless_communication/cli/m4t/evaluate).
### SeamlessExpressive Evaluation
Below is the script for efficient batched evaluation.
```bash
export MODEL_DIR="/path/to/SeamlessExpressive/model"
export TEST_SET_TSV="input.tsv" # Your dataset in a TSV file, with headers "id", "audio"
export TGT_LANG="spa" # Target language to translate into, options including "fra", "deu", "eng" ("cmn" and "ita" are experimental)
export OUTPUT_DIR="tmp/" # Output directory for generated text/unit/waveform
export TGT_TEXT_COL="tgt_text" # The column in your ${TEST_SET_TSV} for reference target text to calcuate BLEU score. You can skip this argument.
export DFACTOR="1.0" # Duration factor for model inference to tune predicted duration (preddur=DFACTOR*preddur) per each position which affects output speech rate. Greater value means slower speech rate (default to 1.0). See expressive evaluation README for details on duration factor we used.
expressivity_evaluate ${TEST_SET_TSV} \
--gated-model-dir ${MODEL_DIR} --task s2st --tgt_lang ${TGT_LANG} \
--audio_root_dir "" --output_path ${OUTPUT_DIR} --ref_field ${TGT_TEXT_COL} \
--model_name seamless_expressivity --vocoder_name vocoder_pretssel \
--text_unk_blocking True --duration_factor ${DFACTOR}
```
Please check out this [README section](docs/expressive/README.md#automatic-evaluation)
### SeamlessStreaming and Seamless Evaluation
[Streaming Evaluation README](src/seamless_communication/cli/streaming) has detailed instructions for running evaluations on the SeamlessStreaming and Seamless models.
## Unity.cpp
To enable Seamless Communication Everywhere, we implemented unity.cpp so users could run SeamlessM4T models in GGML - a C tensor library allowing easier integration on verbose platforms.
To transcribe/translte a given audio,
```
./ggml/bin/unity --model seamlessM4T_medium.ggml input.wav
```
For details of build and more usage please check out [unity.cpp](ggml)
## Expressive Datasets
We created two expressive speech-to-speech translation datasets, mExpresso and mDRAL, between English and five other languages -- French, German, Italian, Mandarin and Spanish. We currently open source the speech-to-text of mExpresso for out-of-English directions, and we will open source the remaining part of the datasets soon. For details, please check out [README](docs/expressive/README.md#benchmark-datasets)
### SeamlessAlignExpressive
We’re introducing the first expressive speech alignment procedure. Starting with raw data, the expressive alignment procedure automatically discovers pairs of audio segments sharing not only the same meaning, but the same overall expressivity. To showcase this procedure, we are making metadata available to create a benchmarking dataset called SeamlessAlignExpressive, that can be used to validate the quality of our alignment method. SeamlessAlignExpressive is the first large-scale (11k+ hours) collection of multilingual audio alignments for expressive translation. More details can be found on the [SeamlessAlignExpressive README](docs/expressive/seamless_align_expressive_README.md).
## Converting raw audio to units
Please check out the [README here](src/seamless_communication/cli/m4t/audio_to_units). Note that SeamlessM4T v1 model uses reduced units and other models use non-reduced units.
# Libraries
Seamless Communication depends on 4 libraries developed by Meta.
## [fairseq2](https://github.com/facebookresearch/fairseq2)
fairseq2 is our next-generation open-source library of sequence modeling components that provides researchers and developers with building blocks for machine translation, language modeling, and other sequence generation tasks. All SeamlessM4T models in this repository are powered by fairseq2.
## [SONAR and BLASER 2.0](https://github.com/facebookresearch/SONAR)
SONAR, Sentence-level multimOdal and laNguage-Agnostic Representations is a new multilingual and -modal sentence embedding space which outperforms existing sentence embeddings such as LASER3 and LabSE on the xsim and xsim++ multilingual similarity search tasks. SONAR provides text and speech encoders for many languages. SeamlessAlign was mined based on SONAR embeddings.
BLASER 2.0 is our latest model-based evaluation metric for multimodal translation. It is an extension of BLASER, supporting both speech and text. It operates directly on the source signal, and as such, does not require any intermediate ASR system like ASR-BLEU. As in the first version, BLASER 2.0 leverages the similarity between input and output sentence embeddings. SONAR is the underlying embedding space for BLASER 2.0. Scripts to run evaluation with BLASER 2.0 can be found in the [SONAR repo](https://github.com/facebookresearch/SONAR).
## [stopes](https://github.com/facebookresearch/stopes)
As part of the seamless communication project, we've extended the stopes library. Version 1 provided a text-to-text mining tool to build training dataset for translation models. Version 2 has been extended thanks to SONAR, to support tasks around training large speech translation models. In particular, we provide tools to read/write the fairseq audiozip datasets and a new mining pipeline that can do speech-to-speech, text-to-speech, speech-to-text and text-to-text mining, all based on the new SONAR embedding space.
## [SimulEval](https://github.com/facebookresearch/SimulEval)
SimulEval is a library used for evaluating simulaneous translation models. SimulEval also provides a backend for generation using partial/incremental inputs with flexible/extensible states, which is used to implement streaming inference. Users define agents which implement SimulEval's interface, which can be connected together in a pipeline. You can find agents implemented for SeamlessStreaming [here](src/seamless_communication/streaming/agents).
## [Legacy] SeamlessM4T v1 instructions
#### Finetuning SeamlessM4T v1 models
Please check out the [README here](src/seamless_communication/cli/m4t/finetune).
#### On-device models
Apart from Seamless-M4T large (2.3B) and medium (1.2B) models, we are also releasing a small model (281M) targeted for on-device inference. To learn more about the usage and model details check out the [README here](docs/m4t/on_device_README.md).
#### SeamlessAlign mined dataset
We open-source the metadata to SeamlessAlign, the largest open dataset for multimodal translation, totaling 270k+ hours of aligned Speech and Text data. The dataset can be rebuilt by the community based on the [SeamlessAlign readme](docs/m4t/seamless_align_README.md).
# Citation
If you use Seamless in your work or any models/datasets/artifacts published in Seamless, please cite :
```bibtex
@inproceedings{seamless2023,
title="Seamless: Multilingual Expressive and Streaming Speech Translation",
author="{Seamless Communication}, Lo{\"i}c Barrault, Yu-An Chung, Mariano Coria Meglioli, David Dale, Ning Dong, Mark Duppenthaler, Paul-Ambroise Duquenne, Brian Ellis, Hady Elsahar, Justin Haaheim, John Hoffman, Min-Jae Hwang, Hirofumi Inaguma, Christopher Klaiber, Ilia Kulikov, Pengwei Li, Daniel Licht, Jean Maillard, Ruslan Mavlyutov, Alice Rakotoarison, Kaushik Ram Sadagopan, Abinesh Ramakrishnan, Tuan Tran, Guillaume Wenzek, Yilin Yang, Ethan Ye, Ivan Evtimov, Pierre Fernandez, Cynthia Gao, Prangthip Hansanti, Elahe Kalbassi, Amanda Kallet, Artyom Kozhevnikov, Gabriel Mejia, Robin San Roman, Christophe Touret, Corinne Wong, Carleigh Wood, Bokai Yu, Pierre Andrews, Can Balioglu, Peng-Jen Chen, Marta R. Costa-juss{\`a}, Maha Elbayad, Hongyu Gong, Francisco Guzm{\'a}n, Kevin Heffernan, Somya Jain, Justine Kao, Ann Lee, Xutai Ma, Alex Mourachko, Benjamin Peloquin, Juan Pino, Sravya Popuri, Christophe Ropers, Safiyyah Saleem, Holger Schwenk, Anna Sun, Paden Tomasello, Changhan Wang, Jeff Wang, Skyler Wang, Mary Williamson",
journal={ArXiv},
year={2023}
}
```
# License
We have three license categories.
The following non-generative components are MIT licensed as found in [MIT_LICENSE](MIT_LICENSE):
- [W2v-BERT 2.0 speech encoder](#w2v-bert-20-speech-encoder)
- Code
- Text only part of the mExpresso dataset found in the [SeamlessExpressive README](docs/expressive/README.md).
- UnitY2 forced alignment extractor found in the [UnitY2 Aligner README](docs/m4t/unity2_aligner_README.md).
- Speech toxicity tool with the etox dataset found in the [ETOX README](src/seamless_communication/cli/toxicity/etox).
- MuTox: Universal MUltilingual Audio-based TOXicity Dataset and Zero-shot Detector [Mutox README](src/seamless_communication/cli/toxicity/mutox)
The following models are CC-BY-NC 4.0 licensed as found in the [LICENSE](LICENSE):
- SeamlessM4T models (v1 and v2).
- SeamlessStreaming models.
The following models are Seamless licensed as found in [SEAMLESS_LICENSE](SEAMLESS_LICENSE):
- Seamless models.
- SeamlessExpressive models.
================================================
FILE: SEAMLESS_LICENSE
================================================
Seamless Licensing Agreement
“Agreement” means this “Seamless Licensing Agreement”, including, the terms and conditions for use, reproduction, distribution and modification of the Seamless Materials set forth herein.
“Documentation” means the specifications, manuals and documentation accompanying Seamless distributed by Meta at [https://ai.meta.com/resources/models-and-libraries/seamless-downloads](https://ai.meta.com/resources/models-and-libraries/seamless-downloads).
“Licensee” or “you” means you, or your employer or any other person or entity (if you are entering into this Agreement on such person or entity’s behalf), of the age required under applicable laws, rules or regulations to provide legal consent and that has legal authority to bind your employer or such other person or entity if you are entering in this Agreement on their behalf.
“Meta” or “we” means Meta Platforms Ireland Limited (if you are located in or, if you are an entity, your principal place of business is in the EEA or Switzerland) and Meta Platforms, Inc. (if you are located outside of the EEA or Switzerland).
“Noncommercial Research Uses” means noncommercial research use cases related to research, development, education, processing, or analysis in each case with no direct or indirect commercial gain to you or others.
“Seamless” means the foundational translation and transcription models and software and algorithms, including machine-learning model code, trained model weights, inference-enabling code, training-enabling code, fine-tuning enabling code, demonstration materials and other elements of the foregoing distributed by Meta at [https://ai.meta.com/resources/models-and-libraries/seamless-downloads](https://ai.meta.com/resources/models-and-libraries/seamless-downloads).
“Seamless Materials” means, collectively, Meta’s proprietary Seamless and Documentation (and any portion thereof) made available under this Agreement.
“Trade Control Laws” means any applicable U.S. and non-U.S. export control and trade sanctions laws and regulations.
By clicking “I Accept” below or by using or distributing any portion or element of the Seamless Materials, you agree to be bound by this Agreement.
1. License Rights and Redistribution.
a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable and royalty-free limited license under Meta’s intellectual property or other rights owned by Meta embodied in the Seamless Materials to use, reproduce, distribute, copy, create derivative works of, translate speech and text, and make modifications to the Seamless Materials solely for Noncommercial Research Uses.
b. Redistribution and Use.
i. Distribution of Seamless Materials, and any derivative works thereof, are subject to the terms of this Agreement. If you distribute or make the Seamless Materials, or any derivative works thereof, available to a third party, you may only do so under this Agreement. You shall also provide a copy of this Agreement to such third party.
ii. If you submit for publication the results of research you perform on, using, or otherwise in connection with Seamless Materials, you must acknowledge the use of Seamless Materials in your publication as follows (or an equivalent acknowledgement of your choosing): “This material is based on work supported by the Seamless Licensing Agreement, Copyright © Meta Platforms, Inc. All Rights Reserved.”
iii. If you receive Seamless Materials, or any derivative works thereof, from a Licensee as part of an integrated end user product, then Section 2 of this Agreement will not apply to you.
iv. You must retain in all copies of the Seamless Materials that you distribute the following attribution notice within a “Notice” text file distributed as a part of such copies: “Seamless is licensed under the Seamless Licensing Agreement, Copyright © Meta Platforms, Inc. All Rights Reserved.”
v. Your use of the Seamless Materials must comply with applicable laws and regulations (including Trade Control Laws)) and adhere to the Acceptable Use Policy for the Seamless Materials [https://ai.meta.com/resources/models-and-libraries/seamless-use-policy](https://ai.meta.com/resources/models-and-libraries/seamless-use-policy), which is hereby incorporated by reference into this Agreement.
2. Restrictions. You will not, and will not permit, assist or cause any third party to:
a. use the Seamless Materials or any outputs or results of the Seamless Materials in connection with any commercial uses or for any uses other than Noncommercial Research Uses;
b. utilize any equipment, device, software, or other means to circumvent or remove any security or protection used by Meta in connection with the Seamless Materials, or to circumvent or remove any usage restrictions, or to enable functionality disabled by Meta;
c. disguise your or their location through IP proxying or other methods;
d. use or download Seamless if you or they are: (a) located in a comprehensively sanctioned jurisdiction, (b) currently listed on any U.S. or non-U.S. restricted parties list, or (c) for any purpose prohibited by Trade Control Laws; or
e. directly or indirectly export, re-export, provide, or otherwise transfer Seamless Materials: (a) to any individual, entity, or country prohibited by Trade Control Laws; (b) to anyone on U.S. or non-U.S. government restricted parties lists; or (c) for any purpose prohibited by Trade Control Laws, including nuclear, chemical or biological weapons, or missile technology applications.
3. User Support. Your Noncommercial Research Use of the Seamless Materials is done at your own discretion; Meta does not process any information nor provide any service in relation to such use. Meta is under no obligation to provide any support services for the Seamless Materials. Any support provided is “as is”, “with all faults”, and without warranty of any kind.
4. Disclaimer of Warranty. UNLESS REQUIRED BY APPLICABLE LAW, THE SEAMLESS MATERIALS AND ANY OUTPUT AND RESULTS THEREFROM ARE PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE SEAMLESS MATERIALS AND ASSUME ANY RISKS ASSOCIATED WITH YOUR USE OF THE SEAMLESS MATERIALS AND ANY OUTPUT AND RESULTS.
5. Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE UNDER ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS LIABILITY, OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, FOR ANY LOST PROFITS OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, EXEMPLARY OR PUNITIVE DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF ANY OF THE FOREGOING.
6. Intellectual Property.
a. No trademark licenses are granted under this Agreement, and in connection with the Seamless Materials, neither Meta nor Licensee may use any name or mark owned by or associated with the other or any of its affiliates, except as required for reasonable and customary use in describing and redistributing the Seamless Materials.
b. Subject to Meta’s ownership of Seamless Materials and derivatives made by or for Meta, with respect to any derivative works and modifications of the Seamless Materials that are made by you, as between you and Meta, you are and will be the owner of such derivative works and modifications.
c. If you institute litigation or other proceedings against Meta or any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Seamless Materials or Seamless outputs or results, or any portion of any of the foregoing, constitutes infringement of intellectual property or other rights owned or licensable by you, then any licenses and rights granted to you under this Agreement shall terminate as of the date such litigation or claim is filed or instituted. You will indemnify and hold harmless Meta from and against any claim by any third party arising out of or related to your use or distribution of the Seamless Materials.
7. Term and Termination. The term of this Agreement will commence upon your acceptance of this Agreement or access to the Seamless Materials and will continue in full force and effect until terminated in accordance with the terms and conditions herein. Meta may terminate this Agreement if you are in breach of any term or condition of this Agreement. Upon termination of this Agreement, you shall delete and cease use of the Seamless Materials. Sections 3, 4, 5, 6(c), 7, 8 and 9 shall survive the termination of this Agreement.
8. Governing Law and Jurisdiction. This Agreement will be governed and construed under the laws of the State of California without regard to choice of law principles, and the UN Convention on Contracts for the International Sale of Goods does not apply to this Agreement. The courts of California shall have exclusive jurisdiction of any dispute arising out of this Agreement.
9. Modifications and Amendments. Meta may modify this Agreement from time to time by posting a revised version at [https://ai.meta.com/resources/models-and-libraries/seamless-license/](https://ai.meta.com/resources/models-and-libraries/seamless-license/); provided that they are similar in spirit to the current version of the Agreement, but may differ in detail to address new problems or concerns. All such changes will be effective immediately. Your continued use of the Seamless Materials after any modification to this Agreement constitutes your agreement to such modification. Except as provided in this Agreement, no modification or addition to any provision of this Agreement will be binding unless it is in writing and signed by an authorized representative of both you and Meta.
================================================
FILE: Seamless_Tutorial.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/kauterry/seamless_communication/blob/main/Seamless_Tutorial.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"\n",
"\n",
"# Seamless Tutorial\n"
],
"metadata": {
"id": "SbI8G4-0V1OG"
}
},
{
"cell_type": "markdown",
"metadata": {
"id": "1p2d9R1LHJL2"
},
"source": [
"## Quick Links"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nLlZgJvBpWxT"
},
"source": [
"1. seamless_communication GitHub repository: https://github.com/facebookresearch/seamless_communication\n",
"2. fairseq2 Github repository: https://github.com/facebookresearch/fairseq2\n",
"3. HuggingFace: https://huggingface.co/collections/facebook/seamless-communication-6568d486ef451c6ba62c7724\n",
"4. Seamless demos: https://seamless.metademolab.com/\n",
"5. Fleurs datasets for evaluation: https://huggingface.co/datasets/google/fleurs/tree/main/data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YICcqOErh-om"
},
"source": [
"### Set up seamless_communication, fairseq2 and some utilities."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "1Ei8HSHamsBG"
},
"outputs": [],
"source": [
"%%capture\n",
"!pip install fairseq2\n",
"!pip install pydub sentencepiece\n",
"!pip install git+https://github.com/facebookresearch/seamless_communication.git"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "TWlkq20jms6V"
},
"outputs": [],
"source": [
"import io\n",
"import json\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt\n",
"import mmap\n",
"import numpy\n",
"import soundfile\n",
"import torchaudio\n",
"import torch\n",
"\n",
"from collections import defaultdict\n",
"from IPython.display import Audio, display\n",
"from pathlib import Path\n",
"from pydub import AudioSegment\n",
"\n",
"from seamless_communication.inference import Translator\n",
"from seamless_communication.streaming.dataloaders.s2tt import SileroVADSilenceRemover"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "j25uCSvKHRKu"
},
"source": [
"# SeamlessM4T Inference:"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "06JLP7rIEzfP"
},
"source": [
"## Initialize the models:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "fA4iPYnoMLkK",
"outputId": "c19ae7c7-c0c9-4b85-be2c-561f57d279f1"
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"Downloading the checkpoint of seamlessM4T_v2_large...\n",
"100%|██████████| 8.45G/8.45G [01:14<00:00, 122MB/s]\n",
"Downloading the tokenizer of seamlessM4T_v2_large...\n",
"100%|██████████| 360k/360k [00:00<00:00, 10.7MB/s]\n",
"Downloading the tokenizer of seamlessM4T_v2_large...\n",
"100%|██████████| 4.93M/4.93M [00:00<00:00, 63.2MB/s]\n",
"Using the cached tokenizer of seamlessM4T_v2_large. Set `force` to `True` to download again.\n",
"Downloading the checkpoint of vocoder_v2...\n",
"100%|██████████| 160M/160M [00:00<00:00, 168MB/s]\n",
"/usr/local/lib/python3.10/dist-packages/torch/nn/utils/weight_norm.py:30: UserWarning: torch.nn.utils.weight_norm is deprecated in favor of torch.nn.utils.parametrizations.weight_norm.\n",
" warnings.warn(\"torch.nn.utils.weight_norm is deprecated in favor of torch.nn.utils.parametrizations.weight_norm.\")\n"
]
}
],
"source": [
"# Initialize a Translator object with a multitask model, vocoder on the GPU.\n",
"\n",
"model_name = \"seamlessM4T_v2_large\"\n",
"vocoder_name = \"vocoder_v2\" if model_name == \"seamlessM4T_v2_large\" else \"vocoder_36langs\"\n",
"\n",
"translator = Translator(\n",
" model_name,\n",
" vocoder_name,\n",
" device=torch.device(\"cuda:0\"),\n",
" dtype=torch.float16,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "BU4xoNRpqEey"
},
"outputs": [],
"source": [
"# Download an english audio sample from the LJ speech dataset for testing purposes.\n",
"%%capture\n",
"!wget https://dl.fbaipublicfiles.com/seamlessM4T/LJ037-0171_sr16k.wav -O /content/LJ_eng.wav"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "PoWClYZ6FP1a"
},
"source": [
"## S2ST inference:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "J_qeX25RnTr_",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 880
},
"outputId": "0828c902-5ae3-49be-ffef-4e73751aaccb"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"English audio:\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.lib.display.Audio object>"
],
"text/html": [
"\n",
" <audio controls=\"controls\" >\n",
" <source src=\"data:audio/x-wav;base64,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
gitextract_0arsiegg/
├── .gitignore
├── .gitmodules
├── .pre-commit-config.yaml
├── ACCEPTABLE_USE_POLICY
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── MIT_LICENSE
├── README.md
├── SEAMLESS_LICENSE
├── Seamless_Tutorial.ipynb
├── demo/
│ ├── .gitignore
│ ├── dino_pretssel/
│ │ ├── index.html
│ │ ├── jquery-3.5.js
│ │ ├── styles.css
│ │ └── wavesurfer.js
│ ├── expressive/
│ │ ├── app.py
│ │ ├── requirements.txt
│ │ └── utils.py
│ ├── m4tv1/
│ │ ├── app.py
│ │ └── requirements.txt
│ └── m4tv2/
│ ├── app.py
│ ├── lang_list.py
│ └── requirements.txt
├── dev_requirements.txt
├── docs/
│ ├── expressive/
│ │ ├── README.md
│ │ └── seamless_align_expressive_README.md
│ ├── m4t/
│ │ ├── README.md
│ │ ├── on_device_README.md
│ │ ├── seamless_align_README.md
│ │ └── unity2_aligner_README.md
│ └── streaming/
│ └── README.md
├── ggml/
│ ├── CMakeLists.txt
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── build.zig
│ ├── ci/
│ │ └── run.sh
│ ├── cmake/
│ │ ├── BuildTypes.cmake
│ │ └── GitVars.cmake
│ ├── ctypes_utils.py
│ ├── examples/
│ │ ├── CMakeLists.txt
│ │ ├── common-ggml.cpp
│ │ ├── common-ggml.h
│ │ ├── common.cpp
│ │ ├── common.h
│ │ ├── dr_wav.h
│ │ ├── kaldi-native-fbank/
│ │ │ ├── CMakeLists.txt
│ │ │ └── csrc/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── feature-fbank.cc
│ │ │ ├── feature-fbank.h
│ │ │ ├── feature-functions.cc
│ │ │ ├── feature-functions.h
│ │ │ ├── feature-window.cc
│ │ │ ├── feature-window.h
│ │ │ ├── fftsg.c
│ │ │ ├── log.cc
│ │ │ ├── log.h
│ │ │ ├── mel-computations.cc
│ │ │ ├── mel-computations.h
│ │ │ ├── online-feature.cc
│ │ │ ├── online-feature.h
│ │ │ ├── rfft.cc
│ │ │ └── rfft.h
│ │ ├── python/
│ │ │ ├── README.md
│ │ │ ├── api.h
│ │ │ ├── example_add_quant.py
│ │ │ ├── example_test_all_quants.py
│ │ │ ├── ggml/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __init__.pyi
│ │ │ │ ├── cffi.py
│ │ │ │ ├── ffi/
│ │ │ │ │ └── __init__.pyi
│ │ │ │ └── utils.py
│ │ │ ├── regenerate.py
│ │ │ ├── stubs.py
│ │ │ └── test_tensor.py
│ │ └── unity/
│ │ ├── CMakeLists.txt
│ │ ├── fairseq2.cpp
│ │ ├── fairseq2.h
│ │ ├── lib/
│ │ │ ├── unity_lib.cpp
│ │ │ └── unity_lib.h
│ │ ├── model_loader.cpp
│ │ ├── model_loader.h
│ │ └── unity.cpp
│ ├── ggml.pc.in
│ ├── ggml.py
│ ├── ggml_convert.py
│ ├── include/
│ │ └── ggml/
│ │ ├── ggml-alloc.h
│ │ ├── ggml-backend.h
│ │ └── ggml.h
│ ├── mt.py
│ ├── requirements.txt
│ ├── scripts/
│ │ ├── sync-llama.sh
│ │ └── sync-whisper.sh
│ ├── src/
│ │ ├── CMakeLists.txt
│ │ ├── ggml-alloc.c
│ │ ├── ggml-backend-impl.h
│ │ ├── ggml-backend.c
│ │ ├── ggml-cuda.cu
│ │ ├── ggml-cuda.h
│ │ ├── ggml-impl.h
│ │ ├── ggml-metal.h
│ │ ├── ggml-metal.m
│ │ ├── ggml-metal.metal
│ │ ├── ggml-opencl.cpp
│ │ ├── ggml-opencl.h
│ │ ├── ggml-quants.c
│ │ ├── ggml-quants.h
│ │ └── ggml.c
│ ├── test_ggml_integration.py
│ ├── test_unity_cpp.py
│ ├── tests/
│ │ ├── CMakeLists.txt
│ │ ├── test-blas0.c
│ │ ├── test-conv-transpose.c
│ │ ├── test-customop.c
│ │ ├── test-grad0.cpp
│ │ ├── test-mul-mat0.c
│ │ ├── test-mul-mat1.c
│ │ ├── test-mul-mat2.c
│ │ ├── test-opt.cpp
│ │ ├── test-pool.c
│ │ ├── test-quantize-fns.cpp
│ │ ├── test-quantize-perf.cpp
│ │ ├── test-rel-pos.c
│ │ ├── test-svd0.c
│ │ ├── test-vec0.c
│ │ ├── test-vec1.c
│ │ ├── test-vec2.c
│ │ ├── test-xpos.c
│ │ ├── test0.c
│ │ ├── test0.zig
│ │ ├── test1.c
│ │ ├── test1.zig
│ │ ├── test2.c
│ │ ├── test2.zig
│ │ ├── test3.c
│ │ └── test3.zig
│ └── third_party_ggml.py
├── pyproject.toml
├── setup.py
├── src/
│ └── seamless_communication/
│ ├── __init__.py
│ ├── cards/
│ │ ├── conformer_shaw.yaml
│ │ ├── expresso.yaml
│ │ ├── mexpresso_text.yaml
│ │ ├── mintox.yaml
│ │ ├── mutox.yaml
│ │ ├── nano.yaml
│ │ ├── nar_t2u_aligner.yaml
│ │ ├── seamlessM4T_large.yaml
│ │ ├── seamlessM4T_medium.yaml
│ │ ├── seamlessM4T_v2_large.yaml
│ │ ├── seamless_expressivity.yaml
│ │ ├── seamless_streaming_monotonic_decoder.yaml
│ │ ├── seamless_streaming_unity.yaml
│ │ ├── unity_nllb-100.yaml
│ │ ├── unity_nllb-200.yaml
│ │ ├── vocoder_36langs.yaml
│ │ ├── vocoder_pretssel.yaml
│ │ ├── vocoder_pretssel_16khz.yaml
│ │ ├── vocoder_v2.yaml
│ │ └── xlsr2_1b_v2.yaml
│ ├── cli/
│ │ ├── __init__.py
│ │ ├── eval_utils/
│ │ │ ├── __init__.py
│ │ │ ├── compute_metrics.py
│ │ │ └── lang_mapping.py
│ │ ├── expressivity/
│ │ │ ├── __init__.py
│ │ │ ├── data/
│ │ │ │ ├── __init__.py
│ │ │ │ └── prepare_mexpresso.py
│ │ │ ├── evaluate/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── evaluate.py
│ │ │ │ ├── post_process_pauserate.py
│ │ │ │ └── run_asr_bleu.py
│ │ │ └── predict/
│ │ │ ├── __init__.py
│ │ │ ├── predict.py
│ │ │ └── pretssel_generator.py
│ │ ├── m4t/
│ │ │ ├── __init__.py
│ │ │ ├── audio_to_units/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ └── audio_to_units.py
│ │ │ ├── evaluate/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ └── evaluate.py
│ │ │ ├── finetune/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── dataloader.py
│ │ │ │ ├── dataset.py
│ │ │ │ ├── dist_utils.py
│ │ │ │ ├── finetune.py
│ │ │ │ └── trainer.py
│ │ │ └── predict/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ └── predict.py
│ │ ├── streaming/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── evaluate.py
│ │ │ └── scorers/
│ │ │ ├── __init__.py
│ │ │ └── seamless_quality_scorer.py
│ │ └── toxicity/
│ │ ├── etox/
│ │ │ ├── README.md
│ │ │ ├── asr_etox.py
│ │ │ └── etox.py
│ │ ├── mutox/
│ │ │ ├── README.md
│ │ │ ├── mutox_example.ipynb
│ │ │ ├── mutox_speech.py
│ │ │ └── mutox_text.py
│ │ └── mutox_group_annotations/
│ │ └── README.md
│ ├── datasets/
│ │ ├── __init__.py
│ │ ├── datatypes.py
│ │ └── huggingface.py
│ ├── denoise/
│ │ ├── __init__.py
│ │ └── demucs.py
│ ├── inference/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── generator.py
│ │ ├── transcriber.py
│ │ └── translator.py
│ ├── models/
│ │ ├── __init__.py
│ │ ├── aligner/
│ │ │ ├── __init__.py
│ │ │ ├── alignment_extractor.py
│ │ │ ├── builder.py
│ │ │ ├── loader.py
│ │ │ └── model.py
│ │ ├── conformer_shaw/
│ │ │ ├── __init__.py
│ │ │ ├── builder.py
│ │ │ └── loader.py
│ │ ├── generator/
│ │ │ ├── __init__.py
│ │ │ ├── builder.py
│ │ │ ├── ecapa_tdnn.py
│ │ │ ├── ecapa_tdnn_builder.py
│ │ │ ├── loader.py
│ │ │ ├── streamable.py
│ │ │ └── vocoder.py
│ │ ├── monotonic_decoder/
│ │ │ ├── __init__.py
│ │ │ ├── builder.py
│ │ │ ├── loader.py
│ │ │ ├── model.py
│ │ │ ├── monotonic_decoder.py
│ │ │ ├── monotonic_decoder_layer.py
│ │ │ └── p_choose.py
│ │ ├── pretssel/
│ │ │ ├── __init__.py
│ │ │ ├── ecapa_tdnn.py
│ │ │ └── ecapa_tdnn_builder.py
│ │ ├── tokenizer.py
│ │ ├── unit_extractor/
│ │ │ ├── __init__.py
│ │ │ ├── kmeans.py
│ │ │ ├── unit_extractor.py
│ │ │ └── wav2vec2_layer_output.py
│ │ ├── unity/
│ │ │ ├── __init__.py
│ │ │ ├── adaptor_block.py
│ │ │ ├── builder.py
│ │ │ ├── char_tokenizer.py
│ │ │ ├── fft_decoder.py
│ │ │ ├── fft_decoder_layer.py
│ │ │ ├── film.py
│ │ │ ├── length_regulator.py
│ │ │ ├── loader.py
│ │ │ ├── model.py
│ │ │ ├── nar_decoder_frontend.py
│ │ │ ├── t2u_builder.py
│ │ │ └── unit_tokenizer.py
│ │ └── vocoder/
│ │ ├── __init__.py
│ │ ├── builder.py
│ │ ├── codehifigan.py
│ │ ├── hifigan.py
│ │ ├── loader.py
│ │ └── vocoder.py
│ ├── py.typed
│ ├── segment/
│ │ ├── __init__.py
│ │ └── silero_vad.py
│ ├── store.py
│ ├── streaming/
│ │ ├── __init__.py
│ │ ├── agents/
│ │ │ ├── __init__.py
│ │ │ ├── common.py
│ │ │ ├── detokenizer.py
│ │ │ ├── dual_vocoder_agent.py
│ │ │ ├── offline_w2v_bert_encoder.py
│ │ │ ├── online_feature_extractor.py
│ │ │ ├── online_text_decoder.py
│ │ │ ├── online_unit_decoder.py
│ │ │ ├── online_vocoder.py
│ │ │ ├── pretssel_vocoder.py
│ │ │ ├── seamless_s2st.py
│ │ │ ├── seamless_streaming_s2st.py
│ │ │ ├── seamless_streaming_s2t.py
│ │ │ ├── silero_vad.py
│ │ │ └── unity_pipeline.py
│ │ └── dataloaders/
│ │ ├── __init__.py
│ │ └── s2tt.py
│ └── toxicity/
│ ├── __init__.py
│ ├── etox_bad_word_checker.py
│ ├── mintox.py
│ └── mutox/
│ ├── builder.py
│ ├── classifier.py
│ ├── loader.py
│ └── speech_pipeline.py
└── tests/
├── __init__.py
├── common.py
├── conftest.py
├── integration/
│ ├── __init__.py
│ ├── inference/
│ │ ├── __init__.py
│ │ ├── test_mintox.py
│ │ └── test_translator.py
│ └── models/
│ ├── __init__.py
│ ├── test_conformer_shaw.py
│ └── test_unity2_aligner.py
└── unit/
├── __init__.py
├── denoise/
│ ├── __init__.py
│ └── test_demucs.py
├── models/
│ ├── __init__.py
│ └── unity/
│ ├── __init__.py
│ └── test_unity.py
└── segment/
├── __init__.py
└── test_silero_vad.py
Showing preview only (410K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5135 symbols across 180 files)
FILE: demo/dino_pretssel/jquery-3.5.js
function b (line 2) | function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e...
function w (line 2) | function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof...
function p (line 2) | function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e...
function se (line 2) | function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeTy...
function ue (line 2) | function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cac...
function le (line 2) | function le(e){return e[S]=!0,e}
function ce (line 2) | function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(...
function fe (line 2) | function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[...
function pe (line 2) | function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourc...
function de (line 2) | function de(t){return function(e){return"input"===e.nodeName.toLowerCase...
function he (line 2) | function he(n){return function(e){var t=e.nodeName.toLowerCase();return(...
function ge (line 2) | function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e....
function ve (line 2) | function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,...
function ye (line 2) | function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function me (line 2) | function me(){}
function xe (line 2) | function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function be (line 2) | function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r...
function we (line 2) | function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r-...
function Te (line 2) | function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(...
function Ce (line 2) | function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)...
function Ee (line 2) | function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.r...
function A (line 2) | function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerC...
function D (line 2) | function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,...
function O (line 2) | function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}
function R (line 2) | function R(e){return e}
function M (line 2) | function M(e){throw e}
function I (line 2) | function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n...
function l (line 2) | function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(...
function B (line 2) | function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventLi...
function U (line 2) | function U(e,t){return t.toUpperCase()}
function X (line 2) | function X(e){return e.replace(_,"ms-").replace(z,U)}
function G (line 2) | function G(){this.expando=S.expando+G.uid++}
function Z (line 2) | function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.r...
function se (line 2) | function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:functio...
function le (line 2) | function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[...
function ve (line 2) | function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNa...
function ye (line 2) | function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",...
function xe (line 2) | function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),...
function Ce (line 2) | function Ce(){return!0}
function Ee (line 2) | function Ee(){return!1}
function Se (line 2) | function Se(e,t){return e===function(){try{return E.activeElement}catch(...
function ke (line 2) | function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"...
function Ae (line 2) | function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handle...
function qe (line 2) | function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"...
function Le (line 2) | function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function He (line 2) | function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.sli...
function Oe (line 2) | function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=...
function Pe (line 2) | function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],...
function Re (line 2) | function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)...
function Be (line 2) | function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n....
function $e (line 2) | function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(...
function e (line 2) | function e(){if(l){u.style.cssText="position:absolute;left:-11111px;widt...
function t (line 2) | function t(e){return Math.round(parseFloat(e))}
function Xe (line 2) | function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=fun...
function Je (line 2) | function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[...
function Ke (line 2) | function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border...
function Ze (line 2) | function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-bo...
function et (line 2) | function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}
function st (line 2) | function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnima...
function ut (line 2) | function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}
function lt (line 2) | function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin...
function ct (line 2) | function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["...
function ft (line 2) | function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().alw...
function vt (line 2) | function vt(e){return(e.match(P)||[]).join(" ")}
function yt (line 2) | function yt(e){return e.getAttribute&&e.getAttribute("class")||""}
function mt (line 2) | function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)|...
function Dt (line 2) | function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r|...
function Ft (line 2) | function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var ...
function Bt (line 2) | function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!...
function $t (line 2) | function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)voi...
function l (line 2) | function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=vo...
FILE: demo/dino_pretssel/wavesurfer.js
function __webpack_require__ (line 21) | function __webpack_require__(moduleId) {
function debounce (line 125) | function debounce(func, wait, immediate){
function _interopRequireDefault (line 204) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 206) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 208) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 210) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function CanvasEntry (line 220) | function CanvasEntry() {
function _getRequireWildcardCache (line 595) | function _getRequireWildcardCache() { if (typeof WeakMap !== "function")...
function _interopRequireWildcard (line 597) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _typeof (line 599) | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol ===...
function _classCallCheck (line 601) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 603) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 605) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function _inherits (line 607) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function _setPrototypeOf (line 609) | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf...
function _createSuper (line 611) | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNati...
function _possibleConstructorReturn (line 613) | function _possibleConstructorReturn(self, call) { if (call && (_typeof(c...
function _assertThisInitialized (line 615) | function _assertThisInitialized(self) { if (self === void 0) { throw new...
function _isNativeReflectConstruct (line 617) | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined...
function _getPrototypeOf (line 619) | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? ...
function Drawer (line 635) | function Drawer(container, params) {
function _getRequireWildcardCache (line 1082) | function _getRequireWildcardCache() { if (typeof WeakMap !== "function")...
function _interopRequireWildcard (line 1084) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 1086) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _typeof (line 1088) | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol ===...
function _classCallCheck (line 1090) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 1092) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 1094) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function _inherits (line 1096) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function _setPrototypeOf (line 1098) | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf...
function _createSuper (line 1100) | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNati...
function _possibleConstructorReturn (line 1102) | function _possibleConstructorReturn(self, call) { if (call && (_typeof(c...
function _assertThisInitialized (line 1104) | function _assertThisInitialized(self) { if (self === void 0) { throw new...
function _isNativeReflectConstruct (line 1106) | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined...
function _getPrototypeOf (line 1108) | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? ...
function MultiCanvas (line 1126) | function MultiCanvas(container, params) {
function _interopRequireDefault (line 1717) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _typeof (line 1719) | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol ===...
function _classCallCheck (line 1721) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 1723) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 1725) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function _get (line 1727) | function _get(target, property, receiver) { if (typeof Reflect !== "unde...
function _superPropBase (line 1729) | function _superPropBase(object, property) { while (!Object.prototype.has...
function _inherits (line 1731) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function _setPrototypeOf (line 1733) | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf...
function _createSuper (line 1735) | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNati...
function _possibleConstructorReturn (line 1737) | function _possibleConstructorReturn(self, call) { if (call && (_typeof(c...
function _assertThisInitialized (line 1739) | function _assertThisInitialized(self) { if (self === void 0) { throw new...
function _isNativeReflectConstruct (line 1741) | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined...
function _getPrototypeOf (line 1743) | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? ...
function MediaElementWebAudio (line 1764) | function MediaElementWebAudio(params) {
function _getRequireWildcardCache (line 1869) | function _getRequireWildcardCache() { if (typeof WeakMap !== "function")...
function _interopRequireWildcard (line 1871) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _interopRequireDefault (line 1873) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _typeof (line 1875) | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol ===...
function _classCallCheck (line 1877) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 1879) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 1881) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function _get (line 1883) | function _get(target, property, receiver) { if (typeof Reflect !== "unde...
function _superPropBase (line 1885) | function _superPropBase(object, property) { while (!Object.prototype.has...
function _inherits (line 1887) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function _setPrototypeOf (line 1889) | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf...
function _createSuper (line 1891) | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNati...
function _possibleConstructorReturn (line 1893) | function _possibleConstructorReturn(self, call) { if (call && (_typeof(c...
function _assertThisInitialized (line 1895) | function _assertThisInitialized(self) { if (self === void 0) { throw new...
function _isNativeReflectConstruct (line 1897) | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined...
function _getPrototypeOf (line 1899) | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? ...
function MediaElement (line 1914) | function MediaElement(params) {
function _classCallCheck (line 2444) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 2446) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 2448) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function PeakCache (line 2459) | function PeakCache() {
function clamp (line 2616) | function clamp(val, min, max) {
function _interopRequireDefault (line 2641) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _classCallCheck (line 2643) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 2645) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 2647) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function ProgressHandler (line 2657) | function ProgressHandler(instance, contentLength, response) {
function fetchFile (line 2769) | function fetchFile(options) {
function _interopRequireDefault (line 2892) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function frame (line 2902) | function frame(func) {
function getId (line 2944) | function getId(prefix) {
function _interopRequireDefault (line 3058) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function max (line 3084) | function max(values) {
function min (line 3120) | function min(values) {
function _classCallCheck (line 3149) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 3151) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 3153) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function Observer (line 3169) | function Observer() {
function preventClickHandler (line 3363) | function preventClickHandler(event) {
function preventClick (line 3374) | function preventClick(values) {
function style (line 3437) | function style(el, styles) {
function _interopRequireDefault (line 3477) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
function _getRequireWildcardCache (line 3479) | function _getRequireWildcardCache() { if (typeof WeakMap !== "function")...
function _interopRequireWildcard (line 3481) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _typeof (line 3483) | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol ===...
function _inherits (line 3485) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function _setPrototypeOf (line 3487) | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf...
function _createSuper (line 3489) | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNati...
function _possibleConstructorReturn (line 3491) | function _possibleConstructorReturn(self, call) { if (call && (_typeof(c...
function _assertThisInitialized (line 3493) | function _assertThisInitialized(self) { if (self === void 0) { throw new...
function _isNativeReflectConstruct (line 3495) | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined...
function _getPrototypeOf (line 3497) | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? ...
function _classCallCheck (line 3499) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 3501) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 3503) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function PluginClass (line 3688) | function PluginClass(params, ws) {
function WaveSurfer (line 3781) | function WaveSurfer(params) {
function _getRequireWildcardCache (line 5370) | function _getRequireWildcardCache() { if (typeof WeakMap !== "function")...
function _interopRequireWildcard (line 5372) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
function _typeof (line 5374) | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol ===...
function _defineProperty (line 5376) | function _defineProperty(obj, key, value) { if (key in obj) { Object.def...
function _classCallCheck (line 5378) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _defineProperties (line 5380) | function _defineProperties(target, props) { for (var i = 0; i < props.le...
function _createClass (line 5382) | function _createClass(Constructor, protoProps, staticProps) { if (protoP...
function _inherits (line 5384) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function _setPrototypeOf (line 5386) | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf...
function _createSuper (line 5388) | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNati...
function _possibleConstructorReturn (line 5390) | function _possibleConstructorReturn(self, call) { if (call && (_typeof(c...
function _assertThisInitialized (line 5392) | function _assertThisInitialized(self) { if (self === void 0) { throw new...
function _isNativeReflectConstruct (line 5394) | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined...
function _getPrototypeOf (line 5396) | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? ...
function WebAudio (line 5472) | function WebAudio(params) {
FILE: demo/expressive/app.py
function normalize_fbank (line 146) | def normalize_fbank(data: WaveformToFbankOutput) -> WaveformToFbankOutput:
function remove_prosody_tokens_from_text (line 161) | def remove_prosody_tokens_from_text(text):
function preprocess_audio (line 168) | def preprocess_audio(input_audio_path: str) -> None:
function run (line 178) | def run(
FILE: demo/m4tv1/app.py
function predict (line 315) | def predict(
function process_s2st_example (line 370) | def process_s2st_example(
function process_s2tt_example (line 384) | def process_s2tt_example(
function process_t2st_example (line 398) | def process_t2st_example(
function process_t2tt_example (line 412) | def process_t2tt_example(
function process_asr_example (line 426) | def process_asr_example(
function update_audio_ui (line 440) | def update_audio_ui(audio_source: str) -> tuple[dict, dict]:
function update_input_ui (line 448) | def update_input_ui(task_name: str) -> tuple[dict, dict, dict, dict]:
function update_output_ui (line 509) | def update_output_ui(task_name: str) -> tuple[dict, dict]:
function update_example_ui (line 525) | def update_example_ui(task_name: str) -> tuple[dict, dict, dict, dict, d...
FILE: demo/m4tv2/app.py
function preprocess_audio (line 81) | def preprocess_audio(input_audio: str) -> None:
function run_s2st (line 91) | def run_s2st(
function run_s2tt (line 108) | def run_s2tt(input_audio: str, source_language: str, target_language: st...
function run_t2st (line 121) | def run_t2st(input_text: str, source_language: str, target_language: str...
function run_t2tt (line 135) | def run_t2tt(input_text: str, source_language: str, target_language: str...
function run_asr (line 147) | def run_asr(input_audio: str, target_language: str) -> str:
FILE: ggml/ctypes_utils.py
class Ptr (line 11) | class Ptr(Generic[T], ctypes._Pointer): # type: ignore
method __new__ (line 14) | def __new__(cls, x: T) -> "Ptr[T]":
function c_struct (line 21) | def c_struct(cls: Type[T]) -> Type[T]:
function _py_type_to_ctype (line 38) | def _py_type_to_ctype(t: type) -> type:
function _c_fn (line 73) | def _c_fn(module: Any, fn: F) -> F:
function c_fn (line 97) | def c_fn(module: Any) -> Callable[[F], F]:
FILE: ggml/examples/common-ggml.cpp
type ggml_ftype (line 6) | enum ggml_ftype
function ggml_print_ftypes (line 14) | void ggml_print_ftypes(FILE * fp) {
function ggml_parse_ftype (line 20) | enum ggml_ftype ggml_parse_ftype(const char * str) {
function ggml_common_quantize_0 (line 36) | bool ggml_common_quantize_0(
FILE: ggml/examples/common-ggml.h
type ggml_ftype (line 9) | enum ggml_ftype
FILE: ggml/examples/common.cpp
function get_next_arg (line 23) | std::string get_next_arg(int& i, int argc, char** argv, const std::strin...
function gpt_params_parse (line 33) | bool gpt_params_parse(int argc, char ** argv, gpt_params & params) {
function gpt_print_usage (line 93) | void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & para...
function gpt_random_prompt (line 119) | std::string gpt_random_prompt(std::mt19937 & rng) {
function trim (line 138) | std::string trim(const std::string & s) {
function replace (line 143) | std::string replace(const std::string & s, const std::string & from, con...
function json_parse (line 157) | std::map<std::string, int32_t> json_parse(const std::string & fname) {
function convert_to_utf8 (line 248) | std::string convert_to_utf8(const std::wstring & input) {
function convert_to_wstring (line 254) | std::wstring convert_to_wstring(const std::string & input) {
function gpt_split_words (line 259) | void gpt_split_words(std::string str, std::vector<std::string>& words) {
function gpt_tokenize (line 272) | std::vector<gpt_vocab::id> gpt_tokenize(const gpt_vocab & vocab, const s...
function parse_tokens_from_string (line 331) | std::vector<gpt_vocab::id> parse_tokens_from_string(const std::string& i...
function extract_tests_from_file (line 343) | std::map<std::string, std::vector<gpt_vocab::id>> extract_tests_from_fil...
function test_gpt_tokenizer (line 366) | void test_gpt_tokenizer(gpt_vocab & vocab, const std::string & fpath_test){
function gpt_vocab_init (line 395) | bool gpt_vocab_init(const std::string & fname, gpt_vocab & vocab) {
function gpt_sample_top_k_top_p (line 414) | gpt_vocab::id gpt_sample_top_k_top_p(
function gpt_sample_top_k_top_p_repeat (line 494) | gpt_vocab::id gpt_sample_top_k_top_p_repeat(
function read_wav (line 610) | bool read_wav(const std::string & fname, std::vector<float>& pcmf32, std...
function high_pass_filter (line 693) | void high_pass_filter(std::vector<float> & data, float cutoff, float sam...
function vad_simple (line 706) | bool vad_simple(std::vector<float> & pcmf32, int sample_rate, int last_m...
function similarity (line 744) | float similarity(const std::string & s0, const std::string & s1) {
function sam_params_parse (line 768) | bool sam_params_parse(int argc, char ** argv, sam_params & params) {
function sam_print_usage (line 795) | void sam_print_usage(int /*argc*/, char ** argv, const sam_params & para...
FILE: ggml/examples/common.h
type gpt_vocab (line 63) | struct gpt_vocab {
FILE: ggml/examples/dr_wav.h
type drwav_int8 (line 153) | typedef signed char drwav_int8;
type drwav_uint8 (line 154) | typedef unsigned char drwav_uint8;
type drwav_int16 (line 155) | typedef signed short drwav_int16;
type drwav_uint16 (line 156) | typedef unsigned short drwav_uint16;
type drwav_int32 (line 157) | typedef signed int drwav_int32;
type drwav_uint32 (line 158) | typedef unsigned int drwav_uint32;
type drwav_int64 (line 160) | typedef signed __int64 drwav_int64;
type drwav_uint64 (line 161) | typedef unsigned __int64 drwav_uint64;
type drwav_int64 (line 170) | typedef signed long long drwav_int64;
type drwav_uint64 (line 171) | typedef unsigned long long drwav_uint64;
type drwav_uint64 (line 177) | typedef drwav_uint64 drwav_uintptr;
type drwav_uint32 (line 179) | typedef drwav_uint32 drwav_uintptr;
type drwav_uint8 (line 181) | typedef drwav_uint8 drwav_bool8;
type drwav_uint32 (line 182) | typedef drwav_uint32 drwav_bool32;
type drwav_int32 (line 216) | typedef drwav_int32 drwav_result;
type drwav_seek_origin (line 292) | typedef enum
type drwav_container (line 298) | typedef enum
type drwav_chunk_header (line 305) | typedef struct
type drwav_fmt (line 323) | typedef struct
type drwav_bool32 (line 405) | typedef drwav_bool32 (* drwav_seek_proc)(void* pUserData, int offset, dr...
type drwav_uint64 (line 431) | typedef drwav_uint64 (* drwav_chunk_proc)(void* pChunkUserData, drwav_re...
type drwav_allocation_callbacks (line 433) | typedef struct
type drwav__memory_stream (line 442) | typedef struct
type drwav__memory_stream_write (line 450) | typedef struct
type drwav_data_format (line 459) | typedef struct
type drwav_smpl_loop (line 470) | typedef struct
type drwav_smpl (line 480) | typedef struct
type drwav (line 494) | typedef struct
function DRWAV_API (line 1066) | DRWAV_API void drwav_version(drwav_uint32* pMajor, drwav_uint32* pMinor,...
function DRWAV_API (line 1081) | DRWAV_API const char* drwav_version_string(void)
function DRWAV_INLINE (line 1108) | static DRWAV_INLINE drwav_bool32 drwav__guid_equal(const drwav_uint8 a[1...
function DRWAV_INLINE (line 1120) | static DRWAV_INLINE drwav_bool32 drwav__fourcc_equal(const drwav_uint8* ...
function DRWAV_INLINE (line 1131) | static DRWAV_INLINE int drwav__is_little_endian(void)
function DRWAV_INLINE (line 1143) | static DRWAV_INLINE drwav_uint16 drwav__bytes_to_u16(const drwav_uint8* ...
function DRWAV_INLINE (line 1148) | static DRWAV_INLINE drwav_int16 drwav__bytes_to_s16(const drwav_uint8* d...
function DRWAV_INLINE (line 1153) | static DRWAV_INLINE drwav_uint32 drwav__bytes_to_u32(const drwav_uint8* ...
function DRWAV_INLINE (line 1158) | static DRWAV_INLINE drwav_int32 drwav__bytes_to_s32(const drwav_uint8* d...
function DRWAV_INLINE (line 1163) | static DRWAV_INLINE drwav_uint64 drwav__bytes_to_u64(const drwav_uint8* ...
function DRWAV_INLINE (line 1170) | static DRWAV_INLINE drwav_int64 drwav__bytes_to_s64(const drwav_uint8* d...
function DRWAV_INLINE (line 1175) | static DRWAV_INLINE void drwav__bytes_to_guid(const drwav_uint8* data, d...
function DRWAV_INLINE (line 1184) | static DRWAV_INLINE drwav_uint16 drwav__bswap16(drwav_uint16 n)
function DRWAV_INLINE (line 1231) | static DRWAV_INLINE drwav_uint64 drwav__bswap64(drwav_uint64 n)
function DRWAV_INLINE (line 1255) | static DRWAV_INLINE drwav_int16 drwav__bswap_s16(drwav_int16 n)
function DRWAV_INLINE (line 1260) | static DRWAV_INLINE void drwav__bswap_samples_s16(drwav_int16* pSamples,...
function DRWAV_INLINE (line 1269) | static DRWAV_INLINE void drwav__bswap_s24(drwav_uint8* p)
function DRWAV_INLINE (line 1277) | static DRWAV_INLINE void drwav__bswap_samples_s24(drwav_uint8* pSamples,...
function DRWAV_INLINE (line 1287) | static DRWAV_INLINE drwav_int32 drwav__bswap_s32(drwav_int32 n)
function DRWAV_INLINE (line 1292) | static DRWAV_INLINE void drwav__bswap_samples_s32(drwav_int32* pSamples,...
function DRWAV_INLINE (line 1301) | static DRWAV_INLINE float drwav__bswap_f32(float n)
function DRWAV_INLINE (line 1313) | static DRWAV_INLINE void drwav__bswap_samples_f32(float* pSamples, drwav...
function DRWAV_INLINE (line 1322) | static DRWAV_INLINE double drwav__bswap_f64(double n)
function DRWAV_INLINE (line 1334) | static DRWAV_INLINE void drwav__bswap_samples_f64(double* pSamples, drwa...
function DRWAV_INLINE (line 1343) | static DRWAV_INLINE void drwav__bswap_samples_pcm(void* pSamples, drwav_...
function DRWAV_INLINE (line 1368) | static DRWAV_INLINE void drwav__bswap_samples_ieee(void* pSamples, drwav...
function DRWAV_INLINE (line 1394) | static DRWAV_INLINE void drwav__bswap_samples(void* pSamples, drwav_uint...
function drwav__free_default (line 1437) | static void drwav__free_default(void* p, void* pUserData)
function drwav__free_from_callbacks (line 1492) | static void drwav__free_from_callbacks(void* p, const drwav_allocation_c...
function drwav_allocation_callbacks (line 1504) | static drwav_allocation_callbacks drwav_copy_allocation_callbacks_or_def...
function DRWAV_INLINE (line 1521) | static DRWAV_INLINE drwav_bool32 drwav__is_compressed_format_tag(drwav_u...
function drwav__chunk_padding_size_riff (line 1528) | static unsigned int drwav__chunk_padding_size_riff(drwav_uint64 chunkSize)
function drwav__chunk_padding_size_w64 (line 1533) | static unsigned int drwav__chunk_padding_size_w64(drwav_uint64 chunkSize)
function drwav_result (line 1542) | static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, voi...
function drwav_bool32 (line 1577) | static drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_ui...
function drwav_bool32 (line 1597) | static drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav...
function drwav_bool32 (line 1625) | static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_p...
function drwav__on_read (line 1735) | static size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, vo...
function drwav_bool32 (line 1748) | static drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserDa...
function drwav_uint32 (line 1769) | static drwav_uint32 drwav_get_bytes_per_pcm_frame(drwav* pWav)
function DRWAV_API (line 1783) | DRWAV_API drwav_uint16 drwav_fmt_get_format(const drwav_fmt* pFMT)
function drwav_bool32 (line 1796) | static drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, d...
function drwav_bool32 (line 1815) | static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc o...
function DRWAV_API (line 2239) | DRWAV_API drwav_bool32 drwav_init(drwav* pWav, drwav_read_proc onRead, d...
function DRWAV_API (line 2244) | DRWAV_API drwav_bool32 drwav_init_ex(drwav* pWav, drwav_read_proc onRead...
function drwav_uint32 (line 2254) | static drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize)
function drwav_uint32 (line 2264) | static drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize)
function drwav_uint64 (line 2273) | static drwav_uint64 drwav__riff_chunk_size_w64(drwav_uint64 dataChunkSize)
function drwav_uint64 (line 2280) | static drwav_uint64 drwav__data_chunk_size_w64(drwav_uint64 dataChunkSize)
function drwav_uint64 (line 2285) | static drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize)
function drwav_uint64 (line 2295) | static drwav_uint64 drwav__data_chunk_size_rf64(drwav_uint64 dataChunkSize)
function drwav__write (line 2301) | static size_t drwav__write(drwav* pWav, const void* pData, size_t dataSize)
function drwav__write_u16ne_to_le (line 2310) | static size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value)
function drwav__write_u32ne_to_le (line 2322) | static size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value)
function drwav__write_u64ne_to_le (line 2334) | static size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value)
function drwav_bool32 (line 2347) | static drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_fo...
function drwav_bool32 (line 2387) | static drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_...
function DRWAV_API (line 2501) | DRWAV_API drwav_bool32 drwav_init_write(drwav* pWav, const drwav_data_fo...
function DRWAV_API (line 2510) | DRWAV_API drwav_bool32 drwav_init_write_sequential(drwav* pWav, const dr...
function DRWAV_API (line 2519) | DRWAV_API drwav_bool32 drwav_init_write_sequential_pcm_frames(drwav* pWa...
function DRWAV_API (line 2528) | DRWAV_API drwav_uint64 drwav_target_write_size_bytes(const drwav_data_fo...
function drwav_result (line 2554) | static drwav_result drwav_result_from_errno(int e)
function drwav_result (line 2956) | static drwav_result drwav_fopen(FILE** ppFile, const char* pFilePath, co...
function drwav_result (line 3016) | static drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath...
function drwav__on_read_stdio (line 3099) | static size_t drwav__on_read_stdio(void* pUserData, void* pBufferOut, si...
function drwav__on_write_stdio (line 3104) | static size_t drwav__on_write_stdio(void* pUserData, const void* pData, ...
function drwav_bool32 (line 3109) | static drwav_bool32 drwav__on_seek_stdio(void* pUserData, int offset, dr...
function DRWAV_API (line 3114) | DRWAV_API drwav_bool32 drwav_init_file(drwav* pWav, const char* filename...
function drwav_bool32 (line 3120) | static drwav_bool32 drwav_init_file__internal_FILE(drwav* pWav, FILE* pF...
function DRWAV_API (line 3139) | DRWAV_API drwav_bool32 drwav_init_file_ex(drwav* pWav, const char* filen...
function DRWAV_API (line 3150) | DRWAV_API drwav_bool32 drwav_init_file_w(drwav* pWav, const wchar_t* fil...
function DRWAV_API (line 3155) | DRWAV_API drwav_bool32 drwav_init_file_ex_w(drwav* pWav, const wchar_t* ...
function drwav_bool32 (line 3167) | static drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FI...
function drwav_bool32 (line 3186) | static drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const c...
function drwav_bool32 (line 3197) | static drwav_bool32 drwav_init_file_write_w__internal(drwav* pWav, const...
function DRWAV_API (line 3208) | DRWAV_API drwav_bool32 drwav_init_file_write(drwav* pWav, const char* fi...
function DRWAV_API (line 3213) | DRWAV_API drwav_bool32 drwav_init_file_write_sequential(drwav* pWav, con...
function DRWAV_API (line 3218) | DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames(drwav...
function DRWAV_API (line 3227) | DRWAV_API drwav_bool32 drwav_init_file_write_w(drwav* pWav, const wchar_...
function DRWAV_API (line 3232) | DRWAV_API drwav_bool32 drwav_init_file_write_sequential_w(drwav* pWav, c...
function DRWAV_API (line 3237) | DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames_w(drw...
function drwav__on_read_memory (line 3248) | static size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, s...
function drwav_bool32 (line 3269) | static drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, d...
function drwav__on_write_memory (line 3298) | static size_t drwav__on_write_memory(void* pUserData, const void* pDataI...
function drwav_bool32 (line 3338) | static drwav_bool32 drwav__on_seek_memory_write(void* pUserData, int off...
function DRWAV_API (line 3367) | DRWAV_API drwav_bool32 drwav_init_memory(drwav* pWav, const void* data, ...
function DRWAV_API (line 3372) | DRWAV_API drwav_bool32 drwav_init_memory_ex(drwav* pWav, const void* dat...
function drwav_bool32 (line 3390) | static drwav_bool32 drwav_init_memory_write__internal(drwav* pWav, void*...
function DRWAV_API (line 3412) | DRWAV_API drwav_bool32 drwav_init_memory_write(drwav* pWav, void** ppDat...
function DRWAV_API (line 3417) | DRWAV_API drwav_bool32 drwav_init_memory_write_sequential(drwav* pWav, v...
function DRWAV_API (line 3422) | DRWAV_API drwav_bool32 drwav_init_memory_write_sequential_pcm_frames(drw...
function DRWAV_API (line 3433) | DRWAV_API drwav_result drwav_uninit(drwav* pWav)
function DRWAV_API (line 3531) | DRWAV_API size_t drwav_read_raw(drwav* pWav, size_t bytesToRead, void* p...
function DRWAV_API (line 3585) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_le(drwav* pWav, drwav_uint6...
function DRWAV_API (line 3621) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_be(drwav* pWav, drwav_uint6...
function DRWAV_API (line 3632) | DRWAV_API drwav_uint64 drwav_read_pcm_frames(drwav* pWav, drwav_uint64 f...
function DRWAV_API (line 3643) | DRWAV_API drwav_bool32 drwav_seek_to_first_pcm_frame(drwav* pWav)
function DRWAV_API (line 3670) | DRWAV_API drwav_bool32 drwav_seek_to_pcm_frame(drwav* pWav, drwav_uint64...
function DRWAV_API (line 3774) | DRWAV_API size_t drwav_write_raw(drwav* pWav, size_t bytesToWrite, const...
function DRWAV_API (line 3789) | DRWAV_API drwav_uint64 drwav_write_pcm_frames_le(drwav* pWav, drwav_uint...
function DRWAV_API (line 3827) | DRWAV_API drwav_uint64 drwav_write_pcm_frames_be(drwav* pWav, drwav_uint...
function DRWAV_API (line 3883) | DRWAV_API drwav_uint64 drwav_write_pcm_frames(drwav* pWav, drwav_uint64 ...
function drwav_uint64 (line 3893) | static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwa...
function drwav_uint64 (line 4073) | static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_ui...
function DRWAV_INLINE (line 4269) | static DRWAV_INLINE drwav_int16 drwav__alaw_to_s16(drwav_uint8 sampleIn)
function DRWAV_INLINE (line 4274) | static DRWAV_INLINE drwav_int16 drwav__mulaw_to_s16(drwav_uint8 sampleIn)
function drwav__pcm_to_s16 (line 4281) | static void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn,...
function drwav__ieee_to_s16 (line 4333) | static void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn...
function drwav_uint64 (line 4348) | static drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_ui...
function drwav_uint64 (line 4382) | static drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_u...
function drwav_uint64 (line 4415) | static drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_u...
function drwav_uint64 (line 4448) | static drwav_uint64 drwav_read_pcm_frames_s16__mulaw(drwav* pWav, drwav_...
function DRWAV_API (line 4481) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_s16(drwav* pWav, drwav_uint...
function DRWAV_API (line 4523) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_s16le(drwav* pWav, drwav_ui...
function DRWAV_API (line 4533) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_s16be(drwav* pWav, drwav_ui...
function DRWAV_API (line 4544) | DRWAV_API void drwav_u8_to_s16(drwav_int16* pOut, const drwav_uint8* pIn...
function DRWAV_API (line 4556) | DRWAV_API void drwav_s24_to_s16(drwav_int16* pOut, const drwav_uint8* pI...
function DRWAV_API (line 4567) | DRWAV_API void drwav_s32_to_s16(drwav_int16* pOut, const drwav_int32* pI...
function DRWAV_API (line 4578) | DRWAV_API void drwav_f32_to_s16(drwav_int16* pOut, const float* pIn, siz...
function DRWAV_API (line 4593) | DRWAV_API void drwav_f64_to_s16(drwav_int16* pOut, const double* pIn, si...
function DRWAV_API (line 4608) | DRWAV_API void drwav_alaw_to_s16(drwav_int16* pOut, const drwav_uint8* p...
function DRWAV_API (line 4616) | DRWAV_API void drwav_mulaw_to_s16(drwav_int16* pOut, const drwav_uint8* ...
function drwav__pcm_to_f32 (line 4626) | static void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_...
function drwav__ieee_to_f32 (line 4675) | static void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size...
function drwav_uint64 (line 4694) | static drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_ui...
function drwav_uint64 (line 4722) | static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwa...
function drwav_uint64 (line 4746) | static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_ui...
function drwav_uint64 (line 4770) | static drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_u...
function drwav_uint64 (line 4804) | static drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_u...
function drwav_uint64 (line 4831) | static drwav_uint64 drwav_read_pcm_frames_f32__mulaw(drwav* pWav, drwav_...
function DRWAV_API (line 4859) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_f32(drwav* pWav, drwav_uint...
function DRWAV_API (line 4901) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_f32le(drwav* pWav, drwav_ui...
function DRWAV_API (line 4911) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_f32be(drwav* pWav, drwav_ui...
function DRWAV_API (line 4922) | DRWAV_API void drwav_u8_to_f32(float* pOut, const drwav_uint8* pIn, size...
function DRWAV_API (line 4951) | DRWAV_API void drwav_s16_to_f32(float* pOut, const drwav_int16* pIn, siz...
function DRWAV_API (line 4964) | DRWAV_API void drwav_s24_to_f32(float* pOut, const drwav_uint8* pIn, siz...
function DRWAV_API (line 4983) | DRWAV_API void drwav_s32_to_f32(float* pOut, const drwav_int32* pIn, siz...
function DRWAV_API (line 4995) | DRWAV_API void drwav_f64_to_f32(float* pOut, const double* pIn, size_t s...
function DRWAV_API (line 5008) | DRWAV_API void drwav_alaw_to_f32(float* pOut, const drwav_uint8* pIn, si...
function DRWAV_API (line 5021) | DRWAV_API void drwav_mulaw_to_f32(float* pOut, const drwav_uint8* pIn, s...
function drwav__pcm_to_s32 (line 5036) | static void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn,...
function drwav__ieee_to_s32 (line 5087) | static void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn...
function drwav_uint64 (line 5103) | static drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_ui...
function drwav_uint64 (line 5137) | static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwa...
function drwav_uint64 (line 5161) | static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_ui...
function drwav_uint64 (line 5185) | static drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_u...
function drwav_uint64 (line 5213) | static drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_u...
function drwav_uint64 (line 5241) | static drwav_uint64 drwav_read_pcm_frames_s32__mulaw(drwav* pWav, drwav_...
function DRWAV_API (line 5269) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_s32(drwav* pWav, drwav_uint...
function DRWAV_API (line 5311) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_s32le(drwav* pWav, drwav_ui...
function DRWAV_API (line 5321) | DRWAV_API drwav_uint64 drwav_read_pcm_frames_s32be(drwav* pWav, drwav_ui...
function DRWAV_API (line 5332) | DRWAV_API void drwav_u8_to_s32(drwav_int32* pOut, const drwav_uint8* pIn...
function DRWAV_API (line 5345) | DRWAV_API void drwav_s16_to_s32(drwav_int32* pOut, const drwav_int16* pI...
function DRWAV_API (line 5358) | DRWAV_API void drwav_s24_to_s32(drwav_int32* pOut, const drwav_uint8* pI...
function DRWAV_API (line 5376) | DRWAV_API void drwav_f32_to_s32(drwav_int32* pOut, const float* pIn, siz...
function DRWAV_API (line 5389) | DRWAV_API void drwav_f64_to_s32(drwav_int32* pOut, const double* pIn, si...
function DRWAV_API (line 5402) | DRWAV_API void drwav_alaw_to_s32(drwav_int32* pOut, const drwav_uint8* p...
function DRWAV_API (line 5415) | DRWAV_API void drwav_mulaw_to_s32(drwav_int32* pOut, const drwav_uint8* ...
function drwav_int16 (line 5430) | static drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, un...
function drwav_int32 (line 5514) | static drwav_int32* drwav__read_pcm_frames_and_close_s32(drwav* pWav, un...
function DRWAV_API (line 5558) | DRWAV_API drwav_int16* drwav_open_and_read_pcm_frames_s16(drwav_read_pro...
function DRWAV_API (line 5579) | DRWAV_API float* drwav_open_and_read_pcm_frames_f32(drwav_read_proc onRe...
function DRWAV_API (line 5600) | DRWAV_API drwav_int32* drwav_open_and_read_pcm_frames_s32(drwav_read_pro...
function DRWAV_API (line 5622) | DRWAV_API drwav_int16* drwav_open_file_and_read_pcm_frames_s16(const cha...
function DRWAV_API (line 5643) | DRWAV_API float* drwav_open_file_and_read_pcm_frames_f32(const char* fil...
function DRWAV_API (line 5664) | DRWAV_API drwav_int32* drwav_open_file_and_read_pcm_frames_s32(const cha...
function DRWAV_API (line 5686) | DRWAV_API drwav_int16* drwav_open_file_and_read_pcm_frames_s16_w(const w...
function DRWAV_API (line 5707) | DRWAV_API float* drwav_open_file_and_read_pcm_frames_f32_w(const wchar_t...
function DRWAV_API (line 5728) | DRWAV_API drwav_int32* drwav_open_file_and_read_pcm_frames_s32_w(const w...
function DRWAV_API (line 5750) | DRWAV_API drwav_int16* drwav_open_memory_and_read_pcm_frames_s16(const v...
function DRWAV_API (line 5771) | DRWAV_API float* drwav_open_memory_and_read_pcm_frames_f32(const void* d...
function DRWAV_API (line 5792) | DRWAV_API drwav_int32* drwav_open_memory_and_read_pcm_frames_s32(const v...
function DRWAV_API (line 5815) | DRWAV_API void drwav_free(void* p, const drwav_allocation_callbacks* pAl...
function DRWAV_API (line 5824) | DRWAV_API drwav_uint16 drwav_bytes_to_u16(const drwav_uint8* data)
function DRWAV_API (line 5829) | DRWAV_API drwav_int16 drwav_bytes_to_s16(const drwav_uint8* data)
function DRWAV_API (line 5834) | DRWAV_API drwav_uint32 drwav_bytes_to_u32(const drwav_uint8* data)
function DRWAV_API (line 5839) | DRWAV_API drwav_int32 drwav_bytes_to_s32(const drwav_uint8* data)
function DRWAV_API (line 5844) | DRWAV_API drwav_uint64 drwav_bytes_to_u64(const drwav_uint8* data)
function DRWAV_API (line 5849) | DRWAV_API drwav_int64 drwav_bytes_to_s64(const drwav_uint8* data)
function DRWAV_API (line 5855) | DRWAV_API drwav_bool32 drwav_guid_equal(const drwav_uint8 a[16], const d...
function DRWAV_API (line 5860) | DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const ch...
FILE: ggml/examples/kaldi-native-fbank/csrc/feature-fbank.cc
type knf (line 30) | namespace knf {
function Sqrt (line 32) | static void Sqrt(float *in_out, int32_t n) {
function MelBanks (line 59) | const MelBanks *FbankComputer::GetMelBanks(float vtln_warp) {
FILE: ggml/examples/kaldi-native-fbank/csrc/feature-fbank.h
function namespace (line 32) | namespace knf {
function class (line 79) | class FbankComputer {
FILE: ggml/examples/kaldi-native-fbank/csrc/feature-functions.cc
type knf (line 26) | namespace knf {
function ComputePowerSpectrum (line 28) | void ComputePowerSpectrum(std::vector<float> *complex_fft) {
FILE: ggml/examples/kaldi-native-fbank/csrc/feature-functions.h
function namespace (line 24) | namespace knf {
FILE: ggml/examples/kaldi-native-fbank/csrc/feature-window.cc
type knf (line 18) | namespace knf {
function FirstSampleOfFrame (line 65) | int64_t FirstSampleOfFrame(int32_t frame, const FrameExtractionOptions...
function NumFrames (line 76) | int32_t NumFrames(int64_t num_samples, const FrameExtractionOptions &o...
function ExtractWindow (line 121) | void ExtractWindow(int64_t sample_offset, const float *wave, std::size...
function RemoveDcOffset (line 179) | static void RemoveDcOffset(float *d, int32_t n) {
function InnerProduct (line 192) | float InnerProduct(const float *a, const float *b, int32_t n) {
function Preemphasize (line 200) | static void Preemphasize(float *d, int32_t n, float preemph_coeff) {
function ProcessWindow (line 213) | void ProcessWindow(const FrameExtractionOptions &opts,
FILE: ggml/examples/kaldi-native-fbank/csrc/feature-window.h
function namespace (line 16) | namespace knf {
function class (line 80) | class FeatureWindowFunction {
FILE: ggml/examples/kaldi-native-fbank/csrc/fftsg.c
function rdft (line 296) | void rdft(int n, int isgn, double *a, int *ip, double *w)
function makewt (line 345) | void makewt(int nw, int *ip, double *w)
function makeipt (line 406) | void makeipt(int nw, int *ip)
function makect (line 426) | void makect(int nc, int *ip, double *c)
function cftfsub (line 502) | void cftfsub(int n, double *a, int *ip, int nw, double *w)
function cftbsub (line 550) | void cftbsub(int n, double *a, int *ip, int nw, double *w)
function bitrv2 (line 598) | void bitrv2(int n, int *ip, double *a)
function bitrv2conj (line 945) | void bitrv2conj(int n, int *ip, double *a)
function bitrv216 (line 1300) | void bitrv216(double *a)
function bitrv216neg (line 1357) | void bitrv216neg(double *a)
function bitrv208 (line 1427) | void bitrv208(double *a)
function bitrv208neg (line 1450) | void bitrv208neg(double *a)
function cftf1st (line 1486) | void cftf1st(int n, double *a, double *w)
function cftb1st (line 1692) | void cftb1st(int n, double *a, double *w)
type cdft_arg_st (line 1899) | struct cdft_arg_st {
type cdft_arg_t (line 1906) | typedef struct cdft_arg_st cdft_arg_t;
function cftrec4_th (line 1909) | void cftrec4_th(int n, double *a, int nw, double *w)
function cftrec4 (line 2004) | void cftrec4(int n, double *a, int nw, double *w)
function cfttree (line 2026) | int cfttree(int n, int j, int k, double *a, int nw, double *w)
function cftleaf (line 2061) | void cftleaf(int n, int isplt, double *a, int nw, double *w)
function cftmdl1 (line 2126) | void cftmdl1(int n, double *a, double *w)
function cftmdl2 (line 2236) | void cftmdl2(int n, double *a, double *w)
function cftfx41 (line 2370) | void cftfx41(int n, double *a, int nw, double *w)
function cftf161 (line 2391) | void cftf161(double *a, double *w)
function cftf162 (line 2550) | void cftf162(double *a, double *w)
function cftf081 (line 2733) | void cftf081(double *a, double *w)
function cftf082 (line 2795) | void cftf082(double *a, double *w)
function cftf040 (line 2867) | void cftf040(double *a)
function cftb040 (line 2890) | void cftb040(double *a)
function cftx020 (line 2913) | void cftx020(double *a)
function rftfsub (line 2926) | void rftfsub(int n, double *a, int nc, double *c)
function rftbsub (line 2951) | void rftbsub(int n, double *a, int nc, double *c)
FILE: ggml/examples/kaldi-native-fbank/csrc/log.cc
type knf (line 41) | namespace knf {
function GetDateTimeStr (line 43) | std::string GetDateTimeStr() {
function LocateSymbolRange (line 51) | static bool LocateSymbolRange(const std::string &trace_name, std::size...
function Demangle (line 72) | static std::string Demangle(const std::string &trace_name) {
function GetStackTrace (line 104) | std::string GetStackTrace() {
FILE: ggml/examples/kaldi-native-fbank/csrc/log.h
function LogLevel (line 40) | enum class LogLevel {
function class (line 271) | class Voidifier {
FILE: ggml/examples/kaldi-native-fbank/csrc/mel-computations.cc
type knf (line 29) | namespace knf {
FILE: ggml/examples/kaldi-native-fbank/csrc/mel-computations.h
function namespace (line 29) | namespace knf {
FILE: ggml/examples/kaldi-native-fbank/csrc/online-feature.cc
type knf (line 31) | namespace knf {
class OnlineGenericBaseFeature<FbankComputer> (line 164) | class OnlineGenericBaseFeature<FbankComputer>
FILE: ggml/examples/kaldi-native-fbank/csrc/online-feature.h
function namespace (line 30) | namespace knf {
FILE: ggml/examples/kaldi-native-fbank/csrc/rfft.cc
type knf (line 34) | namespace knf {
class Rfft::RfftImpl (line 35) | class Rfft::RfftImpl {
method RfftImpl (line 37) | explicit RfftImpl(int32_t n) : n_(n), ip_(2 + std::sqrt(n / 2)), w_(...
method Compute (line 41) | void Compute(float *in_out) {
method Compute (line 49) | void Compute(double *in_out) {
FILE: ggml/examples/kaldi-native-fbank/csrc/rfft.h
function namespace (line 24) | namespace knf {
FILE: ggml/examples/python/example_test_all_quants.py
function get_name (line 28) | def get_name(type):
FILE: ggml/examples/python/ggml/__init__.pyi
class lib (line 4) | class lib:
method GGML_BACKEND_CPU (line 6) | def GGML_BACKEND_CPU(self) -> int: ...
method GGML_BACKEND_GPU (line 8) | def GGML_BACKEND_GPU(self) -> int: ...
method GGML_BACKEND_GPU_SPLIT (line 10) | def GGML_BACKEND_GPU_SPLIT(self) -> int: ...
method GGML_FTYPE_ALL_F32 (line 12) | def GGML_FTYPE_ALL_F32(self) -> int: ...
method GGML_FTYPE_MOSTLY_F16 (line 14) | def GGML_FTYPE_MOSTLY_F16(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q2_K (line 16) | def GGML_FTYPE_MOSTLY_Q2_K(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q3_K (line 18) | def GGML_FTYPE_MOSTLY_Q3_K(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q4_0 (line 20) | def GGML_FTYPE_MOSTLY_Q4_0(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q4_1 (line 22) | def GGML_FTYPE_MOSTLY_Q4_1(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q4_1_SOME_F16 (line 24) | def GGML_FTYPE_MOSTLY_Q4_1_SOME_F16(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q4_K (line 26) | def GGML_FTYPE_MOSTLY_Q4_K(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q5_0 (line 28) | def GGML_FTYPE_MOSTLY_Q5_0(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q5_1 (line 30) | def GGML_FTYPE_MOSTLY_Q5_1(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q5_K (line 32) | def GGML_FTYPE_MOSTLY_Q5_K(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q6_K (line 34) | def GGML_FTYPE_MOSTLY_Q6_K(self) -> int: ...
method GGML_FTYPE_MOSTLY_Q8_0 (line 36) | def GGML_FTYPE_MOSTLY_Q8_0(self) -> int: ...
method GGML_FTYPE_UNKNOWN (line 38) | def GGML_FTYPE_UNKNOWN(self) -> int: ...
method GGML_LINESEARCH_BACKTRACKING_ARMIJO (line 40) | def GGML_LINESEARCH_BACKTRACKING_ARMIJO(self) -> int: ...
method GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE (line 42) | def GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE(self) -> int: ...
method GGML_LINESEARCH_BACKTRACKING_WOLFE (line 44) | def GGML_LINESEARCH_BACKTRACKING_WOLFE(self) -> int: ...
method GGML_LINESEARCH_DEFAULT (line 46) | def GGML_LINESEARCH_DEFAULT(self) -> int: ...
method GGML_LINESEARCH_FAIL (line 48) | def GGML_LINESEARCH_FAIL(self) -> int: ...
method GGML_LINESEARCH_INVALID_PARAMETERS (line 50) | def GGML_LINESEARCH_INVALID_PARAMETERS(self) -> int: ...
method GGML_LINESEARCH_MAXIMUM_ITERATIONS (line 52) | def GGML_LINESEARCH_MAXIMUM_ITERATIONS(self) -> int: ...
method GGML_LINESEARCH_MAXIMUM_STEP (line 54) | def GGML_LINESEARCH_MAXIMUM_STEP(self) -> int: ...
method GGML_LINESEARCH_MINIMUM_STEP (line 56) | def GGML_LINESEARCH_MINIMUM_STEP(self) -> int: ...
method GGML_OBJECT_GRAPH (line 58) | def GGML_OBJECT_GRAPH(self) -> int: ...
method GGML_OBJECT_TENSOR (line 60) | def GGML_OBJECT_TENSOR(self) -> int: ...
method GGML_OBJECT_WORK_BUFFER (line 62) | def GGML_OBJECT_WORK_BUFFER(self) -> int: ...
method GGML_OPT_ADAM (line 64) | def GGML_OPT_ADAM(self) -> int: ...
method GGML_OPT_DID_NOT_CONVERGE (line 66) | def GGML_OPT_DID_NOT_CONVERGE(self) -> int: ...
method GGML_OPT_FAIL (line 68) | def GGML_OPT_FAIL(self) -> int: ...
method GGML_OPT_INVALID_WOLFE (line 70) | def GGML_OPT_INVALID_WOLFE(self) -> int: ...
method GGML_OPT_LBFGS (line 72) | def GGML_OPT_LBFGS(self) -> int: ...
method GGML_OPT_NO_CONTEXT (line 74) | def GGML_OPT_NO_CONTEXT(self) -> int: ...
method GGML_OPT_OK (line 76) | def GGML_OPT_OK(self) -> int: ...
method GGML_OP_ACC (line 78) | def GGML_OP_ACC(self) -> int: ...
method GGML_OP_ADD (line 80) | def GGML_OP_ADD(self) -> int: ...
method GGML_OP_ADD1 (line 82) | def GGML_OP_ADD1(self) -> int: ...
method GGML_OP_ALIBI (line 84) | def GGML_OP_ALIBI(self) -> int: ...
method GGML_OP_ARGMAX (line 86) | def GGML_OP_ARGMAX(self) -> int: ...
method GGML_OP_CLAMP (line 88) | def GGML_OP_CLAMP(self) -> int: ...
method GGML_OP_CONT (line 90) | def GGML_OP_CONT(self) -> int: ...
method GGML_OP_CONV_1D (line 92) | def GGML_OP_CONV_1D(self) -> int: ...
method GGML_OP_CONV_2D (line 94) | def GGML_OP_CONV_2D(self) -> int: ...
method GGML_OP_COUNT (line 96) | def GGML_OP_COUNT(self) -> int: ...
method GGML_OP_CPY (line 98) | def GGML_OP_CPY(self) -> int: ...
method GGML_OP_CROSS_ENTROPY_LOSS (line 100) | def GGML_OP_CROSS_ENTROPY_LOSS(self) -> int: ...
method GGML_OP_CROSS_ENTROPY_LOSS_BACK (line 102) | def GGML_OP_CROSS_ENTROPY_LOSS_BACK(self) -> int: ...
method GGML_OP_DIAG (line 104) | def GGML_OP_DIAG(self) -> int: ...
method GGML_OP_DIAG_MASK_INF (line 106) | def GGML_OP_DIAG_MASK_INF(self) -> int: ...
method GGML_OP_DIAG_MASK_ZERO (line 108) | def GGML_OP_DIAG_MASK_ZERO(self) -> int: ...
method GGML_OP_DIV (line 110) | def GGML_OP_DIV(self) -> int: ...
method GGML_OP_DUP (line 112) | def GGML_OP_DUP(self) -> int: ...
method GGML_OP_FLASH_ATTN (line 114) | def GGML_OP_FLASH_ATTN(self) -> int: ...
method GGML_OP_FLASH_ATTN_BACK (line 116) | def GGML_OP_FLASH_ATTN_BACK(self) -> int: ...
method GGML_OP_FLASH_FF (line 118) | def GGML_OP_FLASH_FF(self) -> int: ...
method GGML_OP_GET_ROWS (line 120) | def GGML_OP_GET_ROWS(self) -> int: ...
method GGML_OP_GET_ROWS_BACK (line 122) | def GGML_OP_GET_ROWS_BACK(self) -> int: ...
method GGML_OP_LOG (line 124) | def GGML_OP_LOG(self) -> int: ...
method GGML_OP_MAP_BINARY (line 126) | def GGML_OP_MAP_BINARY(self) -> int: ...
method GGML_OP_MAP_CUSTOM1 (line 128) | def GGML_OP_MAP_CUSTOM1(self) -> int: ...
method GGML_OP_MAP_CUSTOM1_F32 (line 130) | def GGML_OP_MAP_CUSTOM1_F32(self) -> int: ...
method GGML_OP_MAP_CUSTOM2 (line 132) | def GGML_OP_MAP_CUSTOM2(self) -> int: ...
method GGML_OP_MAP_CUSTOM2_F32 (line 134) | def GGML_OP_MAP_CUSTOM2_F32(self) -> int: ...
method GGML_OP_MAP_CUSTOM3 (line 136) | def GGML_OP_MAP_CUSTOM3(self) -> int: ...
method GGML_OP_MAP_CUSTOM3_F32 (line 138) | def GGML_OP_MAP_CUSTOM3_F32(self) -> int: ...
method GGML_OP_MAP_UNARY (line 140) | def GGML_OP_MAP_UNARY(self) -> int: ...
method GGML_OP_MEAN (line 142) | def GGML_OP_MEAN(self) -> int: ...
method GGML_OP_MUL (line 144) | def GGML_OP_MUL(self) -> int: ...
method GGML_OP_MUL_MAT (line 146) | def GGML_OP_MUL_MAT(self) -> int: ...
method GGML_OP_NONE (line 148) | def GGML_OP_NONE(self) -> int: ...
method GGML_OP_NORM (line 150) | def GGML_OP_NORM(self) -> int: ...
method GGML_OP_OUT_PROD (line 152) | def GGML_OP_OUT_PROD(self) -> int: ...
method GGML_OP_PERMUTE (line 154) | def GGML_OP_PERMUTE(self) -> int: ...
method GGML_OP_POOL_1D (line 156) | def GGML_OP_POOL_1D(self) -> int: ...
method GGML_OP_POOL_2D (line 158) | def GGML_OP_POOL_2D(self) -> int: ...
method GGML_OP_POOL_AVG (line 160) | def GGML_OP_POOL_AVG(self) -> int: ...
method GGML_OP_POOL_COUNT (line 162) | def GGML_OP_POOL_COUNT(self) -> int: ...
method GGML_OP_POOL_MAX (line 164) | def GGML_OP_POOL_MAX(self) -> int: ...
method GGML_OP_REPEAT (line 166) | def GGML_OP_REPEAT(self) -> int: ...
method GGML_OP_REPEAT_BACK (line 168) | def GGML_OP_REPEAT_BACK(self) -> int: ...
method GGML_OP_RESHAPE (line 170) | def GGML_OP_RESHAPE(self) -> int: ...
method GGML_OP_RMS_NORM (line 172) | def GGML_OP_RMS_NORM(self) -> int: ...
method GGML_OP_RMS_NORM_BACK (line 174) | def GGML_OP_RMS_NORM_BACK(self) -> int: ...
method GGML_OP_ROPE (line 176) | def GGML_OP_ROPE(self) -> int: ...
method GGML_OP_ROPE_BACK (line 178) | def GGML_OP_ROPE_BACK(self) -> int: ...
method GGML_OP_SCALE (line 180) | def GGML_OP_SCALE(self) -> int: ...
method GGML_OP_SET (line 182) | def GGML_OP_SET(self) -> int: ...
method GGML_OP_SILU_BACK (line 184) | def GGML_OP_SILU_BACK(self) -> int: ...
method GGML_OP_SOFT_MAX (line 186) | def GGML_OP_SOFT_MAX(self) -> int: ...
method GGML_OP_SOFT_MAX_BACK (line 188) | def GGML_OP_SOFT_MAX_BACK(self) -> int: ...
method GGML_OP_SQR (line 190) | def GGML_OP_SQR(self) -> int: ...
method GGML_OP_SQRT (line 192) | def GGML_OP_SQRT(self) -> int: ...
method GGML_OP_SUB (line 194) | def GGML_OP_SUB(self) -> int: ...
method GGML_OP_SUM (line 196) | def GGML_OP_SUM(self) -> int: ...
method GGML_OP_SUM_ROWS (line 198) | def GGML_OP_SUM_ROWS(self) -> int: ...
method GGML_OP_TRANSPOSE (line 200) | def GGML_OP_TRANSPOSE(self) -> int: ...
method GGML_OP_UNARY (line 202) | def GGML_OP_UNARY(self) -> int: ...
method GGML_OP_VIEW (line 204) | def GGML_OP_VIEW(self) -> int: ...
method GGML_OP_WIN_PART (line 206) | def GGML_OP_WIN_PART(self) -> int: ...
method GGML_OP_WIN_UNPART (line 208) | def GGML_OP_WIN_UNPART(self) -> int: ...
method GGML_TASK_COMPUTE (line 210) | def GGML_TASK_COMPUTE(self) -> int: ...
method GGML_TASK_FINALIZE (line 212) | def GGML_TASK_FINALIZE(self) -> int: ...
method GGML_TASK_INIT (line 214) | def GGML_TASK_INIT(self) -> int: ...
method GGML_TYPE_COUNT (line 216) | def GGML_TYPE_COUNT(self) -> int: ...
method GGML_TYPE_F16 (line 218) | def GGML_TYPE_F16(self) -> int: ...
method GGML_TYPE_F32 (line 220) | def GGML_TYPE_F32(self) -> int: ...
method GGML_TYPE_I16 (line 222) | def GGML_TYPE_I16(self) -> int: ...
method GGML_TYPE_I32 (line 224) | def GGML_TYPE_I32(self) -> int: ...
method GGML_TYPE_I8 (line 226) | def GGML_TYPE_I8(self) -> int: ...
method GGML_TYPE_Q2_K (line 228) | def GGML_TYPE_Q2_K(self) -> int: ...
method GGML_TYPE_Q3_K (line 230) | def GGML_TYPE_Q3_K(self) -> int: ...
method GGML_TYPE_Q4_0 (line 232) | def GGML_TYPE_Q4_0(self) -> int: ...
method GGML_TYPE_Q4_1 (line 234) | def GGML_TYPE_Q4_1(self) -> int: ...
method GGML_TYPE_Q4_K (line 236) | def GGML_TYPE_Q4_K(self) -> int: ...
method GGML_TYPE_Q5_0 (line 238) | def GGML_TYPE_Q5_0(self) -> int: ...
method GGML_TYPE_Q5_1 (line 240) | def GGML_TYPE_Q5_1(self) -> int: ...
method GGML_TYPE_Q5_K (line 242) | def GGML_TYPE_Q5_K(self) -> int: ...
method GGML_TYPE_Q6_K (line 244) | def GGML_TYPE_Q6_K(self) -> int: ...
method GGML_TYPE_Q8_0 (line 246) | def GGML_TYPE_Q8_0(self) -> int: ...
method GGML_TYPE_Q8_1 (line 248) | def GGML_TYPE_Q8_1(self) -> int: ...
method GGML_TYPE_Q8_K (line 250) | def GGML_TYPE_Q8_K(self) -> int: ...
method GGML_UNARY_OP_ABS (line 252) | def GGML_UNARY_OP_ABS(self) -> int: ...
method GGML_UNARY_OP_ELU (line 254) | def GGML_UNARY_OP_ELU(self) -> int: ...
method GGML_UNARY_OP_GELU (line 256) | def GGML_UNARY_OP_GELU(self) -> int: ...
method GGML_UNARY_OP_GELU_QUICK (line 258) | def GGML_UNARY_OP_GELU_QUICK(self) -> int: ...
method GGML_UNARY_OP_NEG (line 260) | def GGML_UNARY_OP_NEG(self) -> int: ...
method GGML_UNARY_OP_RELU (line 262) | def GGML_UNARY_OP_RELU(self) -> int: ...
method GGML_UNARY_OP_SGN (line 264) | def GGML_UNARY_OP_SGN(self) -> int: ...
method GGML_UNARY_OP_SILU (line 266) | def GGML_UNARY_OP_SILU(self) -> int: ...
method GGML_UNARY_OP_STEP (line 268) | def GGML_UNARY_OP_STEP(self) -> int: ...
method GGML_UNARY_OP_TANH (line 270) | def GGML_UNARY_OP_TANH(self) -> int: ...
method GGUF_TYPE_ARRAY (line 272) | def GGUF_TYPE_ARRAY(self) -> int: ...
method GGUF_TYPE_BOOL (line 274) | def GGUF_TYPE_BOOL(self) -> int: ...
method GGUF_TYPE_COUNT (line 276) | def GGUF_TYPE_COUNT(self) -> int: ...
method GGUF_TYPE_FLOAT32 (line 278) | def GGUF_TYPE_FLOAT32(self) -> int: ...
method GGUF_TYPE_INT16 (line 280) | def GGUF_TYPE_INT16(self) -> int: ...
method GGUF_TYPE_INT32 (line 282) | def GGUF_TYPE_INT32(self) -> int: ...
method GGUF_TYPE_INT8 (line 284) | def GGUF_TYPE_INT8(self) -> int: ...
method GGUF_TYPE_STRING (line 286) | def GGUF_TYPE_STRING(self) -> int: ...
method GGUF_TYPE_UINT16 (line 288) | def GGUF_TYPE_UINT16(self) -> int: ...
method GGUF_TYPE_UINT32 (line 290) | def GGUF_TYPE_UINT32(self) -> int: ...
method GGUF_TYPE_UINT8 (line 292) | def GGUF_TYPE_UINT8(self) -> int: ...
method abort_callback (line 293) | def abort_callback(data: ffi.CData) -> bool:
method dequantize_row_q2_K (line 300) | def dequantize_row_q2_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method dequantize_row_q3_K (line 307) | def dequantize_row_q3_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method dequantize_row_q4_K (line 310) | def dequantize_row_q4_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method dequantize_row_q5_K (line 313) | def dequantize_row_q5_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method dequantize_row_q6_K (line 316) | def dequantize_row_q6_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method dequantize_row_q8_K (line 319) | def dequantize_row_q8_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method ggml_abs (line 322) | def ggml_abs(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_abs_inplace (line 329) | def ggml_abs_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_acc (line 336) | def ggml_acc(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, nb1: int, nb2...
method ggml_acc_inplace (line 348) | def ggml_acc_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, nb1: ...
method ggml_add (line 360) | def ggml_add(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CData:
method ggml_add1 (line 368) | def ggml_add1(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CData:
method ggml_add1_inplace (line 376) | def ggml_add1_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> f...
method ggml_add_inplace (line 384) | def ggml_add_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ff...
method ggml_alibi (line 392) | def ggml_alibi(ctx: ffi.CData, a: ffi.CData, n_past: int, n_head: int,...
method ggml_allocr_alloc (line 405) | def ggml_allocr_alloc(alloc: ffi.CData, tensor: ffi.CData) -> None:
method ggml_allocr_alloc_graph (line 408) | def ggml_allocr_alloc_graph(alloc: ffi.CData, graph: ffi.CData) -> int:
method ggml_allocr_free (line 411) | def ggml_allocr_free(alloc: ffi.CData) -> None:
method ggml_allocr_is_measure (line 414) | def ggml_allocr_is_measure(alloc: ffi.CData) -> bool:
method ggml_allocr_new (line 417) | def ggml_allocr_new(data: ffi.CData, size: int, alignment: int) -> ffi...
method ggml_allocr_new_measure (line 420) | def ggml_allocr_new_measure(alignment: int) -> ffi.CData:
method ggml_allocr_reset (line 423) | def ggml_allocr_reset(alloc: ffi.CData) -> None:
method ggml_allocr_set_parse_seq (line 426) | def ggml_allocr_set_parse_seq(alloc: ffi.CData, list: ffi.CData, n: in...
method ggml_are_same_shape (line 434) | def ggml_are_same_shape(t0: ffi.CData, t1: ffi.CData) -> bool:
method ggml_argmax (line 437) | def ggml_argmax(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_blck_size (line 446) | def ggml_blck_size(type: int) -> int:
method ggml_build_backward (line 449) | def ggml_build_backward(ctx: ffi.CData, gf: ffi.CData, keep: bool) -> ...
method ggml_build_forward (line 452) | def ggml_build_forward(tensor: ffi.CData) -> ffi.CData:
method ggml_build_forward_ctx (line 455) | def ggml_build_forward_ctx(ctx: ffi.CData, tensor: ffi.CData) -> ffi.C...
method ggml_build_forward_expand (line 458) | def ggml_build_forward_expand(cgraph: ffi.CData, tensor: ffi.CData) ->...
method ggml_cl_can_mul_mat (line 461) | def ggml_cl_can_mul_mat(src0: ffi.CData, src1: ffi.CData, dst: ffi.CDa...
method ggml_cl_free_data (line 464) | def ggml_cl_free_data(tensor: ffi.CData) -> None:
method ggml_cl_host_free (line 467) | def ggml_cl_host_free(ptr: ffi.CData) -> None:
method ggml_cl_host_malloc (line 470) | def ggml_cl_host_malloc(size: int) -> ffi.CData:
method ggml_cl_init (line 473) | def ggml_cl_init() -> None:
method ggml_cl_mul (line 476) | def ggml_cl_mul(src0: ffi.CData, src1: ffi.CData, dst: ffi.CData) -> N...
method ggml_cl_mul_mat (line 479) | def ggml_cl_mul_mat(src0: ffi.CData, src1: ffi.CData, dst: ffi.CData, ...
method ggml_cl_mul_mat_get_wsize (line 482) | def ggml_cl_mul_mat_get_wsize(src0: ffi.CData, src1: ffi.CData, dst: f...
method ggml_cl_transform_tensor (line 485) | def ggml_cl_transform_tensor(data: ffi.CData, tensor: ffi.CData) -> None:
method ggml_clamp (line 488) | def ggml_clamp(ctx: ffi.CData, a: ffi.CData, min: float, max: float) -...
method ggml_cont (line 500) | def ggml_cont(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_cont_inplace (line 509) | def ggml_cont_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_conv_1d (line 518) | def ggml_conv_1d(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, s0: int, ...
method ggml_conv_1d_ph (line 529) | def ggml_conv_1d_ph(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, s: int...
method ggml_conv_2d (line 542) | def ggml_conv_2d(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, s0: int, ...
method ggml_cpu_has_arm_fma (line 556) | def ggml_cpu_has_arm_fma() -> int:
method ggml_cpu_has_avx (line 559) | def ggml_cpu_has_avx() -> int:
method ggml_cpu_has_avx2 (line 562) | def ggml_cpu_has_avx2() -> int:
method ggml_cpu_has_avx512 (line 565) | def ggml_cpu_has_avx512() -> int:
method ggml_cpu_has_avx512_vbmi (line 568) | def ggml_cpu_has_avx512_vbmi() -> int:
method ggml_cpu_has_avx512_vnni (line 571) | def ggml_cpu_has_avx512_vnni() -> int:
method ggml_cpu_has_blas (line 574) | def ggml_cpu_has_blas() -> int:
method ggml_cpu_has_clblast (line 577) | def ggml_cpu_has_clblast() -> int:
method ggml_cpu_has_cublas (line 580) | def ggml_cpu_has_cublas() -> int:
method ggml_cpu_has_f16c (line 583) | def ggml_cpu_has_f16c() -> int:
method ggml_cpu_has_fma (line 586) | def ggml_cpu_has_fma() -> int:
method ggml_cpu_has_fp16_va (line 589) | def ggml_cpu_has_fp16_va() -> int:
method ggml_cpu_has_gpublas (line 592) | def ggml_cpu_has_gpublas() -> int:
method ggml_cpu_has_neon (line 595) | def ggml_cpu_has_neon() -> int:
method ggml_cpu_has_sse3 (line 598) | def ggml_cpu_has_sse3() -> int:
method ggml_cpu_has_vsx (line 601) | def ggml_cpu_has_vsx() -> int:
method ggml_cpu_has_wasm_simd (line 604) | def ggml_cpu_has_wasm_simd() -> int:
method ggml_cpy (line 607) | def ggml_cpy(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CData:
method ggml_cpy_inplace (line 617) | def ggml_cpy_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ff...
method ggml_cross_entropy_loss (line 627) | def ggml_cross_entropy_loss(ctx: ffi.CData, a: ffi.CData, b: ffi.CData...
method ggml_cross_entropy_loss_back (line 635) | def ggml_cross_entropy_loss_back(ctx: ffi.CData, a: ffi.CData, b: ffi....
method ggml_cuda_assign_buffers (line 644) | def ggml_cuda_assign_buffers(tensor: ffi.CData) -> None:
method ggml_cuda_assign_buffers_force_inplace (line 647) | def ggml_cuda_assign_buffers_force_inplace(tensor: ffi.CData) -> None:
method ggml_cuda_assign_buffers_no_scratch (line 650) | def ggml_cuda_assign_buffers_no_scratch(tensor: ffi.CData) -> None:
method ggml_cuda_can_mul_mat (line 653) | def ggml_cuda_can_mul_mat(src0: ffi.CData, src1: ffi.CData, dst: ffi.C...
method ggml_cuda_compute_forward (line 656) | def ggml_cuda_compute_forward(params: ffi.CData, tensor: ffi.CData) ->...
method ggml_cuda_free_data (line 659) | def ggml_cuda_free_data(tensor: ffi.CData) -> None:
method ggml_cuda_free_scratch (line 662) | def ggml_cuda_free_scratch() -> None:
method ggml_cuda_get_device_count (line 665) | def ggml_cuda_get_device_count() -> int:
method ggml_cuda_get_device_description (line 668) | def ggml_cuda_get_device_description(device: int, description: ffi.CDa...
method ggml_cuda_host_free (line 671) | def ggml_cuda_host_free(ptr: ffi.CData) -> None:
method ggml_cuda_host_malloc (line 674) | def ggml_cuda_host_malloc(size: int) -> ffi.CData:
method ggml_cuda_set_main_device (line 677) | def ggml_cuda_set_main_device(main_device: int) -> None:
method ggml_cuda_set_mul_mat_q (line 680) | def ggml_cuda_set_mul_mat_q(mul_mat_q: bool) -> None:
method ggml_cuda_set_scratch_size (line 683) | def ggml_cuda_set_scratch_size(scratch_size: int) -> None:
method ggml_cuda_set_tensor_split (line 686) | def ggml_cuda_set_tensor_split(tensor_split: ffi.CData) -> None:
method ggml_cuda_transform_tensor (line 689) | def ggml_cuda_transform_tensor(data: ffi.CData, tensor: ffi.CData) -> ...
method ggml_cycles (line 692) | def ggml_cycles() -> int:
method ggml_cycles_per_ms (line 695) | def ggml_cycles_per_ms() -> int:
method ggml_diag (line 698) | def ggml_diag(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_diag_mask_inf (line 705) | def ggml_diag_mask_inf(ctx: ffi.CData, a: ffi.CData, n_past: int) -> f...
method ggml_diag_mask_inf_inplace (line 715) | def ggml_diag_mask_inf_inplace(ctx: ffi.CData, a: ffi.CData, n_past: i...
method ggml_diag_mask_zero (line 725) | def ggml_diag_mask_zero(ctx: ffi.CData, a: ffi.CData, n_past: int) -> ...
method ggml_diag_mask_zero_inplace (line 735) | def ggml_diag_mask_zero_inplace(ctx: ffi.CData, a: ffi.CData, n_past: ...
method ggml_div (line 745) | def ggml_div(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CData:
method ggml_div_inplace (line 753) | def ggml_div_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ff...
method ggml_dup (line 761) | def ggml_dup(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_dup_inplace (line 768) | def ggml_dup_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_dup_tensor (line 777) | def ggml_dup_tensor(ctx: ffi.CData, src: ffi.CData) -> ffi.CData:
method ggml_element_size (line 780) | def ggml_element_size(tensor: ffi.CData) -> int:
method ggml_elu (line 783) | def ggml_elu(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_elu_inplace (line 790) | def ggml_elu_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_flash_attn (line 797) | def ggml_flash_attn(ctx: ffi.CData, q: ffi.CData, k: ffi.CData, v: ffi...
method ggml_flash_attn_back (line 807) | def ggml_flash_attn_back(ctx: ffi.CData, q: ffi.CData, k: ffi.CData, v...
method ggml_flash_ff (line 818) | def ggml_flash_ff(ctx: ffi.CData, a: ffi.CData, b0: ffi.CData, b1: ffi...
method ggml_format_name (line 829) | def ggml_format_name(tensor: ffi.CData, fmt: ffi.CData, *args2) -> ffi...
method ggml_fp16_to_fp32 (line 832) | def ggml_fp16_to_fp32(x: np.float16) -> float:
method ggml_fp16_to_fp32_row (line 839) | def ggml_fp16_to_fp32_row(x: ffi.CData, y: ffi.CData, n: int) -> None:
method ggml_fp32_to_fp16 (line 842) | def ggml_fp32_to_fp16(x: float) -> np.float16:
method ggml_fp32_to_fp16_row (line 845) | def ggml_fp32_to_fp16_row(x: ffi.CData, y: ffi.CData, n: int) -> None:
method ggml_free (line 848) | def ggml_free(ctx: ffi.CData) -> None:
method ggml_ftype_to_ggml_type (line 851) | def ggml_ftype_to_ggml_type(ftype: int) -> int:
method ggml_gelu (line 858) | def ggml_gelu(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_gelu_inplace (line 867) | def ggml_gelu_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_gelu_quick (line 874) | def ggml_gelu_quick(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_gelu_quick_inplace (line 881) | def ggml_gelu_quick_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_get_data (line 888) | def ggml_get_data(tensor: ffi.CData) -> ffi.CData:
method ggml_get_data_f32 (line 891) | def ggml_get_data_f32(tensor: ffi.CData) -> ffi.CData:
method ggml_get_f32_1d (line 894) | def ggml_get_f32_1d(tensor: ffi.CData, i: int) -> float:
method ggml_get_i32_1d (line 897) | def ggml_get_i32_1d(tensor: ffi.CData, i: int) -> int:
method ggml_get_max_tensor_size (line 900) | def ggml_get_max_tensor_size(ctx: ffi.CData) -> int:
method ggml_get_mem_buffer (line 903) | def ggml_get_mem_buffer(ctx: ffi.CData) -> ffi.CData:
method ggml_get_mem_size (line 906) | def ggml_get_mem_size(ctx: ffi.CData) -> int:
method ggml_get_name (line 909) | def ggml_get_name(tensor: ffi.CData) -> ffi.CData:
method ggml_get_no_alloc (line 912) | def ggml_get_no_alloc(ctx: ffi.CData) -> bool:
method ggml_get_rows (line 915) | def ggml_get_rows(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.C...
method ggml_get_rows_back (line 923) | def ggml_get_rows_back(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, c: ...
method ggml_get_tensor (line 932) | def ggml_get_tensor(ctx: ffi.CData, name: ffi.CData) -> ffi.CData:
method ggml_get_unary_op (line 935) | def ggml_get_unary_op(tensor: ffi.CData) -> int:
method ggml_graph_compute (line 938) | def ggml_graph_compute(cgraph: ffi.CData, cplan: ffi.CData) -> int:
method ggml_graph_compute_with_ctx (line 941) | def ggml_graph_compute_with_ctx(ctx: ffi.CData, cgraph: ffi.CData, n_t...
method ggml_graph_dump_dot (line 949) | def ggml_graph_dump_dot(gb: ffi.CData, gf: ffi.CData, filename: ffi.CD...
method ggml_graph_export (line 956) | def ggml_graph_export(cgraph: ffi.CData, fname: ffi.CData) -> None:
method ggml_graph_get_tensor (line 959) | def ggml_graph_get_tensor(cgraph: ffi.CData, name: ffi.CData) -> ffi.C...
method ggml_graph_import (line 962) | def ggml_graph_import(fname: ffi.CData, ctx_data: ffi.CData, ctx_eval:...
method ggml_graph_overhead (line 965) | def ggml_graph_overhead() -> int:
method ggml_graph_plan (line 968) | def ggml_graph_plan(cgraph: ffi.CData, n_threads: int) -> ffi.CData:
method ggml_graph_print (line 976) | def ggml_graph_print(cgraph: ffi.CData) -> None:
method ggml_graph_reset (line 983) | def ggml_graph_reset(cgraph: ffi.CData) -> None:
method ggml_init (line 986) | def ggml_init(params: ffi.CData) -> ffi.CData:
method ggml_init_cublas (line 989) | def ggml_init_cublas() -> None:
method ggml_internal_get_type_traits (line 992) | def ggml_internal_get_type_traits(type: int) -> ffi.CData:
method ggml_is_contiguous (line 995) | def ggml_is_contiguous(tensor: ffi.CData) -> bool:
method ggml_is_numa (line 998) | def ggml_is_numa() -> bool:
method ggml_is_permuted (line 1001) | def ggml_is_permuted(tensor: ffi.CData) -> bool:
method ggml_is_quantized (line 1004) | def ggml_is_quantized(type: int) -> bool:
method ggml_is_transposed (line 1007) | def ggml_is_transposed(tensor: ffi.CData) -> bool:
method ggml_log (line 1010) | def ggml_log(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_log_inplace (line 1017) | def ggml_log_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_map_binary_f32 (line 1024) | def ggml_map_binary_f32(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, fu...
method ggml_map_binary_inplace_f32 (line 1034) | def ggml_map_binary_inplace_f32(ctx: ffi.CData, a: ffi.CData, b: ffi.C...
method ggml_map_custom1 (line 1044) | def ggml_map_custom1(ctx: ffi.CData, a: ffi.CData, fun: ffi.CData, n_t...
method ggml_map_custom1_f32 (line 1054) | def ggml_map_custom1_f32(ctx: ffi.CData, a: ffi.CData, fun: ffi.CData)...
method ggml_map_custom1_inplace (line 1063) | def ggml_map_custom1_inplace(ctx: ffi.CData, a: ffi.CData, fun: ffi.CD...
method ggml_map_custom1_inplace_f32 (line 1073) | def ggml_map_custom1_inplace_f32(ctx: ffi.CData, a: ffi.CData, fun: ff...
method ggml_map_custom2 (line 1082) | def ggml_map_custom2(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, fun: ...
method ggml_map_custom2_f32 (line 1093) | def ggml_map_custom2_f32(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, f...
method ggml_map_custom2_inplace (line 1103) | def ggml_map_custom2_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CDat...
method ggml_map_custom2_inplace_f32 (line 1114) | def ggml_map_custom2_inplace_f32(ctx: ffi.CData, a: ffi.CData, b: ffi....
method ggml_map_custom3 (line 1124) | def ggml_map_custom3(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, c: ff...
method ggml_map_custom3_f32 (line 1136) | def ggml_map_custom3_f32(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, c...
method ggml_map_custom3_inplace (line 1147) | def ggml_map_custom3_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CDat...
method ggml_map_custom3_inplace_f32 (line 1159) | def ggml_map_custom3_inplace_f32(ctx: ffi.CData, a: ffi.CData, b: ffi....
method ggml_map_unary_f32 (line 1170) | def ggml_map_unary_f32(ctx: ffi.CData, a: ffi.CData, fun: ffi.CData) -...
method ggml_map_unary_inplace_f32 (line 1179) | def ggml_map_unary_inplace_f32(ctx: ffi.CData, a: ffi.CData, fun: ffi....
method ggml_mean (line 1188) | def ggml_mean(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_metal_add_buffer (line 1197) | def ggml_metal_add_buffer(ctx: ffi.CData, name: ffi.CData, data: ffi.C...
method ggml_metal_free (line 1215) | def ggml_metal_free(ctx: ffi.CData) -> None:
method ggml_metal_get_concur_list (line 1218) | def ggml_metal_get_concur_list(ctx: ffi.CData) -> ffi.CData:
method ggml_metal_get_tensor (line 1225) | def ggml_metal_get_tensor(ctx: ffi.CData, t: ffi.CData) -> None:
method ggml_metal_graph_compute (line 1232) | def ggml_metal_graph_compute(ctx: ffi.CData, gf: ffi.CData) -> None:
method ggml_metal_graph_find_concurrency (line 1240) | def ggml_metal_graph_find_concurrency(ctx: ffi.CData, gf: ffi.CData, c...
method ggml_metal_host_free (line 1248) | def ggml_metal_host_free(data: ffi.CData) -> None:
method ggml_metal_host_malloc (line 1251) | def ggml_metal_host_malloc(n: int) -> ffi.CData:
method ggml_metal_if_optimized (line 1254) | def ggml_metal_if_optimized(ctx: ffi.CData) -> int:
method ggml_metal_init (line 1261) | def ggml_metal_init(n_cb: int) -> ffi.CData:
method ggml_metal_set_n_cb (line 1268) | def ggml_metal_set_n_cb(ctx: ffi.CData, n_cb: int) -> None:
method ggml_metal_set_tensor (line 1275) | def ggml_metal_set_tensor(ctx: ffi.CData, t: ffi.CData) -> None:
method ggml_mpi_backend_free (line 1282) | def ggml_mpi_backend_free() -> None:
method ggml_mpi_backend_init (line 1285) | def ggml_mpi_backend_init() -> None:
method ggml_mpi_eval_init (line 1288) | def ggml_mpi_eval_init(ctx_mpi: ffi.CData, n_tokens: ffi.CData, n_past...
method ggml_mpi_free (line 1297) | def ggml_mpi_free(ctx: ffi.CData) -> None:
method ggml_mpi_graph_compute_post (line 1300) | def ggml_mpi_graph_compute_post(ctx_mpi: ffi.CData, gf: ffi.CData, n_l...
method ggml_mpi_graph_compute_pre (line 1308) | def ggml_mpi_graph_compute_pre(ctx_mpi: ffi.CData, gf: ffi.CData, n_la...
method ggml_mpi_init (line 1316) | def ggml_mpi_init() -> ffi.CData:
method ggml_mpi_rank (line 1319) | def ggml_mpi_rank(ctx: ffi.CData) -> int:
method ggml_mul (line 1322) | def ggml_mul(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CData:
method ggml_mul_inplace (line 1330) | def ggml_mul_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ff...
method ggml_mul_mat (line 1338) | def ggml_mul_mat(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CD...
method ggml_nbytes (line 1350) | def ggml_nbytes(tensor: ffi.CData) -> int:
method ggml_nbytes_pad (line 1353) | def ggml_nbytes_pad(tensor: ffi.CData) -> int:
method ggml_nbytes_split (line 1356) | def ggml_nbytes_split(tensor: ffi.CData, nrows_split: int) -> int:
method ggml_neg (line 1359) | def ggml_neg(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_neg_inplace (line 1366) | def ggml_neg_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_nelements (line 1373) | def ggml_nelements(tensor: ffi.CData) -> int:
method ggml_new_f32 (line 1376) | def ggml_new_f32(ctx: ffi.CData, value: float) -> ffi.CData:
method ggml_new_graph (line 1379) | def ggml_new_graph(ctx: ffi.CData) -> ffi.CData:
method ggml_new_i32 (line 1386) | def ggml_new_i32(ctx: ffi.CData, value: int) -> ffi.CData:
method ggml_new_tensor (line 1389) | def ggml_new_tensor(ctx: ffi.CData, type: int, n_dims: int, ne: ffi.CD...
method ggml_new_tensor_1d (line 1398) | def ggml_new_tensor_1d(ctx: ffi.CData, type: int, ne0: int) -> ffi.CData:
method ggml_new_tensor_2d (line 1406) | def ggml_new_tensor_2d(ctx: ffi.CData, type: int, ne0: int, ne1: int) ...
method ggml_new_tensor_3d (line 1415) | def ggml_new_tensor_3d(ctx: ffi.CData, type: int, ne0: int, ne1: int, ...
method ggml_new_tensor_4d (line 1425) | def ggml_new_tensor_4d(ctx: ffi.CData, type: int, ne0: int, ne1: int, ...
method ggml_norm (line 1436) | def ggml_norm(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_norm_inplace (line 1446) | def ggml_norm_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_nrows (line 1453) | def ggml_nrows(tensor: ffi.CData) -> int:
method ggml_numa_init (line 1456) | def ggml_numa_init() -> None:
method ggml_op_name (line 1459) | def ggml_op_name(op: int) -> ffi.CData:
method ggml_op_symbol (line 1462) | def ggml_op_symbol(op: int) -> ffi.CData:
method ggml_opt (line 1465) | def ggml_opt(ctx: ffi.CData, params: ffi.CData, f: ffi.CData) -> int:
method ggml_opt_default_params (line 1475) | def ggml_opt_default_params(type: int) -> ffi.CData:
method ggml_opt_init (line 1478) | def ggml_opt_init(ctx: ffi.CData, opt: ffi.CData, params: ffi.CData, n...
method ggml_opt_resume (line 1489) | def ggml_opt_resume(ctx: ffi.CData, opt: ffi.CData, f: ffi.CData) -> int:
method ggml_opt_resume_g (line 1499) | def ggml_opt_resume_g(ctx: ffi.CData, opt: ffi.CData, f: ffi.CData, gf...
method ggml_out_prod (line 1511) | def ggml_out_prod(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.C...
method ggml_permute (line 1523) | def ggml_permute(ctx: ffi.CData, a: ffi.CData, axis0: int, axis1: int,...
method ggml_pool_1d (line 1534) | def ggml_pool_1d(ctx: ffi.CData, a: ffi.CData, op: int, k0: int, s0: i...
method ggml_pool_2d (line 1545) | def ggml_pool_2d(ctx: ffi.CData, a: ffi.CData, op: int, k0: int, k1: i...
method ggml_print_object (line 1559) | def ggml_print_object(obj: ffi.CData) -> None:
method ggml_print_objects (line 1562) | def ggml_print_objects(ctx: ffi.CData) -> None:
method ggml_quantize_chunk (line 1565) | def ggml_quantize_chunk(type: int, src: ffi.CData, dst: ffi.CData, sta...
method ggml_quantize_q2_K (line 1568) | def ggml_quantize_q2_K(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_quantize_q3_K (line 1575) | def ggml_quantize_q3_K(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_quantize_q4_0 (line 1578) | def ggml_quantize_q4_0(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_quantize_q4_1 (line 1581) | def ggml_quantize_q4_1(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_quantize_q4_K (line 1584) | def ggml_quantize_q4_K(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_quantize_q5_0 (line 1587) | def ggml_quantize_q5_0(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_quantize_q5_1 (line 1590) | def ggml_quantize_q5_1(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_quantize_q5_K (line 1593) | def ggml_quantize_q5_K(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_quantize_q6_K (line 1596) | def ggml_quantize_q6_K(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_quantize_q8_0 (line 1599) | def ggml_quantize_q8_0(src: ffi.CData, dst: ffi.CData, n: int, k: int,...
method ggml_relu (line 1602) | def ggml_relu(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_relu_inplace (line 1609) | def ggml_relu_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_repeat (line 1616) | def ggml_repeat(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CData:
method ggml_repeat_back (line 1627) | def ggml_repeat_back(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ff...
method ggml_reshape (line 1635) | def ggml_reshape(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CD...
method ggml_reshape_1d (line 1646) | def ggml_reshape_1d(ctx: ffi.CData, a: ffi.CData, ne0: int) -> ffi.CData:
method ggml_reshape_2d (line 1657) | def ggml_reshape_2d(ctx: ffi.CData, a: ffi.CData, ne0: int, ne1: int) ...
method ggml_reshape_3d (line 1666) | def ggml_reshape_3d(ctx: ffi.CData, a: ffi.CData, ne0: int, ne1: int, ...
method ggml_reshape_4d (line 1679) | def ggml_reshape_4d(ctx: ffi.CData, a: ffi.CData, ne0: int, ne1: int, ...
method ggml_rms_norm (line 1690) | def ggml_rms_norm(ctx: ffi.CData, a: ffi.CData, eps: float) -> ffi.CData:
method ggml_rms_norm_back (line 1698) | def ggml_rms_norm_back(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ...
method ggml_rms_norm_inplace (line 1710) | def ggml_rms_norm_inplace(ctx: ffi.CData, a: ffi.CData, eps: float) ->...
method ggml_rope (line 1718) | def ggml_rope(ctx: ffi.CData, a: ffi.CData, n_past: int, n_dims: int, ...
method ggml_rope_back (line 1735) | def ggml_rope_back(ctx: ffi.CData, a: ffi.CData, n_past: int, n_dims: ...
method ggml_rope_custom (line 1749) | def ggml_rope_custom(ctx: ffi.CData, a: ffi.CData, n_past: int, n_dims...
method ggml_rope_custom_inplace (line 1764) | def ggml_rope_custom_inplace(ctx: ffi.CData, a: ffi.CData, n_past: int...
method ggml_rope_inplace (line 1779) | def ggml_rope_inplace(ctx: ffi.CData, a: ffi.CData, n_past: int, n_dim...
method ggml_scale (line 1792) | def ggml_scale(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CData:
method ggml_scale_inplace (line 1800) | def ggml_scale_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ...
method ggml_set (line 1810) | def ggml_set(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, nb1: int, nb2...
method ggml_set_1d (line 1824) | def ggml_set_1d(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, offset: in...
method ggml_set_1d_inplace (line 1833) | def ggml_set_1d_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, of...
method ggml_set_2d (line 1842) | def ggml_set_2d(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, nb1: int, ...
method ggml_set_2d_inplace (line 1854) | def ggml_set_2d_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, nb...
method ggml_set_f32 (line 1866) | def ggml_set_f32(tensor: ffi.CData, value: float) -> ffi.CData:
method ggml_set_f32_1d (line 1869) | def ggml_set_f32_1d(tensor: ffi.CData, i: int, value: float) -> None:
method ggml_set_i32 (line 1872) | def ggml_set_i32(tensor: ffi.CData, value: int) -> ffi.CData:
method ggml_set_i32_1d (line 1875) | def ggml_set_i32_1d(tensor: ffi.CData, i: int, value: int) -> None:
method ggml_set_inplace (line 1878) | def ggml_set_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData, nb1: ...
method ggml_set_name (line 1892) | def ggml_set_name(tensor: ffi.CData, name: ffi.CData) -> ffi.CData:
method ggml_set_no_alloc (line 1895) | def ggml_set_no_alloc(ctx: ffi.CData, no_alloc: bool) -> None:
method ggml_set_param (line 1898) | def ggml_set_param(ctx: ffi.CData, tensor: ffi.CData) -> None:
method ggml_set_scratch (line 1905) | def ggml_set_scratch(ctx: ffi.CData, scratch: ffi.CData) -> int:
method ggml_set_zero (line 1908) | def ggml_set_zero(tensor: ffi.CData) -> ffi.CData:
method ggml_sgn (line 1911) | def ggml_sgn(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_sgn_inplace (line 1918) | def ggml_sgn_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_silu (line 1925) | def ggml_silu(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_silu_back (line 1932) | def ggml_silu_back(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi....
method ggml_silu_inplace (line 1943) | def ggml_silu_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_soft_max (line 1950) | def ggml_soft_max(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_soft_max_back (line 1957) | def ggml_soft_max_back(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ...
method ggml_soft_max_back_inplace (line 1965) | def ggml_soft_max_back_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CD...
method ggml_soft_max_inplace (line 1975) | def ggml_soft_max_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_sqr (line 1984) | def ggml_sqr(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_sqr_inplace (line 1991) | def ggml_sqr_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_sqrt (line 1998) | def ggml_sqrt(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_sqrt_inplace (line 2005) | def ggml_sqrt_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_step (line 2012) | def ggml_step(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_step_inplace (line 2019) | def ggml_step_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_sub (line 2026) | def ggml_sub(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ffi.CData:
method ggml_sub_inplace (line 2034) | def ggml_sub_inplace(ctx: ffi.CData, a: ffi.CData, b: ffi.CData) -> ff...
method ggml_sum (line 2042) | def ggml_sum(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_sum_rows (line 2051) | def ggml_sum_rows(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_tanh (line 2060) | def ggml_tanh(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_tanh_inplace (line 2067) | def ggml_tanh_inplace(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_tensor_overhead (line 2074) | def ggml_tensor_overhead() -> int:
method ggml_time_init (line 2081) | def ggml_time_init() -> None:
method ggml_time_ms (line 2084) | def ggml_time_ms() -> int:
method ggml_time_us (line 2087) | def ggml_time_us() -> int:
method ggml_transpose (line 2090) | def ggml_transpose(ctx: ffi.CData, a: ffi.CData) -> ffi.CData:
method ggml_type_name (line 2099) | def ggml_type_name(type: int) -> ffi.CData:
method ggml_type_size (line 2102) | def ggml_type_size(type: int) -> int:
method ggml_type_sizef (line 2105) | def ggml_type_sizef(type: int) -> float:
method ggml_unary (line 2108) | def ggml_unary(ctx: ffi.CData, a: ffi.CData, op: int) -> ffi.CData:
method ggml_unary_inplace (line 2116) | def ggml_unary_inplace(ctx: ffi.CData, a: ffi.CData, op: int) -> ffi.C...
method ggml_used_mem (line 2124) | def ggml_used_mem(ctx: ffi.CData) -> int:
method ggml_vec_dot_q2_K_q8_K (line 2127) | def ggml_vec_dot_q2_K_q8_K(n: int, s: ffi.CData, vx: ffi.CData, vy: ff...
method ggml_vec_dot_q3_K_q8_K (line 2134) | def ggml_vec_dot_q3_K_q8_K(n: int, s: ffi.CData, vx: ffi.CData, vy: ff...
method ggml_vec_dot_q4_K_q8_K (line 2137) | def ggml_vec_dot_q4_K_q8_K(n: int, s: ffi.CData, vx: ffi.CData, vy: ff...
method ggml_vec_dot_q5_K_q8_K (line 2140) | def ggml_vec_dot_q5_K_q8_K(n: int, s: ffi.CData, vx: ffi.CData, vy: ff...
method ggml_vec_dot_q6_K_q8_K (line 2143) | def ggml_vec_dot_q6_K_q8_K(n: int, s: ffi.CData, vx: ffi.CData, vy: ff...
method ggml_view_1d (line 2146) | def ggml_view_1d(ctx: ffi.CData, a: ffi.CData, ne0: int, offset: int) ...
method ggml_view_2d (line 2157) | def ggml_view_2d(ctx: ffi.CData, a: ffi.CData, ne0: int, ne1: int, nb1...
method ggml_view_3d (line 2168) | def ggml_view_3d(ctx: ffi.CData, a: ffi.CData, ne0: int, ne1: int, ne2...
method ggml_view_4d (line 2181) | def ggml_view_4d(ctx: ffi.CData, a: ffi.CData, ne0: int, ne1: int, ne2...
method ggml_view_tensor (line 2196) | def ggml_view_tensor(ctx: ffi.CData, src: ffi.CData) -> ffi.CData:
method ggml_win_part (line 2199) | def ggml_win_part(ctx: ffi.CData, a: ffi.CData, w: int) -> ffi.CData:
method ggml_win_unpart (line 2214) | def ggml_win_unpart(ctx: ffi.CData, a: ffi.CData, w0: int, h0: int, w:...
method gguf_add_tensor (line 2227) | def gguf_add_tensor(ctx: ffi.CData, tensor: ffi.CData) -> None:
method gguf_find_key (line 2234) | def gguf_find_key(ctx: ffi.CData, key: ffi.CData) -> int:
method gguf_find_tensor (line 2237) | def gguf_find_tensor(ctx: ffi.CData, name: ffi.CData) -> int:
method gguf_free (line 2240) | def gguf_free(ctx: ffi.CData) -> None:
method gguf_get_alignment (line 2243) | def gguf_get_alignment(ctx: ffi.CData) -> int:
method gguf_get_arr_data (line 2246) | def gguf_get_arr_data(ctx: ffi.CData, i: int) -> ffi.CData:
method gguf_get_arr_n (line 2249) | def gguf_get_arr_n(ctx: ffi.CData, i: int) -> int:
method gguf_get_arr_str (line 2252) | def gguf_get_arr_str(ctx: ffi.CData, key_id: int, i: int) -> ffi.CData:
method gguf_get_arr_type (line 2255) | def gguf_get_arr_type(ctx: ffi.CData, i: int) -> int:
method gguf_get_data (line 2258) | def gguf_get_data(ctx: ffi.CData) -> ffi.CData:
method gguf_get_data_offset (line 2261) | def gguf_get_data_offset(ctx: ffi.CData) -> int:
method gguf_get_key (line 2264) | def gguf_get_key(ctx: ffi.CData, i: int) -> ffi.CData:
method gguf_get_kv_type (line 2267) | def gguf_get_kv_type(ctx: ffi.CData, i: int) -> int:
method gguf_get_meta_data (line 2270) | def gguf_get_meta_data(ctx: ffi.CData, data: ffi.CData) -> None:
method gguf_get_meta_size (line 2273) | def gguf_get_meta_size(ctx: ffi.CData) -> int:
method gguf_get_n_kv (line 2280) | def gguf_get_n_kv(ctx: ffi.CData) -> int:
method gguf_get_n_tensors (line 2283) | def gguf_get_n_tensors(ctx: ffi.CData) -> int:
method gguf_get_tensor_name (line 2286) | def gguf_get_tensor_name(ctx: ffi.CData, i: int) -> ffi.CData:
method gguf_get_tensor_offset (line 2289) | def gguf_get_tensor_offset(ctx: ffi.CData, i: int) -> int:
method gguf_get_val_bool (line 2292) | def gguf_get_val_bool(ctx: ffi.CData, i: int) -> bool:
method gguf_get_val_f32 (line 2295) | def gguf_get_val_f32(ctx: ffi.CData, i: int) -> float:
method gguf_get_val_i16 (line 2298) | def gguf_get_val_i16(ctx: ffi.CData, i: int) -> int:
method gguf_get_val_i32 (line 2301) | def gguf_get_val_i32(ctx: ffi.CData, i: int) -> int:
method gguf_get_val_i8 (line 2304) | def gguf_get_val_i8(ctx: ffi.CData, i: int) -> int:
method gguf_get_val_str (line 2307) | def gguf_get_val_str(ctx: ffi.CData, i: int) -> ffi.CData:
method gguf_get_val_u16 (line 2310) | def gguf_get_val_u16(ctx: ffi.CData, i: int) -> int:
method gguf_get_val_u32 (line 2313) | def gguf_get_val_u32(ctx: ffi.CData, i: int) -> int:
method gguf_get_val_u8 (line 2316) | def gguf_get_val_u8(ctx: ffi.CData, i: int) -> int:
method gguf_get_version (line 2323) | def gguf_get_version(ctx: ffi.CData) -> int:
method gguf_init_empty (line 2326) | def gguf_init_empty() -> ffi.CData:
method gguf_init_from_file (line 2329) | def gguf_init_from_file(fname: ffi.CData, params: ffi.CData) -> ffi.CD...
method gguf_set_arr_data (line 2332) | def gguf_set_arr_data(ctx: ffi.CData, key: ffi.CData, type: int, data:...
method gguf_set_arr_str (line 2335) | def gguf_set_arr_str(ctx: ffi.CData, key: ffi.CData, data: ffi.CData, ...
method gguf_set_kv (line 2338) | def gguf_set_kv(ctx: ffi.CData, src: ffi.CData) -> None:
method gguf_set_tensor_data (line 2345) | def gguf_set_tensor_data(ctx: ffi.CData, name: ffi.CData, data: ffi.CD...
method gguf_set_tensor_type (line 2348) | def gguf_set_tensor_type(ctx: ffi.CData, name: ffi.CData, type: int) -...
method gguf_set_val_bool (line 2351) | def gguf_set_val_bool(ctx: ffi.CData, key: ffi.CData, val: bool) -> None:
method gguf_set_val_f32 (line 2354) | def gguf_set_val_f32(ctx: ffi.CData, key: ffi.CData, val: float) -> None:
method gguf_set_val_i16 (line 2357) | def gguf_set_val_i16(ctx: ffi.CData, key: ffi.CData, val: int) -> None:
method gguf_set_val_i32 (line 2360) | def gguf_set_val_i32(ctx: ffi.CData, key: ffi.CData, val: int) -> None:
method gguf_set_val_i8 (line 2363) | def gguf_set_val_i8(ctx: ffi.CData, key: ffi.CData, val: int) -> None:
method gguf_set_val_str (line 2366) | def gguf_set_val_str(ctx: ffi.CData, key: ffi.CData, val: ffi.CData) -...
method gguf_set_val_u16 (line 2369) | def gguf_set_val_u16(ctx: ffi.CData, key: ffi.CData, val: int) -> None:
method gguf_set_val_u32 (line 2372) | def gguf_set_val_u32(ctx: ffi.CData, key: ffi.CData, val: int) -> None:
method gguf_set_val_u8 (line 2375) | def gguf_set_val_u8(ctx: ffi.CData, key: ffi.CData, val: int) -> None:
method gguf_type_name (line 2382) | def gguf_type_name(type: int) -> ffi.CData:
method gguf_write_to_file (line 2385) | def gguf_write_to_file(ctx: ffi.CData, fname: ffi.CData, only_meta: bo...
method quantize_row_q2_K (line 2392) | def quantize_row_q2_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method quantize_row_q2_K_reference (line 2395) | def quantize_row_q2_K_reference(x: ffi.CData, y: ffi.CData, k: int) ->...
method quantize_row_q3_K (line 2402) | def quantize_row_q3_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method quantize_row_q3_K_reference (line 2405) | def quantize_row_q3_K_reference(x: ffi.CData, y: ffi.CData, k: int) ->...
method quantize_row_q4_K (line 2408) | def quantize_row_q4_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method quantize_row_q4_K_reference (line 2411) | def quantize_row_q4_K_reference(x: ffi.CData, y: ffi.CData, k: int) ->...
method quantize_row_q5_K (line 2414) | def quantize_row_q5_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method quantize_row_q5_K_reference (line 2417) | def quantize_row_q5_K_reference(x: ffi.CData, y: ffi.CData, k: int) ->...
method quantize_row_q6_K (line 2420) | def quantize_row_q6_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method quantize_row_q6_K_reference (line 2423) | def quantize_row_q6_K_reference(x: ffi.CData, y: ffi.CData, k: int) ->...
method quantize_row_q8_K (line 2426) | def quantize_row_q8_K(x: ffi.CData, y: ffi.CData, k: int) -> None:
method quantize_row_q8_K_reference (line 2429) | def quantize_row_q8_K_reference(x: ffi.CData, y: ffi.CData, k: int) ->...
FILE: ggml/examples/python/ggml/ffi/__init__.pyi
class CData (line 3) | class CData:
class CType (line 6) | class CType:
FILE: ggml/examples/python/ggml/utils.py
function init (line 8) | def init(mem_size: int, mem_buffer: ffi.CData = ffi.NULL, no_alloc: bool...
function copy (line 20) | def copy(from_tensor: TensorLike, to_tensor: TensorLike, allow_requantiz...
function numpy (line 53) | def numpy(tensor: ffi.CData, allow_copy: Union[bool, np.ndarray] = False...
function __type_name (line 96) | def __type_name(type: int) -> str:
function __type_to_dtype (line 117) | def __type_to_dtype(type: int) -> Optional[np.dtype]: return __type_to_d...
function __dtype_to_type (line 118) | def __dtype_to_type(dtype: np.dtype):
function __describe (line 126) | def __describe(tensor: ffi.CType): return f'Tensor[{__type_name(__get_ty...
function __get_type (line 127) | def __get_type(tensor: TensorLike): return __dtype_to_type(tensor.dtype)...
function __get_shape (line 128) | def __get_shape(x: TensorLike): return x.shape if isinstance(x, np.ndarr...
function __get_strides (line 129) | def __get_strides(x: TensorLike): return x.strides if isinstance(x, np.n...
function __get_data (line 130) | def __get_data(x: TensorLike) -> ffi.CData: return ffi.from_buffer(x) if...
function __get_nbytes (line 131) | def __get_nbytes(tensor: TensorLike): return tensor.nbytes if isinstance...
function __get_nelements (line 132) | def __get_nelements(tensor: TensorLike): return tensor.size if isinstanc...
function __is_contiguous (line 133) | def __is_contiguous(tensor: TensorLike): return tensor.flags['C_CONTIGUO...
function __get_floats (line 135) | def __get_floats(tensor: TensorLike) -> ffi.CData:
function __set_floats (line 152) | def __set_floats(tensor: TensorLike, f32_data: ffi.CData) -> None:
function __expect_same_layout (line 167) | def __expect_same_layout(name1: str, tensor1: TensorLike, name2: str, te...
function __check_shape_consistent_with_type (line 172) | def __check_shape_consistent_with_type(tensor: TensorLike):
FILE: ggml/examples/python/stubs.py
function format_type (line 24) | def format_type(t: TypeDecl):
class PythonStubFuncDeclVisitor (line 36) | class PythonStubFuncDeclVisitor(c_ast.NodeVisitor):
method __init__ (line 37) | def __init__(self):
method get_source_snippet_lines (line 41) | def get_source_snippet_lines(self, coord: pycparser.plyparser.Coord) -...
method visit_Enum (line 54) | def visit_Enum(self, node: Enum):
method visit_Typedef (line 59) | def visit_Typedef(self, node: Typedef):
method visit_FuncDecl (line 62) | def visit_FuncDecl(self, node: FuncDecl):
function generate_stubs (line 111) | def generate_stubs(header: str):
FILE: ggml/examples/python/test_tensor.py
function ctx (line 10) | def ctx():
class TestNumPy (line 15) | class TestNumPy:
method test_set_get_single_i32 (line 19) | def test_set_get_single_i32(self, ctx):
method test_set_get_single_f32 (line 24) | def test_set_get_single_f32(self, ctx):
method _test_copy_np_to_ggml (line 31) | def _test_copy_np_to_ggml(self, a: np.ndarray, t: ffi.CData):
method test_copy_np_to_ggml_1d_i32 (line 38) | def test_copy_np_to_ggml_1d_i32(self, ctx):
method test_copy_np_to_ggml_2d_i32 (line 43) | def test_copy_np_to_ggml_2d_i32(self, ctx):
method test_copy_np_to_ggml_3d_i32 (line 48) | def test_copy_np_to_ggml_3d_i32(self, ctx):
method test_copy_np_to_ggml_4d_i32 (line 53) | def test_copy_np_to_ggml_4d_i32(self, ctx):
method test_copy_np_to_ggml_4d_n_i32 (line 58) | def test_copy_np_to_ggml_4d_n_i32(self, ctx):
method test_copy_np_to_ggml_1d_f32 (line 68) | def test_copy_np_to_ggml_1d_f32(self, ctx):
method test_copy_np_to_ggml_2d_f32 (line 73) | def test_copy_np_to_ggml_2d_f32(self, ctx):
method test_copy_np_to_ggml_3d_f32 (line 78) | def test_copy_np_to_ggml_3d_f32(self, ctx):
method test_copy_np_to_ggml_4d_f32 (line 83) | def test_copy_np_to_ggml_4d_f32(self, ctx):
method test_copy_np_to_ggml_4d_n_f32 (line 88) | def test_copy_np_to_ggml_4d_n_f32(self, ctx):
method test_copy_np_to_ggml_1d_f16 (line 98) | def test_copy_np_to_ggml_1d_f16(self, ctx):
method test_copy_np_to_ggml_2d_f16 (line 103) | def test_copy_np_to_ggml_2d_f16(self, ctx):
method test_copy_np_to_ggml_3d_f16 (line 108) | def test_copy_np_to_ggml_3d_f16(self, ctx):
method test_copy_np_to_ggml_4d_f16 (line 113) | def test_copy_np_to_ggml_4d_f16(self, ctx):
method test_copy_np_to_ggml_4d_n_f16 (line 118) | def test_copy_np_to_ggml_4d_n_f16(self, ctx):
method test_copy_mismatching_shapes_1d (line 128) | def test_copy_mismatching_shapes_1d(self, ctx):
method test_copy_mismatching_shapes_2d (line 137) | def test_copy_mismatching_shapes_2d(self, ctx):
method test_copy_mismatching_shapes_3d (line 146) | def test_copy_mismatching_shapes_3d(self, ctx):
method test_copy_mismatching_shapes_4d (line 155) | def test_copy_mismatching_shapes_4d(self, ctx):
method test_copy_f16_to_f32 (line 164) | def test_copy_f16_to_f32(self, ctx):
method test_copy_f32_to_f16 (line 170) | def test_copy_f32_to_f16(self, ctx):
method test_copy_f16_to_Q5_K (line 176) | def test_copy_f16_to_Q5_K(self, ctx):
method test_copy_Q5_K_to_f16 (line 183) | def test_copy_Q5_K_to_f16(self, ctx):
method test_copy_i16_f32_mismatching_types (line 191) | def test_copy_i16_f32_mismatching_types(self, ctx):
class TestTensorCopy (line 197) | class TestTensorCopy:
method test_copy_self (line 199) | def test_copy_self(self, ctx):
method test_copy_1d (line 204) | def test_copy_1d(self, ctx):
class TestGraph (line 213) | class TestGraph:
method test_add (line 215) | def test_add(self, ctx):
class TestQuantization (line 234) | class TestQuantization:
method test_quantized_add (line 236) | def test_quantized_add(self, ctx):
FILE: ggml/examples/unity/fairseq2.cpp
function ggml_tensor (line 16) | ggml_tensor* ggml_detach(ggml_tensor* a) {
function printf_mem_usage (line 30) | void printf_mem_usage(ggml_context* ctx, std::string name) {
function fairseq2_model (line 50) | fairseq2_model* fairseq2_model_alloc() {
function fairseq2_kv_cache_alloc (line 57) | void fairseq2_kv_cache_alloc(fairseq2_model& model, ggml_context* kv_cac...
function fairseq2_kv_cache_reset (line 81) | void fairseq2_kv_cache_reset(const fairseq2_model& model) {
function has_kv_cache (line 87) | bool has_kv_cache(const fairseq2_model& model) {
function ggml_tensor (line 92) | inline ggml_tensor* ggml_squeeze(ggml_context* ctx, ggml_tensor* x, int ...
function ggml_tensor (line 100) | inline ggml_tensor* ggml_unsqueeze(ggml_context* ctx, ggml_tensor* x, in...
function append_to_prev_kv (line 108) | void append_to_prev_kv(const fairseq2_model& model, const std::string& p...
function ggml_tensor (line 155) | ggml_tensor* ggml_get_rows2(ggml_context* ctx, ggml_tensor* a, ggml_tens...
function _reorder_kv_cache (line 170) | void _reorder_kv_cache(ggml_context* ctx, ggml_cgraph* gf, KeyValueTenso...
function reorder_kv_cache (line 190) | void reorder_kv_cache(const fairseq2_model& model, ggml_context* ctx, gg...
function model_layer_config_d (line 201) | inline double model_layer_config_d(const fairseq2_model& model, std::str...
function fairseq2_model_layer_config_double (line 207) | double fairseq2_model_layer_config_double(const fairseq2_model& model, c...
function fairseq2_model_layer_config_int (line 211) | std::int64_t fairseq2_model_layer_config_int(const fairseq2_model& model...
function fairseq2_model_free (line 216) | void fairseq2_model_free(fairseq2_model* model) {
function fairseq2_model_set_inference_ctx (line 221) | void fairseq2_model_set_inference_ctx(fairseq2_model* model, ggml_contex...
function std_string_free (line 229) | void std_string_free(std::string* str) {
function has_layer (line 233) | bool has_layer(fairseq2_model& model, const std::string& name) {
function ggml_tensor (line 237) | ggml_tensor* mul_mat(ggml_context* ctx, ggml_tensor* a, ggml_tensor* b) {
function ggml_tensor (line 251) | ggml_tensor* Linear_forward(
function ggml_tensor (line 266) | ggml_tensor* LayerNorm_forward(
function ggml_tensor (line 288) | ggml_tensor* StandardFeedForwardNetwork_forward(
function ggml_tensor (line 305) | ggml_tensor* SiluFeedForwardNetwork_forward(
function ggml_tensor (line 321) | ggml_tensor* ggml_flatten_1d(ggml_context* ctx, ggml_tensor* x, int dim) {
function ggml_tensor (line 348) | ggml_tensor* ggml_unflatten_1d(ggml_context* ctx, ggml_tensor* x, int di...
function ggml_tensor (line 375) | ggml_tensor* _reshape_num_head(ggml_context* ctx, ggml_tensor* x, int he...
function ggml_tensor (line 385) | ggml_tensor* _reshape_num_head_values(ggml_context* ctx, ggml_tensor* v,...
function ggml_tensor (line 399) | ggml_tensor* MultiheadAttention_forward(
function ggml_tensor (line 502) | ggml_tensor* StandardTransformerEncoderLayer_forward(
function ggml_tensor (line 554) | ggml_tensor* WaveformToFbank_forward(
function ggml_tensor (line 605) | ggml_tensor* RelativePositionMHA_forward(
function ggml_tensor (line 698) | ggml_tensor* ConvModule_forward(
function ggml_tensor (line 733) | ggml_tensor* StandardConformerEncoderLayer_forward(
function ggml_tensor (line 758) | ggml_tensor* StandardConformerEncoder_forward(
function ggml_tensor (line 805) | ggml_tensor* StandardConformerEncoderAdaptorLayer_forward(
function ggml_tensor (line 846) | ggml_tensor* ggml_slice(
function ggml_tensor (line 873) | ggml_tensor* ggml_select(
function ggml_tensor (line 900) | ggml_tensor* PositionalEmbedding_forward(
function ggml_tensor (line 917) | ggml_tensor* TransformerEmbeddingFrontend_forward(
function ggml_tensor (line 955) | ggml_tensor* StandardTransformerEncoder_forward(
function ggml_tensor (line 979) | ggml_tensor* StandardTransformerDecoderLayer_forward(
function ggml_tensor (line 1062) | ggml_tensor* causal_attention_mask(ggml_context* ctx, ggml_tensor* seqs) {
function ggml_tensor (line 1069) | ggml_tensor* StandardTransformerDecoder_forward(
function _determine_max_seq_len (line 1097) | int _determine_max_seq_len(const SequenceGeneratorJob& job, int source_s...
function _fan_out_encoder_output (line 1128) | void _fan_out_encoder_output(
function ggml_tensor (line 1149) | ggml_tensor* ggml_log_softmax(ggml_context* ctx, ggml_tensor* logits) {
function ggml_tensor (line 1154) | ggml_tensor* ggml_expand_2d(ggml_context* ctx, ggml_tensor* x, int64_t n...
function _bootstrap_seqs_and_scores (line 1162) | void _bootstrap_seqs_and_scores(
function topk (line 1249) | int topk(
function _tweak_lprobs (line 1269) | void _tweak_lprobs(const SequenceGeneratorJob& job, ggml_tensor* lprobs,...
function _finalize_hypothesis (line 1310) | void _finalize_hypothesis(
function ggml_context (line 1355) | ggml_context* ctx_from_buffer(std::vector<uint8_t>& buffer) {
function ggml_allocr (line 1363) | ggml_allocr* new_arena_allocr(std::vector<uint8_t>& buffer) {
function Hypothesis (line 1371) | Hypothesis* generate_sequence(
function Hypothesis (line 1610) | Hypothesis* _testing_return_hypothesis_ptr(ggml_context* ctx) {
type llm_symbol (line 1628) | struct llm_symbol {
function utf8_len (line 1639) | static std::size_t utf8_len(char src) {
type llm_bigram_spm (line 1645) | struct llm_bigram_spm {
type comparator (line 1646) | struct comparator {
type llm_tokenizer_spm (line 1660) | struct llm_tokenizer_spm {
method llm_tokenizer_spm (line 1661) | llm_tokenizer_spm(const llama_vocab & vocab): vocab(vocab) {}
method tokenize (line 1663) | void tokenize(const std::string& input_text, ggml_tensor* output) {
method try_add_bigram (line 1746) | void try_add_bigram(int left, int right) {
function fairseq2_spm_tokenize (line 1780) | void fairseq2_spm_tokenize(fairseq2_model* model, const char* text, ggml...
function fairseq2_spm_detokenize (line 1786) | std::size_t fairseq2_spm_detokenize(fairseq2_model* model, ggml_tensor* ...
function fairseq2_spm_detokenize (line 1811) | std::pair<std::vector<std::string>, std::vector<float>> fairseq2_spm_det...
FILE: ggml/examples/unity/fairseq2.h
type llama_token (line 17) | typedef int32_t llama_token;
type llama_token_type (line 19) | enum llama_token_type {
type token_data (line 35) | struct token_data {
type KeyValueTensor (line 79) | struct KeyValueTensor {
type fairseq2_model (line 86) | struct fairseq2_model {
type ggml_context (line 135) | struct ggml_context
type ggml_tensor (line 136) | struct ggml_tensor
type TransformerNormOrder (line 254) | enum TransformerNormOrder {
type SequenceGeneratorOptions (line 263) | struct SequenceGeneratorOptions {
type SequenceGeneratorJob (line 296) | struct SequenceGeneratorJob {
type Hypothesis (line 307) | struct Hypothesis {
FILE: ggml/examples/unity/lib/unity_lib.cpp
type ggml_cgraph (line 6) | struct ggml_cgraph
type ggml_tensor (line 8) | struct ggml_tensor
type ggml_cgraph (line 23) | struct ggml_cgraph
type ggml_tensor (line 25) | struct ggml_tensor
function Hypothesis (line 34) | Hypothesis* unity_decode(
function fairseq2_model (line 60) | fairseq2_model unity_init_model(const char* model_path) {
function Result (line 67) | Result unity_eval_speech(fairseq2_model& model, std::vector<float>& data...
function Result (line 134) | Result unity_eval_text(fairseq2_model& model, const std::string& text, S...
FILE: ggml/examples/unity/lib/unity_lib.h
type Result (line 20) | struct Result {
type ggml_cgraph (line 27) | struct ggml_cgraph
type ggml_tensor (line 29) | struct ggml_tensor
type ggml_cgraph (line 32) | struct ggml_cgraph
type ggml_tensor (line 34) | struct ggml_tensor
FILE: ggml/examples/unity/model_loader.cpp
function open_ggml_file (line 6) | std::ifstream open_ggml_file(const char* fname) {
function register_prefix (line 24) | void register_prefix(fairseq2_model &model, const std::string& name) {
type ggml_init_params (line 49) | struct ggml_init_params
function assert_endianness (line 87) | void assert_endianness() {
function ggml_tensor (line 168) | ggml_tensor* load_tensor_value(std::ifstream &fin, ggml_context* ctx, bo...
function load_fairseq2_ggml_file (line 217) | int load_fairseq2_ggml_file(fairseq2_model& model, const char* fname) {
FILE: ggml/examples/unity/model_loader.h
function class (line 19) | class model_loader {
FILE: ggml/examples/unity/unity.cpp
type unity_params (line 14) | struct unity_params {
function unity_print_usage (line 34) | void unity_print_usage(int /*argc*/, char ** argv, const unity_params & ...
function get_next_arg (line 50) | std::string get_next_arg(int& i, int argc, char** argv, const std::strin...
function unity_params_parse (line 61) | bool unity_params_parse(int argc, char ** argv, unity_params & params) {
function main (line 85) | int main(int argc, char ** argv) {
FILE: ggml/ggml.py
function numpy_dtype (line 26) | def numpy_dtype(ggml_type: ctypes.c_int) -> np.dtype:
function from_numpy_dtype (line 42) | def from_numpy_dtype(dtype: np.dtype) -> ctypes.c_int:
function shape (line 64) | def shape(tensor: Union[ggml_tensor, ggml_tensor_p]) -> Tuple[int, ...]:
function nb (line 71) | def nb(tensor: Union[ggml_tensor, ggml_tensor_p]) -> Tuple[int, ...]:
function ne (line 77) | def ne(tensor: Union[ggml_tensor, ggml_tensor_p]) -> Tuple[int, ...]:
function strides (line 83) | def strides(tensor: Union[ggml_tensor, ggml_tensor_p]) -> Tuple[int, ...]:
function to_numpy (line 92) | def to_numpy(tensor_p: ggml_tensor_p) -> np.ndarray:
function _almost_contiguous (line 107) | def _almost_contiguous(tensor_p: ggml_tensor_p) -> bool:
function _strided_to_numpy (line 125) | def _strided_to_numpy(tensor_p: ggml_tensor_p) -> np.ndarray:
function _void_p_to_np_array (line 168) | def _void_p_to_np_array(
function from_file (line 185) | def from_file(
function _shape_to_ne (line 192) | def _shape_to_ne(shape: Tuple[int, ...]) -> Tuple[int, int, int, int]:
function _compute_nbytes (line 203) | def _compute_nbytes(
function from_numpy (line 213) | def from_numpy(
function ggml_can_mul_mat (line 238) | def ggml_can_mul_mat(t0: ggml_tensor_p, t1: ggml_tensor_p) -> bool:
function nodes (line 248) | def nodes(gf: ggml_cgraph) -> Dict[bytes, ggml_tensor_p]:
function leafs (line 256) | def leafs(gf: ggml_cgraph) -> Dict[bytes, ggml_tensor_p]:
class NativeObj (line 264) | class NativeObj:
method _init_c_func (line 270) | def _init_c_func(cls, kind: str) -> Tuple[AllocFn, FreeFn]:
method __init__ (line 285) | def __init__(self, kind: str, ptr: ctypes.c_void_p = NULLPTR):
method free (line 291) | def free(self) -> None:
method __enter__ (line 297) | def __enter__(self) -> ctypes.c_void_p:
method __exit__ (line 300) | def __exit__(self, *args: Any) -> None:
method __del__ (line 303) | def __del__(self) -> None:
method __repr__ (line 306) | def __repr__(self) -> str:
function MeasureArena (line 310) | def MeasureArena() -> NativeObj:
function FixedSizeArena (line 314) | def FixedSizeArena(mem_size: int) -> NativeObj:
function Fairseq2Model (line 328) | def Fairseq2Model() -> NativeObj:
function CppStr (line 339) | def CppStr(content: str) -> NativeObj:
function load_fairseq2_ggml_file (line 349) | def load_fairseq2_ggml_file(model_file: Path) -> NativeObj:
function forward (line 384) | def forward(
function build_and_compute (line 401) | def build_and_compute(
function causal_attention_mask (line 420) | def causal_attention_mask(
function ggml_slice (line 427) | def ggml_slice(
function ggml_flatten_1d (line 438) | def ggml_flatten_1d(
function ggml_unflatten_1d (line 445) | def ggml_unflatten_1d(
class SequenceGeneratorOptions (line 453) | class SequenceGeneratorOptions:
class SequenceGeneratorJob (line 466) | class SequenceGeneratorJob:
class Hypothesis (line 477) | class Hypothesis:
function generate_sequence (line 489) | def generate_sequence(
function _testing_return_hypothesis_ptr (line 500) | def _testing_return_hypothesis_ptr(ctx: ggml_context_p) -> Ptr[Hypothesis]:
function fairseq2_model_layer_config_int (line 505) | def fairseq2_model_layer_config_int(model: ctypes.c_void_p, name: bytes)...
function _fairseq2_kv_cache_alloc (line 510) | def _fairseq2_kv_cache_alloc(
function _fairseq2_kv_cache_reset (line 517) | def _fairseq2_kv_cache_reset(model: ctypes.c_void_p) -> None:
function fairseq2_kv_cache_alloc (line 522) | def fairseq2_kv_cache_alloc(
function fairseq2_spm_tokenize (line 543) | def fairseq2_spm_tokenize(
function fairseq2_spm_detokenize (line 550) | def fairseq2_spm_detokenize(
FILE: ggml/ggml_convert.py
class ModelType (line 34) | class ModelType(str, Enum):
class NllbLikeTokenizer (line 57) | class NllbLikeTokenizer(SentencePieceTokenizerBase):
method __init__ (line 64) | def __init__(
method create_encoder (line 87) | def create_encoder(
class NllbLikeTokenizerLoader (line 157) | class NllbLikeTokenizerLoader(TokenizerLoaderBase[NllbLikeTokenizer]):
method _load (line 161) | def _load(self, pathname: Path, card: AssetCard) -> NllbLikeTokenizer:
function convert_state_dict (line 169) | def convert_state_dict(
function convert_unity_model (line 200) | def convert_unity_model(
function convert_nllb_model (line 236) | def convert_nllb_model(
function convert_bitext_model (line 255) | def convert_bitext_model(
function convert_model (line 272) | def convert_model(
function find_children (line 353) | def find_children(model: torch.nn.Module, t: type, layer_filter: str = "...
function fixup_model (line 370) | def fixup_model(model: torch.nn.Module, state_dict: Dict[str, torch.Tens...
function read_vocab (line 405) | def read_vocab(tokenizer: Any) -> List[Tuple[str, float]]:
function write_ggml_file (line 414) | def write_ggml_file(
function write_ggml_header (line 432) | def write_ggml_header(out: BufferedWriter) -> None:
function write_hparams (line 437) | def write_hparams(out: BufferedWriter, hparams: Dict[str, Any]) -> None:
function write_vocab (line 462) | def write_vocab(out: BufferedWriter, vocab: List[Tuple[str, float]]) -> ...
function write_state_dict (line 483) | def write_state_dict(
function write_string (line 533) | def write_string(out: BufferedWriter, value: str) -> None:
function write_tensor (line 546) | def write_tensor(out: BufferedWriter, value: torch.Tensor) -> None:
function torch_to_ggml_type (line 578) | def torch_to_ggml_type(dtype: torch.dtype) -> int:
function flatten_config (line 591) | def flatten_config(
function read_layer_config (line 630) | def read_layer_config(
function to_ctype (line 669) | def to_ctype(value: Any) -> Tuple[str, Any]:
function get_cpp_type (line 700) | def get_cpp_type(value: Any) -> str:
function generate_hparams_struct (line 731) | def generate_hparams_struct(
FILE: ggml/include/ggml/ggml-alloc.h
type ggml_backend (line 9) | struct ggml_backend
type ggml_backend_buffer (line 10) | struct ggml_backend_buffer
type ggml_backend_buffer_type (line 11) | struct ggml_backend_buffer_type
type ggml_allocr (line 17) | struct ggml_allocr
type ggml_backend_buffer (line 24) | struct ggml_backend_buffer
type ggml_backend (line 25) | struct ggml_backend
type ggml_backend (line 26) | struct ggml_backend
type ggml_tensor (line 37) | struct ggml_tensor
type ggml_cgraph (line 40) | struct ggml_cgraph
type ggml_tallocr (line 51) | struct ggml_tallocr
type ggml_backend_buffer (line 55) | struct ggml_backend_buffer
type ggml_backend (line 56) | struct ggml_backend
type ggml_backend (line 57) | struct ggml_backend
type ggml_tensor (line 64) | struct ggml_tensor
type ggml_gallocr (line 69) | struct ggml_gallocr
type ggml_cgraph (line 75) | struct ggml_cgraph
type ggml_cgraph (line 80) | struct ggml_cgraph
type ggml_hash_set (line 81) | struct ggml_hash_set
type ggml_context (line 87) | struct ggml_context
type ggml_backend_buffer_type (line 87) | struct ggml_backend_buffer_type
type ggml_context (line 88) | struct ggml_context
type ggml_backend (line 88) | struct ggml_backend
FILE: ggml/include/ggml/ggml-backend.h
type ggml_backend_buffer_type (line 10) | struct ggml_backend_buffer_type
type ggml_backend_buffer (line 11) | struct ggml_backend_buffer
type ggml_backend (line 12) | struct ggml_backend
type ggml_tensor (line 22) | struct ggml_tensor
type ggml_tensor (line 29) | struct ggml_tensor
type ggml_tensor (line 31) | struct ggml_tensor
type ggml_tensor (line 46) | struct ggml_tensor
type ggml_tensor (line 47) | struct ggml_tensor
type ggml_tensor (line 49) | struct ggml_tensor
type ggml_tensor (line 50) | struct ggml_tensor
type ggml_cgraph (line 54) | struct ggml_cgraph
type ggml_cgraph (line 58) | struct ggml_cgraph
type ggml_tensor (line 59) | struct ggml_tensor
type ggml_tensor (line 62) | struct ggml_tensor
type ggml_tensor (line 62) | struct ggml_tensor
type ggml_tensor (line 63) | struct ggml_tensor
type ggml_tensor (line 63) | struct ggml_tensor
type ggml_backend_sched (line 132) | struct ggml_backend_sched
type ggml_backend_sched (line 133) | struct ggml_backend_sched
type ggml_cgraph (line 141) | struct ggml_cgraph
type ggml_tensor (line 146) | struct ggml_tensor
type ggml_cgraph (line 151) | struct ggml_cgraph
type ggml_backend_graph_copy (line 158) | struct ggml_backend_graph_copy {
type ggml_cgraph (line 166) | struct ggml_cgraph
type ggml_backend_graph_copy (line 167) | struct ggml_backend_graph_copy
type ggml_tensor (line 169) | struct ggml_tensor
type ggml_tensor (line 169) | struct ggml_tensor
type ggml_cgraph (line 172) | struct ggml_cgraph
type ggml_tensor (line 175) | struct ggml_tensor
type ggml_tensor (line 176) | struct ggml_tensor
FILE: ggml/include/ggml/ggml.h
type half (line 305) | typedef half ggml_fp16_t;
type __fp16 (line 307) | typedef __fp16 ggml_fp16_t;
type ggml_fp16_t (line 309) | typedef uint16_t ggml_fp16_t;
type ggml_object (line 319) | struct ggml_object
type ggml_context (line 320) | struct ggml_context
type ggml_type (line 322) | enum ggml_type {
type ggml_backend_type (line 346) | enum ggml_backend_type {
type ggml_ftype (line 353) | enum ggml_ftype {
type ggml_op (line 371) | enum ggml_op {
type ggml_unary_op (line 466) | enum ggml_unary_op {
type ggml_object_type (line 482) | enum ggml_object_type {
type ggml_log_level (line 488) | enum ggml_log_level {
type ggml_object (line 495) | struct ggml_object {
type ggml_object (line 506) | struct ggml_object
type ggml_tensor (line 509) | struct ggml_tensor {
type ggml_tensor (line 550) | struct ggml_tensor
type ggml_cplan (line 554) | struct ggml_cplan {
type ggml_cgraph_eval_order (line 565) | enum ggml_cgraph_eval_order {
type ggml_hash_set (line 571) | struct ggml_hash_set {
type ggml_cgraph (line 577) | struct ggml_cgraph {
type ggml_scratch (line 597) | struct ggml_scratch {
type ggml_init_params (line 603) | struct ggml_init_params {
type ggml_task_type (line 615) | enum ggml_task_type {
type ggml_compute_params (line 621) | struct ggml_compute_params {
type ggml_object (line 645) | struct ggml_object
type ggml_context (line 646) | struct ggml_context
type ggml_tensor (line 648) | struct ggml_tensor
type ggml_tensor (line 649) | struct ggml_tensor
type ggml_tensor (line 650) | struct ggml_tensor
type ggml_tensor (line 651) | struct ggml_tensor
type ggml_tensor (line 652) | struct ggml_tensor
type ggml_type (line 654) | enum ggml_type
type ggml_type (line 655) | enum ggml_type
type ggml_type (line 656) | enum ggml_type
type ggml_type (line 658) | enum ggml_type
type ggml_op (line 659) | enum ggml_op
type ggml_op (line 660) | enum ggml_op
type ggml_unary_op (line 662) | enum ggml_unary_op
type ggml_tensor (line 663) | struct ggml_tensor
type ggml_tensor (line 665) | struct ggml_tensor
type ggml_type (line 667) | enum ggml_type
type ggml_ftype (line 670) | enum ggml_ftype
type ggml_tensor (line 672) | struct ggml_tensor
type ggml_tensor (line 673) | struct ggml_tensor
type ggml_tensor (line 674) | struct ggml_tensor
type ggml_tensor (line 676) | struct ggml_tensor
type ggml_tensor (line 676) | struct ggml_tensor
type ggml_init_params (line 683) | struct ggml_init_params
type ggml_context (line 684) | struct ggml_context
type ggml_context (line 686) | struct ggml_context
type ggml_context (line 688) | struct ggml_context
type ggml_scratch (line 688) | struct ggml_scratch
type ggml_context (line 689) | struct ggml_context
type ggml_context (line 690) | struct ggml_context
type ggml_context (line 692) | struct ggml_context
type ggml_context (line 693) | struct ggml_context
type ggml_context (line 694) | struct ggml_context
type ggml_context (line 697) | struct ggml_context
type ggml_type (line 698) | enum ggml_type
type ggml_context (line 703) | struct ggml_context
type ggml_type (line 704) | enum ggml_type
type ggml_context (line 708) | struct ggml_context
type ggml_type (line 709) | enum ggml_type
type ggml_context (line 714) | struct ggml_context
type ggml_type (line 715) | enum ggml_type
type ggml_context (line 721) | struct ggml_context
type ggml_type (line 722) | enum ggml_type
type ggml_context (line 728) | struct ggml_context
type ggml_context (line 729) | struct ggml_context
type ggml_context (line 731) | struct ggml_context
type ggml_tensor (line 731) | struct ggml_tensor
type ggml_context (line 732) | struct ggml_context
type ggml_tensor (line 732) | struct ggml_tensor
type ggml_context (line 735) | struct ggml_context
type ggml_context (line 736) | struct ggml_context
type ggml_tensor (line 736) | struct ggml_tensor
type ggml_context (line 737) | struct ggml_context
type ggml_tensor (line 739) | struct ggml_tensor
type ggml_tensor (line 740) | struct ggml_tensor
type ggml_tensor (line 741) | struct ggml_tensor
type ggml_tensor (line 744) | struct ggml_tensor
type ggml_tensor (line 746) | struct ggml_tensor
type ggml_tensor (line 747) | struct ggml_tensor
type ggml_tensor (line 749) | struct ggml_tensor
type ggml_tensor (line 750) | struct ggml_tensor
type ggml_tensor (line 752) | struct ggml_tensor
type ggml_tensor (line 753) | struct ggml_tensor
type ggml_tensor (line 755) | struct ggml_tensor
type ggml_tensor (line 756) | struct ggml_tensor
type ggml_tensor (line 758) | struct ggml_tensor
type ggml_tensor (line 759) | struct ggml_tensor
type ggml_tensor (line 761) | struct ggml_tensor
type ggml_tensor (line 763) | struct ggml_tensor
type ggml_tensor (line 764) | struct ggml_tensor
type ggml_tensor (line 766) | struct ggml_tensor
type ggml_tensor (line 766) | struct ggml_tensor
type ggml_context (line 773) | struct ggml_context
type ggml_tensor (line 774) | struct ggml_tensor
type ggml_context (line 778) | struct ggml_context
type ggml_tensor (line 779) | struct ggml_tensor
type ggml_context (line 782) | struct ggml_context
type ggml_tensor (line 783) | struct ggml_tensor
type ggml_tensor (line 784) | struct ggml_tensor
type ggml_context (line 787) | struct ggml_context
type ggml_tensor (line 788) | struct ggml_tensor
type ggml_tensor (line 789) | struct ggml_tensor
type ggml_context (line 792) | struct ggml_context
type ggml_tensor (line 793) | struct ggml_tensor
type ggml_tensor (line 794) | struct ggml_tensor
type ggml_type (line 795) | enum ggml_type
type ggml_context (line 798) | struct ggml_context
type ggml_tensor (line 799) | struct ggml_tensor
type ggml_tensor (line 800) | struct ggml_tensor
type ggml_context (line 803) | struct ggml_context
type ggml_tensor (line 804) | struct ggml_tensor
type ggml_tensor (line 805) | struct ggml_tensor
type ggml_context (line 811) | struct ggml_context
type ggml_tensor (line 812) | struct ggml_tensor
type ggml_tensor (line 813) | struct ggml_tensor
type ggml_context (line 820) | struct ggml_context
type ggml_tensor (line 821) | struct ggml_tensor
type ggml_tensor (line 822) | struct ggml_tensor
type ggml_context (line 829) | struct ggml_context
type ggml_tensor (line 830) | struct ggml_tensor
type ggml_tensor (line 831) | struct ggml_tensor
type ggml_context (line 834) | struct ggml_context
type ggml_tensor (line 835) | struct ggml_tensor
type ggml_tensor (line 836) | struct ggml_tensor
type ggml_context (line 839) | struct ggml_context
type ggml_tensor (line 840) | struct ggml_tensor
type ggml_tensor (line 841) | struct ggml_tensor
type ggml_context (line 844) | struct ggml_context
type ggml_tensor (line 845) | struct ggml_tensor
type ggml_tensor (line 846) | struct ggml_tensor
type ggml_context (line 849) | struct ggml_context
type ggml_tensor (line 850) | struct ggml_tensor
type ggml_tensor (line 851) | struct ggml_tensor
type ggml_context (line 854) | struct ggml_context
type ggml_tensor (line 855) | struct ggml_tensor
type ggml_tensor (line 856) | struct ggml_tensor
type ggml_context (line 859) | struct ggml_context
type ggml_tensor (line 860) | struct ggml_tensor
type ggml_context (line 863) | struct ggml_context
type ggml_tensor (line 864) | struct ggml_tensor
type ggml_context (line 867) | struct ggml_context
type ggml_tensor (line 868) | struct ggml_tensor
type ggml_context (line 871) | struct ggml_context
type ggml_tensor (line 872) | struct ggml_tensor
type ggml_context (line 875) | struct ggml_context
type ggml_tensor (line 876) | struct ggml_tensor
type ggml_context (line 879) | struct ggml_context
type ggml_tensor (line 880) | struct ggml_tensor
type ggml_context (line 884) | struct ggml_context
type ggml_tensor (line 885) | struct ggml_tensor
type ggml_context (line 889) | struct ggml_context
type ggml_tensor (line 890) | struct ggml_tensor
type ggml_context (line 894) | struct ggml_context
type ggml_tensor (line 895) | struct ggml_tensor
type ggml_context (line 899) | struct ggml_context
type ggml_tensor (line 900) | struct ggml_tensor
type ggml_context (line 905) | struct ggml_context
type ggml_tensor (line 906) | struct ggml_tensor
type ggml_tensor (line 907) | struct ggml_tensor
type ggml_context (line 911) | struct ggml_context
type ggml_tensor (line 912) | struct ggml_tensor
type ggml_tensor (line 913) | struct ggml_tensor
type ggml_context (line 918) | struct ggml_context
type ggml_tensor (line 919) | struct ggml_tensor
type ggml_tensor (line 920) | struct ggml_tensor
type ggml_context (line 923) | struct ggml_context
type ggml_tensor (line 924) | struct ggml_tensor
type ggml_context (line 927) | struct ggml_context
type ggml_tensor (line 928) | struct ggml_tensor
type ggml_context (line 931) | struct ggml_context
type ggml_tensor (line 932) | struct ggml_tensor
type ggml_context (line 935) | struct ggml_context
type ggml_tensor (line 936) | struct ggml_tensor
type ggml_context (line 939) | struct ggml_context
type ggml_tensor (line 940) | struct ggml_tensor
type ggml_context (line 943) | struct ggml_context
type ggml_tensor (line 944) | struct ggml_tensor
type ggml_context (line 947) | struct ggml_context
type ggml_tensor (line 948) | struct ggml_tensor
type ggml_context (line 951) | struct ggml_context
type ggml_tensor (line 952) | struct ggml_tensor
type ggml_context (line 955) | struct ggml_context
type ggml_tensor (line 956) | struct ggml_tensor
type ggml_context (line 959) | struct ggml_context
type ggml_tensor (line 960) | struct ggml_tensor
type ggml_context (line 963) | struct ggml_context
type ggml_tensor (line 964) | struct ggml_tensor
type ggml_context (line 967) | struct ggml_context
type ggml_tensor (line 968) | struct ggml_tensor
type ggml_context (line 971) | struct ggml_context
type ggml_tensor (line 972) | struct ggml_tensor
type ggml_context (line 975) | struct ggml_context
type ggml_tensor (line 976) | struct ggml_tensor
type ggml_context (line 979) | struct ggml_context
type ggml_tensor (line 980) | struct ggml_tensor
type ggml_context (line 983) | struct ggml_context
type ggml_tensor (line 984) | struct ggml_tensor
type ggml_context (line 987) | struct ggml_context
type ggml_tensor (line 988) | struct ggml_tensor
type ggml_context (line 991) | struct ggml_context
type ggml_tensor (line 992) | struct ggml_tensor
type ggml_context (line 995) | struct ggml_context
type ggml_tensor (line 996) | struct ggml_tensor
type ggml_context (line 999) | struct ggml_context
type ggml_tensor (line 1000) | struct ggml_tensor
type ggml_context (line 1003) | struct ggml_context
type ggml_tensor (line 1004) | struct ggml_tensor
type ggml_context (line 1009) | struct ggml_context
type ggml_tensor (line 1010) | struct ggml_tensor
type ggml_tensor (line 1011) | struct ggml_tensor
type ggml_context (line 1014) | struct ggml_context
type ggml_tensor (line 1015) | struct ggml_tensor
type ggml_context (line 1019) | struct ggml_context
type ggml_tensor (line 1020) | struct ggml_tensor
type ggml_context (line 1024) | struct ggml_context
type ggml_tensor (line 1025) | struct ggml_tensor
type ggml_context (line 1029) | struct ggml_context
type ggml_tensor (line 1030) | struct ggml_tensor
type ggml_tensor (line 1031) | struct ggml_tensor
type ggml_tensor (line 1032) | struct ggml_tensor
type ggml_tensor (line 1033) | struct ggml_tensor
type ggml_tensor (line 1034) | struct ggml_tensor
type ggml_context (line 1038) | struct ggml_context
type ggml_tensor (line 1039) | struct ggml_tensor
type ggml_context (line 1043) | struct ggml_context
type ggml_tensor (line 1044) | struct ggml_tensor
type ggml_context (line 1051) | struct ggml_context
type ggml_tensor (line 1052) | struct ggml_tensor
type ggml_context (line 1056) | struct ggml_context
type ggml_tensor (line 1057) | struct ggml_tensor
type ggml_context (line 1063) | struct ggml_context
type ggml_tensor (line 1064) | struct ggml_tensor
type ggml_tensor (line 1065) | struct ggml_tensor
type ggml_context (line 1072) | struct ggml_context
type ggml_tensor (line 1073) | struct ggml_tensor
type ggml_tensor (line 1074) | struct ggml_tensor
type ggml_context (line 1079) | struct ggml_context
type ggml_tensor (line 1080) | struct ggml_tensor
type ggml_tensor (line 1082) | struct ggml_tensor
type ggml_tensor (line 1084) | struct ggml_tensor
type ggml_context (line 1090) | struct ggml_context
type ggml_tensor (line 1091) | struct ggml_tensor
type ggml_tensor (line 1092) | struct ggml_tensor
type ggml_context (line 1099) | struct ggml_context
type ggml_tensor (line 1100) | struct ggml_tensor
type ggml_tensor (line 1101) | struct ggml_tensor
type ggml_context (line 1105) | struct ggml_context
type ggml_tensor (line 1106) | struct ggml_tensor
type ggml_tensor (line 1107) | struct ggml_tensor
type ggml_context (line 1111) | struct ggml_context
type ggml_tensor (line 1112) | struct ggml_tensor
type ggml_tensor (line 1113) | struct ggml_tensor
type ggml_context (line 1121) | struct ggml_context
type ggml_tensor (line 1122) | struct ggml_tensor
type ggml_tensor (line 1123) | struct ggml_tensor
type ggml_context (line 1130) | struct ggml_context
type ggml_tensor (line 1131) | struct ggml_tensor
type ggml_tensor (line 1132) | struct ggml_tensor
type ggml_context (line 1136) | struct ggml_context
type ggml_tensor (line 1137) | struct ggml_tensor
type ggml_tensor (line 1138) | struct ggml_tensor
type ggml_context (line 1143) | struct ggml_context
type ggml_tensor (line 1144) | struct ggml_tensor
type ggml_tensor (line 1145) | struct ggml_tensor
type ggml_context (line 1151) | struct ggml_context
type ggml_tensor (line 1152) | struct ggml_tensor
type ggml_tensor (line 1153) | struct ggml_tensor
type ggml_context (line 1159) | struct ggml_context
type ggml_tensor (line 1160) | struct ggml_tensor
type ggml_tensor (line 1161) | struct ggml_tensor
type ggml_context (line 1165) | struct ggml_context
type ggml_tensor (line 1166) | struct ggml_tensor
type ggml_tensor (line 1167) | struct ggml_tensor
type ggml_context (line 1171) | struct ggml_context
type ggml_tensor (line 1172) | struct ggml_tensor
type ggml_context (line 1176) | struct ggml_context
type ggml_tensor (line 1177) | struct ggml_tensor
type ggml_context (line 1181) | struct ggml_context
type ggml_tensor (line 1182) | struct ggml_tensor
type ggml_context (line 1186) | struct ggml_context
type ggml_tensor (line 1187) | struct ggml_tensor
type ggml_context (line 1192) | struct ggml_context
type ggml_tensor (line 1193) | struct ggml_tensor
type ggml_context (line 1199) | struct ggml_context
type ggml_tensor (line 1200) | struct ggml_tensor
type ggml_context (line 1209) | struct ggml_context
type ggml_tensor (line 1210) | struct ggml_tensor
type ggml_tensor (line 1211) | struct ggml_tensor
type ggml_context (line 1216) | struct ggml_context
type ggml_tensor (line 1217) | struct ggml_tensor
type ggml_context (line 1221) | struct ggml_context
type ggml_tensor (line 1222) | struct ggml_tensor
type ggml_context (line 1229) | struct ggml_context
type ggml_tensor (line 1230) | struct ggml_tensor
type ggml_context (line 1236) | struct ggml_context
type ggml_tensor (line 1237) | struct ggml_tensor
type ggml_context (line 1245) | struct ggml_context
type ggml_tensor (line 1246) | struct ggml_tensor
type ggml_context (line 1251) | struct ggml_context
type ggml_tensor (line 1252) | struct ggml_tensor
type ggml_context (line 1259) | struct ggml_context
type ggml_tensor (line 1260) | struct ggml_tensor
type ggml_context (line 1269) | struct ggml_context
type ggml_tensor (line 1270) | struct ggml_tensor
type ggml_context (line 1281) | struct ggml_context
type ggml_tensor (line 1282) | struct ggml_tensor
type ggml_context (line 1290) | struct ggml_context
type ggml_tensor (line 1291) | struct ggml_tensor
type ggml_context (line 1295) | struct ggml_context
type ggml_tensor (line 1296) | struct ggml_tensor
type ggml_tensor (line 1297) | struct ggml_tensor
type ggml_context (line 1300) | struct ggml_context
type ggml_tensor (line 1301) | struct ggml_tensor
type ggml_tensor (line 1302) | struct ggml_tensor
type ggml_tensor (line 1303) | struct ggml_tensor
type ggml_context (line 1306) | struct ggml_context
type ggml_tensor (line 1307) | struct ggml_tensor
type ggml_context (line 1311) | struct ggml_context
type ggml_tensor (line 1312) | struct ggml_tensor
type ggml_context (line 1317) | struct ggml_context
type ggml_tensor (line 1318) | struct ggml_tensor
type ggml_context (line 1323) | struct ggml_context
type ggml_tensor (line 1324) | struct ggml_tensor
type ggml_context (line 1329) | struct ggml_context
type ggml_tensor (line 1330) | struct ggml_tensor
type ggml_context (line 1334) | struct ggml_context
type ggml_tensor (line 1335) | struct ggml_tensor
type ggml_context (line 1339) | struct ggml_context
type ggml_tensor (line 1340) | struct ggml_tensor
type ggml_context (line 1345) | struct ggml_context
type ggml_tensor (line 1346) | struct ggml_tensor
type ggml_tensor (line 1347) | struct ggml_tensor
type ggml_context (line 1351) | struct ggml_context
type ggml_tensor (line 1352) | struct ggml_tensor
type ggml_tensor (line 1353) | struct ggml_tensor
type ggml_context (line 1357) | struct ggml_context
type ggml_tensor (line 1358) | struct ggml_tensor
type ggml_tensor (line 1359) | struct ggml_tensor
type ggml_context (line 1368) | struct ggml_context
type ggml_tensor (line 1369) | struct ggml_tensor
type ggml_tensor (line 1370) | struct ggml_tensor
type ggml_context (line 1377) | struct ggml_context
type ggml_tensor (line 1378) | struct ggml_tensor
type ggml_tensor (line 1379) | struct ggml_tensor
type ggml_context (line 1386) | struct ggml_context
type ggml_tensor (line 1387) | struct ggml_tensor
type ggml_tensor (line 1388) | struct ggml_tensor
type ggml_context (line 1402) | struct ggml_context
type ggml_tensor (line 1403) | struct ggml_tensor
type ggml_tensor (line 1404) | struct ggml_tensor
type ggml_context (line 1422) | struct ggml_context
type ggml_tensor (line 1423) | struct ggml_tensor
type ggml_tensor (line 1424) | struct ggml_tensor
type ggml_context (line 1432) | struct ggml_context
type ggml_tensor (line 1433) | struct ggml_tensor
type ggml_tensor (line 1434) | struct ggml_tensor
type ggml_context (line 1451) | struct ggml_context
type ggml_tensor (line 1452) | struct ggml_tensor
type ggml_context (line 1460) | struct ggml_context
type ggml_tensor (line 1461) | struct ggml_tensor
type ggml_context (line 1466) | struct ggml_context
type ggml_tensor (line 1467) | struct ggml_tensor
type ggml_tensor (line 1468) | struct ggml_tensor
type ggml_context (line 1478) | struct ggml_context
type ggml_tensor (line 1479) | struct ggml_tensor
type ggml_tensor (line 1480) | struct ggml_tensor
type ggml_context (line 1490) | struct ggml_context
type ggml_tensor (line 1491) | struct ggml_tensor
type ggml_tensor (line 1492) | struct ggml_tensor
type ggml_context (line 1497) | struct ggml_context
type ggml_tensor (line 1498) | struct ggml_tensor
type ggml_tensor (line 1499) | struct ggml_tensor
type ggml_context (line 1505) | struct ggml_context
type ggml_tensor (line 1506) | struct ggml_tensor
type ggml_tensor (line 1507) | struct ggml_tensor
type ggml_context (line 1525) | struct ggml_context
type ggml_tensor (line 1526) | struct ggml_tensor
type ggml_tensor (line 1527) | struct ggml_tensor
type ggml_context (line 1538) | struct ggml_context
type ggml_tensor (line 1539) | struct ggml_tensor
type ggml_tensor (line 1540) | struct ggml_tensor
type ggml_context (line 1543) | struct ggml_context
type ggml_tensor (line 1544) | struct ggml_tensor
type ggml_tensor (line 1545) | struct ggml_tensor
type ggml_op_pool (line 1548) | enum ggml_op_pool {
type ggml_context (line 1555) | struct ggml_context
type ggml_tensor (line 1556) | struct ggml_tensor
type ggml_op_pool (line 1557) | enum ggml_op_pool
type ggml_context (line 1565) | struct ggml_context
type ggml_tensor (line 1566) | struct ggml_tensor
type ggml_op_pool (line 1567) | enum ggml_op_pool
type ggml_context (line 1578) | struct ggml_context
type ggml_tensor (line 1579) | struct ggml_tensor
type ggml_context (line 1584) | struct ggml_context
type ggml_tensor (line 1585) | struct ggml_tensor
type ggml_sort_order (line 1592) | enum ggml_sort_order {
type ggml_context (line 1598) | struct ggml_context
type ggml_tensor (line 1599) | struct ggml_tensor
type ggml_sort_order (line 1600) | enum ggml_sort_order
type ggml_context (line 1604) | struct ggml_context
type ggml_tensor (line 1605) | struct ggml_tensor
type ggml_context (line 1609) | struct ggml_context
type ggml_tensor (line 1610) | struct ggml_tensor
type ggml_tensor (line 1611) | struct ggml_tensor
type ggml_tensor (line 1612) | struct ggml_tensor
type ggml_context (line 1616) | struct ggml_context
type ggml_tensor (line 1617) | struct ggml_tensor
type ggml_tensor (line 1618) | struct ggml_tensor
type ggml_tensor (line 1619) | struct ggml_tensor
type ggml_tensor (line 1620) | struct ggml_tensor
type ggml_context (line 1624) | struct ggml_context
type ggml_tensor (line 1625) | struct ggml_tensor
type ggml_tensor (line 1626) | struct ggml_tensor
type ggml_tensor (line 1627) | struct ggml_tensor
type ggml_tensor (line 1628) | struct ggml_tensor
type ggml_tensor (line 1629) | struct ggml_tensor
type ggml_context (line 1638) | struct ggml_context
type ggml_tensor (line 1639) | struct ggml_tensor
type ggml_context (line 1645) | struct ggml_context
type ggml_tensor (line 1646) | struct ggml_tensor
type ggml_context (line 1652) | struct ggml_context
type ggml_tensor (line 1653) | struct ggml_tensor
type ggml_unary_op (line 1654) | enum ggml_unary_op
type ggml_context (line 1657) | struct ggml_context
type ggml_tensor (line 1658) | struct ggml_tensor
type ggml_unary_op (line 1659) | enum ggml_unary_op
type ggml_context (line 1663) | struct ggml_context
type ggml_tensor (line 1664) | struct ggml_tensor
type ggml_context (line 1670) | struct ggml_context
type ggml_tensor (line 1671) | struct ggml_tensor
type ggml_tensor (line 1672) | struct ggml_tensor
type ggml_tensor (line 1673) | struct ggml_tensor
type ggml_context (line 1676) | struct ggml_context
type ggml_tensor (line 1677) | struct ggml_tensor
type ggml_tensor (line 1678) | struct ggml_tensor
type ggml_tensor (line 1679) | struct ggml_tensor
type ggml_tensor (line 1686) | struct ggml_tensor
type ggml_tensor (line 1686) | struct ggml_tensor
type ggml_tensor (line 1687) | struct ggml_tensor
type ggml_tensor (line 1687) | struct ggml_tensor
type ggml_tensor (line 1687) | struct ggml_tensor
type ggml_tensor (line 1688) | struct ggml_tensor
type ggml_tensor (line 1688) | struct ggml_tensor
type ggml_tensor (line 1688) | struct ggml_tensor
type ggml_tensor (line 1688) | struct ggml_tensor
type ggml_tensor (line 1690) | struct ggml_tensor
type ggml_context (line 1691) | struct ggml_context
type ggml_tensor (line 1692) | struct ggml_tensor
type ggml_tensor (line 1696) | struct ggml_tensor
type ggml_context (line 1697) | struct ggml_context
type ggml_tensor (line 1698) | struct ggml_tensor
type ggml_tensor (line 1702) | struct ggml_tensor
type ggml_context (line 1703) | struct ggml_context
type ggml_tensor (line 1704) | struct ggml_tensor
type ggml_tensor (line 1705) | struct ggml_tensor
type ggml_tensor (line 1709) | struct ggml_tensor
type ggml_context (line 1710) | struct ggml_context
type ggml_tensor (line 1711) | struct ggml_tensor
type ggml_tensor (line 1712) | struct ggml_tensor
type ggml_tensor (line 1716) | struct ggml_tensor
type ggml_context (line 1717) | struct ggml_context
type ggml_tensor (line 1718) | struct ggml_tensor
type ggml_tensor (line 1722) | struct ggml_tensor
type ggml_context (line 1723) | struct ggml_context
type ggml_tensor (line 1724) | struct ggml_tensor
type ggml_tensor (line 1728) | struct ggml_tensor
type ggml_context (line 1729) | struct ggml_context
type ggml_tensor (line 1730) | struct ggml_tensor
type ggml_tensor (line 1731) | struct ggml_tensor
type ggml_tensor (line 1735) | struct ggml_tensor
type ggml_context (line 1736) | struct ggml_context
type ggml_tensor (line 1737) | struct ggml_tensor
type ggml_tensor (line 1738) | struct ggml_tensor
type ggml_tensor (line 1742) | struct ggml_tensor
type ggml_context (line 1743) | struct ggml_context
type ggml_tensor (line 1744) | struct ggml_tensor
type ggml_tensor (line 1745) | struct ggml_tensor
type ggml_tensor (line 1746) | struct ggml_tensor
type ggml_tensor (line 1750) | struct ggml_tensor
type ggml_context (line 1751) | struct ggml_context
type ggml_tensor (line 1752) | struct ggml_tensor
type ggml_tensor (line 1753) | struct ggml_tensor
type ggml_tensor (line 1754) | struct ggml_tensor
type ggml_tensor (line 1760) | struct ggml_tensor
type ggml_tensor (line 1760) | struct ggml_tensor
type ggml_tensor (line 1761) | struct ggml_tensor
type ggml_tensor (line 1761) | struct ggml_tensor
type ggml_tensor (line 1761) | struct ggml_tensor
type ggml_tensor (line 1762) | struct ggml_tensor
type ggml_tensor (line 1762) | struct ggml_tensor
type ggml_tensor (line 1762) | struct ggml_tensor
type ggml_tensor (line 1762) | struct ggml_tensor
type ggml_context (line 1767) | struct ggml_context
type ggml_tensor (line 1768) | struct ggml_tensor
type ggml_context (line 1774) | struct ggml_context
type ggml_tensor (line 1775) | struct ggml_tensor
type ggml_context (line 1781) | struct ggml_context
type ggml_tensor (line 1782) | struct ggml_tensor
type ggml_tensor (line 1783) | struct ggml_tensor
type ggml_context (line 1789) | struct ggml_context
type ggml_tensor (line 1790) | struct ggml_tensor
type ggml_tensor (line 1791) | struct ggml_tensor
type ggml_context (line 1797) | struct ggml_context
type ggml_tensor (line 1798) | struct ggml_tensor
type ggml_tensor (line 1799) | struct ggml_tensor
type ggml_tensor (line 1800) | struct ggml_tensor
type ggml_context (line 1806) | struct ggml_context
type ggml_tensor (line 1807) | struct ggml_tensor
type ggml_tensor (line 1808) | struct ggml_tensor
type ggml_tensor (line 1809) | struct ggml_tensor
type ggml_context (line 1817) | struct ggml_context
type ggml_tensor (line 1818) | struct ggml_tensor
type ggml_tensor (line 1819) | struct ggml_tensor
type ggml_context (line 1822) | struct ggml_context
type ggml_tensor (line 1823) | struct ggml_tensor
type ggml_tensor (line 1824) | struct ggml_tensor
type ggml_tensor (line 1825) | struct ggml_tensor
type ggml_context (line 1832) | struct ggml_context
type ggml_tensor (line 1833) | struct ggml_tensor
type ggml_cgraph (line 1836) | struct ggml_cgraph
type ggml_tensor (line 1836) | struct ggml_tensor
type ggml_context (line 1837) | struct ggml_context
type ggml_cgraph (line 1837) | struct ggml_cgraph
type ggml_cgraph (line 1837) | struct ggml_cgraph
type ggml_context (line 1840) | struct ggml_context
type ggml_context (line 1841) | struct ggml_context
type ggml_context (line 1842) | struct ggml_context
type ggml_cgraph (line 1842) | struct ggml_cgraph
type ggml_cgraph (line 1843) | struct ggml_cgraph
type ggml_cgraph (line 1844) | struct ggml_cgraph
type ggml_cgraph (line 1844) | struct ggml_cgraph
type ggml_cgraph (line 1845) | struct ggml_cgraph
type ggml_cgraph (line 1846) | struct ggml_cgraph
type ggml_cgraph (line 1853) | struct ggml_cgraph
type ggml_cgraph (line 1854) | struct ggml_cgraph
type ggml_cplan (line 1854) | struct ggml_cplan
type ggml_context (line 1858) | struct ggml_context
type ggml_cgraph (line 1858) | struct ggml_cgraph
type ggml_cgraph (line 1860) | struct ggml_cgraph
type ggml_cgraph (line 1862) | struct ggml_cgraph
type ggml_context (line 1863) | struct ggml_context
type ggml_context (line 1863) | struct ggml_context
type ggml_cgraph (line 1866) | struct ggml_cgraph
type ggml_cgraph (line 1869) | struct ggml_cgraph
type ggml_cgraph (line 1869) | struct ggml_cgraph
type ggml_context (line 1875) | struct ggml_context
type ggml_cgraph (line 1876) | struct ggml_cgraph
type ggml_cgraph (line 1877) | struct ggml_cgraph
type ggml_cgraph (line 1878) | struct ggml_cgraph
type ggml_tensor (line 1879) | struct ggml_tensor
type ggml_opt_type (line 1886) | enum ggml_opt_type {
type ggml_linesearch (line 1892) | enum ggml_linesearch {
type ggml_opt_result (line 1901) | enum ggml_opt_result {
type ggml_log_level (line 1917) | enum ggml_log_level
type ggml_opt_params (line 1923) | struct ggml_opt_params {
type ggml_opt_context (line 1984) | struct ggml_opt_context {
type ggml_opt_type (line 2026) | enum ggml_opt_type
type ggml_context (line 2030) | struct ggml_context
type ggml_opt_params (line 2031) | struct ggml_opt_params
type ggml_tensor (line 2032) | struct ggml_tensor
type ggml_context (line 2036) | struct ggml_context
type ggml_opt_context (line 2037) | struct ggml_opt_context
type ggml_opt_params (line 2038) | struct ggml_opt_params
type ggml_context (line 2043) | struct ggml_context
type ggml_opt_context (line 2044) | struct ggml_opt_context
type ggml_tensor (line 2045) | struct ggml_tensor
type ggml_context (line 2049) | struct ggml_context
type ggml_opt_context (line 2050) | struct ggml_opt_context
type ggml_tensor (line 2051) | struct ggml_tensor
type ggml_cgraph (line 2052) | struct ggml_cgraph
type ggml_cgraph (line 2053) | struct ggml_cgraph
type ggml_type (line 2074) | enum ggml_type
type gguf_type (line 2080) | enum gguf_type {
type gguf_context (line 2097) | struct gguf_context
type gguf_init_params (line 2099) | struct gguf_init_params {
type gguf_init_params (line 2107) | struct gguf_init_params
type gguf_context (line 2110) | struct gguf_context
type gguf_type (line 2112) | enum gguf_type
type gguf_context (line 2114) | struct gguf_context
type gguf_context (line 2115) | struct gguf_context
type gguf_context (line 2116) | struct gguf_context
type gguf_context (line 2117) | struct gguf_context
type gguf_context (line 2119) | struct gguf_context
type gguf_context (line 2120) | struct gguf_context
type gguf_context (line 2121) | struct gguf_context
type gguf_context (line 2123) | struct gguf_context
type gguf_context (line 2124) | struct gguf_context
type gguf_context (line 2127) | struct gguf_context
type gguf_context (line 2128) | struct gguf_context
type gguf_context (line 2129) | struct gguf_context
type gguf_context (line 2130) | struct gguf_context
type gguf_context (line 2131) | struct gguf_context
type gguf_context (line 2132) | struct gguf_context
type gguf_context (line 2133) | struct gguf_context
type gguf_context (line 2134) | struct gguf_context
type gguf_context (line 2135) | struct gguf_context
type gguf_context (line 2136) | struct gguf_context
type gguf_context (line 2137) | struct gguf_context
type gguf_context (line 2138) | struct gguf_context
type gguf_context (line 2139) | struct gguf_context
type gguf_context (line 2140) | struct gguf_context
type gguf_context (line 2141) | struct gguf_context
type gguf_context (line 2142) | struct gguf_context
type gguf_context (line 2144) | struct gguf_context
type gguf_context (line 2145) | struct gguf_context
type gguf_context (line 2146) | struct gguf_context
type gguf_context (line 2147) | struct gguf_context
type gguf_context (line 2150) | struct gguf_context
type gguf_context (line 2151) | struct gguf_context
type gguf_context (line 2152) | struct gguf_context
type gguf_context (line 2153) | struct gguf_context
type gguf_context (line 2154) | struct gguf_context
type gguf_context (line 2155) | struct gguf_context
type gguf_context (line 2156) | struct gguf_context
type gguf_context (line 2157) | struct gguf_context
type gguf_context (line 2158) | struct gguf_context
type gguf_context (line 2159) | struct gguf_context
type gguf_context (line 2160) | struct gguf_context
type gguf_context (line 2161) | struct gguf_context
type gguf_context (line 2162) | struct gguf_context
type gguf_type (line 2162) | enum gguf_type
type gguf_context (line 2163) | struct gguf_context
type gguf_context (line 2166) | struct gguf_context
type gguf_context (line 2166) | struct gguf_context
type gguf_context (line 2169) | struct gguf_context
type ggml_tensor (line 2169) | struct ggml_tensor
type gguf_context (line 2170) | struct gguf_context
type ggml_type (line 2170) | enum ggml_type
type gguf_context (line 2171) | struct gguf_context
type gguf_context (line 2192) | struct gguf_context
type gguf_context (line 2195) | struct gguf_context
type gguf_context (line 2196) | struct gguf_context
type ggml_type_traits_t (line 2236) | typedef struct {
type ggml_type (line 2248) | enum ggml_type
FILE: ggml/mt.py
class MTBuilder (line 30) | class MTBuilder(NllbBuilder):
method build_embedding (line 31) | def build_embedding(self) -> StandardEmbedding:
method build_model (line 41) | def build_model(self) -> TransformerModel:
function create_mt_model (line 68) | def create_mt_model(
function convert_mt_checkpoint (line 77) | def convert_mt_checkpoint(
function load_vocab (line 105) | def load_vocab(model_dir: str, mode: Literal["src", "tgt"]):
function load_mt_model (line 115) | def load_mt_model(model_dir: str):
function test_mt (line 161) | def test_mt(
FILE: ggml/src/ggml-alloc.c
function aligned_offset (line 21) | static size_t aligned_offset(const void * buffer, size_t offset, size_t ...
type free_block (line 27) | struct free_block {
type ggml_tallocr (line 32) | struct ggml_tallocr {
function add_allocated_tensor (line 51) | static void add_allocated_tensor(ggml_tallocr_t alloc, struct ggml_tenso...
function remove_allocated_tensor (line 60) | static void remove_allocated_tensor(ggml_tallocr_t alloc, struct ggml_te...
function ggml_tallocr_is_own (line 74) | static bool ggml_tallocr_is_own(ggml_tallocr_t alloc, const struct ggml_...
function ggml_is_view (line 78) | static bool ggml_is_view(struct ggml_tensor * t) {
function ggml_tallocr_alloc (line 82) | void ggml_tallocr_alloc(ggml_tallocr_t alloc, struct ggml_tensor * tenso...
function ggml_tallocr_free_tensor (line 156) | static void ggml_tallocr_free_tensor(ggml_tallocr_t alloc, struct ggml_t...
function ggml_tallocr_reset (line 223) | void ggml_tallocr_reset(ggml_tallocr_t alloc) {
function ggml_tallocr_t (line 235) | ggml_tallocr_t ggml_tallocr_new(void * data, size_t size, size_t alignme...
function ggml_tallocr_t (line 259) | ggml_tallocr_t ggml_tallocr_new_measure(size_t alignment) {
function ggml_tallocr_t (line 266) | ggml_tallocr_t ggml_tallocr_new_measure_from_backend(struct ggml_backend...
function ggml_tallocr_t (line 278) | ggml_tallocr_t ggml_tallocr_new_from_backend(struct ggml_backend * backe...
function ggml_tallocr_t (line 285) | ggml_tallocr_t ggml_tallocr_new_from_buffer(struct ggml_backend_buffer *...
type ggml_backend_buffer (line 307) | struct ggml_backend_buffer
function ggml_tallocr_free (line 311) | void ggml_tallocr_free(ggml_tallocr_t alloc) {
function ggml_tallocr_is_measure (line 322) | bool ggml_tallocr_is_measure(ggml_tallocr_t alloc) {
function ggml_tallocr_max_size (line 326) | size_t ggml_tallocr_max_size(ggml_tallocr_t alloc) {
type hash_node (line 332) | struct hash_node {
type ggml_gallocr (line 337) | struct ggml_gallocr {
function ggml_gallocr_t (line 347) | ggml_gallocr_t ggml_gallocr_new(void) {
function ggml_gallocr_free (line 363) | void ggml_gallocr_free(ggml_gallocr_t galloc) {
function ggml_gallocr_set_parse_seq (line 383) | void ggml_gallocr_set_parse_seq(ggml_gallocr_t galloc, const int * list,...
type hash_node (line 393) | struct hash_node
type ggml_tensor (line 393) | struct ggml_tensor
function ggml_are_same_layout (line 398) | static bool ggml_are_same_layout(const struct ggml_tensor * a, const str...
function ggml_op_can_inplace (line 413) | static bool ggml_op_can_inplace(enum ggml_op op) {
function ggml_tallocr_t (line 437) | static ggml_tallocr_t node_tallocr(ggml_gallocr_t galloc, struct ggml_te...
function init_view (line 445) | static void init_view(ggml_gallocr_t galloc, struct ggml_tensor * view, ...
function allocate_node (line 464) | static void allocate_node(ggml_gallocr_t galloc, struct ggml_tensor * no...
function free_node (line 517) | static void free_node(ggml_gallocr_t galloc, struct ggml_tensor * node) {
function ggml_tallocr_alloc_graph_impl (line 523) | static void ggml_tallocr_alloc_graph_impl(ggml_gallocr_t galloc, struct ...
function ggml_gallocr_alloc_graph (line 633) | size_t ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, ggml_tallocr_t ta...
function ggml_gallocr_alloc_graph_n (line 662) | void ggml_gallocr_alloc_graph_n(ggml_gallocr_t galloc, struct ggml_cgrap...
type ggml_allocr (line 696) | struct ggml_allocr {
function ggml_allocr_t (line 701) | static ggml_allocr_t ggml_allocr_new_impl(ggml_tallocr_t talloc) {
function ggml_allocr_t (line 710) | ggml_allocr_t ggml_allocr_new(void * data, size_t size, size_t alignment) {
function ggml_allocr_t (line 714) | ggml_allocr_t ggml_allocr_new_measure(size_t alignment) {
function ggml_allocr_t (line 718) | ggml_allocr_t ggml_allocr_new_from_buffer(struct ggml_backend_buffer * b...
function ggml_allocr_t (line 722) | ggml_allocr_t ggml_allocr_new_from_backend(struct ggml_backend * backend...
function ggml_allocr_t (line 726) | ggml_allocr_t ggml_allocr_new_measure_from_backend(struct ggml_backend *...
type ggml_backend_buffer (line 730) | struct ggml_backend_buffer
function ggml_allocr_set_parse_seq (line 734) | void ggml_allocr_set_parse_seq(ggml_allocr_t alloc, const int * list, in...
function ggml_allocr_free (line 738) | void ggml_allocr_free(ggml_allocr_t alloc) {
function ggml_allocr_is_measure (line 744) | bool ggml_allocr_is_measure(ggml_allocr_t alloc) {
function ggml_allocr_reset (line 748) | void ggml_allocr_reset(ggml_allocr_t alloc) {
function ggml_allocr_alloc (line 752) | void ggml_allocr_alloc(ggml_allocr_t alloc, struct ggml_tensor * tensor) {
function ggml_allocr_max_size (line 756) | size_t ggml_allocr_max_size(ggml_allocr_t alloc) {
function ggml_allocr_alloc_graph (line 760) | size_t ggml_allocr_alloc_graph(ggml_allocr_t alloc, struct ggml_cgraph *...
function ggml_backend_buffer_t (line 765) | ggml_backend_buffer_t ggml_backend_alloc_ctx_tensors_from_buft(struct gg...
function ggml_backend_buffer_t (line 800) | ggml_backend_buffer_t ggml_backend_alloc_ctx_tensors(struct ggml_context...
FILE: ggml/src/ggml-backend-impl.h
type ggml_backend_buffer_type_i (line 18) | struct ggml_backend_buffer_type_i {
type ggml_backend_buffer_type (line 25) | struct ggml_backend_buffer_type {
type ggml_backend_buffer_i (line 33) | struct ggml_backend_buffer_i {
type ggml_backend_buffer (line 45) | struct ggml_backend_buffer {
type ggml_backend_buffer_i (line 54) | struct ggml_backend_buffer_i
type ggml_backend_i (line 65) | struct ggml_backend_i {
type ggml_backend (line 95) | struct ggml_backend {
type ggml_backend_t (line 106) | typedef ggml_backend_t (*ggml_backend_init_fn)(const char * params, void...
FILE: ggml/src/ggml-backend.c
function ggml_backend_buffer_t (line 18) | ggml_backend_buffer_t ggml_backend_buft_alloc_buffer(ggml_backend_buffer...
function ggml_backend_buft_get_alignment (line 22) | size_t ggml_backend_buft_get_alignment(ggml_backend_buffer_type_t buft) {
function ggml_backend_buft_get_alloc_size (line 26) | size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft,...
function ggml_backend_buft_supports_backend (line 34) | bool ggml_backend_buft_supports_backend(ggml_backend_buffer_type_t buft,...
function ggml_backend_buffer_t (line 40) | ggml_backend_buffer_t ggml_backend_buffer_init(
function ggml_backend_buffer_free (line 59) | void ggml_backend_buffer_free(ggml_backend_buffer_t buffer) {
function ggml_backend_buffer_get_size (line 70) | size_t ggml_backend_buffer_get_size(ggml_backend_buffer_t buffer) {
function ggml_backend_buffer_init_tensor (line 82) | void ggml_backend_buffer_init_tensor(ggml_backend_buffer_t buffer, struc...
function ggml_backend_buffer_get_alignment (line 89) | size_t ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer) {
function ggml_backend_buffer_get_alloc_size (line 93) | size_t ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, ...
function ggml_backend_buffer_type_t (line 97) | ggml_backend_buffer_type_t ggml_backend_buffer_type(ggml_backend_buffer_...
function ggml_backend_free (line 110) | void ggml_backend_free(ggml_backend_t backend) {
function ggml_backend_buffer_type_t (line 118) | ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_bac...
function ggml_backend_buffer_t (line 122) | ggml_backend_buffer_t ggml_backend_alloc_buffer(ggml_backend_t backend, ...
function ggml_backend_get_alignment (line 126) | size_t ggml_backend_get_alignment(ggml_backend_t backend) {
function ggml_backend_tensor_set_async (line 130) | void ggml_backend_tensor_set_async(ggml_backend_t backend, struct ggml_t...
function ggml_backend_tensor_get_async (line 137) | void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ...
function ggml_backend_tensor_set (line 144) | void ggml_backend_tensor_set(struct ggml_tensor * tensor, const void * d...
function ggml_backend_tensor_get (line 152) | void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * d...
function ggml_backend_synchronize (line 160) | void ggml_backend_synchronize(ggml_backend_t backend) {
function ggml_backend_graph_plan_t (line 168) | ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t ...
function ggml_backend_graph_plan_free (line 172) | void ggml_backend_graph_plan_free(ggml_backend_t backend, ggml_backend_g...
function ggml_backend_graph_plan_compute (line 176) | void ggml_backend_graph_plan_compute(ggml_backend_t backend, ggml_backen...
function ggml_backend_graph_compute (line 183) | void ggml_backend_graph_compute(ggml_backend_t backend, struct ggml_cgra...
function ggml_backend_supports_op (line 190) | bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_...
function ggml_are_same_layout (line 196) | static bool ggml_are_same_layout(const struct ggml_tensor * a, const str...
function ggml_backend_tensor_copy (line 211) | void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tens...
type ggml_backend_reg (line 246) | struct ggml_backend_reg {
type ggml_backend_reg (line 253) | struct ggml_backend_reg
function ggml_backend_registry_init (line 258) | static void ggml_backend_registry_init(void) {
function ggml_backend_register (line 282) | void ggml_backend_register(const char * name, ggml_backend_init_fn init_...
function ggml_backend_reg_get_count (line 303) | size_t ggml_backend_reg_get_count(void) {
function ggml_backend_reg_find_by_name (line 309) | size_t ggml_backend_reg_find_by_name(const char * name) {
function ggml_backend_t (line 322) | ggml_backend_t ggml_backend_reg_init_backend_from_str(const char * backe...
function ggml_backend_t (line 352) | ggml_backend_t ggml_backend_reg_init_backend(size_t i, const char * para...
function ggml_backend_buffer_type_t (line 359) | ggml_backend_buffer_type_t ggml_backend_reg_get_default_buffer_type(size...
function ggml_backend_buffer_t (line 366) | ggml_backend_buffer_t ggml_backend_reg_alloc_buffer(size_t i, size_t siz...
function ggml_backend_cpu_buffer_free_buffer (line 379) | static void ggml_backend_cpu_buffer_free_buffer(ggml_backend_buffer_t bu...
function ggml_backend_cpu_buffer_set_tensor (line 384) | static void ggml_backend_cpu_buffer_set_tensor(ggml_backend_buffer_t buf...
function ggml_backend_cpu_buffer_get_tensor (line 393) | static void ggml_backend_cpu_buffer_get_tensor(ggml_backend_buffer_t buf...
function ggml_backend_cpu_buffer_cpy_tensor_from (line 402) | static void ggml_backend_cpu_buffer_cpy_tensor_from(ggml_backend_buffer_...
function ggml_backend_cpu_buffer_cpy_tensor_to (line 408) | static void ggml_backend_cpu_buffer_cpy_tensor_to(ggml_backend_buffer_t ...
type ggml_backend_buffer_i (line 414) | struct ggml_backend_buffer_i
type ggml_backend_buffer_i (line 425) | struct ggml_backend_buffer_i
function ggml_backend_buffer_t (line 437) | static ggml_backend_buffer_t ggml_backend_cpu_buffer_type_alloc_buffer(g...
function ggml_backend_cpu_buffer_type_get_alignment (line 446) | static size_t ggml_backend_cpu_buffer_type_get_alignment(ggml_backend_bu...
function ggml_backend_cpu_buffer_type_supports_backend (line 452) | static bool ggml_backend_cpu_buffer_type_supports_backend(ggml_backend_b...
function ggml_backend_buffer_type_t (line 458) | ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void) {
type ggml_backend_cpu_context (line 472) | struct ggml_backend_cpu_context {
function ggml_backend_cpu_free (line 484) | static void ggml_backend_cpu_free(ggml_backend_t backend) {
function ggml_backend_buffer_type_t (line 491) | static ggml_backend_buffer_type_t ggml_backend_cpu_get_default_buffer_ty...
type ggml_backend_plan_cpu (line 497) | struct ggml_backend_plan_cpu {
function ggml_backend_graph_plan_t (line 502) | static ggml_backend_graph_plan_t ggml_backend_cpu_graph_plan_create(ggml...
function ggml_backend_cpu_graph_plan_free (line 517) | static void ggml_backend_cpu_graph_plan_free(ggml_backend_t backend, ggm...
function ggml_backend_cpu_graph_plan_compute (line 526) | static void ggml_backend_cpu_graph_plan_compute(ggml_backend_t backend, ...
function ggml_backend_cpu_graph_compute (line 534) | static void ggml_backend_cpu_graph_compute(ggml_backend_t backend, struc...
function ggml_backend_cpu_supports_op (line 550) | static bool ggml_backend_cpu_supports_op(ggml_backend_t backend, const s...
type ggml_backend_i (line 557) | struct ggml_backend_i
function ggml_backend_t (line 573) | ggml_backend_t ggml_backend_cpu_init(void) {
function ggml_backend_is_cpu (line 589) | bool ggml_backend_is_cpu(ggml_backend_t backend) {
function ggml_backend_cpu_set_n_threads (line 593) | void ggml_backend_cpu_set_n_threads(ggml_backend_t backend_cpu, int n_th...
function ggml_backend_buffer_t (line 600) | ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_...
function ggml_backend_t (line 604) | static ggml_backend_t ggml_backend_reg_cpu_init(const char * params, voi...
type ggml_backend_sched_split (line 618) | struct ggml_backend_sched_split {
type ggml_backend_sched (line 627) | struct ggml_backend_sched {
function ggml_is_view_op (line 656) | static bool ggml_is_view_op(enum ggml_op op) {
function sched_backend_prio (line 661) | static int sched_backend_prio(ggml_backend_sched_t sched, ggml_backend_t...
function sched_allocr_prio (line 670) | static int sched_allocr_prio(ggml_backend_sched_t sched, ggml_tallocr_t ...
function ggml_backend_t (line 679) | static ggml_backend_t get_buffer_backend(ggml_backend_sched_t sched, ggm...
function ggml_backend_t (line 692) | static ggml_backend_t get_allocr_backend(ggml_backend_sched_t sched, ggm...
function ggml_backend_t (line 715) | static ggml_backend_t sched_backend_from_cur(ggml_backend_sched_t sched,...
function sched_print_assignments (line 766) | static void sched_print_assignments(ggml_backend_sched_t sched, struct g...
type ggml_tensor (line 803) | struct ggml_tensor
type ggml_context (line 803) | struct ggml_context
type ggml_tensor (line 803) | struct ggml_tensor
type ggml_tensor (line 804) | struct ggml_tensor
function sched_split_graph (line 813) | static void sched_split_graph(ggml_backend_sched_t sched, struct ggml_cg...
function sched_alloc_splits (line 1025) | static void sched_alloc_splits(ggml_backend_sched_t sched) {
function sched_compute_splits (line 1033) | static void sched_compute_splits(ggml_backend_sched_t sched) {
function sched_reset (line 1093) | static void sched_reset(ggml_backend_sched_t sched) {
function ggml_backend_sched_t (line 1099) | ggml_backend_sched_t ggml_backend_sched_new(ggml_backend_t * backends, i...
function ggml_backend_sched_free (line 1120) | void ggml_backend_sched_free(ggml_backend_sched_t sched) {
function ggml_backend_sched_init_measure (line 1134) | void ggml_backend_sched_init_measure(ggml_backend_sched_t sched, struct ...
function ggml_backend_sched_graph_compute (line 1155) | void ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct...
function ggml_tallocr_t (line 1164) | ggml_tallocr_t ggml_backend_sched_get_tallocr(ggml_backend_sched_t sched...
function ggml_backend_buffer_t (line 1169) | ggml_backend_buffer_t ggml_backend_sched_get_buffer(ggml_backend_sched_t...
function ggml_backend_sched_set_node_backend (line 1174) | void ggml_backend_sched_set_node_backend(ggml_backend_sched_t sched, str...
function ggml_backend_view_init (line 1181) | void ggml_backend_view_init(ggml_backend_buffer_t buffer, struct ggml_te...
function ggml_backend_tensor_alloc (line 1194) | void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml...
type ggml_tensor (line 1207) | struct ggml_tensor
type ggml_hash_set (line 1207) | struct ggml_hash_set
type ggml_tensor (line 1207) | struct ggml_tensor
type ggml_context (line 1208) | struct ggml_context
type ggml_context (line 1208) | struct ggml_context
type ggml_tensor (line 1208) | struct ggml_tensor
type ggml_tensor (line 1218) | struct ggml_tensor
type ggml_tensor (line 1229) | struct ggml_tensor
function graph_init_tensor (line 1240) | static void graph_init_tensor(struct ggml_hash_set hash_set, struct ggml...
function ggml_backend_graph_copy (line 1265) | struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t ba...
function ggml_backend_graph_copy_free (line 1320) | void ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy) {
function ggml_backend_compare_graph_backend (line 1326) | void ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_ba...
FILE: ggml/src/ggml-cuda.h
type ggml_tensor (line 23) | struct ggml_tensor
type ggml_tensor (line 23) | struct ggml_tensor
type ggml_tensor (line 23) | struct ggml_tensor
type ggml_tensor (line 25) | struct ggml_tensor
type ggml_tensor (line 26) | struct ggml_tensor
type ggml_tensor (line 28) | struct ggml_tensor
type ggml_tensor (line 29) | struct ggml_tensor
type ggml_tensor (line 30) | struct ggml_tensor
type ggml_tensor (line 32) | struct ggml_tensor
type ggml_tensor (line 33) | struct ggml_tensor
type ggml_compute_params (line 39) | struct ggml_compute_params
type ggml_tensor (line 39) | struct ggml_tensor
FILE: ggml/src/ggml-impl.h
function ggml_compute_fp16_to_fp32 (line 103) | static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) {
function ggml_fp16_t (line 116) | static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) {
function fp32_from_bits (line 133) | static inline float fp32_from_bits(uint32_t w) {
function fp32_to_bits (line 142) | static inline uint32_t fp32_to_bits(float f) {
function ggml_compute_fp16_to_fp32 (line 151) | static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) {
function ggml_fp16_t (line 174) | static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) {
function ggml_lookup_fp16_to_fp32 (line 216) | inline static float ggml_lookup_fp16_to_fp32(ggml_fp16_t f) {
type ggml_hash_set (line 230) | struct ggml_hash_set
type ggml_tensor (line 230) | struct ggml_tensor
type ggml_hash_set (line 233) | struct ggml_hash_set
type ggml_tensor (line 233) | struct ggml_tensor
type ggml_hash_set (line 236) | struct ggml_hash_set
type ggml_tensor (line 236) | struct ggml_tensor
type ggml_hash_set (line 239) | struct ggml_hash_set
type ggml_tensor (line 239) | struct ggml_tensor
FILE: ggml/src/ggml-metal.h
type ggml_tensor (line 29) | struct ggml_tensor
type ggml_cgraph (line 30) | struct ggml_cgraph
type ggml_metal_context (line 36) | struct ggml_metal_context
type ggml_metal_context (line 39) | struct ggml_metal_context
type ggml_metal_context (line 40) | struct ggml_metal_context
type ggml_metal_context (line 46) | struct ggml_metal_context
type ggml_metal_context (line 56) | struct ggml_metal_context
type ggml_metal_context (line 63) | struct ggml_metal_context
type ggml_tensor (line 63) | struct ggml_tensor
type ggml_metal_context (line 66) | struct ggml_metal_context
type ggml_tensor (line 66) | struct ggml_tensor
type ggml_metal_context (line 70) | struct ggml_metal_context
type ggml_cgraph (line 70) | struct ggml_cgraph
type ggml_metal_context (line 73) | struct ggml_metal_context
type ggml_metal_context (line 76) | struct ggml_metal_context
type ggml_metal_context (line 80) | struct ggml_metal_context
type ggml_cgraph (line 80) | struct ggml_cgraph
FILE: ggml/src/ggml-opencl.cpp
type block_q4_1 (line 46) | struct __attribute__ ((packed)) block_q4_1
type block_q5_0 (line 53) | struct __attribute__ ((packed)) block_q5_0
type block_q5_1 (line 60) | struct __attribute__ ((packed)) block_q5_1
type block_q8_0 (line 68) | struct __attribute__ ((packed)) block_q8_0
type block_q2_K (line 74) | struct __attribute__((packed)) block_q2_K
type block_q3_K (line 82) | struct __attribute__((packed)) block_q3_K
type block_q4_K (line 90) | struct __attribute__((packed)) block_q4_K
type block_q5_K (line 98) | struct __attribute__((packed)) block_q5_K
type block_q6_K (line 107) | struct __attribute__((packed)) block_q6_K
function __kernel (line 115) | __kernel void convert_fp16_to_fp32(__global half* x, __global float* y) {
function dequantize_q4_0 (line 121) | void dequantize_q4_0(__global const struct block_q4_0* x, const int ib, ...
function dequantize_q4_1 (line 132) | void dequantize_q4_1(__global const struct block_q4_1* x, const int ib, ...
function dequantize_q5_0 (line 144) | void dequantize_q5_0(__global const struct block_q5_0* x, const int ib, ...
function dequantize_q5_1 (line 158) | void dequantize_q5_1(__global const struct block_q5_1* x, const int ib, ...
function dequantize_q8_0 (line 173) | void dequantize_q8_0(__global const struct block_q8_0* x, const int ib, ...
function convert_f16 (line 182) | void convert_f16(__global half* x, const int ib, const int iqs, float* v...
function __kernel (line 252) | __kernel void dequantize_block_q4_K(__global const struct block_q4_K *x,...
function __kernel (line 282) | __kernel void dequantize_block_q5_K(__global const struct block_q5_K *x,...
function __kernel (line 314) | __kernel void dequantize_block_q6_K(__global const struct block_q6_K *x,...
function __kernel (line 336) | __kernel void dequantize_mul_mat_vec_q2_K(__global const struct block_q2...
function __kernel (line 409) | __kernel void dequantize_mul_mat_vec_q3_K(__global const struct block_q3...
function __kernel (line 483) | __kernel void dequantize_mul_mat_vec_q4_K(__global const struct block_q4...
function __kernel (line 557) | __kernel void dequantize_mul_mat_vec_q5_K(__global const struct block_q5...
function __kernel (line 639) | __kernel void dequantize_mul_mat_vec_q6_K(__global const struct block_q6...
function generate_kernels (line 859) | std::string generate_kernels() {
function cl_program (line 897) | static cl_program build_program_from_source(cl_context ctx, cl_device_id...
function ggml_cl_init (line 931) | void ggml_cl_init(void) {
function cl_kernel (line 1148) | static cl_kernel* ggml_get_to_fp32_cl(ggml_type type) {
function ggml_cl_global_denom (line 1177) | static size_t ggml_cl_global_denom(ggml_type type) {
function ggml_cl_local_size (line 1199) | static size_t ggml_cl_local_size(ggml_type type) {
function cl_kernel (line 1221) | static cl_kernel* ggml_get_dequantize_mul_mat_vec_cl(ggml_type type) {
type scoped_spin_lock (line 1253) | struct scoped_spin_lock {
method scoped_spin_lock (line 1255) | scoped_spin_lock(std::atomic_flag& lock) : lock(lock) {
method scoped_spin_lock (line 1263) | scoped_spin_lock(const scoped_spin_lock&) = delete;
method scoped_spin_lock (line 1264) | scoped_spin_lock& operator=(const scoped_spin_lock&) = delete;
type cl_buffer (line 1267) | struct cl_buffer {
function cl_mem (line 1275) | static cl_mem ggml_cl_pool_malloc(size_t size, size_t * actual_size) {
function ggml_cl_pool_free (line 1317) | static void ggml_cl_pool_free(cl_mem mem, size_t size) {
function ggml_cl_free_data (line 1332) | void ggml_cl_free_data(const struct ggml_tensor* tensor) {
function cl_int (line 1341) | static cl_int ggml_cl_h2d_tensor_2d(cl_command_queue queue, cl_mem dst, ...
function ggml_cl_mul_f32 (line 1378) | static void ggml_cl_mul_f32(const ggml_tensor * src0, const ggml_tensor ...
function ggml_cl_mul (line 1466) | void ggml_cl_mul(const struct ggml_tensor * src0, const struct ggml_tens...
function ggml_cl_mul_mat_f32 (line 1471) | static void ggml_cl_mul_mat_f32(const ggml_tensor * src0, const ggml_ten...
function ggml_cl_mul_mat_f16 (line 1540) | static void ggml_cl_mul_mat_f16(const ggml_tensor * src0, const ggml_ten...
function ggml_cl_mul_mat_q_f32 (line 1647) | static void ggml_cl_mul_mat_q_f32(const ggml_tensor * src0, const ggml_t...
function ggml_cl_can_mul_mat (line 1774) | bool ggml_cl_can_mul_mat(const struct ggml_tensor * src0, const struct g...
function ggml_cl_mul_mat_use_f16 (line 1791) | bool ggml_cl_mul_mat_use_f16(const struct ggml_tensor * src0, const stru...
function ggml_cl_mul_mat (line 1811) | void ggml_cl_mul_mat(const struct ggml_tensor * src0, const struct ggml_...
function ggml_cl_mul_mat_get_wsize (line 1833) | size_t ggml_cl_mul_mat_get_wsize(const struct ggml_tensor * src0, const ...
function ggml_cl_transform_tensor (line 1840) | void ggml_cl_transform_tensor(void * data, ggml_tensor * tensor) {
FILE: ggml/src/ggml-opencl.h
type ggml_tensor (line 11) | struct ggml_tensor
type ggml_tensor (line 11) | struct ggml_tensor
type ggml_tensor (line 11) | struct ggml_tensor
type ggml_tensor (line 12) | struct ggml_tensor
type ggml_tensor (line 12) | struct ggml_tensor
type ggml_tensor (line 12) | struct ggml_tensor
type ggml_tensor (line 13) | struct ggml_tensor
type ggml_tensor (line 13) | struct ggml_tensor
type ggml_tensor (line 13) | struct ggml_tensor
type ggml_tensor (line 14) | struct ggml_tensor
type ggml_tensor (line 14) | struct ggml_tensor
type ggml_tensor (line 14) | struct ggml_tensor
type ggml_tensor (line 19) | struct ggml_tensor
type ggml_tensor (line 21) | struct ggml_tensor
FILE: ggml/src/ggml-quants.c
function __m128i (line 54) | static inline __m128i mul_sum_i8_pairs(const __m128i x, const __m128i y) {
function hsum_float_8 (line 67) | static inline float hsum_float_8(const __m256 x) {
function hsum_i32_8 (line 76) | static inline int hsum_i32_8(const __m256i a) {
function hsum_i32_4 (line 85) | static inline int hsum_i32_4(const __m128i a) {
function __m256i (line 94) | static inline __m256i bytes_from_bits_32(const uint8_t * x) {
function __m256i (line 108) | static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi)
function __m256 (line 117) | static inline __m256 sum_i16_pairs_float(const __m256i x) {
function __m256 (line 123) | static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m...
function __m256 (line 136) | static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m25...
function __m128i (line 150) | static inline __m128i packNibbles( __m256i bytes )
function __m256i (line 172) | static inline __m256i bytes_from_bits_32(const uint8_t * x) {
function __m256i (line 189) | static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi)
function __m256 (line 201) | static inline __m256 sum_i16_pairs_float(const __m128i xh, const __m128i...
function __m256 (line 209) | static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m...
function __m256 (line 221) | static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m25...
function __m128i (line 238) | static inline __m128i packNibbles( __m128i bytes1, __m128i bytes2 )
function hsum_float_4x4 (line 256) | static inline float hsum_float_4x4(const __m128 a, const __m128 b, const...
function vaddvq_s16 (line 280) | inline static int32_t vaddvq_s16(int16x8_t v) {
function int16x8_t (line 288) | inline static int16x8_t vpaddq_s16(int16x8_t a, int16x8_t b) {
function vaddvq_s32 (line 294) | inline static int32_t vaddvq_s32(int32x4_t v) {
function vaddvq_f32 (line 298) | inline static float vaddvq_f32(float32x4_t v) {
function vmaxvq_f32 (line 302) | inline static float vmaxvq_f32(float32x4_t v) {
function int32x4_t (line 308) | inline static int32x4_t vcvtnq_s32_f32(float32x4_t v) {
type ggml_int16x8x2_t (line 326) | typedef struct ggml_int16x8x2_t {
function ggml_int16x8x2_t (line 330) | inline static ggml_int16x8x2_t ggml_vld1q_s16_x2(const int16_t * ptr) {
type ggml_uint8x16x2_t (line 339) | typedef struct ggml_uint8x16x2_t {
function ggml_uint8x16x2_t (line 343) | inline static ggml_uint8x16x2_t ggml_vld1q_u8_x2(const uint8_t * ptr) {
type ggml_uint8x16x4_t (line 352) | typedef struct ggml_uint8x16x4_t {
function ggml_uint8x16x4_t (line 356) | inline static ggml_uint8x16x4_t ggml_vld1q_u8_x4(const uint8_t * ptr) {
type ggml_int8x16x2_t (line 367) | typedef struct ggml_int8x16x2_t {
function ggml_int8x16x2_t (line 371) | inline static ggml_int8x16x2_t ggml_vld1q_s8_x2(const int8_t * ptr) {
type ggml_int8x16x4_t (line 380) | typedef struct ggml_int8x16x4_t {
function ggml_int8x16x4_t (line 384) | inline static ggml_int8x16x4_t ggml_vld1q_s8_x4(const int8_t * ptr) {
function quantize_row_q4_0_reference (line 428) | void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * ...
function quantize_row_q4_0 (line 465) | void quantize_row_q4_0(const float * restrict x, void * restrict y, int ...
function quantize_row_q4_1_reference (line 469) | void quantize_row_q4_1_reference(const float * restrict x, block_q4_1 * ...
function quantize_row_q4_1 (line 506) | void quantize_row_q4_1(const float * restrict x, void * restrict y, int ...
function quantize_row_q5_0_reference (line 510) | void quantize_row_q5_0_reference(const float * restrict x, block_q5_0 * ...
function quantize_row_q5_0 (line 554) | void quantize_row_q5_0(const float * restrict x, void * restrict y, int ...
function quantize_row_q5_1_reference (line 558) | void quantize_row_q5_1_reference(const float * restrict x, block_q5_1 * ...
function quantize_row_q5_1 (line 602) | void quantize_row_q5_1(const float * restrict x, void * restrict y, int ...
function quantize_row_q8_0_reference (line 607) | void quantize_row_q8_0_reference(const float * restrict x, block_q8_0 * ...
function quantize_row_q8_0 (line 632) | void quantize_row_q8_0(const float * restrict x, void * restrict vy, int...
function quantize_row_q8_1_reference (line 821) | void quantize_row_q8_1_reference(const float * restrict x, block_q8_1 * ...
function quantize_row_q8_1 (line 856) | void quantize_row_q8_1(const float * restrict x, void * restrict vy, int...
function dequantize_row_q4_0 (line 1074) | void dequantize_row_q4_0(const block_q4_0 * restrict x, float * restrict...
function dequantize_row_q4_1 (line 1094) | void dequantize_row_q4_1(const block_q4_1 * restrict x, float * restrict...
function dequantize_row_q5_0 (line 1115) | void dequantize_row_q5_0(const block_q5_0 * restrict x, float * restrict...
function dequantize_row_q5_1 (line 1141) | void dequantize_row_q5_1(const block_q5_1 * restrict x, float * restrict...
function dequantize_row_q8_0 (line 1168) | void dequantize_row_q8_0(const block_q8_0 * restrict x, float * restrict...
function nearest_int (line 1191) | static inline int nearest_int(float fval) {
function make_qx_quants (line 1198) | static float make_qx_quants(int n, int nmax, const float * restrict x, i...
function make_q3_quants (line 1262) | static float make_q3_quants(int n, int nmax, const float * restrict x, i...
function make_qkx1_quants (line 1321) | static float make_qkx1_quants(int n, int nmax, const float * restrict x,...
function get_scale_min_k4 (line 1446) | static inline void get_scale_min_k4(int j, const uint8_t * restrict q, u...
function quantize_row_q2_K_reference (line 1458) | void quantize_row_q2_K_reference(const float * restrict x, block_q2_K * ...
function dequantize_row_q2_K (line 1535) | void dequantize_row_q2_K(const block_q2_K * restrict x, float * restrict...
function quantize_row_q2_K (line 1581) | void quantize_row_q2_K(const float * restrict x, void * restrict vy, int...
function ggml_quantize_q2_K (line 1585) | size_t ggml_quantize_q2_K(const float * restrict src, void * restrict ds...
function quantize_row_q3_K_reference (line 1597) | void quantize_row_q3_K_reference(const float * restrict x, block_q3_K * ...
function dequantize_row_q3_K (line 1711) | void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict...
function dequantize_row_q3_K (line 1761) | void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict...
function quantize_row_q3_K (line 1794) | void quantize_row_q3_K(const float * restrict x, void * restrict vy, int...
function ggml_quantize_q3_K (line 1798) | size_t ggml_quantize_q3_K(const float * restrict src, void * restrict ds...
function quantize_row_q4_K_reference (line 1810) | void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * ...
function dequantize_row_q4_K (line 1917) | void dequantize_row_q4_K(const block_q4_K * restrict x, float * restrict...
function quantize_row_q4_K (line 1956) | void quantize_row_q4_K(const float * restrict x, void * restrict vy, int...
function ggml_quantize_q4_K (line 1962) | size_t ggml_quantize_q4_K(const float * restrict src, void * restrict ds...
function quantize_row_q5_K_reference (line 1975) | void quantize_row_q5_K_reference(const float * restrict x, block_q5_K * ...
function dequantize_row_q5_K (line 2117) | void dequantize_row_q5_K(const block_q5_K * restrict x, float * restrict...
function quantize_row_q5_K (line 2162) | void quantize_row_q5_K(const float * restrict x, void * restrict vy, int...
function ggml_quantize_q5_K (line 2168) | size_t ggml_quantize_q5_K(const float * restrict src, void * restrict ds...
function quantize_row_q6_K_reference (line 2181) | void quantize_row_q6_K_reference(const float * restrict x, block_q6_K * ...
function dequantize_row_q6_K (line 2263) | void dequantize_row_q6_K(const block_q6_K * restrict x, float * restrict...
function quantize_row_q6_K (line 2310) | void quantize_row_q6_K(const float * restrict x, void * restrict vy, int...
function ggml_quantize_q6_K (line 2316) | size_t ggml_quantize_q6_K(const float * src, void * dst, int n, int k, i...
function quantize_row_q8_K_reference (line 2329) | void quantize_row_q8_K_reference(const float * restrict x, block_q8_K * ...
function dequantize_row_q8_K (line 2366) | void dequantize_row_q8_K(const block_q8_K * restrict x, float * restrict...
function quantize_row_q8_K (line 2377) | void quantize_row_q8_K(const float * restrict x, void * restrict y, int ...
function __m256i (line 2389) | static inline __m256i get_scale_shuffle_q3k(int i) {
function __m256i (line 2398) | static inline __m256i get_scale_shuffle_k4(int i) {
function __m128i (line 2411) | static inline __m128i get_scale_shuffle(int i) {
function ggml_vec_dot_q4_0_q8_0 (line 2426) | void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, const void * rest...
function ggml_vec_dot_q4_1_q8_1 (line 2736) | void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void ...
function ggml_vec_dot_q5_0_q8_0 (line 2896) | void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void ...
function ggml_vec_dot_q5_1_q8_1 (line 3202) | void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void ...
function ggml_vec_dot_q8_0_q8_0 (line 3521) | void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void ...
function ggml_vec_dot_q2_K_q8_K (line 3645) | void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void ...
function ggml_vec_dot_q2_K_q8_K (line 4038) | void ggml_vec_dot_q2_K_q8_K(const int n, float * restrict s, const void ...
function ggml_vec_dot_q3_K_q8_K (line 4314) | void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void ...
function ggml_vec_dot_q3_K_q8_K (line 4858) | void ggml_vec_dot_q3_K_q8_K(const int n, float * restrict s, const void ...
function ggml_vec_dot_q4_K_q8_K (line 5216) | void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void ...
function ggml_vec_dot_q4_K_q8_K (line 5597) | void ggml_vec_dot_q4_K_q8_K(const int n, float * restrict s, const void ...
function ggml_vec_dot_q5_K_q8_K (line 5864) | void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void ...
function ggml_vec_dot_q5_K_q8_K (line 6305) | void ggml_vec_dot_q5_K_q8_K(const int n, float * restrict s, const void ...
function ggml_vec_dot_q6_K_q8_K (line 6594) | void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void ...
function ggml_vec_dot_q6_K_q8_K (line 7070) | void ggml_vec_dot_q6_K_q8_K(const int n, float * restrict s, const void ...
FILE: ggml/src/ggml-quants.h
type block_q4_0 (line 11) | typedef struct {
type block_q4_1 (line 18) | typedef struct {
type block_q5_0 (line 26) | typedef struct {
type block_q5_1 (line 34) | typedef struct {
type block_q8_0 (line 43) | typedef struct {
type block_q8_1 (line 50) | typedef struct {
type block_q2_K (line 74) | typedef struct {
type block_q3_K (line 87) | typedef struct {
type block_q3_K (line 95) | typedef struct {
type block_q4_K (line 109) | typedef struct {
type block_q4_K (line 116) | typedef struct {
type block_q5_K (line 130) | typedef struct {
type block_q5_K (line 138) | typedef struct {
type block_q6_K (line 152) | typedef struct {
type block_q8_K (line 161) | typedef struct {
FILE: ggml/src/ggml.c
type LONG (line 45) | typedef volatile LONG atomic_int;
type atomic_int (line 46) | typedef atomic_int atomic_bool;
function atomic_store (line 48) | static void atomic_store(atomic_int * ptr, LONG val) {
function LONG (line 51) | static LONG atomic_load(atomic_int * ptr) {
function LONG (line 54) | static LONG atomic_fetch_add(atomic_int * ptr, LONG inc) {
function LONG (line 57) | static LONG atomic_fetch_sub(atomic_int * ptr, LONG dec) {
type HANDLE (line 61) | typedef HANDLE pthread_t;
type DWORD (line 63) | typedef DWORD thread_ret_t;
function pthread_create (line 64) | static int pthread_create(pthread_t * out, void * unused, thread_ret_t(*...
function pthread_join (line 76) | static int pthread_join(pthread_t thread, void * unused) {
function sched_yield (line 83) | static int sched_yield (void) {
function ggml_print_backtrace (line 112) | void ggml_print_backtrace(void) {
function ggml_print_backtrace (line 141) | void ggml_print_backtrace(void) {
type ggml_float (line 254) | typedef double ggml_float;
function ggml_fp16_to_fp32 (line 283) | float ggml_fp16_to_fp32(ggml_fp16_t x) {
function ggml_fp16_t (line 287) | ggml_fp16_t ggml_fp32_to_fp16(float x) {
function ggml_fp16_to_fp3
Copy disabled (too large)
Download .json
Condensed preview — 312 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (13,422K chars).
[
{
"path": ".gitignore",
"chars": 1861,
"preview": "# Editors\n.idea/\n.vscode/\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.s"
},
{
"path": ".gitmodules",
"chars": 84,
"preview": "[submodule \"ggml/tracy\"]\n\tpath = ggml/tracy\n\turl = git@github.com:wolfpld/tracy.git\n"
},
{
"path": ".pre-commit-config.yaml",
"chars": 360,
"preview": "repos:\n - repo: https://github.com/pre-commit/pre-commit-hooks\n rev: v4.1.0\n hooks:\n - id: trailing-whitespa"
},
{
"path": "ACCEPTABLE_USE_POLICY",
"chars": 4949,
"preview": "Seamless Acceptable Use Policy\n\nMeta is committed to promoting safe and fair use of its tools and features, including Se"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3535,
"preview": "# Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and"
},
{
"path": "CONTRIBUTING.md",
"chars": 1526,
"preview": "# Contributing to `seamless_communication`\nWe want to make contributing to this project as easy and transparent as\npossi"
},
{
"path": "LICENSE",
"chars": 19329,
"preview": "\nAttribution-NonCommercial 4.0 International\n\n=======================================================================\n\nC"
},
{
"path": "MIT_LICENSE",
"chars": 1088,
"preview": "MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any pe"
},
{
"path": "README.md",
"chars": 23357,
"preview": "\n# Seamless Intro\n\nSeamless is a family of AI models that enable more natural and "
},
{
"path": "SEAMLESS_LICENSE",
"chars": 9952,
"preview": "Seamless Licensing Agreement\n\n“Agreement” means this “Seamless Licensing Agreement”, including, the terms and conditions"
},
{
"path": "Seamless_Tutorial.ipynb",
"chars": 8883869,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"view-in-github\",\n \"colab_t"
},
{
"path": "demo/.gitignore",
"chars": 7,
"preview": "assets\n"
},
{
"path": "demo/dino_pretssel/index.html",
"chars": 54179,
"preview": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"UTF-8\">\n <title>Textless Acoustic Model with Self-Supervised Distil"
},
{
"path": "demo/dino_pretssel/jquery-3.5.js",
"chars": 89492,
"preview": "/*! jQuery v3.5.0 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object"
},
{
"path": "demo/dino_pretssel/styles.css",
"chars": 7307,
"preview": "html {\n background-color: lightgrey;\n font-family: sans-serif;\n -webkit-text-size-adjust: 100%;\n -ms-text-si"
},
{
"path": "demo/dino_pretssel/wavesurfer.js",
"chars": 199401,
"preview": "/*!\n * wavesurfer.js 4.1.1 (2020-09-25)\n * https://wavesurfer-js.org\n * @license BSD-3-Clause\n */\n(function webpackUnive"
},
{
"path": "demo/expressive/app.py",
"chars": 9084,
"preview": "#!/usr/bin/env python\n# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is"
},
{
"path": "demo/expressive/requirements.txt",
"chars": 78,
"preview": "gradio~=4.5.0\nomegaconf~=2.3.0\ntorch~=2.1.0\ntorchaudio~=2.1.0\nfairseq2~=0.2.0\n"
},
{
"path": "demo/expressive/utils.py",
"chars": 2411,
"preview": "LANGUAGE_CODE_TO_NAME = {\n \"afr\": \"Afrikaans\",\n \"amh\": \"Amharic\",\n \"arb\": \"Modern Standard Arabic\",\n \"ary\": "
},
{
"path": "demo/m4tv1/app.py",
"chars": 19590,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "demo/m4tv1/requirements.txt",
"chars": 112,
"preview": "fairseq2\ngit+https://github.com/facebookresearch/seamless_communication\ngradio\nhuggingface_hub\ntorch\ntorchaudio\n"
},
{
"path": "demo/m4tv2/app.py",
"chars": 12291,
"preview": "#!/usr/bin/env python\n# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is"
},
{
"path": "demo/m4tv2/lang_list.py",
"chars": 4575,
"preview": "# Language dict\nlanguage_code_to_name = {\n \"afr\": \"Afrikaans\",\n \"amh\": \"Amharic\",\n \"arb\": \"Modern Standard Arab"
},
{
"path": "demo/m4tv2/requirements.txt",
"chars": 78,
"preview": "gradio~=4.5.0\nomegaconf~=2.3.0\ntorch~=2.1.0\ntorchaudio~=2.1.0\nfairseq2~=0.2.0\n"
},
{
"path": "dev_requirements.txt",
"chars": 53,
"preview": "audiocraft\nblack\nflake8\nisort\nmypy\npre-commit\npytest\n"
},
{
"path": "docs/expressive/README.md",
"chars": 9916,
"preview": "# SeamlessExpressive\n\nSeamlessExpressive model consists of two main modules: (1) Prosody UnitY2, which is a prosody-awar"
},
{
"path": "docs/expressive/seamless_align_expressive_README.md",
"chars": 2235,
"preview": "# SeamlessAlignExpressive\n\nBuilding upon our past work with WikiMatrix, CCMatrix, NLLB, SpeechMatrix and SeamlessM4T, we"
},
{
"path": "docs/m4t/README.md",
"chars": 20891,
"preview": "# SeamlessM4T\nSeamlessM4T is our foundational all-in-one **M**assively **M**ultilingual and **M**ultimodal **M**achine *"
},
{
"path": "docs/m4t/on_device_README.md",
"chars": 3178,
"preview": "# On-device Models [Experimental]\n\nApart from SeamlessM4T-LARGE (2.3B) and SeamlessM4T-MEDIUM (1.2B) models, we are also"
},
{
"path": "docs/m4t/seamless_align_README.md",
"chars": 33705,
"preview": "# Seamless - Speech to Speech and Speech to Text Metadata\n\nThis document contains metadata information for reconstructin"
},
{
"path": "docs/m4t/unity2_aligner_README.md",
"chars": 3306,
"preview": "# UnitY2 forced alignment extractor\n\nPlease refer to Section 3.3.2 of the \"Seamless: Multilingual Expressive and Streami"
},
{
"path": "docs/streaming/README.md",
"chars": 3438,
"preview": "# SeamlessStreaming\nSeamlessStreaming is a multilingual streaming translation model. It supports:\n\n- Streaming Automatic"
},
{
"path": "ggml/CMakeLists.txt",
"chars": 6850,
"preview": "cmake_minimum_required (VERSION 3.3)\nproject(ggml VERSION 0.1.0)\n\nset(CMAKE_EXPORT_COMPILE_COMMANDS \"on\")\nset(CMAKE_RUNT"
},
{
"path": "ggml/LICENSE",
"chars": 1072,
"preview": "MIT License\n\nCopyright (c) 2022 Georgi Gerganov\n\nPermission is hereby granted, free of charge, to any person obtaining a"
},
{
"path": "ggml/Makefile",
"chars": 1371,
"preview": "build: build/examples/unity/libfairseq2_cpp.so ggml/build/bin/unity\n\nbuild/examples/unity/libfairseq2_cpp.so: Makefile e"
},
{
"path": "ggml/README.md",
"chars": 2994,
"preview": "# unity.cpp\n\n## Introduction\n[GGML](https://github.com/ggerganov/ggml) is an open source library in C to enable large mo"
},
{
"path": "ggml/build.zig",
"chars": 4760,
"preview": "const std = @import(\"std\");\nconst builtin = @import(\"builtin\");\n\n// Zig Version: 0.11.0\n// Zig Build Command: zig build\n"
},
{
"path": "ggml/ci/run.sh",
"chars": 6244,
"preview": "#/bin/bash\n#\n# sample usage:\n#\n# mkdir tmp\n#\n# # CPU-only build\n# bash ./ci/run.sh ./tmp/results ./tmp/mnt\n#\n# # with CU"
},
{
"path": "ggml/cmake/BuildTypes.cmake",
"chars": 2037,
"preview": "# Add new build types\n\n# ReleaseGG - Release with enabled asserts\n\nSET(CMAKE_CXX_FLAGS_RELEASEGG\n \"-O3\"\n CACHE STR"
},
{
"path": "ggml/cmake/GitVars.cmake",
"chars": 717,
"preview": "find_package(Git)\n\n# the commit's SHA1\nexecute_process(COMMAND\n \"${GIT_EXECUTABLE}\" describe --match=NeVeRmAtCh --alw"
},
{
"path": "ggml/ctypes_utils.py",
"chars": 2668,
"preview": "import ctypes\nimport dataclasses\nimport functools\nimport inspect\nimport types\nfrom typing import Any, Callable, Generic,"
},
{
"path": "ggml/examples/CMakeLists.txt",
"chars": 612,
"preview": "if (GGML_ALL_WARNINGS)\n if (NOT MSVC)\n set(cxx_flags\n # TODO(marella): Add other warnings.\n -Wpe"
},
{
"path": "ggml/examples/common-ggml.cpp",
"chars": 8676,
"preview": "#include \"common-ggml.h\"\n\n#include <regex>\n#include <map>\n\nstatic const std::map<std::string, enum ggml_ftype> GGML_FTYP"
},
{
"path": "ggml/examples/common-ggml.h",
"chars": 410,
"preview": "#pragma once\n\n#include \"ggml.h\"\n\n#include <fstream>\n#include <vector>\n#include <string>\n\nenum ggml_ftype ggml_parse_ftyp"
},
{
"path": "ggml/examples/common.cpp",
"chars": 27711,
"preview": "#define _USE_MATH_DEFINES // for M_PI\n\n#include \"common.h\"\n\n// third-party utilities\n// use your favorite implementation"
},
{
"path": "ggml/examples/common.h",
"chars": 5296,
"preview": "// Various helper functions and utilities\n\n#pragma once\n\n#include <string>\n#include <map>\n#include <vector>\n#include <ra"
},
{
"path": "ggml/examples/dr_wav.h",
"chars": 241358,
"preview": "/*\nWAV audio loader and writer. Choice of public domain or MIT-0. See license statements at the end of this file.\ndr_wav"
},
{
"path": "ggml/examples/kaldi-native-fbank/CMakeLists.txt",
"chars": 182,
"preview": "add_subdirectory(csrc)\n\nif(KALDI_NATIVE_FBANK_BUILD_PYTHON)\n message(STATUS \"Building Python\")\n add_subdirectory(pytho"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/CMakeLists.txt",
"chars": 2100,
"preview": "\ninclude_directories(${PROJECT_SOURCE_DIR})\nset(sources\n feature-fbank.cc\n feature-functions.cc\n feature-window.cc\n "
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/feature-fbank.cc",
"chars": 3953,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/feature-fbank.h",
"chars": 4498,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/feature-functions.cc",
"chars": 1580,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/feature-functions.h",
"chars": 1533,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/feature-window.cc",
"chars": 8106,
"preview": "// kaldi-native-fbank/csrc/feature-window.cc\n//\n// Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n\n// "
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/feature-window.h",
"chars": 6830,
"preview": "// kaldi-native-fbank/csrc/feature-window.h\n//\n// Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n\n// T"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/fftsg.c",
"chars": 80227,
"preview": "/* This file is copied from\n *\n * https://www.kurims.kyoto-u.ac.jp/~ooura/fft.html\n *\n * Copyright Takuya OOURA, 1996-20"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/log.cc",
"chars": 4483,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/log.h",
"chars": 11282,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/mel-computations.cc",
"chars": 9646,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/mel-computations.h",
"chars": 3988,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/online-feature.cc",
"chars": 5385,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/online-feature.h",
"chars": 5395,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/rfft.cc",
"chars": 1720,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/kaldi-native-fbank/csrc/rfft.h",
"chars": 1598,
"preview": "/**\n * Copyright (c) 2022 Xiaomi Corporation (authors: Fangjun Kuang)\n *\n * See LICENSE for clarification regarding mu"
},
{
"path": "ggml/examples/python/README.md",
"chars": 4822,
"preview": "# Simple autogenerated Python bindings for ggml\n\nThis folder contains:\n\n- Scripts to generate full Python bindings from "
},
{
"path": "ggml/examples/python/api.h",
"chars": 411,
"preview": "/*\n List here all the headers you want to expose in the Python bindings,\n then run `python regenerate.py` (see details"
},
{
"path": "ggml/examples/python/example_add_quant.py",
"chars": 853,
"preview": "from ggml import lib, ffi\nfrom ggml.utils import init, copy, numpy\nimport numpy as np\n\nctx = init(mem_size=12*1024*1024)"
},
{
"path": "ggml/examples/python/example_test_all_quants.py",
"chars": 1945,
"preview": "from ggml import ffi, lib\nfrom ggml.utils import init, numpy, copy\nimport numpy as np\nfrom math import pi, cos, sin, cei"
},
{
"path": "ggml/examples/python/ggml/__init__.py",
"chars": 1914,
"preview": "\"\"\"\n Python bindings for the ggml library.\n\n Usage example:\n\n from ggml import lib, ffi\n from ggml.utils imp"
},
{
"path": "ggml/examples/python/ggml/__init__.pyi",
"chars": 95355,
"preview": "# auto-generated file\nimport ggml.ffi as ffi\nimport numpy as np\nclass lib:\n @property\n def GGML_BACKEND_CPU(self) -> i"
},
{
"path": "ggml/examples/python/ggml/cffi.py",
"chars": 51583,
"preview": "# auto-generated file\nimport _cffi_backend\n\nffi = _cffi_backend.FFI('ggml.cffi',\n _version = 0x2601,\n _types = b'\\"
},
{
"path": "ggml/examples/python/ggml/ffi/__init__.pyi",
"chars": 60,
"preview": "# Phony stubs.\n\nclass CData:\n pass\n\nclass CType:\n pass"
},
{
"path": "ggml/examples/python/ggml/utils.py",
"chars": 8965,
"preview": "\"\"\"\n Common helpers for working with ggml + numpy\n\"\"\"\nfrom ggml import ffi, lib\nfrom typing import Union, Optional\nimpo"
},
{
"path": "ggml/examples/python/regenerate.py",
"chars": 2144,
"preview": "# Generates bindings for the ggml library.\n#\n# cffi requires prior C preprocessing of the headers, and it uses pycparser"
},
{
"path": "ggml/examples/python/stubs.py",
"chars": 4516,
"preview": "\"\"\"\n This generates .pyi stubs for the cffi Python bindings generated by regenerate.py\n\"\"\"\nimport sys, re, itertools\nsy"
},
{
"path": "ggml/examples/python/test_tensor.py",
"chars": 9504,
"preview": "import pytest\nfrom pytest import raises\n\nfrom ggml import lib, ffi\nfrom ggml.utils import init, copy, numpy\nimport numpy"
},
{
"path": "ggml/examples/unity/CMakeLists.txt",
"chars": 948,
"preview": "# unity\nadd_library(fairseq2_cpp)\ntarget_include_directories(fairseq2_cpp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../..)\n"
},
{
"path": "ggml/examples/unity/fairseq2.cpp",
"chars": 71473,
"preview": "#include <algorithm>\n#include <fnmatch.h>\n#include <iostream>\n#include <math.h>\n#include <queue>\n#include <unordered_map"
},
{
"path": "ggml/examples/unity/fairseq2.h",
"chars": 10014,
"preview": "#pragma once\n\n#include <unordered_map>\n#include <string>\n#include <vector>\n#include \"ggml.h\"\n#include \"kaldi-native-fban"
},
{
"path": "ggml/examples/unity/lib/unity_lib.cpp",
"chars": 8091,
"preview": "#include \"unity_lib.h\"\n#include <algorithm>\n#include <stdexcept>\n\n\nstruct ggml_cgraph * unity_text_encoder(\n fair"
},
{
"path": "ggml/examples/unity/lib/unity_lib.h",
"chars": 1320,
"preview": "#include \"ggml/ggml.h\"\n#include \"ggml/ggml-alloc.h\"\n\n#include \"math.h\"\n#include \"model_loader.h\"\n#include \"fairseq2.h\"\n\n"
},
{
"path": "ggml/examples/unity/model_loader.cpp",
"chars": 7995,
"preview": "#include \"model_loader.h\"\n#include <string>\n\n#define DEBUG_MODEL_LOAD 0\n\nstd::ifstream open_ggml_file(const char* fname)"
},
{
"path": "ggml/examples/unity/model_loader.h",
"chars": 912,
"preview": "// Copyright (c) Meta Platforms, Inc. and affiliates.\n// All rights reserved.\n//\n// This source code is licensed under t"
},
{
"path": "ggml/examples/unity/unity.cpp",
"chars": 8001,
"preview": "#include \"ggml/ggml.h\"\n#include \"ggml/ggml-alloc.h\"\n\n#include \"math.h\"\n#include \"model_loader.h\"\n#include \"fairseq2.h\"\n#"
},
{
"path": "ggml/ggml.pc.in",
"chars": 241,
"preview": "prefix=@CMAKE_INSTALL_PREFIX@\nexec_prefix=${prefix}\nincludedir=${prefix}/include\nlibdir=${prefix}/lib\n\nName: ggml\nDescri"
},
{
"path": "ggml/ggml.py",
"chars": 16157,
"preview": "\"\"\"\nWe are vendoring https://github.com/abetlen/ggml-python (MIT License)\nadding a few utilities to convert between ggml"
},
{
"path": "ggml/ggml_convert.py",
"chars": 25765,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the li"
},
{
"path": "ggml/include/ggml/ggml-alloc.h",
"chars": 3849,
"preview": "#pragma once\n\n#include \"ggml.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct ggml_backend;\nstruct ggml_backend_buffe"
},
{
"path": "ggml/include/ggml/ggml-backend.h",
"chars": 8602,
"preview": "#pragma once\n\n#include \"ggml.h\"\n#include \"ggml-alloc.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n typedef struct ggm"
},
{
"path": "ggml/include/ggml/ggml.h",
"chars": 82705,
"preview": "#pragma once\n\n//\n// GGML Tensor Library\n//\n// This documentation is still a work in progress.\n// If you wish some specif"
},
{
"path": "ggml/mt.py",
"chars": 7351,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the li"
},
{
"path": "ggml/requirements.txt",
"chars": 157,
"preview": "accelerate==0.19.0\nnumpy==1.24.3\nsentencepiece==0.1.98\ntorch==2.0.1\ntorchaudio==2.0.2\ntorchvision==0.15.2\ntransformers=="
},
{
"path": "ggml/scripts/sync-llama.sh",
"chars": 929,
"preview": "#!/bin/bash\n\ncp -rpv ../llama.cpp/ggml.c src/ggml.c\ncp -rpv ../llama.cpp/ggml-alloc.c src/ggml-alloc.c\ncp "
},
{
"path": "ggml/scripts/sync-whisper.sh",
"chars": 1286,
"preview": "#!/bin/bash\n\ncp -rpv ../whisper.cpp/ggml.c src/ggml.c\ncp -rpv ../whisper.cpp/ggml-cuda.h "
},
{
"path": "ggml/src/CMakeLists.txt",
"chars": 14143,
"preview": "if (GGML_ALL_WARNINGS)\n if (NOT MSVC)\n add_compile_options(-Wunused -Wextra -Wcast-qual -Wdouble-promotion)\n "
},
{
"path": "ggml/src/ggml-alloc.c",
"chars": 28411,
"preview": "#include \"ggml-alloc.h\"\n#include \"ggml-backend-impl.h\"\n#include \"ggml.h\"\n#include \"ggml-impl.h\"\n#include <assert.h>\n#inc"
},
{
"path": "ggml/src/ggml-backend-impl.h",
"chars": 4597,
"preview": "#pragma once\n\n// ggml-backend internal header\n\n#include \"ggml-backend.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n /"
},
{
"path": "ggml/src/ggml-backend.c",
"chars": 49980,
"preview": "#include \"ggml-backend-impl.h\"\n#include \"ggml-alloc.h\"\n#include \"ggml-impl.h\"\n\n#include <assert.h>\n#include <limits.h>\n#"
},
{
"path": "ggml/src/ggml-cuda.cu",
"chars": 256542,
"preview": "#include <cstddef>\n#include <cstdint>\n#include <limits>\n#include <stdint.h>\n#include <stdio.h>\n#include <atomic>\n#includ"
},
{
"path": "ggml/src/ggml-cuda.h",
"chars": 1717,
"preview": "#pragma once\n\n#include \"ggml.h\"\n\n#ifdef GGML_USE_HIPBLAS\n#define GGML_CUDA_NAME \"ROCm\"\n#define GGML_CUBLAS_NAME \"hipBLAS"
},
{
"path": "ggml/src/ggml-impl.h",
"chars": 7381,
"preview": "#pragma once\n\n#include \"ggml.h\"\n\n// GGML internal header\n\n#include <assert.h>\n#include <stddef.h>\n#include <stdbool.h>\n#"
},
{
"path": "ggml/src/ggml-metal.h",
"chars": 3425,
"preview": "// An interface allowing to compute ggml_cgraph with Metal\n//\n// This is a fully functional interface that extends ggml "
},
{
"path": "ggml/src/ggml-metal.m",
"chars": 62093,
"preview": "#import \"ggml-metal.h\"\n\n#import \"ggml.h\"\n\n#import <Foundation/Foundation.h>\n\n#import <Metal/Metal.h>\n\n#undef MIN\n#undef "
},
{
"path": "ggml/src/ggml-metal.metal",
"chars": 78291,
"preview": "#include <metal_stdlib>\n\nusing namespace metal;\n\n#define MAX(x, y) ((x) > (y) ? (x) : (y))\n\n#define QK4_0 32\n#define QR4"
},
{
"path": "ggml/src/ggml-opencl.cpp",
"chars": 68854,
"preview": "#include \"ggml-opencl.h\"\n\n#include <array>\n#include <atomic>\n#include <sstream>\n#include <vector>\n#include <limits>\n\n#de"
},
{
"path": "ggml/src/ggml-opencl.h",
"chars": 845,
"preview": "#pragma once\n\n#include \"ggml.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid ggml_cl_init(void);\n\nvoid ggml_cl_mul(c"
},
{
"path": "ggml/src/ggml-quants.c",
"chars": 291227,
"preview": "#include \"ggml-quants.h\"\n#include \"ggml-impl.h\"\n\n#include <math.h>\n#include <string.h>\n#include <assert.h>\n#include <flo"
},
{
"path": "ggml/src/ggml-quants.h",
"chars": 10231,
"preview": "#pragma once\n\n#include \"ggml-impl.h\"\n\n// GGML internal header\n\n#include <stdint.h>\n#include <stddef.h>\n\n#define QK4_0 32"
},
{
"path": "ggml/src/ggml.c",
"chars": 639241,
"preview": "#define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous \"unsafe\" warnings on Windows\n#define _USE_MATH_DEFINES // For M_"
},
{
"path": "ggml/test_ggml_integration.py",
"chars": 13728,
"preview": "import ctypes\nimport functools\nimport logging\nimport sys\nfrom ctypes import c_void_p\nfrom pathlib import Path\nfrom typin"
},
{
"path": "ggml/test_unity_cpp.py",
"chars": 26397,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "ggml/tests/CMakeLists.txt",
"chars": 13108,
"preview": "# check systems\nif (NOT UNAME_S)\n execute_process(COMMAND uname -s OUTPUT_VARIABLE UNAME_S)\nendif()\nif (NOT UNAME_P)\n"
},
{
"path": "ggml/tests/test-blas0.c",
"chars": 6639,
"preview": "#include \"ggml.h\"\n\n#include <stdint.h>\n#include <stdio.h>\n#include <assert.h>\n#include <stdlib.h>\n#include <string.h>\n#i"
},
{
"path": "ggml/tests/test-conv-transpose.c",
"chars": 5980,
"preview": "#include \"ggml/ggml.h\"\n\n#include <string.h>\n#include <stdio.h>\n#include <stdlib.h>\n\nstruct ggml_context* make_ctx(void) "
},
{
"path": "ggml/tests/test-customop.c",
"chars": 6707,
"preview": "#include \"ggml/ggml.h\"\n#include <string.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <assert.h>\n\n#if defined(_WIN3"
},
{
"path": "ggml/tests/test-grad0.cpp",
"chars": 52856,
"preview": "#define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous \"unsafe\" warnigns on Windows\n#include \"ggml.h\"\n\n#include <cmath>"
},
{
"path": "ggml/tests/test-mul-mat0.c",
"chars": 10779,
"preview": "#define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous \"unsafe\" warnigns on Windows\n#include \"ggml/ggml.h\"\n\n#include <m"
},
{
"path": "ggml/tests/test-mul-mat1.c",
"chars": 9003,
"preview": "#include <stdint.h>\n#include <stdio.h>\n#include <assert.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#in"
},
{
"path": "ggml/tests/test-mul-mat2.c",
"chars": 91775,
"preview": "// quantized matrix multiplication\n\n#include \"ggml.h\"\n\n#include <float.h>\n#include <stdint.h>\n#include <stdio.h>\n#includ"
},
{
"path": "ggml/tests/test-opt.cpp",
"chars": 5739,
"preview": "#include \"ggml.h\"\n\n#include <cmath>\n#include <cstdio>\n#include <cstdlib>\n#include <cassert>\n\n#define MAX_NARGS 2\n\n#if de"
},
{
"path": "ggml/tests/test-pool.c",
"chars": 4434,
"preview": "#include \"ggml/ggml.h\"\n\n#include <string.h>\n#include <stdio.h>\n#include <stdlib.h>\n\nstruct ggml_context* make_ctx(void) "
},
{
"path": "ggml/tests/test-quantize-fns.cpp",
"chars": 5614,
"preview": "// Unit tests for quantization specific functions - quantize, dequantize and dot product\n\n#include \"ggml.h\"\n\n#undef NDEB"
},
{
"path": "ggml/tests/test-quantize-perf.cpp",
"chars": 14007,
"preview": "// Benchmark quantization specific functions on synthetic data\n\n#include \"ggml.h\"\n\n#undef NDEBUG\n#include <algorithm>\n#i"
},
{
"path": "ggml/tests/test-rel-pos.c",
"chars": 3032,
"preview": "#include \"ggml/ggml.h\"\n\n#include <string.h>\n#include <stdio.h>\n#include <stdlib.h>\n\nstruct ggml_context* make_ctx(void) "
},
{
"path": "ggml/tests/test-svd0.c",
"chars": 5141,
"preview": "// SVD dimensionality reduction\n\n#include <float.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <assert.h>\n#include "
},
{
"path": "ggml/tests/test-vec0.c",
"chars": 3402,
"preview": "#include <stdio.h>\n#include <assert.h>\n#include <stdlib.h>\n#include <time.h>\n\nconst int N = 1 << 14;\nconst int M = 1 << "
},
{
"path": "ggml/tests/test-vec1.c",
"chars": 21183,
"preview": "#include <stdint.h>\n#include <stdio.h>\n#include <assert.h>\n#include <stdlib.h>\n#include <time.h>\n#include <math.h>\n\n#inc"
},
{
"path": "ggml/tests/test-vec2.c",
"chars": 7310,
"preview": "#include <stdint.h>\n#include <stdio.h>\n#include <assert.h>\n#include <stdlib.h>\n#include <time.h>\n#include <math.h>\n\n#inc"
},
{
"path": "ggml/tests/test-xpos.c",
"chars": 3090,
"preview": "#include \"ggml/ggml.h\"\n\n#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n\nbool is_close(float a, float b, float "
},
{
"path": "ggml/tests/test0.c",
"chars": 1237,
"preview": "#include \"ggml/ggml.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n\nint main(int argc, const char ** argv) {\n struct ggml"
},
{
"path": "ggml/tests/test0.zig",
"chars": 1425,
"preview": "const std = @import(\"std\");\r\nconst c = @cImport({\r\n @cInclude(\"ggml/ggml.h\");\r\n});\r\n\r\npub fn main() !void {\r\n cons"
},
{
"path": "ggml/tests/test1.c",
"chars": 15593,
"preview": "#include \"ggml/ggml.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n\nint main(int argc, const char ** argv) {\n const int n"
},
{
"path": "ggml/tests/test1.zig",
"chars": 18066,
"preview": "const std = @import(\"std\");\r\nconst c = @cImport({\r\n @cInclude(\"ggml/ggml.h\");\r\n});\r\n\r\npub fn main() !void {\r\n cons"
},
{
"path": "ggml/tests/test2.c",
"chars": 5931,
"preview": "#define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous \"unsafe\" warnigns on Windows\n#include \"ggml/ggml.h\"\n\n#include <m"
},
{
"path": "ggml/tests/test2.zig",
"chars": 5828,
"preview": "const std = @import(\"std\");\r\nconst Thread = std.Thread;\r\nconst c = @cImport({\r\n @cInclude(\"ggml/ggml.h\");\r\n});\r\n\r\nfn "
},
{
"path": "ggml/tests/test3.c",
"chars": 2843,
"preview": "#include \"ggml/ggml.h\"\n\n#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n\nbool is_close(float a, float b, float "
},
{
"path": "ggml/tests/test3.zig",
"chars": 3278,
"preview": "const std = @import(\"std\");\r\nconst Thread = std.Thread;\r\nconst c = @cImport({\r\n @cInclude(\"stdlib.h\");\r\n @cInclude"
},
{
"path": "ggml/third_party_ggml.py",
"chars": 275599,
"preview": "\"\"\"This module is the core of the ggml-python library, it exposes a low-level [ctypes](https://docs.python.org/3/library"
},
{
"path": "pyproject.toml",
"chars": 982,
"preview": "[build-system]\nrequires = [\"packaging~=23.1\", \"setuptools~=67.8\", \"wheel~=0.40\"]\nbuild-backend = \"setuptools.build_meta\""
},
{
"path": "setup.py",
"chars": 1945,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/__init__.py",
"chars": 516,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cards/conformer_shaw.yaml",
"chars": 368,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cards/expresso.yaml",
"chars": 294,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cards/mexpresso_text.yaml",
"chars": 312,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cards/mintox.yaml",
"chars": 819,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cards/mutox.yaml",
"chars": 355,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/nano.yaml",
"chars": 872,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/nar_t2u_aligner.yaml",
"chars": 809,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/seamlessM4T_large.yaml",
"chars": 711,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/seamlessM4T_medium.yaml",
"chars": 716,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/seamlessM4T_v2_large.yaml",
"chars": 829,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/seamless_expressivity.yaml",
"chars": 814,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/seamless_streaming_monotonic_decoder.yaml",
"chars": 414,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cards/seamless_streaming_unity.yaml",
"chars": 820,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cards/unity_nllb-100.yaml",
"chars": 1159,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/unity_nllb-200.yaml",
"chars": 2017,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/vocoder_36langs.yaml",
"chars": 4011,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/vocoder_pretssel.yaml",
"chars": 4727,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/vocoder_pretssel_16khz.yaml",
"chars": 4733,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/vocoder_v2.yaml",
"chars": 3296,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cards/xlsr2_1b_v2.yaml",
"chars": 371,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the B"
},
{
"path": "src/seamless_communication/cli/__init__.py",
"chars": 201,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/eval_utils/__init__.py",
"chars": 633,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/eval_utils/compute_metrics.py",
"chars": 14197,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/eval_utils/lang_mapping.py",
"chars": 3185,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/expressivity/__init__.py",
"chars": 201,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the l"
},
{
"path": "src/seamless_communication/cli/expressivity/data/__init__.py",
"chars": 201,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the l"
},
{
"path": "src/seamless_communication/cli/expressivity/data/prepare_mexpresso.py",
"chars": 7967,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/expressivity/evaluate/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "src/seamless_communication/cli/expressivity/evaluate/evaluate.py",
"chars": 10369,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/expressivity/evaluate/post_process_pauserate.py",
"chars": 1566,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/expressivity/evaluate/run_asr_bleu.py",
"chars": 884,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/expressivity/predict/__init__.py",
"chars": 201,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the l"
},
{
"path": "src/seamless_communication/cli/expressivity/predict/predict.py",
"chars": 5135,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/expressivity/predict/pretssel_generator.py",
"chars": 3075,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n# This source code is licensed under the lic"
},
{
"path": "src/seamless_communication/cli/m4t/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "src/seamless_communication/cli/m4t/audio_to_units/README.md",
"chars": 1082,
"preview": "# Convert raw audio into units (unit_extraction)\n\nRaw audio needs to be converted to units to train UnitY models and voc"
},
{
"path": "src/seamless_communication/cli/m4t/audio_to_units/__init__.py",
"chars": 202,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the l"
},
{
"path": "src/seamless_communication/cli/m4t/audio_to_units/audio_to_units.py",
"chars": 1690,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the license found in the\n# M"
},
{
"path": "src/seamless_communication/cli/m4t/evaluate/README.md",
"chars": 1053,
"preview": "# Evaluating SeamlessM4T models\n\nRefer to the [SeamlessM4T README](../../../../../docs/m4t) for an overview of the M4T m"
},
{
"path": "src/seamless_communication/cli/m4t/evaluate/__init__.py",
"chars": 202,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the l"
},
{
"path": "src/seamless_communication/cli/m4t/evaluate/evaluate.py",
"chars": 18025,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/m4t/finetune/README.md",
"chars": 7468,
"preview": "## Finetuning scripts for M4T\n\nThis section demonstrates an example of M4T finetuning on a single translation direction:"
},
{
"path": "src/seamless_communication/cli/m4t/finetune/__init__.py",
"chars": 202,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the l"
},
{
"path": "src/seamless_communication/cli/m4t/finetune/dataloader.py",
"chars": 11355,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/m4t/finetune/dataset.py",
"chars": 7710,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/m4t/finetune/dist_utils.py",
"chars": 1934,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/m4t/finetune/finetune.py",
"chars": 6631,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/m4t/finetune/trainer.py",
"chars": 16870,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/m4t/predict/README.md",
"chars": 3759,
"preview": "# Inference with SeamlessM4T models\nRefer to the [SeamlessM4T README](../../../../../docs/m4t) for an overview of the M4"
},
{
"path": "src/seamless_communication/cli/m4t/predict/__init__.py",
"chars": 433,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the l"
},
{
"path": "src/seamless_communication/cli/m4t/predict/predict.py",
"chars": 7775,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the license found in the\n# M"
},
{
"path": "src/seamless_communication/cli/streaming/README.md",
"chars": 3082,
"preview": "# Evaluating SeamlessStreaming and Seamless models\nSeamlessStreaming is the streaming only model and Seamless is the exp"
},
{
"path": "src/seamless_communication/cli/streaming/__init__.py",
"chars": 201,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/streaming/evaluate.py",
"chars": 3261,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/streaming/scorers/__init__.py",
"chars": 201,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/streaming/scorers/seamless_quality_scorer.py",
"chars": 4873,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/toxicity/etox/README.md",
"chars": 3967,
"preview": "# Tool to compute toxicity in speech (ASR-ETOX) and text (ETOX)\n\nIn this tool, we combine an ASR model (M4T or whisper) "
},
{
"path": "src/seamless_communication/cli/toxicity/etox/asr_etox.py",
"chars": 7239,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
},
{
"path": "src/seamless_communication/cli/toxicity/etox/etox.py",
"chars": 1267,
"preview": "# Copyright (c) Meta Platforms, Inc. and affiliates\n# All rights reserved.\n#\n# This source code is licensed under the li"
}
]
// ... and 112 more files (download for full content)
About this extraction
This page contains the full source code of the facebookresearch/seamless_communication GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 312 files (12.6 MB), approximately 3.3M tokens, and a symbol index with 5135 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.