diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..6bb68fda864a0116043b0a1e43d612c24c41dc62
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,258 @@
+### VisualStudioCode template
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+!.vscode/*.code-snippets
+
+# Local History for Visual Studio Code
+.history/
+
+# Built Visual Studio Code Extensions
+*.vsix
+
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# AWS User-specific
+.idea/**/aws.xml
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+.idea
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn. Uncomment if using
+# auto-import.
+# .idea/artifacts
+# .idea/compiler.xml
+# .idea/jarRepositories.xml
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# SonarLint plugin
+.idea/sonarlint/
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+### Python template
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# 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/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+# in version control.
+# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
+.pdm.toml
+.pdm-python
+.pdm-build/
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..199fc5cc6e75917a6e7b4a4c10ec5d7b16b39b6f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,177 @@
+# VoiceDialogue - 智能语音对话系统
+
+
+
+
+
+
+
+一个集成了语音识别(ASR)、大语言模型(LLM)和文本转语音(TTS)的实时语音对话系统
+
+
+
+## 🎯 项目简介
+
+VoiceDialogue 是一个完整的语音对话系统,支持:
+- 🎤 **实时语音识别** - 基于 Whisper 的高精度语音转文本
+- 🤖 **智能对话生成** - 支持多种大语言模型(Qwen、Llama、Mistral等)
+- 🔊 **高质量语音合成** - 基于 GPT-SoVITS 的多角色语音生成
+- 🔇 **回声消除** - 内置音频处理,支持实时语音交互
+- 🌍 **多语言支持** - 支持中文和英文语音识别与合成
+
+## ✨ 主要特性
+
+### 🎵 音频处理
+- **回声消除音频捕获** - 消除回声干扰,提升语音质量
+- **语音活动检测** - 自动检测用户说话状态
+- **实时音频流处理** - 低延迟音频播放
+
+### 🗣️ 语音识别
+- **Whisper 模型支持** - Medium/Large 模型可选
+- **多语言识别** - 支持中文/英文自动识别
+- **实时转录** - 流式语音转文本处理
+
+### 🧠 语言模型
+支持多种预训练模型:
+- **Qwen2.5** (7B/14B) - 中文优化模型
+- **Llama3** (8B) - 通用对话模型
+- **Mistral** (7B) - 高效推理模型
+- **Phi-3** (mini) - 轻量级模型
+
+### 🎭 语音合成
+内置多种音色选择:
+- 罗翔 - 法学教授风格
+- 马保国 - 网络名人风格
+- 沈逸 - 学者风格
+- 杨幂 - 明星风格
+- 周杰伦 - 歌手风格
+- 马云 - 企业家风格
+
+## 🚀 快速开始
+
+### 环境要求
+
+- Python 3.9+
+- macOS 14+
+
+### 安装步骤
+
+1. **克隆项目**
+```bash
+git clone https://huggingface.co/MoYoYoTech/VoiceDialogue
+cd VoiceDialogue
+```
+
+2. **创建虚拟环境**
+```bash
+conda create -n voicedialogue python=3.9
+conda activate voicedialogue
+```
+
+3. **安装依赖**
+```bash
+# 基础依赖
+pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118
+pip install -r requirements.txt
+
+# 音频处理
+conda install ffmpeg
+
+# macOS 额外依赖
+brew install ffmpeg # macOS only
+```
+
+4. **下载模型文件**
+
+模型会在首次运行时自动下载,或手动下载:
+
+```bash
+# ASR 模型 (Whisper)
+mkdir -p models/asr
+# 下载 whisper 模型到 models/asr/
+
+# LLM 模型
+mkdir -p models/llm
+# 模型将从 HuggingFace 自动下载
+
+# TTS 模型
+mkdir -p models/tts
+# GPT-SoVITS 模型将自动下载
+```
+
+### 🎮 运行程序
+
+```bash
+# 启动语音对话系统
+python -m src.VoiceDialogue.main
+```
+
+### ⚙️ 配置选项
+
+在 `src/VoiceDialogue/main.py` 中可以自定义:
+
+```python
+def main():
+ # 语言设置
+ user_language = 'zh' # 'zh' 中文 | 'en' 英文
+
+ # 系统提示词
+ SYSTEM_PROMPT = "你是善于模拟真实思考过程的AI助手..."
+
+ # TTS 音色选择
+ tts_speaker = '沈逸' # 可选: 罗翔、马保国、沈逸、杨幂、周杰伦、马云
+
+ # LLM 模型大小
+ llm = '14B' # '7B' | '14B'
+
+ # Whisper 模型
+ whisper_model = 'medium' # 'medium' | 'large'
+```
+
+## 📁 项目结构
+```text
+VoiceDialogue/
+├── src/ # 源代码
+│ └── VoiceDialogue/ # 主要代码包
+│ ├── config/ # 配置文件
+│ │ └── settings.py # 系统设置
+│ ├── models/ # 模型相关代码
+│ │ ├── audio_model.py # 音频模型管理
+│ │ ├── llm_model.py # 语言模型管理
+│ │ └── ...
+│ ├── services/ # 服务模块
+│ │ ├── audio/ # 音频处理服务
+│ │ ├── speech/ # 语音识别服务
+│ │ ├── text/ # 文本生成服务
+│ │ └── core/ # 核心服务
+│ ├── utils/ # 工具函数
+│ └── main.py # 主程序入口
+├── models/ # 预训练模型
+│ ├── asr/ # 语音识别模型
+│ └── tts/ # 语音合成模型
+├── resources/ # 资源文件
+│ ├── audio/ # 音频资源
+│ ├── libraries/ # 动态库
+│ └── models/ # 模型配置
+├── third_party/ # 第三方库
+├── tests/ # 测试文件
+└── docs/ # 文档
+```
+
+## 🔧 系统架构
+```
+用户语音输入 → 回声消除 → 语音活动检测 → Whisper转录 → LLM生成回复 → TTS合成 → 音频输出
+ ↑ ↓
+ └───────────────────────────────── 实时语音交互循环 ─────────────────────────────────┘
+```
+
+
+### 核心组件
+
+1. **EchoCancellingAudioCapture** - 回声消除音频捕获
+2. **SpeechStateMonitor** - 语音状态监控
+3. **WhisperWorker** - Whisper语音识别
+4. **LLMResponseGenerator** - LLM文本生成
+5. **TTSAudioGenerator** - TTS语音合成
+6. **AudioStreamPlayer** - 音频流播放
+
diff --git a/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/analytics/coremldata.bin b/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/analytics/coremldata.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c39617d775a352f453a0b05a97803df77cb7a81b
--- /dev/null
+++ b/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/analytics/coremldata.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:311e822db8601dd4f6051f276975a410f77290e20058815f0bbc2d3fe6339f86
+size 243
diff --git a/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/coremldata.bin b/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/coremldata.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2de4dd3f09da42374c939e1517ba00806601681f
--- /dev/null
+++ b/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/coremldata.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53adfc091caf04e1f1cf9f42215860bd1f9481d2e0116a0b71e78b9e87003045
+size 319
diff --git a/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/metadata.json b/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/metadata.json
new file mode 100644
index 0000000000000000000000000000000000000000..70d176282527ae944c34d2f3e56f140fae82bbfe
--- /dev/null
+++ b/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/metadata.json
@@ -0,0 +1,68 @@
+[
+ {
+ "metadataOutputVersion" : "3.0",
+ "storagePrecision" : "Float16",
+ "outputSchema" : [
+ {
+ "hasShapeFlexibility" : "0",
+ "isOptional" : "0",
+ "dataType" : "Float32",
+ "formattedType" : "MultiArray (Float32 1 × 1500 × 1280)",
+ "shortDescription" : "",
+ "shape" : "[1, 1500, 1280]",
+ "name" : "output",
+ "type" : "MultiArray"
+ }
+ ],
+ "modelParameters" : [
+
+ ],
+ "specificationVersion" : 6,
+ "mlProgramOperationTypeHistogram" : {
+ "Concat" : 32,
+ "Gelu" : 34,
+ "LayerNorm" : 65,
+ "Transpose" : 33,
+ "Softmax" : 640,
+ "Squeeze" : 1,
+ "Cast" : 2,
+ "Add" : 65,
+ "Einsum" : 1280,
+ "ExpandDims" : 1,
+ "Split" : 96,
+ "Conv" : 194
+ },
+ "computePrecision" : "Mixed (Float16, Float32, Int32)",
+ "isUpdatable" : "0",
+ "availability" : {
+ "macOS" : "12.0",
+ "tvOS" : "15.0",
+ "visionOS" : "1.0",
+ "watchOS" : "8.0",
+ "iOS" : "15.0",
+ "macCatalyst" : "15.0"
+ },
+ "modelType" : {
+ "name" : "MLModelType_mlProgram"
+ },
+ "userDefinedMetadata" : {
+ "com.github.apple.coremltools.source_dialect" : "TorchScript",
+ "com.github.apple.coremltools.source" : "torch==2.1.0",
+ "com.github.apple.coremltools.version" : "8.0"
+ },
+ "inputSchema" : [
+ {
+ "hasShapeFlexibility" : "0",
+ "isOptional" : "0",
+ "dataType" : "Float32",
+ "formattedType" : "MultiArray (Float32 1 × 128 × 3000)",
+ "shortDescription" : "",
+ "shape" : "[1, 128, 3000]",
+ "name" : "logmel_data",
+ "type" : "MultiArray"
+ }
+ ],
+ "generatedClassName" : "coreml_encoder_large_v3_turbo",
+ "method" : "predict"
+ }
+]
\ No newline at end of file
diff --git a/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/model.mil b/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/model.mil
new file mode 100644
index 0000000000000000000000000000000000000000..8756e62aec14e45e1dd595ed47aae6a520cc5300
--- /dev/null
+++ b/models/asr/ggml-large-v3-turbo-encoder.mlmodelc/model.mil
@@ -0,0 +1,5643 @@
+program(1.0)
+[buildInfo = dict, tensor>({{"coremlc-component-MIL", "5.33.5"}, {"coremlc-version", "1877.40.3"}, {"coremltools-component-torch", "2.1.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "8.0"}})]
+{
+ func main(tensor logmel_data) {
+ tensor var_84_pad_type_0 = const()[name = tensor("op_84_pad_type_0"), val = tensor("custom")];
+ tensor var_84_pad_0 = const()[name = tensor("op_84_pad_0"), val = tensor([1, 1])];
+ tensor var_84_strides_0 = const()[name = tensor("op_84_strides_0"), val = tensor([1])];
+ tensor var_84_dilations_0 = const()[name = tensor("op_84_dilations_0"), val = tensor([1])];
+ tensor var_84_groups_0 = const()[name = tensor("op_84_groups_0"), val = tensor(1)];
+ tensor logmel_data_to_fp16_dtype_0 = const()[name = tensor("logmel_data_to_fp16_dtype_0"), val = tensor("fp16")];
+ tensor weight_3_to_fp16 = const()[name = tensor("weight_3_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(64)))];
+ tensor bias_3_to_fp16 = const()[name = tensor("bias_3_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(983168)))];
+ tensor logmel_data_to_fp16 = cast(dtype = logmel_data_to_fp16_dtype_0, x = logmel_data)[name = tensor("cast_131")];
+ tensor var_84_cast_fp16 = conv(bias = bias_3_to_fp16, dilations = var_84_dilations_0, groups = var_84_groups_0, pad = var_84_pad_0, pad_type = var_84_pad_type_0, strides = var_84_strides_0, weight = weight_3_to_fp16, x = logmel_data_to_fp16)[name = tensor("op_84_cast_fp16")];
+ tensor input_1_mode_0 = const()[name = tensor("input_1_mode_0"), val = tensor("EXACT")];
+ tensor input_1_cast_fp16 = gelu(mode = input_1_mode_0, x = var_84_cast_fp16)[name = tensor("input_1_cast_fp16")];
+ tensor var_102_pad_type_0 = const()[name = tensor("op_102_pad_type_0"), val = tensor("custom")];
+ tensor var_102_pad_0 = const()[name = tensor("op_102_pad_0"), val = tensor([1, 1])];
+ tensor var_102_strides_0 = const()[name = tensor("op_102_strides_0"), val = tensor([2])];
+ tensor var_102_dilations_0 = const()[name = tensor("op_102_dilations_0"), val = tensor([1])];
+ tensor var_102_groups_0 = const()[name = tensor("op_102_groups_0"), val = tensor(1)];
+ tensor weight_7_to_fp16 = const()[name = tensor("weight_7_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(985792)))];
+ tensor bias_7_to_fp16 = const()[name = tensor("bias_7_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(10816256)))];
+ tensor var_102_cast_fp16 = conv(bias = bias_7_to_fp16, dilations = var_102_dilations_0, groups = var_102_groups_0, pad = var_102_pad_0, pad_type = var_102_pad_type_0, strides = var_102_strides_0, weight = weight_7_to_fp16, x = input_1_cast_fp16)[name = tensor("op_102_cast_fp16")];
+ tensor x_3_mode_0 = const()[name = tensor("x_3_mode_0"), val = tensor("EXACT")];
+ tensor x_3_cast_fp16 = gelu(mode = x_3_mode_0, x = var_102_cast_fp16)[name = tensor("x_3_cast_fp16")];
+ tensor var_107_to_fp16 = const()[name = tensor("op_107_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(10818880)))];
+ tensor var_109_cast_fp16 = add(x = x_3_cast_fp16, y = var_107_to_fp16)[name = tensor("op_109_cast_fp16")];
+ tensor inputs_1_axes_0 = const()[name = tensor("inputs_1_axes_0"), val = tensor([2])];
+ tensor inputs_1_cast_fp16 = expand_dims(axes = inputs_1_axes_0, x = var_109_cast_fp16)[name = tensor("inputs_1_cast_fp16")];
+ tensor var_124 = const()[name = tensor("op_124"), val = tensor(1)];
+ tensor input_3_axes_0 = const()[name = tensor("input_3_axes_0"), val = tensor([1])];
+ tensor input_3_gamma_0_to_fp16 = const()[name = tensor("input_3_gamma_0_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(14658944)))];
+ tensor input_3_beta_0_to_fp16 = const()[name = tensor("input_3_beta_0_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(14661568)))];
+ tensor var_140_to_fp16 = const()[name = tensor("op_140_to_fp16"), val = tensor(0x1.5p-17)];
+ tensor input_3_cast_fp16 = layer_norm(axes = input_3_axes_0, beta = input_3_beta_0_to_fp16, epsilon = var_140_to_fp16, gamma = input_3_gamma_0_to_fp16, x = inputs_1_cast_fp16)[name = tensor("input_3_cast_fp16")];
+ tensor q_1_pad_type_0 = const()[name = tensor("q_1_pad_type_0"), val = tensor("valid")];
+ tensor q_1_strides_0 = const()[name = tensor("q_1_strides_0"), val = tensor([1, 1])];
+ tensor q_1_pad_0 = const()[name = tensor("q_1_pad_0"), val = tensor([0, 0, 0, 0])];
+ tensor q_1_dilations_0 = const()[name = tensor("q_1_dilations_0"), val = tensor([1, 1])];
+ tensor q_1_groups_0 = const()[name = tensor("q_1_groups_0"), val = tensor(1)];
+ tensor var_175_weight_0_to_fp16 = const()[name = tensor("op_175_weight_0_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(14664192)))];
+ tensor var_175_bias_0_to_fp16 = const()[name = tensor("op_175_bias_0_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(17941056)))];
+ tensor var_175_cast_fp16 = conv(bias = var_175_bias_0_to_fp16, dilations = q_1_dilations_0, groups = q_1_groups_0, pad = q_1_pad_0, pad_type = q_1_pad_type_0, strides = q_1_strides_0, weight = var_175_weight_0_to_fp16, x = input_3_cast_fp16)[name = tensor("op_175_cast_fp16")];
+ tensor k_1_pad_type_0 = const()[name = tensor("k_1_pad_type_0"), val = tensor("valid")];
+ tensor k_1_strides_0 = const()[name = tensor("k_1_strides_0"), val = tensor([1, 1])];
+ tensor k_1_pad_0 = const()[name = tensor("k_1_pad_0"), val = tensor([0, 0, 0, 0])];
+ tensor k_1_dilations_0 = const()[name = tensor("k_1_dilations_0"), val = tensor([1, 1])];
+ tensor k_1_groups_0 = const()[name = tensor("k_1_groups_0"), val = tensor(1)];
+ tensor blocks_0_attn_key_weight_to_fp16 = const()[name = tensor("blocks_0_attn_key_weight_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(17943680)))];
+ tensor k_1_cast_fp16 = conv(dilations = k_1_dilations_0, groups = k_1_groups_0, pad = k_1_pad_0, pad_type = k_1_pad_type_0, strides = k_1_strides_0, weight = blocks_0_attn_key_weight_to_fp16, x = input_3_cast_fp16)[name = tensor("k_1_cast_fp16")];
+ tensor var_173_pad_type_0 = const()[name = tensor("op_173_pad_type_0"), val = tensor("valid")];
+ tensor var_173_strides_0 = const()[name = tensor("op_173_strides_0"), val = tensor([1, 1])];
+ tensor var_173_pad_0 = const()[name = tensor("op_173_pad_0"), val = tensor([0, 0, 0, 0])];
+ tensor var_173_dilations_0 = const()[name = tensor("op_173_dilations_0"), val = tensor([1, 1])];
+ tensor var_173_groups_0 = const()[name = tensor("op_173_groups_0"), val = tensor(1)];
+ tensor blocks_0_attn_value_weight_to_fp16 = const()[name = tensor("blocks_0_attn_value_weight_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(21220544)))];
+ tensor blocks_0_attn_value_bias_to_fp16 = const()[name = tensor("blocks_0_attn_value_bias_to_fp16"), val = tensor(BLOBFILE(path = tensor("@model_path/weights/weight.bin"), offset = tensor(24497408)))];
+ tensor var_173_cast_fp16 = conv(bias = blocks_0_attn_value_bias_to_fp16, dilations = var_173_dilations_0, groups = var_173_groups_0, pad = var_173_pad_0, pad_type = var_173_pad_type_0, strides = var_173_strides_0, weight = blocks_0_attn_value_weight_to_fp16, x = input_3_cast_fp16)[name = tensor("op_173_cast_fp16")];
+ tensor tile_0 = const()[name = tensor("tile_0"), val = tensor([64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64])];
+ tensor var_176_axis_0 = const()[name = tensor("op_176_axis_0"), val = tensor(1)];
+ tensor var_176_cast_fp16_0, tensor var_176_cast_fp16_1, tensor var_176_cast_fp16_2, tensor var_176_cast_fp16_3, tensor var_176_cast_fp16_4, tensor var_176_cast_fp16_5, tensor var_176_cast_fp16_6, tensor var_176_cast_fp16_7, tensor var_176_cast_fp16_8, tensor var_176_cast_fp16_9, tensor var_176_cast_fp16_10, tensor var_176_cast_fp16_11, tensor var_176_cast_fp16_12, tensor var_176_cast_fp16_13, tensor var_176_cast_fp16_14, tensor var_176_cast_fp16_15, tensor var_176_cast_fp16_16, tensor var_176_cast_fp16_17, tensor var_176_cast_fp16_18, tensor var_176_cast_fp16_19 = split(axis = var_176_axis_0, split_sizes = tile_0, x = var_175_cast_fp16)[name = tensor("op_176_cast_fp16")];
+ tensor var_197_perm_0 = const()[name = tensor("op_197_perm_0"), val = tensor([0, 3, 2, 1])];
+ tensor tile_1 = const()[name = tensor("tile_1"), val = tensor([64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64])];
+ tensor var_198_axis_0 = const()[name = tensor("op_198_axis_0"), val = tensor(3)];
+ tensor var_197_cast_fp16 = transpose(perm = var_197_perm_0, x = k_1_cast_fp16)[name = tensor("transpose_32")];
+ tensor var_198_cast_fp16_0, tensor var_198_cast_fp16_1, tensor var_198_cast_fp16_2, tensor var_198_cast_fp16_3, tensor var_198_cast_fp16_4, tensor var_198_cast_fp16_5, tensor var_198_cast_fp16_6, tensor var_198_cast_fp16_7, tensor var_198_cast_fp16_8, tensor var_198_cast_fp16_9, tensor var_198_cast_fp16_10, tensor var_198_cast_fp16_11, tensor var_198_cast_fp16_12, tensor var_198_cast_fp16_13, tensor var_198_cast_fp16_14, tensor var_198_cast_fp16_15, tensor var_198_cast_fp16_16, tensor var_198_cast_fp16_17, tensor var_198_cast_fp16_18, tensor var_198_cast_fp16_19 = split(axis = var_198_axis_0, split_sizes = tile_1, x = var_197_cast_fp16)[name = tensor("op_198_cast_fp16")];
+ tensor tile_2 = const()[name = tensor("tile_2"), val = tensor([64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64])];
+ tensor var_219_axis_0 = const()[name = tensor("op_219_axis_0"), val = tensor(1)];
+ tensor var_219_cast_fp16_0, tensor var_219_cast_fp16_1, tensor var_219_cast_fp16_2, tensor var_219_cast_fp16_3, tensor var_219_cast_fp16_4, tensor var_219_cast_fp16_5, tensor