├── .clang-format ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.md │ ├── config.yml │ ├── documentation.md │ ├── feature-request.md │ ├── general.md │ ├── model-request.md │ ├── speed-report.md │ └── tracking.md └── workflows │ ├── documentation.yaml │ ├── update-relax.yaml │ └── windows-build.yaml ├── .gitignore ├── .gitmodules ├── .pre-commit-config.yaml ├── .pylintrc ├── CMakeLists.txt ├── CONTRIBUTORS.md ├── LICENSE ├── NOTICE ├── README.md ├── android ├── .gitignore ├── MLCChat │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_launcher-playstore.png │ │ │ ├── java │ │ │ └── ai │ │ │ │ └── mlc │ │ │ │ └── mlcchat │ │ │ │ ├── AppViewModel.kt │ │ │ │ ├── ChatView.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── NavView.kt │ │ │ │ ├── StartView.kt │ │ │ │ └── ui │ │ │ │ └── theme │ │ │ │ ├── Color.kt │ │ │ │ ├── Theme.kt │ │ │ │ └── Type.kt │ │ │ └── res │ │ │ ├── drawable │ │ │ ├── ic_android_black_24dp.xml │ │ │ └── mlc_logo_108.xml │ │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ │ └── xml │ │ │ ├── backup_rules.xml │ │ │ └── data_extraction_rules.xml │ ├── build.gradle │ ├── bundle_weight.py │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── mlc-package-config.json │ └── settings.gradle ├── MLCEngineExample │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_launcher-playstore.png │ │ │ ├── java │ │ │ └── ai │ │ │ │ └── mlc │ │ │ │ └── mlcengineexample │ │ │ │ ├── MainActivity.kt │ │ │ │ └── ui │ │ │ │ └── theme │ │ │ │ ├── Color.kt │ │ │ │ ├── Theme.kt │ │ │ │ └── Type.kt │ │ │ └── res │ │ │ ├── drawable │ │ │ ├── ic_android_black_24dp.xml │ │ │ └── mlc_logo_108.xml │ │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ │ └── xml │ │ │ ├── backup_rules.xml │ │ │ └── data_extraction_rules.xml │ ├── build.gradle │ ├── bundle_weight.py │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── mlc-package-config.json │ └── settings.gradle ├── README.md └── mlc4j │ ├── .gitignore │ ├── CMakeLists.txt │ ├── build.gradle │ ├── prepare_libs.py │ └── src │ ├── cpp │ └── tvm_runtime.h │ └── main │ ├── AndroidManifest.xml │ └── java │ └── ai │ └── mlc │ └── mlcllm │ ├── JSONFFIEngine.java │ ├── MLCEngine.kt │ └── OpenAIProtocol.kt ├── ci ├── bash.sh ├── build-environment.yaml ├── jenkinsfile.groovy └── task │ ├── black.sh │ ├── build_clean.sh │ ├── build_lib.sh │ ├── build_wheel.sh │ ├── build_win.bat │ ├── clang-format.sh │ ├── isort.sh │ ├── mypy.sh │ ├── pylint.sh │ ├── test_model_compile.sh │ └── test_unittest.sh ├── cmake └── gen_cmake_config.py ├── cpp ├── base.h ├── json_ffi │ ├── conv_template.cc │ ├── conv_template.h │ ├── image_utils.cc │ ├── image_utils.h │ ├── json_ffi_engine.cc │ ├── json_ffi_engine.h │ ├── openai_api_protocol.cc │ └── openai_api_protocol.h ├── metadata │ ├── model.cc │ └── model.h ├── multi_gpu │ ├── builtin.cc │ └── multi_gpu_loader.cc ├── serve │ ├── config.cc │ ├── config.h │ ├── data.cc │ ├── data.h │ ├── draft_token_workspace_manager.cc │ ├── draft_token_workspace_manager.h │ ├── engine.cc │ ├── engine.h │ ├── engine_actions │ │ ├── action.cc │ │ ├── action.h │ │ ├── action_commons.cc │ │ ├── action_commons.h │ │ ├── auto_spec_decode.cc │ │ ├── batch_decode.cc │ │ ├── batch_draft.cc │ │ ├── batch_jumpforward.cc │ │ ├── batch_prefill_base.cc │ │ ├── batch_prefill_base.h │ │ ├── batch_verify.cc │ │ ├── disagg_prepare_recv.cc │ │ ├── disagg_remote_send.cc │ │ ├── eagle_batch_draft.cc │ │ ├── eagle_batch_verify.cc │ │ ├── eagle_new_request_prefill.cc │ │ └── new_request_prefill.cc │ ├── engine_state.cc │ ├── engine_state.h │ ├── event_trace_recorder.cc │ ├── event_trace_recorder.h │ ├── function_table.cc │ ├── function_table.h │ ├── logit_processor.cc │ ├── logit_processor.h │ ├── metrics.cc │ ├── metrics.h │ ├── model.cc │ ├── model.h │ ├── prefix_cache.cc │ ├── prefix_cache.h │ ├── radix_tree.cc │ ├── radix_tree.h │ ├── request.cc │ ├── request.h │ ├── request_state.cc │ ├── request_state.h │ ├── sampler │ │ ├── cpu_sampler.cc │ │ ├── gpu_sampler.cc │ │ └── sampler.h │ ├── threaded_engine.cc │ └── threaded_engine.h ├── support │ ├── debug_utils.h │ ├── dynamic_bitset.h │ ├── encoding.cc │ ├── encoding.h │ ├── json_parser.h │ ├── load_bytes_from_file.h │ ├── progress_bar.h │ ├── random.h │ ├── result.h │ ├── utils.h │ ├── vlm_utils.cc │ └── vlm_utils.h └── tokenizers │ ├── streamer.cc │ ├── streamer.h │ ├── tokenizers.cc │ └── tokenizers.h ├── docs ├── .gitignore ├── Makefile ├── README.md ├── _static │ └── img │ │ ├── code_completion.png │ │ ├── ide_code_settings.png │ │ ├── ide_code_templates.png │ │ ├── mlc-logo-with-text-landscape.svg │ │ ├── project-structure.svg │ │ └── project-workflow.svg ├── community │ ├── faq.rst │ └── guideline.rst ├── compilation │ ├── compile_models.rst │ ├── configure_quantization.rst │ ├── convert_weights.rst │ ├── define_new_models.rst │ └── package_libraries_and_weights.rst ├── conf.py ├── deploy │ ├── android.rst │ ├── cli.rst │ ├── ide_integration.rst │ ├── ios.rst │ ├── mlc_chat_config.rst │ ├── python_engine.rst │ ├── rest.rst │ └── webllm.rst ├── get_started │ ├── introduction.rst │ └── quick_start.rst ├── index.rst ├── install │ ├── conda.rst │ ├── emcc.rst │ ├── gpu.rst │ ├── mlc_llm.rst │ └── tvm.rst ├── make.bat ├── microserving │ └── tutorial.rst ├── privacy.rst └── requirements.txt ├── examples ├── python │ ├── microserving │ │ └── custom_router.py │ └── sample_mlc_engine.py └── rest │ ├── nodejs │ ├── README.MD │ ├── dotenv.example │ ├── package.json │ ├── sample_client.js │ ├── sample_langchain.ts │ ├── sample_openai.js │ └── tsconfig.json │ ├── python │ ├── sample_client.py │ ├── sample_langchain.py │ └── sample_openai.py │ └── resources │ ├── linux.txt │ └── state_of_the_union.txt ├── ios ├── .gitignore ├── MLCChat │ ├── MLCChat.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── MLCChat.xcscheme │ ├── MLCChat │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ └── mlc-logo.png │ │ │ └── Contents.json │ │ ├── Common │ │ │ └── Constants.swift │ │ ├── Info.plist │ │ ├── MLCChat.entitlements │ │ ├── MLCChatApp.swift │ │ ├── Models │ │ │ ├── AppConfig.swift │ │ │ ├── ModelConfig.swift │ │ │ └── ParamsConfig.swift │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ ├── States │ │ │ ├── AppState.swift │ │ │ ├── ChatState.swift │ │ │ └── ModelState.swift │ │ └── Views │ │ │ ├── ChatView.swift │ │ │ ├── ImageProcessing.swift │ │ │ ├── MessageView.swift │ │ │ ├── ModelView.swift │ │ │ └── StartView.swift │ ├── README.md │ └── mlc-package-config.json ├── MLCEngineExample │ ├── MLCEngineExample.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── MLCEngineExample │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── ContentView.swift │ │ ├── MLCEngineExample.entitlements │ │ ├── MLCEngineExampleApp.swift │ │ └── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ ├── README.md │ └── mlc-package-config.json ├── MLCSwift │ ├── Package.swift │ ├── README.md │ └── Sources │ │ ├── ObjC │ │ ├── LLMEngine.mm │ │ └── include │ │ │ └── LLMEngine.h │ │ └── Swift │ │ ├── LLMEngine.swift │ │ └── OpenAIProtocol.swift ├── README.md └── prepare_libs.sh ├── pyproject.toml ├── python ├── mlc_llm │ ├── __init__.py │ ├── __main__.py │ ├── base.py │ ├── bench │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── api_endpoint.py │ │ ├── dataset.py │ │ ├── request_processor.py │ │ └── request_record.py │ ├── cli │ │ ├── __init__.py │ │ ├── calibrate.py │ │ ├── chat.py │ │ ├── check_device.py │ │ ├── compile.py │ │ ├── convert_weight.py │ │ ├── delivery.py │ │ ├── disco_remote_socket_session.py │ │ ├── gen_config.py │ │ ├── lib_delivery.py │ │ ├── model_metadata.py │ │ ├── package.py │ │ ├── router.py │ │ ├── serve.py │ │ └── worker.py │ ├── compiler_pass │ │ ├── __init__.py │ │ ├── attach_cuda_graph_alloc_init_func.py │ │ ├── attach_embedding_allocator.py │ │ ├── attach_logit_processor.py │ │ ├── attach_sampler.py │ │ ├── attach_softmax_with_temperature.py │ │ ├── attach_spec_decode_aux_funcs.py │ │ ├── attach_support_info.py │ │ ├── blas_dispatch.py │ │ ├── clean_up_tir_attrs.py │ │ ├── dispatch_kv_cache_creation.py │ │ ├── estimate_memory_usage.py │ │ ├── fuse_add_norm.py │ │ ├── fuse_dequantize_matmul_ewise.py │ │ ├── fuse_dequantize_take.py │ │ ├── fuse_dequantize_transpose.py │ │ ├── fuse_ft_dequantize_matmul_epilogue.py │ │ ├── fuse_transpose_matmul.py │ │ ├── lift_global_buffer_alloc.py │ │ ├── low_batch_specialization.py │ │ ├── pipeline.py │ │ ├── pipeline_parallel_rewrite.py │ │ └── scatter_tuple_get_item.py │ ├── contrib │ │ ├── __init__.py │ │ └── embeddings │ │ │ ├── __init__.py │ │ │ ├── embeddings.py │ │ │ └── openai.py │ ├── conversation_template │ │ ├── __init__.py │ │ ├── cohere.py │ │ ├── deepseek.py │ │ ├── dolly.py │ │ ├── gemma.py │ │ ├── glm.py │ │ ├── gorrilla.py │ │ ├── gpt.py │ │ ├── hermes.py │ │ ├── llama.py │ │ ├── llava.py │ │ ├── mistral.py │ │ ├── nemotron.py │ │ ├── oasst.py │ │ ├── olmo.py │ │ ├── orion.py │ │ ├── phi.py │ │ ├── qwen2.py │ │ ├── redpajama.py │ │ ├── registry.py │ │ ├── rwkv.py │ │ ├── stablelm.py │ │ ├── tinyllama.py │ │ └── wizardlm.py │ ├── interface │ │ ├── __init__.py │ │ ├── calibrate.py │ │ ├── chat.py │ │ ├── compile.py │ │ ├── compiler_flags.py │ │ ├── convert_weight.py │ │ ├── gen_config.py │ │ ├── help.py │ │ ├── jit.py │ │ ├── package.py │ │ ├── router.py │ │ └── serve.py │ ├── json_ffi │ │ ├── __init__.py │ │ └── engine.py │ ├── libinfo.py │ ├── loader │ │ ├── __init__.py │ │ ├── huggingface_loader.py │ │ ├── loader.py │ │ ├── mapping.py │ │ ├── stats.py │ │ └── utils.py │ ├── model │ │ ├── __init__.py │ │ ├── baichuan │ │ │ ├── __init__.py │ │ │ ├── baichuan_loader.py │ │ │ ├── baichuan_model.py │ │ │ └── baichuan_quantization.py │ │ ├── bert │ │ │ ├── __init__.py │ │ │ ├── bert_loader.py │ │ │ ├── bert_model.py │ │ │ └── bert_quantization.py │ │ ├── chatglm3 │ │ │ ├── __init__.py │ │ │ ├── chatglm3_loader.py │ │ │ ├── chatglm3_model.py │ │ │ └── chatglm3_quantization.py │ │ ├── cohere │ │ │ ├── __init__.py │ │ │ ├── cohere_loader.py │ │ │ ├── cohere_model.py │ │ │ └── cohere_quantization.py │ │ ├── deepseek │ │ │ ├── __init__.py │ │ │ ├── deepseek_loader.py │ │ │ ├── deepseek_model.py │ │ │ └── deepseek_quantization.py │ │ ├── deepseek_v2 │ │ │ ├── __init__.py │ │ │ ├── deepseek_v2_loader.py │ │ │ ├── deepseek_v2_model.py │ │ │ └── deepseek_v2_quantization.py │ │ ├── eagle │ │ │ ├── __init__.py │ │ │ ├── eagle_loader.py │ │ │ ├── eagle_model.py │ │ │ └── eagle_quantization.py │ │ ├── gemma │ │ │ ├── __init__.py │ │ │ ├── gemma_loader.py │ │ │ ├── gemma_model.py │ │ │ └── gemma_quantization.py │ │ ├── gemma2 │ │ │ ├── __init__.py │ │ │ ├── gemma2_loader.py │ │ │ ├── gemma2_model.py │ │ │ └── gemma2_quantization.py │ │ ├── gemma3 │ │ │ ├── __init__.py │ │ │ ├── gemma3_loader.py │ │ │ ├── gemma3_model.py │ │ │ └── gemma3_quantization.py │ │ ├── gpt2 │ │ │ ├── __init__.py │ │ │ ├── gpt2_loader.py │ │ │ ├── gpt2_model.py │ │ │ └── gpt2_quantization.py │ │ ├── gpt_bigcode │ │ │ ├── __init__.py │ │ │ ├── gpt_bigcode_loader.py │ │ │ ├── gpt_bigcode_model.py │ │ │ └── gpt_bigcode_quantization.py │ │ ├── gpt_j │ │ │ ├── __init__.py │ │ │ ├── gpt_j_loader.py │ │ │ ├── gpt_j_model.py │ │ │ └── gpt_j_quantization.py │ │ ├── gpt_neox │ │ │ ├── __init__.py │ │ │ ├── gpt_neox_loader.py │ │ │ ├── gpt_neox_model.py │ │ │ └── gpt_neox_quantization.py │ │ ├── internlm │ │ │ ├── __init__.py │ │ │ ├── internlm_loader.py │ │ │ ├── internlm_model.py │ │ │ └── internlm_quantization.py │ │ ├── internlm2 │ │ │ ├── __init__.py │ │ │ ├── internlm2_loader.py │ │ │ ├── internlm2_model.py │ │ │ └── internlm2_quantization.py │ │ ├── llama │ │ │ ├── __init__.py │ │ │ ├── llama_loader.py │ │ │ ├── llama_model.py │ │ │ └── llama_quantization.py │ │ ├── llava │ │ │ ├── __init__.py │ │ │ ├── llava_loader.py │ │ │ ├── llava_model.py │ │ │ └── llava_quantization.py │ │ ├── medusa │ │ │ ├── __init__.py │ │ │ ├── medusa_loader.py │ │ │ ├── medusa_model.py │ │ │ └── medusa_quantization.py │ │ ├── minicpm │ │ │ ├── __init__.py │ │ │ ├── minicpm_loader.py │ │ │ ├── minicpm_model.py │ │ │ └── minicpm_quantization.py │ │ ├── mistral │ │ │ ├── __init__.py │ │ │ ├── mistral_loader.py │ │ │ ├── mistral_model.py │ │ │ └── mistral_quantization.py │ │ ├── mixtral │ │ │ ├── __init__.py │ │ │ ├── mixtral_loader.py │ │ │ ├── mixtral_model.py │ │ │ └── mixtral_quantization.py │ │ ├── model.py │ │ ├── model_preset.py │ │ ├── nemotron │ │ │ ├── __init__.py │ │ │ ├── nemotron_loader.py │ │ │ ├── nemotron_model.py │ │ │ └── nemotron_quantization.py │ │ ├── olmo │ │ │ ├── __init__.py │ │ │ ├── olmo_loader.py │ │ │ ├── olmo_model.py │ │ │ └── olmo_quantization.py │ │ ├── orion │ │ │ ├── __init__.py │ │ │ ├── orion_loader.py │ │ │ ├── orion_model.py │ │ │ └── orion_quantization.py │ │ ├── phi │ │ │ ├── __init__.py │ │ │ ├── phi_loader.py │ │ │ ├── phi_model.py │ │ │ └── phi_quantization.py │ │ ├── phi3 │ │ │ ├── __init__.py │ │ │ ├── phi3_loader.py │ │ │ ├── phi3_model.py │ │ │ └── phi3_quantization.py │ │ ├── phi3v │ │ │ ├── __init__.py │ │ │ ├── phi3v_image.py │ │ │ ├── phi3v_loader.py │ │ │ ├── phi3v_model.py │ │ │ └── phi3v_quantization.py │ │ ├── qwen │ │ │ ├── __init__.py │ │ │ ├── qwen_loader.py │ │ │ ├── qwen_model.py │ │ │ └── qwen_quantization.py │ │ ├── qwen2 │ │ │ ├── __init__.py │ │ │ ├── qwen2_loader.py │ │ │ ├── qwen2_model.py │ │ │ └── qwen2_quantization.py │ │ ├── qwen2_moe │ │ │ ├── __init__.py │ │ │ ├── qwen2_moe_loader.py │ │ │ ├── qwen2_moe_model.py │ │ │ └── qwen2_moe_quantization.py │ │ ├── rwkv5 │ │ │ ├── __init__.py │ │ │ ├── rwkv5_loader.py │ │ │ ├── rwkv5_model.py │ │ │ └── rwkv5_quantization.py │ │ ├── rwkv6 │ │ │ ├── __init__.py │ │ │ ├── rwkv6_loader.py │ │ │ ├── rwkv6_model.py │ │ │ └── rwkv6_quantization.py │ │ ├── stable_lm │ │ │ ├── __init__.py │ │ │ ├── stablelm_loader.py │ │ │ ├── stablelm_model.py │ │ │ └── stablelm_quantization.py │ │ ├── starcoder2 │ │ │ ├── __init__.py │ │ │ ├── starcoder2_loader.py │ │ │ ├── starcoder2_model.py │ │ │ └── starcoder2_quantization.py │ │ └── vision │ │ │ ├── __init__.py │ │ │ ├── clip_vision.py │ │ │ └── image_processing.py │ ├── nn │ │ ├── __init__.py │ │ ├── expert.py │ │ ├── kv_cache.py │ │ └── rnn_state.py │ ├── op │ │ ├── __init__.py │ │ ├── attention.py │ │ ├── batch_spec_verify.py │ │ ├── cutlass.py │ │ ├── extern.py │ │ ├── ft_gemm.py │ │ ├── moe_matmul.py │ │ ├── moe_misc.py │ │ ├── pipeline_parallel.py │ │ ├── position_embedding.py │ │ └── top_p_pivot.py │ ├── protocol │ │ ├── __init__.py │ │ ├── conversation_protocol.py │ │ ├── debug_protocol.py │ │ ├── error_protocol.py │ │ ├── generation_config.py │ │ ├── microserving_protocol.py │ │ ├── mlc_chat_config.py │ │ └── openai_api_protocol.py │ ├── quantization │ │ ├── __init__.py │ │ ├── awq_quantization.py │ │ ├── fp8_quantization.py │ │ ├── ft_quantization.py │ │ ├── group_quantization.py │ │ ├── no_quantization.py │ │ ├── per_tensor_quantization.py │ │ ├── quantization.py │ │ └── utils.py │ ├── router │ │ ├── __init__.py │ │ └── router.py │ ├── serve │ │ ├── __init__.py │ │ ├── _ffi_api.py │ │ ├── config.py │ │ ├── data.py │ │ ├── engine.py │ │ ├── engine_base.py │ │ ├── engine_utils.py │ │ ├── entrypoints │ │ │ ├── __init__.py │ │ │ ├── debug_entrypoints.py │ │ │ ├── metrics_entrypoints.py │ │ │ ├── microserving_entrypoints.py │ │ │ └── openai_entrypoints.py │ │ ├── event_trace_recorder.py │ │ ├── radix_tree.py │ │ ├── request.py │ │ ├── server │ │ │ ├── __init__.py │ │ │ ├── popen_server.py │ │ │ └── server_context.py │ │ └── sync_engine.py │ ├── support │ │ ├── __init__.py │ │ ├── argparse.py │ │ ├── auto_config.py │ │ ├── auto_device.py │ │ ├── auto_target.py │ │ ├── auto_weight.py │ │ ├── config.py │ │ ├── constants.py │ │ ├── convert_tiktoken.py │ │ ├── download_cache.py │ │ ├── logging.py │ │ ├── max_thread_check.py │ │ ├── preshard.py │ │ ├── random.py │ │ ├── style.py │ │ ├── tensor_parallel.py │ │ └── tqdm.py │ ├── testing │ │ ├── __init__.py │ │ ├── debug_chat.py │ │ ├── debug_compare.py │ │ └── pytest_utils.py │ └── tokenizers │ │ ├── __init__.py │ │ ├── _ffi_api.py │ │ ├── streamer.py │ │ └── tokenizers.py └── setup.py ├── scripts ├── build_mlc_for_docs.sh ├── build_site.sh ├── check_url_validity.py ├── gh_deploy_site.sh └── local_deploy_site.sh ├── site ├── .gitignore ├── CNAME ├── Gemfile ├── _config.yml ├── _includes │ ├── arrow.svg │ ├── github.svg │ ├── head.html │ ├── hero.html │ └── project-workflow.svg ├── assets │ ├── css │ │ └── hero.scss │ ├── gif │ │ ├── android-demo.gif │ │ ├── ios-demo.gif │ │ └── linux-demo.gif │ └── img │ │ ├── android │ │ ├── android-diagram.png │ │ ├── android-studio.png │ │ ├── android-vs-ios.png │ │ └── local-advantage.png │ │ ├── diag.svg │ │ └── multi-gpu │ │ ├── figure-1.svg │ │ ├── figure-2.svg │ │ └── figure-3.svg ├── index.md └── privacy.md ├── tests ├── README.md ├── cpp │ └── conv_template_unittest.cc └── python │ ├── __init__.py │ ├── compiler_pass │ └── test_fuse_ft_dequantize_matmul_epilogue.py │ ├── conftest.py │ ├── conversation_template │ ├── test_conversation_protocol.py │ └── test_llama_template.py │ ├── integration │ └── test_model_compile.py │ ├── json_ffi │ ├── test_json_ffi_engine.py │ ├── test_json_ffi_engine_image.py │ └── test_json_ffi_engine_mock.py │ ├── loader │ ├── test_awq.py │ └── test_huggingface.py │ ├── model │ ├── test_gpt2.py │ ├── test_gptNeox.py │ ├── test_kv_cache.py │ ├── test_llama.py │ ├── test_llama_quantization.py │ ├── test_mistral.py │ └── test_phi.py │ ├── op │ ├── test_batch_spec_verify.py │ ├── test_top_p_pivot.py │ ├── test_tree_attn.py │ └── test_two_stage_softmax.py │ ├── quantization │ ├── test_awq_quantization.py │ └── test_group_quantization.py │ ├── router │ └── test_router.py │ ├── serve │ ├── evaluate_engine.py │ ├── server │ │ ├── conftest.py │ │ ├── test_server.py │ │ ├── test_server_function_call.py │ │ └── test_server_image.py │ ├── test_event_trace_recorder.py │ ├── test_radix_tree.py │ ├── test_serve_async_engine.py │ ├── test_serve_async_engine_spec.py │ ├── test_serve_engine.py │ ├── test_serve_engine_grammar.py │ ├── test_serve_engine_image.py │ ├── test_serve_engine_mock.py │ ├── test_serve_engine_prefix_cache.py │ ├── test_serve_engine_rnn.py │ ├── test_serve_engine_spec.py │ └── test_serve_sync_engine.py │ ├── support │ ├── test_auto_config.py │ └── test_auto_weight.py │ └── tokenizers │ └── test_streamer.py ├── version.py └── web ├── Makefile ├── README.md ├── emcc └── mlc_wasm_runtime.cc └── prep_emcc_deps.sh /.clang-format: -------------------------------------------------------------------------------- 1 | # Run the following command to reformat a file: 2 | # clang-format -i -style=Google 3 | # Or use clang-format-diff to only reformat the changed lines: 4 | # https://clang.llvm.org/docs/ClangFormat.html 5 | BasedOnStyle: Google 6 | DerivePointerAlignment: false 7 | ColumnLimit: 100 8 | PointerAlignment: Left 9 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "🐛 Bug Report" 3 | about: Submit a bug report to help us improve MLC-LLM 4 | title: '[Bug] ' 5 | labels: ['bug'] 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 🐛 Bug 11 | 12 | 13 | 14 | ## To Reproduce 15 | 16 | Steps to reproduce the behavior: 17 | 18 | 1. 19 | 1. 20 | 1. 21 | 22 | 23 | 24 | ## Expected behavior 25 | 26 | 27 | 28 | ## Environment 29 | 30 | - Platform (e.g. WebGPU/Vulkan/IOS/Android/CUDA): 31 | - Operating system (e.g. Ubuntu/Windows/MacOS/...): 32 | - Device (e.g. iPhone 12 Pro, PC+RTX 3090, ...) 33 | - How you installed MLC-LLM (`conda`, source): 34 | - How you installed TVM-Unity (`pip`, source): 35 | - Python version (e.g. 3.10): 36 | - GPU driver version (if applicable): 37 | - CUDA/cuDNN version (if applicable): 38 | - TVM Unity Hash Tag (`python -c "import tvm; print('\n'.join(f'{k}: {v}' for k, v in tvm.support.libinfo().items()))"`, applicable if you compile models): 39 | - Any other relevant information: 40 | 41 | ## Additional context 42 | 43 | 44 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | 3 | contact_links: 4 | - name: Check the MLC-LLM Documentation 5 | url: https://llm.mlc.ai/docs/ 6 | about: Our documentation might provide answers to your questions. 7 | - name: Chat on Discord 8 | url: https://discord.gg/9Xpy2HGBuD 9 | about: Join the Discord Server to live chat with the community. 10 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F4DA Documentation" 3 | about: Report an issue related to https://llm.mlc.ai/docs/ 4 | title: '[Doc] ' 5 | labels: ['documentation'] 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 📚 Documentation 11 | 12 | ### Suggestion 13 | 14 | 15 | ### Bug 16 | - Link to the buggy documentation/tutorial: 17 | - Description of the bug: 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F680 Feature Request" 3 | about: Submit a proposal/request for a new MLC-LLM feature, or an enhancement on existing features. 4 | title: '[Feature Request] ' 5 | labels: ['feature request'] 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 🚀 Feature 11 | 12 | 13 | ## Motivation 14 | 15 | 16 | 17 | ## Alternatives 18 | 19 | 20 | 21 | ## Additional context 22 | 23 | 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/general.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "❓ General Questions" 3 | about: General questions you have about MLC-LLM. 4 | title: '[Question] ' 5 | labels: ['question'] 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## ❓ General Questions 11 | 12 | 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/model-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "️️⚙️ Model Request" 3 | about: Request a new model in MLC-LLM 4 | title: '[Model Request] ' 5 | labels: ['new-models'] 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## ⚙️ Request New Models 11 | 12 | - Link to an existing implementation (e.g. Hugging Face/Github): 13 | - Is this model architecture supported by MLC-LLM? (the list of [supported models](https://llm.mlc.ai/docs/prebuilt_models.html)) 14 | 15 | ## Additional context 16 | 17 | 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/speed-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: " 🏎️ Speed Report" 3 | about: Submit a speed report of an model running in MLC-LLM 4 | title: '[Speed] ' 5 | labels: ['performance'] 6 | assignees: '' 7 | 8 | --- 9 | 10 | # 🏎️ Speed Report 11 | 12 | 13 | 14 | - The model code: 15 | 16 | 17 | - The model configuration (e.g. quantization mode, running data type, etc.): 18 | - Device (e.g. MacBook Pro M2, PC+RTX 3080): 19 | - OS (if applicable): 20 | - Encode speed (Token/s): 21 | - Decode speed (Token/s): 22 | - Memory usage (if applicable): 23 | 24 | 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/tracking.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Tracking" 3 | about: A tracking issue that tracks ongoing item in the project 4 | title: '[Tracking] ' 5 | labels: ['status: tracking'] 6 | assignees: '' 7 | 8 | --- 9 | 10 | 24 | 25 | 26 | ## Overview 27 | 28 | 29 | 30 | 31 | ## Action Items 32 | 33 | 34 | - [ ] 35 | 36 | 37 | ## Links to Related Issues and PRs 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /.github/workflows/documentation.yaml: -------------------------------------------------------------------------------- 1 | name: Build Docs 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | test_linux: 10 | name: Deploy Docs 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: actions/checkout@v4 15 | with: 16 | submodules: recursive 17 | 18 | - name: Configuring build Environment 19 | run: | 20 | sudo apt-get update 21 | python -m pip install -U pip wheel 22 | 23 | - name: Setup Ruby 24 | uses: ruby/setup-ruby@v1 25 | with: 26 | ruby-version: '3.0' 27 | 28 | - name: Installing dependencies 29 | run: | 30 | python -m pip install -r docs/requirements.txt 31 | gem install jekyll jekyll-remote-theme 32 | 33 | - name: Deploying on GitHub Pages 34 | if: github.ref == 'refs/heads/main' 35 | run: | 36 | git remote set-url origin https://x-access-token:${{ secrets.MLC_GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY 37 | git config --global user.email "mlc-gh-actions-bot@nomail" 38 | git config --global user.name "mlc-gh-actions-bot" 39 | ./scripts/gh_deploy_site.sh 40 | -------------------------------------------------------------------------------- /.github/workflows/update-relax.yaml: -------------------------------------------------------------------------------- 1 | name: 'Relax Submodule Sync' 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | sync: 8 | name: 'Relax Submodule Sync' 9 | runs-on: ubuntu-latest 10 | 11 | defaults: 12 | run: 13 | shell: bash 14 | 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v4 18 | with: 19 | submodules: true 20 | 21 | - name: Git Sumbodule Update 22 | run: | 23 | git submodule update --remote 3rdparty/tvm 24 | 25 | - name: Commit update 26 | env: 27 | GITHUB_TOKEN: ${{ secrets.MLC_GITHUB_TOKEN }} 28 | run: | 29 | git config --global user.name 'Git bot' 30 | git config --global user.email 'bot@noreply.github.com' 31 | git remote set-url origin https://$GITHUB_TOKEN@github.com/mlc-ai/mlc-llm 32 | git commit -am "Auto updated submodule references" && git push || echo "No changes to commit" 33 | -------------------------------------------------------------------------------- /.github/workflows/windows-build.yaml: -------------------------------------------------------------------------------- 1 | # GH actions. 2 | # We use it to cover windows builds 3 | # Jenkins is still the primary CI 4 | name: Windows CI 5 | 6 | on: 7 | push: 8 | branches: 9 | - main 10 | pull_request: 11 | branches: 12 | - main 13 | 14 | jobs: 15 | Windows: 16 | runs-on: windows-latest 17 | defaults: 18 | run: 19 | shell: 'cmd /C call {0}' 20 | 21 | steps: 22 | - name: Git config 23 | run: >- 24 | git config --system core.longpaths true 25 | - uses: actions/checkout@v3 26 | with: 27 | submodules: 'recursive' 28 | - uses: conda-incubator/setup-miniconda@v3 29 | with: 30 | activate-environment: mlc-llm-build 31 | channel-priority: strict 32 | environment-file: ci/build-environment.yaml 33 | auto-activate-base: false 34 | - name: Conda info 35 | run: | 36 | conda info 37 | conda list 38 | python --version 39 | - name: Build MLC-LLM 40 | run: >- 41 | ci/task/build_win.bat 42 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "3rdparty/argparse"] 2 | path = 3rdparty/argparse 3 | url = https://github.com/p-ranav/argparse 4 | [submodule "3rdparty/tokenizers-cpp"] 5 | path = 3rdparty/tokenizers-cpp 6 | url = https://github.com/mlc-ai/tokenizers-cpp 7 | [submodule "3rdparty/googletest"] 8 | path = 3rdparty/googletest 9 | url = https://github.com/google/googletest.git 10 | [submodule "3rdparty/tvm"] 11 | path = 3rdparty/tvm 12 | url = https://github.com/mlc-ai/relax.git 13 | [submodule "3rdparty/stb"] 14 | path = 3rdparty/stb 15 | url = https://github.com/nothings/stb.git 16 | [submodule "3rdparty/xgrammar"] 17 | path = 3rdparty/xgrammar 18 | url = https://github.com/mlc-ai/xgrammar.git 19 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | # To use: 2 | # 3 | # pre-commit run -a 4 | # 5 | # Or: 6 | # 7 | # pre-commit install # (runs every time you commit in git) 8 | # 9 | # To update this file: 10 | # 11 | # pre-commit autoupdate 12 | # 13 | # See https://github.com/pre-commit/pre-commit 14 | # Note the pre-commit hooks shoule only be used for formatting, but not for linting. 15 | # For linting consider using CI. 16 | repos: 17 | # Standard hooks 18 | - repo: https://github.com/pre-commit/pre-commit-hooks 19 | rev: v5.0.0 20 | hooks: 21 | - id: check-added-large-files 22 | - id: check-case-conflict 23 | - id: check-merge-conflict 24 | - id: check-symlinks 25 | - id: end-of-file-fixer 26 | - id: mixed-line-ending 27 | - id: requirements-txt-fixer 28 | - id: trailing-whitespace 29 | 30 | # Changes tabs to spaces 31 | - repo: https://github.com/Lucas-C/pre-commit-hooks 32 | rev: v1.5.5 33 | hooks: 34 | - id: remove-tabs 35 | - id: remove-crlf 36 | 37 | # Formatters 38 | - repo: https://github.com/psf/black-pre-commit-mirror 39 | rev: 24.8.0 40 | hooks: 41 | - id: black 42 | 43 | - repo: https://github.com/pycqa/isort 44 | rev: 5.13.2 45 | hooks: 46 | - id: isort 47 | 48 | - repo: https://github.com/pre-commit/mirrors-clang-format 49 | rev: v19.1.1 50 | hooks: 51 | - id: clang-format 52 | types_or: [c++, c, cuda] 53 | exclude: | 54 | (?x)^(.*cubin.cpp$ | .*fmha_cubin.h | 3rdparty/.*)$ 55 | 56 | - repo: https://github.com/cheshirekow/cmake-format-precommit 57 | rev: v0.6.13 58 | hooks: 59 | - id: cmake-format 60 | additional_dependencies: [pyyaml>=5.1] 61 | -------------------------------------------------------------------------------- /.pylintrc: -------------------------------------------------------------------------------- 1 | [MESSAGES CONTROL] 2 | disable=too-many-positional-arguments,duplicate-code 3 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | MLC LLM Contributors 2 | ==================== 3 | 4 | 5 | ## List of Contributors 6 | - [Full List of Contributors](https://github.com/mlc-ai/mlc-llm/graphs/contributors) 7 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | MLC LLM 2 | 3 | Copyright (c) 2023-2025 by MLC LLM Contributors 4 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | app/src/main/jni/*.h 2 | app/src/main/jni/*.cc 3 | app/src/main/obj 4 | 5 | *.iml 6 | .gradle 7 | /local.properties 8 | /.idea/caches 9 | /.idea/libraries 10 | /.idea/modules.xml 11 | /.idea/workspace.xml 12 | /.idea/navEditor.xml 13 | /.idea/assetWizardSettings.xml 14 | .DS_Store 15 | /build 16 | /captures 17 | .externalNativeBuild 18 | .cxx 19 | local.properties 20 | -------------------------------------------------------------------------------- /android/MLCChat/README.md: -------------------------------------------------------------------------------- 1 | # MLC-LLM Android 2 | 3 | Checkout [Documentation page](https://llm.mlc.ai/docs/deploy/android.html) for more information. 4 | 5 | - run `mlc_llm package` 6 | - open this `MLCChat/` folder as a project in Android Studio 7 | -------------------------------------------------------------------------------- /android/MLCChat/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /src/main/libs 3 | -------------------------------------------------------------------------------- /android/MLCChat/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 11 | 12 | 22 | 25 | 26 | 29 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Achazwl/mlc/ab946b8ff62e06763874da5ebcdc5006d053a138/android/MLCChat/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/java/ai/mlc/mlcchat/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package ai.mlc.mlcchat 2 | 3 | import ai.mlc.mlcchat.ui.theme.MLCChatTheme 4 | import android.os.Bundle 5 | import androidx.activity.ComponentActivity 6 | import androidx.activity.compose.setContent 7 | import androidx.compose.foundation.layout.fillMaxSize 8 | import androidx.compose.material3.ExperimentalMaterial3Api 9 | import androidx.compose.material3.Surface 10 | import androidx.compose.ui.Modifier 11 | 12 | 13 | class MainActivity : ComponentActivity() { 14 | 15 | @ExperimentalMaterial3Api 16 | override fun onCreate(savedInstanceState: Bundle?) { 17 | super.onCreate(savedInstanceState) 18 | setContent { 19 | Surface( 20 | modifier = Modifier 21 | .fillMaxSize() 22 | ) { 23 | MLCChatTheme { 24 | NavView() 25 | } 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/java/ai/mlc/mlcchat/NavView.kt: -------------------------------------------------------------------------------- 1 | package ai.mlc.mlcchat 2 | 3 | import androidx.compose.material3.ExperimentalMaterial3Api 4 | import androidx.compose.runtime.Composable 5 | import androidx.lifecycle.viewmodel.compose.viewModel 6 | import androidx.navigation.compose.NavHost 7 | import androidx.navigation.compose.composable 8 | import androidx.navigation.compose.rememberNavController 9 | 10 | @ExperimentalMaterial3Api 11 | @Composable 12 | fun NavView(appViewModel: AppViewModel = viewModel()) { 13 | val navController = rememberNavController() 14 | NavHost(navController = navController, startDestination = "home") { 15 | composable("home") { StartView(navController, appViewModel) } 16 | composable("chat") { ChatView(navController, appViewModel.chatState) } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/java/ai/mlc/mlcchat/ui/theme/Color.kt: -------------------------------------------------------------------------------- 1 | package ai.mlc.mlcchat.ui.theme 2 | 3 | import androidx.compose.ui.graphics.Color 4 | 5 | val Blue10 = Color(0xFF000F5E) 6 | val Blue20 = Color(0xFF001E92) 7 | val Blue30 = Color(0xFF002ECC) 8 | val Blue40 = Color(0xFF1546F6) 9 | val Blue80 = Color(0xFFB8C3FF) 10 | val Blue90 = Color(0xFFDDE1FF) 11 | 12 | val DarkBlue10 = Color(0xFF00036B) 13 | val DarkBlue20 = Color(0xFF000BA6) 14 | val DarkBlue30 = Color(0xFF1026D3) 15 | val DarkBlue40 = Color(0xFF3648EA) 16 | val DarkBlue80 = Color(0xFFBBC2FF) 17 | val DarkBlue90 = Color(0xFFDEE0FF) 18 | 19 | val Yellow10 = Color(0xFF261900) 20 | val Yellow20 = Color(0xFF402D00) 21 | val Yellow30 = Color(0xFF5C4200) 22 | val Yellow40 = Color(0xFF7A5900) 23 | val Yellow80 = Color(0xFFFABD1B) 24 | val Yellow90 = Color(0xFFFFDE9C) 25 | 26 | val Red10 = Color(0xFF410001) 27 | val Red20 = Color(0xFF680003) 28 | val Red30 = Color(0xFF930006) 29 | val Red40 = Color(0xFFBA1B1B) 30 | val Red80 = Color(0xFFFFB4A9) 31 | val Red90 = Color(0xFFFFDAD4) 32 | 33 | val Grey10 = Color(0xFF191C1D) 34 | val Grey20 = Color(0xFF2D3132) 35 | val Grey80 = Color(0xFFC4C7C7) 36 | val Grey90 = Color(0xFFE0E3E3) 37 | val Grey95 = Color(0xFFEFF1F1) 38 | val Grey99 = Color(0xFFFBFDFD) 39 | 40 | val BlueGrey30 = Color(0xFF45464F) 41 | val BlueGrey50 = Color(0xFF767680) 42 | val BlueGrey60 = Color(0xFF90909A) 43 | val BlueGrey80 = Color(0xFFC6C5D0) 44 | val BlueGrey90 = Color(0xFFE2E1EC) 45 | -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/java/ai/mlc/mlcchat/ui/theme/Type.kt: -------------------------------------------------------------------------------- 1 | package ai.mlc.mlcchat.ui.theme 2 | 3 | import androidx.compose.material3.Typography 4 | import androidx.compose.ui.text.TextStyle 5 | import androidx.compose.ui.text.font.FontFamily 6 | import androidx.compose.ui.text.font.FontWeight 7 | import androidx.compose.ui.unit.sp 8 | 9 | // Set of Material typography styles to start with 10 | val Typography = Typography( 11 | bodyLarge = TextStyle( 12 | fontFamily = FontFamily.Default, 13 | fontWeight = FontWeight.Normal, 14 | fontSize = 16.sp, 15 | lineHeight = 24.sp, 16 | letterSpacing = 0.5.sp 17 | ) 18 | /* Other default text styles to override 19 | titleLarge = TextStyle( 20 | fontFamily = FontFamily.Default, 21 | fontWeight = FontWeight.Normal, 22 | fontSize = 22.sp, 23 | lineHeight = 28.sp, 24 | letterSpacing = 0.sp 25 | ), 26 | labelSmall = TextStyle( 27 | fontFamily = FontFamily.Default, 28 | fontWeight = FontWeight.Medium, 29 | fontSize = 11.sp, 30 | lineHeight = 16.sp, 31 | letterSpacing = 0.5.sp 32 | ) 33 | */ 34 | ) 35 | -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/res/drawable/ic_android_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFBB86FC 4 | #FF6200EE 5 | #FF3700B3 6 | #FF03DAC5 7 | #FF018786 8 | #FF000000 9 | #FFFFFFFF 10 | 11 | -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | MLCChat 3 | 4 | -------------------------------------------------------------------------------- /android/MLCChat/app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |