Open-source SenseVoiceSmall model for Mandarin, Cantonese, English, Japanese, and Korean ASR, language ID, emotion recognition, and audio event detection.
This report summarizes scanner evidence for FunAudioLLM/SenseVoice, a C project with 9,490 GitHub stars. SynthScan examined 31,788 lines of code across 79 source files, recording 130 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 4.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 105 finding(s).
Are imports declared and package/API names verified? 19 finding(s).
Are wrappers, guards, and repeated structures necessary? 59 finding(s).
Which changes need focused human review? 130 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 130 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtime/llama.cpp/test_export_sensevoice_gguf.py | 29 | def test_rejects_non_sense_asr_family(self): | CODE |
| LOW | runtime/llama.cpp/export_sensevoice_gguf.py | 20 | def load_audio_cpp_model_spec(path): | CODE |
| LOW⚡ | tests/test_funasr_requirement.py | 9 | def test_funasr_minimum_version_matches_current_examples(): | CODE |
| LOW⚡ | tests/test_funasr_requirement.py | 16 | def test_readmes_explain_upgrade_for_existing_installs(): | CODE |
| LOW⚡ | tests/test_funasr_requirement.py | 23 | def test_readmes_surface_sensevoice_gguf_edge_path(): | CODE |
| LOW | tests/test_funasr_requirement.py | 34 | def test_readmes_surface_current_funasr_release(): | CODE |
| LOW | tests/test_funasr_requirement.py | 46 | def test_readmes_surface_orca_sensevoice_desktop_integration(): | CODE |
| LOW | tests/test_funasr_requirement.py | 63 | def test_readme_relative_markdown_links_point_to_existing_files(): | CODE |
| LOW | tests/test_github_templates.py | 7 | def test_pull_request_template_keeps_sensevoice_validation_visible(): | CODE |
| LOW⚡ | tests/test_ser_benchmark.py | 19 | def test_normalize_label_accepts_casia_aliases(): | CODE |
| LOW⚡ | tests/test_ser_benchmark.py | 27 | def test_extract_emotion_reads_raw_sensevoice_tag(): | CODE |
| LOW⚡ | tests/test_ser_benchmark.py | 36 | def test_compute_metrics_reports_ua_wa_and_confusion_without_dropping_classes(): | CODE |
| LOW | tests/test_ser_benchmark.py | 49 | def test_extract_emotion_rejects_output_without_an_emotion_tag(): | CODE |
| LOW | tests/test_ser_benchmark.py | 56 | def test_readmes_link_the_ser_reproduction_contract(): | CODE |
| LOW | tests/test_license_clarification.py | 14 | def test_readmes_surface_official_sensevoicesmall_commercial_use_clarification(): | CODE |
| LOW | tests/test_license_clarification.py | 50 | def test_license_clarification_keeps_code_and_weight_terms_distinct(): | CODE |
| LOW⚡ | tests/test_ctc_alignment.py | 20 | def test_frames_past_the_length_do_not_move_the_alignment(self): | CODE |
| LOW⚡ | tests/test_ctc_alignment.py | 28 | def test_full_length_alignment_stays(self): | CODE |
| LOW⚡ | tests/test_ctc_alignment.py | 33 | def test_ignore_id_does_not_change_the_targets(self): | CODE |
| LOW⚡ | tests/test_ctc_alignment.py | 39 | def test_an_unequal_length_batch_matches_each_item_cropped(self): | CODE |
| LOW | tests/test_ctc_alignment.py | 54 | def test_lengths_on_the_cpu_work_with_emissions_on_an_accelerator(self): | CODE |
| LOW | tests/test_whats_new.py | 15 | def test_whats_new_is_a_current_three_item_summary(): | CODE |
| LOW | tests/test_long_audio_no_vad.py | 27 | def test_model_is_created_without_vad_or_remote_code(self): | CODE |
| LOW | tests/test_long_audio_no_vad.py | 51 | def test_windows_cover_input_and_do_not_emit_overlap_only_tail(self): | CODE |
| LOW | tests/test_long_audio_no_vad.py | 70 | def test_window_validation_rejects_invalid_overlap(self): | CODE |
| LOW | tests/test_long_audio_no_vad.py | 83 | def test_merge_only_removes_exact_boundary_overlap(self): | CODE |
| LOW | tests/test_long_audio_no_vad.py | 93 | def test_atomic_outputs_keep_raw_chunks_when_merged_text_deduplicates(self): | CODE |
| LOW | tests/test_device_env.py | 15 | def test_auto_prefers_cuda_when_present(self): | CODE |
| LOW | tests/test_device_env.py | 20 | def test_auto_falls_back_to_cpu(self): | CODE |
| LOW | tests/test_container_contract.py | 9 | def test_build_context_excludes_local_credentials_and_git_metadata(self): | CODE |
| LOW⚡ | tests/test_container_contract.py | 21 | def test_context_changes_run_ci_without_persisting_checkout_credentials(self): | CODE |
| LOW⚡ | tests/test_container_contract.py | 29 | def test_container_base_matches_repository_torch_floor(self): | CODE |
| LOW⚡ | tests/test_container_contract.py | 38 | def test_container_installs_dependencies_in_an_isolated_venv(self): | CODE |
| LOW⚡ | tests/test_container_contract.py | 48 | def test_container_workflow_builds_prs_and_only_pushes_trusted_refs(self): | CODE |
| LOW | tests/test_container_contract.py | 62 | def test_readme_uses_real_service_port_and_no_retired_registry(self): | CODE |
| LOW | tests/test_container_contract.py | 72 | def test_verified_docker_run_is_identical_across_docs(self): | CODE |
| LOW⚡ | tests/test_container_contract.py | 87 | def test_default_compose_starts_without_a_gpu_reservation(self): | CODE |
| LOW⚡ | tests/test_container_contract.py | 94 | def test_api_uses_resolved_device_not_raw_auto(self): | CODE |
| LOW⚡ | tests/test_container_contract.py | 103 | def test_readmes_do_not_offer_private_ghcr_image_as_anonymous_pull(self): | CODE |
| LOW⚡ | tests/test_model_timestamps.py | 40 | def test_module_supports_checkpoint_state_and_device_transfer(self): | CODE |
| LOW⚡ | tests/test_model_timestamps.py | 46 | def test_call_matches_forward_without_resizing_the_input(self): | CODE |
| LOW⚡ | tests/test_model_timestamps.py | 56 | def test_multiple_ids_keep_their_original_token_time_range(self): | CODE |
| LOW | tests/test_model_timestamps.py | 92 | def test_batch_alignment_uses_each_items_length(self): | CODE |
| LOW | tests/test_model_timestamps.py | 121 | def test_inference_returns_word_aligned_millisecond_pairs(self): | CODE |
| LOW | tests/test_model_timestamps.py | 148 | def test_word_boundaries_empty_input_and_nonmutation(self): | CODE |
| LOW | tests/test_canonical_qwenaudio_links.py | 35 | def test_legacy_owner_matcher_covers_repository_api_and_charts(): | CODE |
| LOW | tests/test_canonical_qwenaudio_links.py | 63 | def test_tracked_files_use_qwenaudio_for_canonical_github_repositories(): | CODE |
| LOW | tests/test_canonical_qwenaudio_links.py | 77 | def test_readme_homepage_links_use_live_funasr_site(): | CODE |
| LOW | utils/infer_utils.py | 313 | def code_mix_split_words_jieba(seg_dict_file: str): | CODE |
| LOW | utils/device_env.py | 4 | def resolve_sensevoice_device(requested=None, cuda_available=None): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtime/llama.cpp/CMakeLists.txt | 1 | # Standalone, CI-friendly build for the FunASR llama.cpp runtime. | COMMENT |
| LOW | …time/llama.cpp/funasr-sensevoice/funasr-sensevoice.cpp | 1 | // funasr-sensevoice: SenseVoiceSmall (SAN-M encoder + CTC) on ggml. | COMMENT |
| LOW | …time/llama.cpp/sensevoice-server/sensevoice-server.cpp | 1 | // sensevoice-server — OpenAI-compatible STT server for SenseVoiceSmall on ggml. | COMMENT |
| LOW | …time/llama.cpp/sensevoice-server/sensevoice-server.cpp | 21 | #include "ggml-backend.h" | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 1 | // | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 21 | /* | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 41 | #ifndef CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 61 | #ifndef CPPHTTPLIB_CLIENT_READ_TIMEOUT_SECOND | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 81 | #ifndef CPPHTTPLIB_EXPECT_100_THRESHOLD | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 101 | #ifndef CPPHTTPLIB_IDLE_INTERVAL_USECOND | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 121 | #ifndef CPPHTTPLIB_REDIRECT_MAX_COUNT | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 141 | #ifndef CPPHTTPLIB_TCP_NODELAY | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 161 | #ifndef CPPHTTPLIB_THREAD_POOL_COUNT | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 181 | #define CPPHTTPLIB_SEND_FLAGS 0 | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 201 | #define CPPHTTPLIB_WEBSOCKET_CLOSE_TIMEOUT_SECOND 5 | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 221 | #ifndef _CRT_NONSTDC_NO_DEPRECATE | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 241 | COMMENT | |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 261 | COMMENT | |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 281 | #endif | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 301 | #endif | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 321 | #include <functional> | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 341 | #include <vector> | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 361 | #error \ | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 381 | #ifdef _WIN32 | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 401 | COMMENT | |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 421 | #endif | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 441 | #include <mbedtls/md5.h> | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 461 | #define CPPHTTPLIB_MBEDTLS_V4 | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 481 | #ifndef WOLFSSL_GEN_URI | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 501 | #include <Security/Security.h> | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 721 | // grammar is (RFC 9110 12.4.2): | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 981 | // wrote them. Neither standard container expresses it: std::unordered_multimap | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 5621 | return false; | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 8001 | // is the final transfer coding. A single field value may list several | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 9341 | // NOTE: RFC-9110 '14.1.2. Byte Ranges': | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 14761 | // response (e.g. 4xx) and avoid sending a potentially large request body | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/httplib.h | 18741 | bool has_peeked_byte = false; | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/funasr_audio.h | 1 | // funasr_audio.h — load any audio file (WAV/MP3/FLAC/OGG...) as 16 kHz mono f32, | COMMENT |
| LOW | runtime/llama.cpp/funasr-common/funasr_vad.h | 1 | // funasr_vad.h — single-header FSMN-VAD for the funasr ggml runtime. | COMMENT |
| LOW | runtime/llama.cpp/funasr-vad/funasr-vad.cpp | 1 | // funasr-vad: FSMN-VAD on ggml. WAV(any fmt/rate) -> speech segments [start_ms,end_ms]. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webui.py | 4 | CODE | |
| LOW | webui.py | 5 | CODE | |
| LOW | webui.py | 6 | CODE | |
| LOW | webui.py | 8 | CODE | |
| LOW | webui.py | 37 | CODE | |
| LOW | model.py | 6 | CODE | |
| LOW | model.py | 11 | CODE | |
| LOW | model.py | 14 | CODE | |
| LOW | utils/infer_utils.py | 6 | CODE | |
| LOW | utils/frontend.py | 3 | CODE | |
| LOW | utils/frontend.py | 3 | CODE | |
| LOW | utils/frontend.py | 3 | CODE | |
| LOW | utils/frontend.py | 3 | CODE | |
| LOW | utils/frontend.py | 3 | CODE | |
| LOW | utils/frontend.py | 3 | CODE | |
| LOW | utils/model_bin.py | 13 | CODE | |
| LOW | utils/model_bin.py | 13 | CODE | |
| LOW | utils/model_bin.py | 13 | CODE | |
| LOW | utils/model_bin.py | 23 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | runtime/llama.cpp/funasr-common/httplib.h | 14493 | // Cross-host/scheme redirect - create new client with robust setup | COMMENT |
| MEDIUM | runtime/llama.cpp/funasr-common/httplib.h | 14498 | // New method for robust redirect client creation | COMMENT |
| MEDIUM | runtime/llama.cpp/funasr-common/httplib.h | 14560 | // Setup client with robust configuration | COMMENT |
| MEDIUM | runtime/llama.cpp/funasr-common/httplib.h | 14568 | // New method for robust client setup (based on basic_manual_redirect.cpp | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | runtime/llama.cpp/tests/stream_client.py | 127 | except OSError: | CODE |
| HIGH | runtime/llama.cpp/benchmarks/compute_cer.py | 49 | except ValueError: pass | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webui.py | 233 | CODE | |
| LOW | model.py | 781 | CODE | |
| LOW | runtime/llama.cpp/tests/stream_client.py | 132 | CODE | |
| LOW | runtime/llama.cpp/benchmarks/compute_cer.py | 32 | CODE | |
| LOW | utils/infer_utils.py | 273 | CODE | |
| LOW | utils/infer_utils.py | 131 | CODE | |
| LOW | utils/frontend.py | 125 | CODE | |
| LOW | utils/frontend.py | 172 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webui.py | 25 | except Exception: | CODE |
| LOW | runtime/llama.cpp/tests/stream_client.py | 161 | except Exception: | CODE |
| LOW | runtime/llama.cpp/tests/stream_client.py | 177 | except Exception: | CODE |
| LOW | utils/infer_utils.py | 228 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | model.py | 445 | CODE | |
| LOW | model.py | 584 | CODE | |
| LOW | utils/frontend.py | 17 | CODE |