chenbhao commited on
Commit
92c7321
·
1 Parent(s): c6bc767

Flatten src layout: drop omni namespace, modules live directly under src/

Browse files

- Move src/omni/{core,datasets,encoders,models,projectors,serve,trainers,utils}
up to src/, remove intermediate omni package
- Rewrite all omni.* imports to absolute top-level (core/models/trainers/dataset/utils/...)
- Rename data package datasets->dataset to avoid collision with HF 'datasets' library;
internal refs use 'dataset.*', HF lib imports keep 'from datasets import ...'
- Update root trainer/{lm,vlm,vam}.py to import from trainers.*
- Rewrite README to reflect flat layout, renamed classes, trainer/ entry points, configs/

This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. README.md +65 -70
  2. scripts/convert_model.py +2 -2
  3. scripts/eval_llm.py +3 -3
  4. scripts/eval_toolcall.py +2 -2
  5. scripts/eval_vam.py +3 -3
  6. scripts/eval_vlm.py +2 -2
  7. scripts/omni_web_demo.py +3 -3
  8. scripts/serve_openai_api.py +2 -2
  9. src/{omni/core → core}/__init__.py +5 -5
  10. src/{omni/core → core}/attention.py +2 -2
  11. src/{omni/core → core}/block.py +3 -3
  12. src/{omni/core → core}/mlp.py +0 -0
  13. src/{omni/core → core}/norm.py +0 -0
  14. src/{omni/core → core}/rope.py +0 -0
  15. src/{omni/datasets → dataset}/__init__.py +7 -7
  16. src/{omni/datasets → dataset}/agent_rl.py +0 -0
  17. src/{omni/datasets → dataset}/common.py +1 -1
  18. src/{omni/datasets → dataset}/dpo.py +1 -1
  19. src/{omni/datasets → dataset}/pretrain.py +1 -1
  20. src/{omni/datasets → dataset}/rlaif.py +1 -1
  21. src/{omni/datasets → dataset}/sft.py +1 -1
  22. src/{omni/datasets → dataset}/vam.py +1 -1
  23. src/{omni/datasets → dataset}/vlm.py +1 -1
  24. src/{omni/encoders → encoders}/__init__.py +1 -1
  25. src/{omni/encoders → encoders}/audio/__init__.py +1 -1
  26. src/{omni/encoders → encoders}/audio/sensevoice.py +0 -0
  27. src/{omni/encoders → encoders}/vision/__init__.py +1 -1
  28. src/{omni/encoders → encoders}/vision/siglip.py +0 -0
  29. src/{omni/models → models}/__init__.py +8 -8
  30. src/{omni/models → models}/lm/__init__.py +2 -2
  31. src/{omni/models → models}/lm/config.py +0 -0
  32. src/{omni/models → models}/lm/lora.py +0 -0
  33. src/{omni/models → models}/lm/model.py +2 -2
  34. src/{omni/models → models}/vam/__init__.py +2 -2
  35. src/{omni/models → models}/vam/config.py +1 -1
  36. src/{omni/models → models}/vam/model.py +7 -7
  37. src/models/vlm/__init__.py +4 -0
  38. src/{omni/models → models}/vlm/config.py +1 -1
  39. src/{omni/models → models}/vlm/model.py +5 -5
  40. src/omni/__init__.py +0 -0
  41. src/omni/models/vlm/__init__.py +0 -4
  42. src/omni/serve/__init__.py +0 -1
  43. src/omni/trainers/__init__.py +0 -15
  44. src/omni/trainers/lm/__init__.py +0 -10
  45. src/omni/trainers/vam/__init__.py +0 -1
  46. src/omni/trainers/vlm/__init__.py +0 -2
  47. src/{omni/projectors → projectors}/__init__.py +2 -2
  48. src/{omni/projectors → projectors}/audio.py +0 -0
  49. src/{omni/projectors → projectors}/vision.py +0 -0
  50. src/serve/__init__.py +1 -0
README.md CHANGED
@@ -5,78 +5,82 @@ Omni 是一个以 **多模态 (omni)** 为目标的 LLM 训练 / 推理框架,
5
  [miniMind-V](https://github.com/jingyaogong/minimind-v)(视觉多模态)与
6
  [miniMind-O](https://github.com/jingyaogong/minimind-o)(语音 / 全模态)三套代码。
7
 
8
- 项目采用标准 `src/` 布局(`pip install -e .` 即可安装为 `omni` 包),
9
- **core(组件)/ models(拼装)/ encoders(模态编码器)/ projectors(桥接层)** 分层。
10
 
11
  ## 设计分层
12
 
13
  - `core/`:可复用模型**纯底层组件**,按层级细分为独立模块——
14
  `norm.py`(`RMSNorm`)、`rope.py`(`precompute_freqs_cis` / `apply_rotary_pos_emb` / `repeat_kv`)、
15
  `attention.py`(`Attention`)、`mlp.py`(`FeedForward` / `MOEFeedForward`)、
16
- `block.py`(`MiniMindBlock`)。(Transformer 主干 `MiniMindModel` 已归入 `models/lm/model.py`)
17
  - `models/`:把 `core` 组件**拼装**成成品模型,按模态能力分为三个子包(每个含 `config.py` 配置 + `model.py` 建模):
18
- - `models/lm/`:纯文本——`MiniMindConfig` + `MiniMindForCausalLM`
19
- - `models/vlm/`:文本 + 视觉——`VLMConfig` + `MiniMindVLM`
20
- - `models/vam/`:文本 + 语音/全模态——`OmniConfig` + `MiniMindOmni`(含 `TalkerModule`)
21
  - `encoders/`:外部模态编码器,按模态分目录——`vision/`(SigLIP)、`audio/`(SenseVoice)。
22
  - `projectors/`:把 encoder 输出**桥接**到 LLM 隐藏维度的拼接层(`MMVisionProjector`、`MMAudioProjector`)。
23
  - `serve/`:实时语音会话工程层(`SileroVAD`、`RealtimeSession`)。
 
 
 
24
 
25
  ## 目录结构
26
 
27
  ```
28
- src/omni/
29
  ├── core/ # 模型底层组件(按层级拆分)
30
  │ ├── norm.py # RMSNorm
31
  │ ├── rope.py # precompute_freqs_cis / apply_rotary_pos_emb / repeat_kv
32
  │ ├── attention.py # Attention
33
  │ ├── mlp.py # FeedForward / MOEFeedForward
34
- │ └── block.py # MiniMindBlock
35
  ├── models/ # 模型拼装(按模态能力分子包)
36
  │ ├── lm/ # 纯文本
37
- │ │ ├── config.py # MiniMindConfig
38
- │ │ ├── model.py # MiniMindForCausalLM + MiniMindModel 主干
39
- │ │ └── lora.py # LoRA 注入 / 保存 / 合并(作用于 MiniMind 主干)
40
  │ ├── vlm/ # 文本 + 视觉
41
  │ │ ├── config.py # VLMConfig
42
- │ │ └── model.py # MiniMindVLM
43
  │ └── vam/ # 文本 + 语音/全模态
44
- │ ├── config.py # OmniConfig
45
- │ └── model.py # MiniMindOmni + TalkerModule
46
  ├── encoders/ # 多模态编码器(按模态分目录)
47
  │ ├── vision/ # SiglipVisionEncoder
48
  │ └── audio/ # SenseVoiceAudioEncoder
49
  ├── projectors/ # 多模态桥接层
50
  │ ├── vision.py # MMVisionProjector
51
  │ └── audio.py # MMAudioProjector
52
- ├── trainers/ # 训练脚本(可直接 python -m 运行
53
- │ ├── pretrain.py # 文本预训练
54
- ├── full_sft.py # 文本全量 SFT
55
- │ ├── lora.py / dpo.py / distillation.py / ppo.py / grpo.py / agent.py
56
- ── rollout_engine.py # torch / sglang 推理引擎
57
- ├── train_tokenizer.py # tokenizer 训练学习用
58
- │ ├── pretrain_vlm.py # 视觉预训练
59
- ── full_sft_vlm.py # 视觉 SFT
60
- │ └── full_sft_omni.py # 全模态 SFT
61
- ├── datasets/ # 数据集(Pretrain/SFT/DPO/RLAIF/Agent/VLM/Omni)
62
- ── lm_dataset.py
63
- ├── utils/ # 工具
64
- ── training.py # get_lr / init_model / lm_checkpoint / SkipBatchSampler / LMForRewardModel
65
- ├── multimodal.py # init_vlm_model / vlm_checkpoint / init_omni_model / omni_checkpoint
66
- │ ├── distributed.py # 分布式初始化
67
- │ └── checkpoint.py # checkpoint 读写辅助
68
- ── serve/ # 实时语音会话(SileroVAD / RealtimeSession)
69
- └── __init__.py
70
- examples/ # 推理 / 服务 / 转换脚本
71
- ├── eval_llm.py # 命令行推理与对话
72
- ── eval_vlm.py # 视觉多模态推理
73
- ├── eval_omni.py # 全模态推理
 
 
 
74
  ├── serve_openai_api.py # OpenAI 兼容 API 服务
75
- ├── omni_web_demo.py # 网页演示(含实时语音)
76
- ├── eval_toolcall.py # 工具调用评测
77
- └── convert_model.py # torch <-> transformers 权重互转
78
- weights/MiniMind2/ # tokenizer 与模型配置(从 MiniMind 迁移)
79
- configs/ # 训练配置(按需补充)
80
  ```
81
 
82
  ## 安装
@@ -89,43 +93,34 @@ pip install -e ".[rl,serve,demo]"
89
 
90
  ## 快速开始
91
 
92
- ### 推理 / 对话
 
 
 
93
 
94
  ```bash
95
- python -m examples.eval_llm --load_from weights/MiniMind2 --weight full_sft
 
 
 
96
  ```
97
 
98
- ### 训练
99
-
100
- 每个训练脚本都是 `omni.trainers` 下的一个模块,直接运行即可:
101
 
102
  ```bash
103
- # 预训练
104
- python -m omni.trainers.pretrain --data_path dataset/pretrain.jsonl
105
- # 全量 SFT
106
- python -m omni.trainers.full_sft --data_path dataset/sft.jsonl
107
- # LoRA 微调
108
- python -m omni.trainers.lora --data_path dataset/lora.jsonl
109
- # DPO / 蒸馏 / PPO / GRPO / Agent RL
110
- python -m omni.trainers.dpo --data_path dataset/dpo.jsonl
111
- python -m omni.trainers.distillation --data_path dataset/sft.jsonl
112
- python -m omni.trainers.grpo --data_path dataset/rlaif.jsonl
113
- python -m omni.trainers.agent --data_path dataset/agent_rl.jsonl
114
  ```
115
 
116
- 所有脚本参数与原 MiniMind 保持一致(hidden_size / num_hidden_layers / use_moe / data_path 等)。
117
 
118
- ## 与原 MiniMind 的差异
119
-
120
- - 去除所有 `sys.path` 注入 hack,统一使用 `omni.*` 包导入;
121
- - `trainer_utils.py` 拆分为 `utils/training.py`(训练工具)、`utils/distributed.py`、`utils/checkpoint.py`;
122
- - 训练脚本从「`if __name__ == '__main__'` 内联」改为可被 `python -m omni.trainers.<name>` 调用的模块;
123
- - 预留 `encoders/`(vision/audio)、`projectors/`、`core/` 供多模态扩展。
124
 
125
- ## 多模态扩展方向
126
-
127
- 在 `models/minimind.py` 的 `MiniMindModel` 之上接入:
128
 
129
- 1. `encoders/vision` / `encoders/audio` —— 各自的模态编码器
130
- 2. `projectors` —— 将编码器输出��影到 LLM 隐藏维度;
131
- 3. 在 `MiniMindModel.forward` 中把投影特征拼接到 `embed_tokens` 之后。
 
 
 
 
5
  [miniMind-V](https://github.com/jingyaogong/minimind-v)(视觉多模态)与
6
  [miniMind-O](https://github.com/jingyaogong/minimind-o)(语音 / 全模态)三套代码。
7
 
8
+ 项目采用标准 `src/` 布局(`pip install -e .` 即可安装),
9
+ **core(组件)/ models(拼装)/ encoders(模态编码器)/ projectors(桥接层)** 分层。
10
 
11
  ## 设计分层
12
 
13
  - `core/`:可复用模型**纯底层组件**,按层级细分为独立模块——
14
  `norm.py`(`RMSNorm`)、`rope.py`(`precompute_freqs_cis` / `apply_rotary_pos_emb` / `repeat_kv`)、
15
  `attention.py`(`Attention`)、`mlp.py`(`FeedForward` / `MOEFeedForward`)、
16
+ `block.py`(`Block`)。
17
  - `models/`:把 `core` 组件**拼装**成成品模型,按模态能力分为三个子包(每个含 `config.py` 配置 + `model.py` 建模):
18
+ - `models/lm/`:纯文本——`LMConfig` + `LMForCausalLM`(主干 `LM`)
19
+ - `models/vlm/`:文本 + 视觉——`VLMConfig` + `VLM`
20
+ - `models/vam/`:文本 + 语音/全模态——`VAMConfig` + `VAM`(含 `TalkerModule`)
21
  - `encoders/`:外部模态编码器,按模态分目录——`vision/`(SigLIP)、`audio/`(SenseVoice)。
22
  - `projectors/`:把 encoder 输出**桥接**到 LLM 隐藏维度的拼接层(`MMVisionProjector`、`MMAudioProjector`)。
23
  - `serve/`:实时语音会话工程层(`SileroVAD`、`RealtimeSession`)。
24
+ - `trainers/`:训练脚本,按模态分 `lm/` `vlm/` `vam/` 子包。
25
+ - `dataset/`:数据集(Pretrain / SFT / DPO / RLAIF / Agent / VLM / VAM),每类一个文件。
26
+ - `utils/`:训练与多模态工具。
27
 
28
  ## 目录结构
29
 
30
  ```
31
+ src/
32
  ├── core/ # 模型底层组件(按层级拆分)
33
  │ ├── norm.py # RMSNorm
34
  │ ├── rope.py # precompute_freqs_cis / apply_rotary_pos_emb / repeat_kv
35
  │ ├── attention.py # Attention
36
  │ ├── mlp.py # FeedForward / MOEFeedForward
37
+ │ └── block.py # Block
38
  ├── models/ # 模型拼装(按模态能力分子包)
39
  │ ├── lm/ # 纯文本
40
+ │ │ ├── config.py # LMConfig
41
+ │ │ ├── model.py # LMForCausalLM + LM 主干
42
+ │ │ └── lora.py # LoRA 注入 / 保存 / 合并(作用于 LM 主干)
43
  │ ├── vlm/ # 文本 + 视觉
44
  │ │ ├── config.py # VLMConfig
45
+ │ │ └── model.py # VLM
46
  │ └── vam/ # 文本 + 语音/全模态
47
+ │ ├── config.py # VAMConfig
48
+ │ └── model.py # VAM + TalkerModule
49
  ├── encoders/ # 多模态编码器(按模态分目录)
50
  │ ├── vision/ # SiglipVisionEncoder
51
  │ └── audio/ # SenseVoiceAudioEncoder
52
  ├── projectors/ # 多模态桥接层
53
  │ ├── vision.py # MMVisionProjector
54
  │ └── audio.py # MMAudioProjector
55
+ ├── trainers/ # 训练脚本(按模态分 lm / vlm / vam
56
+ │ ├── lm/ # pretrain / full_sft / lora / dpo / distillation / ppo / grpo / agent
57
+ # + rollout_engine / train_tokenizer
58
+ │ ├── vlm/ # pretrain / full_sft
59
+ ── vam/ # full_sft
60
+ ├── dataset/ # 数据集每类一个文件
61
+ │ ├── pretrain.py / sft.py / dpo.py / rlaif.py / agent_rl.py / vlm.py / vam.py
62
+ ── common.py # 共享辅助函数
63
+ ── utils/ # 工具
64
+ ├── training.py # get_lr / init_model / lm_checkpoint / SkipBatchSampler / apply_config
65
+ ── multimodal.py # init_vlm_model / vlm_checkpoint / init_omni_model / omni_checkpoint
66
+ ├── distributed.py # 分布式初始化
67
+ ── checkpoint.py # checkpoint 读写辅助
68
+ ├── serve/ # 实时语音会话(SileroVAD / RealtimeSession)
69
+ configs/
70
+ ── model/ # lm / lm_moe / vlm / vlm_moe / vam / vam_moe 训练配置
71
+ ── tokenizer/ # tokenizer.json / tokenizer_config.json
72
+ trainer/ # 根目录可直接运行的训练入口(默认加载对应 configs/model/*.yaml)
73
+ ├── lm.py # python trainer/lm.py -> configs/model/lm.yaml
74
+ ├── vlm.py # python trainer/vlm.py -> configs/model/vlm.yaml
75
+ ── vam.py # python trainer/vam.py -> configs/model/vam.yaml
76
+ scripts/ # 推理 / 服务 / 转换脚本
77
+ ├── eval_llm.py # 命令行推理与对话
78
+ ├── eval_vlm.py # 视觉多模态推理
79
+ ├── eval_vam.py # 全模态推理
80
  ├── serve_openai_api.py # OpenAI 兼容 API 服务
81
+ ├── omni_web_demo.py # 网页演示(含实时语音)
82
+ ├── eval_toolcall.py # 工具调用评测
83
+ └── convert_model.py # torch <-> transformers 权重互转
 
 
84
  ```
85
 
86
  ## 安装
 
93
 
94
  ## 快速开始
95
 
96
+ ### 训练(YAML 驱动)
97
+
98
+ 根目录 `trainer/` 提供可直接运行的入口,默认加载 `configs/model/` 下对应的 YAML,
99
+ 也可通过 `--config` 指定其它配置,任意 CLI 参数都能覆盖 YAML 中的默认值:
100
 
101
  ```bash
102
+ cd trainer
103
+ python lm.py # 使用 configs/model/lm.yaml
104
+ python vlm.py --config ../configs/model/vlm_moe.yaml
105
+ python vam.py --epochs 5 # 在 vam.yaml 基础上覆盖单字段
106
  ```
107
 
108
+ ### 推理 / 对话
 
 
109
 
110
  ```bash
111
+ python scripts/eval_llm.py --load_from ../model --weight full_sft
 
 
 
 
 
 
 
 
 
 
112
  ```
113
 
114
+ ## 配置说明
115
 
116
+ `configs/model/*.yaml` 分为 `model` / `train` / `paths` 三段,由 `utils.training.apply_config`
117
+ 注入为 argparse 默认值;CLI 显式传参优先级更高。训练产出保存在 `checkpoint/` 目录。
 
 
 
 
118
 
119
+ ## 与原 MiniMind 的差异
 
 
120
 
121
+ - 去除 `omni` 中间包,模块直接置于 `src/` 下(`core` / `models` / `trainers` / `dataset` / `utils` …),统一绝对导入
122
+ - 类名统一:`MiniMindModel→LM`、`MiniMindVLM→VLM`、`MiniMindOmni→VAM`、`MiniMindConfig→LMConfig`、
123
+ `MiniMindForCausalLM→LMForCausalLM``OmniConfig→VAMConfig`
124
+ - `trainer_utils.py` 拆分为 `utils/training.py`、`utils/distributed.py`、`utils/checkpoint.py`;
125
+ - 训练脚本暴露 `main(default_config=None)`,既可由 `python -m trainers.<mod>` 调用,也可由根 `trainer/*.py` 调用;
126
+ - `dataset/` 按数据集类型拆分为独立文件,供多模态扩展。
scripts/convert_model.py CHANGED
@@ -5,8 +5,8 @@ import torch
5
  import transformers
6
  import warnings
7
  from transformers import AutoTokenizer, AutoModelForCausalLM, Qwen3Config, Qwen3ForCausalLM, Qwen3MoeConfig, Qwen3MoeForCausalLM
8
- from omni.models import LMConfig, LMForCausalLM
9
- from omni.models.lm.lora import apply_lora, merge_lora
10
 
11
  warnings.filterwarnings('ignore', category=UserWarning)
12
 
 
5
  import transformers
6
  import warnings
7
  from transformers import AutoTokenizer, AutoModelForCausalLM, Qwen3Config, Qwen3ForCausalLM, Qwen3MoeConfig, Qwen3MoeForCausalLM
8
+ from models import LMConfig, LMForCausalLM
9
+ from models.lm.lora import apply_lora, merge_lora
10
 
11
  warnings.filterwarnings('ignore', category=UserWarning)
12
 
scripts/eval_llm.py CHANGED
@@ -4,9 +4,9 @@ import random
4
  import warnings
5
  import torch
6
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
7
- from omni.models import LMConfig, LMForCausalLM
8
- from omni.models.lm.lora import * # noqa: F401,F403
9
- from omni.utils.training import setup_seed, get_model_params
10
  warnings.filterwarnings('ignore')
11
 
12
  def init_model(args):
 
4
  import warnings
5
  import torch
6
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
7
+ from models import LMConfig, LMForCausalLM
8
+ from models.lm.lora import * # noqa: F401,F403
9
+ from utils.training import setup_seed, get_model_params
10
  warnings.filterwarnings('ignore')
11
 
12
  def init_model(args):
scripts/eval_toolcall.py CHANGED
@@ -9,8 +9,8 @@ import torch
9
  from datetime import datetime
10
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
11
  from openai import OpenAI
12
- from omni.models import LMConfig, LMForCausalLM
13
- from omni.utils.training import setup_seed, get_model_params
14
  warnings.filterwarnings('ignore')
15
 
16
  TOOLS = [
 
9
  from datetime import datetime
10
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
11
  from openai import OpenAI
12
+ from models import LMConfig, LMForCausalLM
13
+ from utils.training import setup_seed, get_model_params
14
  warnings.filterwarnings('ignore')
15
 
16
  TOOLS = [
scripts/eval_vam.py CHANGED
@@ -6,9 +6,9 @@ import warnings
6
  import torch
7
  from PIL import Image
8
  from transformers import AutoTokenizer, AutoModelForCausalLM
9
- from omni.models import VAM, VAMConfig
10
- from omni.datasets import VAMDataset
11
- from omni.utils import setup_seed, log_model_params
12
  warnings.filterwarnings('ignore')
13
 
14
 
 
6
  import torch
7
  from PIL import Image
8
  from transformers import AutoTokenizer, AutoModelForCausalLM
9
+ from models import VAM, VAMConfig
10
+ from dataset import VAMDataset
11
+ from utils import setup_seed, log_model_params
12
  warnings.filterwarnings('ignore')
13
 
14
 
scripts/eval_vlm.py CHANGED
@@ -6,8 +6,8 @@ import torch
6
  import random
7
  from PIL import Image
8
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
9
- from omni.models import VLM, VLMConfig
10
- from omni.utils import setup_seed, get_vlm_model_params
11
  warnings.filterwarnings('ignore')
12
 
13
  def init_model(args):
 
6
  import random
7
  from PIL import Image
8
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
9
+ from models import VLM, VLMConfig
10
+ from utils import setup_seed, get_vlm_model_params
11
  warnings.filterwarnings('ignore')
12
 
13
  def init_model(args):
scripts/omni_web_demo.py CHANGED
@@ -2,9 +2,9 @@ import argparse, os, sys, json, time, math, torch, threading, queue, base64, io,
2
  import numpy as np
3
  from PIL import Image
4
  from transformers import AutoTokenizer, AutoModelForCausalLM
5
- from omni.models import VAM
6
- from omni.serve.realtime import RealtimeSession
7
- from omni.utils import log_model_params
8
  logging.getLogger().setLevel(logging.ERROR)
9
 
10
  M = {} # model / tokenizer / device / mimi / asr / cfg
 
2
  import numpy as np
3
  from PIL import Image
4
  from transformers import AutoTokenizer, AutoModelForCausalLM
5
+ from models import VAM
6
+ from serve.realtime import RealtimeSession
7
+ from utils import log_model_params
8
  logging.getLogger().setLevel(logging.ERROR)
9
 
10
  M = {} # model / tokenizer / device / mimi / asr / cfg
scripts/serve_openai_api.py CHANGED
@@ -14,8 +14,8 @@ from fastapi import FastAPI, HTTPException
14
  from fastapi.responses import StreamingResponse
15
  from pydantic import BaseModel, Field
16
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
17
- from omni.models import LMConfig, LMForCausalLM
18
- from omni.models.lm.lora import apply_lora, load_lora
19
 
20
  warnings.filterwarnings('ignore')
21
 
 
14
  from fastapi.responses import StreamingResponse
15
  from pydantic import BaseModel, Field
16
  from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
17
+ from models import LMConfig, LMForCausalLM
18
+ from models.lm.lora import apply_lora, load_lora
19
 
20
  warnings.filterwarnings('ignore')
21
 
src/{omni/core → core}/__init__.py RENAMED
@@ -1,8 +1,8 @@
1
- from omni.core.norm import RMSNorm
2
- from omni.core.rope import precompute_freqs_cis, apply_rotary_pos_emb, repeat_kv
3
- from omni.core.attention import Attention
4
- from omni.core.mlp import FeedForward, MOEFeedForward
5
- from omni.core.block import Block
6
 
7
  __all__ = [
8
  "RMSNorm",
 
1
+ from core.norm import RMSNorm
2
+ from core.rope import precompute_freqs_cis, apply_rotary_pos_emb, repeat_kv
3
+ from core.attention import Attention
4
+ from core.mlp import FeedForward, MOEFeedForward
5
+ from core.block import Block
6
 
7
  __all__ = [
8
  "RMSNorm",
src/{omni/core → core}/attention.py RENAMED
@@ -3,8 +3,8 @@ import torch
3
  import torch.nn.functional as F
4
  from torch import nn
5
 
6
- from omni.core.norm import RMSNorm
7
- from omni.core.rope import apply_rotary_pos_emb, repeat_kv
8
 
9
 
10
  class Attention(nn.Module):
 
3
  import torch.nn.functional as F
4
  from torch import nn
5
 
6
+ from core.norm import RMSNorm
7
+ from core.rope import apply_rotary_pos_emb, repeat_kv
8
 
9
 
10
  class Attention(nn.Module):
src/{omni/core → core}/block.py RENAMED
@@ -1,8 +1,8 @@
1
  from torch import nn
2
 
3
- from omni.core.norm import RMSNorm
4
- from omni.core.attention import Attention
5
- from omni.core.mlp import FeedForward, MOEFeedForward
6
 
7
 
8
  class Block(nn.Module):
 
1
  from torch import nn
2
 
3
+ from core.norm import RMSNorm
4
+ from core.attention import Attention
5
+ from core.mlp import FeedForward, MOEFeedForward
6
 
7
 
8
  class Block(nn.Module):
src/{omni/core → core}/mlp.py RENAMED
File without changes
src/{omni/core → core}/norm.py RENAMED
File without changes
src/{omni/core → core}/rope.py RENAMED
File without changes
src/{omni/datasets → dataset}/__init__.py RENAMED
@@ -1,10 +1,10 @@
1
- from omni.datasets.pretrain import PretrainDataset
2
- from omni.datasets.sft import SFTDataset
3
- from omni.datasets.dpo import DPODataset
4
- from omni.datasets.rlaif import RLAIFDataset
5
- from omni.datasets.agent_rl import AgentRLDataset
6
- from omni.datasets.vlm import VLMDataset
7
- from omni.datasets.vam import VAMDataset
8
 
9
  __all__ = [
10
  "PretrainDataset",
 
1
+ from dataset.pretrain import PretrainDataset
2
+ from dataset.sft import SFTDataset
3
+ from dataset.dpo import DPODataset
4
+ from dataset.rlaif import RLAIFDataset
5
+ from dataset.agent_rl import AgentRLDataset
6
+ from dataset.vlm import VLMDataset
7
+ from dataset.vam import VAMDataset
8
 
9
  __all__ = [
10
  "PretrainDataset",
src/{omni/datasets → dataset}/agent_rl.py RENAMED
File without changes
src/{omni/datasets → dataset}/common.py RENAMED
@@ -12,7 +12,7 @@ import pyarrow.parquet as pq
12
 
13
  os.environ["TOKENIZERS_PARALLELISM"] = "false"
14
 
15
- from omni.models import VLM
16
 
17
 
18
  def pre_processing_chat(conversations, add_system_ratio=0.2):
 
12
 
13
  os.environ["TOKENIZERS_PARALLELISM"] = "false"
14
 
15
+ from models import VLM
16
 
17
 
18
  def pre_processing_chat(conversations, add_system_ratio=0.2):
src/{omni/datasets → dataset}/dpo.py RENAMED
@@ -2,7 +2,7 @@ import torch
2
  from torch.utils.data import Dataset
3
  from datasets import load_dataset
4
 
5
- from omni.datasets.common import post_processing_chat
6
 
7
 
8
  class DPODataset(Dataset):
 
2
  from torch.utils.data import Dataset
3
  from datasets import load_dataset
4
 
5
+ from dataset.common import post_processing_chat
6
 
7
 
8
  class DPODataset(Dataset):
src/{omni/datasets → dataset}/pretrain.py RENAMED
@@ -2,7 +2,7 @@ from torch.utils.data import Dataset
2
  import torch
3
  from datasets import load_dataset
4
 
5
- from omni.datasets.common import pre_processing_chat, post_processing_chat
6
 
7
 
8
  class PretrainDataset(Dataset):
 
2
  import torch
3
  from datasets import load_dataset
4
 
5
+ from dataset.common import pre_processing_chat, post_processing_chat
6
 
7
 
8
  class PretrainDataset(Dataset):
src/{omni/datasets → dataset}/rlaif.py RENAMED
@@ -3,7 +3,7 @@ import torch
3
  from torch.utils.data import Dataset
4
  from datasets import load_dataset
5
 
6
- from omni.datasets.common import pre_processing_chat
7
 
8
 
9
  class RLAIFDataset(Dataset):
 
3
  from torch.utils.data import Dataset
4
  from datasets import load_dataset
5
 
6
+ from dataset.common import pre_processing_chat
7
 
8
 
9
  class RLAIFDataset(Dataset):
src/{omni/datasets → dataset}/sft.py RENAMED
@@ -3,7 +3,7 @@ import torch
3
  from torch.utils.data import Dataset
4
  from datasets import load_dataset, Features, Value
5
 
6
- from omni.datasets.common import pre_processing_chat, post_processing_chat
7
 
8
 
9
  class SFTDataset(Dataset):
 
3
  from torch.utils.data import Dataset
4
  from datasets import load_dataset, Features, Value
5
 
6
+ from dataset.common import pre_processing_chat, post_processing_chat
7
 
8
 
9
  class SFTDataset(Dataset):
src/{omni/datasets → dataset}/vam.py RENAMED
@@ -7,7 +7,7 @@ from PIL import Image
7
  import pyarrow as pa
8
  import pyarrow.parquet as pq
9
 
10
- from omni.datasets.common import pre_processing_chat, post_processing_chat
11
 
12
 
13
  class VAMDataset(Dataset):
 
7
  import pyarrow as pa
8
  import pyarrow.parquet as pq
9
 
10
+ from dataset.common import pre_processing_chat, post_processing_chat
11
 
12
 
13
  class VAMDataset(Dataset):
src/{omni/datasets → dataset}/vlm.py RENAMED
@@ -5,7 +5,7 @@ from torch.utils.data import Dataset
5
  from PIL import Image
6
  from datasets import Dataset as HFDataset
7
 
8
- from omni.datasets.common import VLM, pre_processing_chat, post_processing_chat
9
 
10
 
11
  class VLMDataset(Dataset):
 
5
  from PIL import Image
6
  from datasets import Dataset as HFDataset
7
 
8
+ from dataset.common import VLM, pre_processing_chat, post_processing_chat
9
 
10
 
11
  class VLMDataset(Dataset):
src/{omni/encoders → encoders}/__init__.py RENAMED
@@ -1,3 +1,3 @@
1
- from omni.encoders.vision import SiglipVisionEncoder
2
 
3
  __all__ = ["SiglipVisionEncoder"]
 
1
+ from encoders.vision import SiglipVisionEncoder
2
 
3
  __all__ = ["SiglipVisionEncoder"]
src/{omni/encoders → encoders}/audio/__init__.py RENAMED
@@ -1,3 +1,3 @@
1
- from omni.encoders.audio.sensevoice import SenseVoiceAudioEncoder, SenseVoiceAudioProcessor
2
 
3
  __all__ = ["SenseVoiceAudioEncoder", "SenseVoiceAudioProcessor"]
 
1
+ from encoders.audio.sensevoice import SenseVoiceAudioEncoder, SenseVoiceAudioProcessor
2
 
3
  __all__ = ["SenseVoiceAudioEncoder", "SenseVoiceAudioProcessor"]
src/{omni/encoders → encoders}/audio/sensevoice.py RENAMED
File without changes
src/{omni/encoders → encoders}/vision/__init__.py RENAMED
@@ -1,3 +1,3 @@
1
- from omni.encoders.vision.siglip import SiglipVisionEncoder
2
 
3
  __all__ = ["SiglipVisionEncoder"]
 
1
+ from encoders.vision.siglip import SiglipVisionEncoder
2
 
3
  __all__ = ["SiglipVisionEncoder"]
src/{omni/encoders → encoders}/vision/siglip.py RENAMED
File without changes
src/{omni/models → models}/__init__.py RENAMED
@@ -1,17 +1,17 @@
1
- from omni.models.lm.config import LMConfig
2
- from omni.models.lm.model import LMForCausalLM, LM
3
- from omni.models.vlm.config import VLMConfig
4
- from omni.models.vlm.model import VLM
5
- from omni.models.vam.config import VAMConfig
6
- from omni.models.vam.model import VAM, TalkerModule
7
- from omni.models.lm.lora import (
8
  LoRA,
9
  apply_lora,
10
  load_lora,
11
  save_lora,
12
  merge_lora,
13
  )
14
- from omni.core import (
15
  RMSNorm,
16
  Attention,
17
  FeedForward,
 
1
+ from models.lm.config import LMConfig
2
+ from models.lm.model import LMForCausalLM, LM
3
+ from models.vlm.config import VLMConfig
4
+ from models.vlm.model import VLM
5
+ from models.vam.config import VAMConfig
6
+ from models.vam.model import VAM, TalkerModule
7
+ from models.lm.lora import (
8
  LoRA,
9
  apply_lora,
10
  load_lora,
11
  save_lora,
12
  merge_lora,
13
  )
14
+ from core import (
15
  RMSNorm,
16
  Attention,
17
  FeedForward,
src/{omni/models → models}/lm/__init__.py RENAMED
@@ -1,4 +1,4 @@
1
- from omni.models.lm.config import LMConfig
2
- from omni.models.lm.model import LMForCausalLM, LM
3
 
4
  __all__ = ["LMConfig", "LMForCausalLM", "LM"]
 
1
+ from models.lm.config import LMConfig
2
+ from models.lm.model import LMForCausalLM, LM
3
 
4
  __all__ = ["LMConfig", "LMForCausalLM", "LM"]
src/{omni/models → models}/lm/config.py RENAMED
File without changes
src/{omni/models → models}/lm/lora.py RENAMED
File without changes
src/{omni/models → models}/lm/model.py RENAMED
@@ -4,8 +4,8 @@ from torch import nn
4
  from transformers import PreTrainedModel, GenerationMixin
5
  from transformers.modeling_outputs import MoeCausalLMOutputWithPast
6
 
7
- from omni.core import RMSNorm, precompute_freqs_cis, Block, MOEFeedForward
8
- from omni.models.lm.config import LMConfig
9
 
10
 
11
  class LM(nn.Module):
 
4
  from transformers import PreTrainedModel, GenerationMixin
5
  from transformers.modeling_outputs import MoeCausalLMOutputWithPast
6
 
7
+ from core import RMSNorm, precompute_freqs_cis, Block, MOEFeedForward
8
+ from models.lm.config import LMConfig
9
 
10
 
11
  class LM(nn.Module):
src/{omni/models → models}/vam/__init__.py RENAMED
@@ -1,4 +1,4 @@
1
- from omni.models.vam.config import VAMConfig
2
- from omni.models.vam.model import VAM, TalkerModule
3
 
4
  __all__ = ["VAMConfig", "VAM", "TalkerModule"]
 
1
+ from models.vam.config import VAMConfig
2
+ from models.vam.model import VAM, TalkerModule
3
 
4
  __all__ = ["VAMConfig", "VAM", "TalkerModule"]
src/{omni/models → models}/vam/config.py RENAMED
@@ -1,4 +1,4 @@
1
- from omni.models.lm.config import LMConfig
2
 
3
 
4
  class VAMConfig(LMConfig):
 
1
+ from models.lm.config import LMConfig
2
 
3
 
4
  class VAMConfig(LMConfig):
src/{omni/models → models}/vam/model.py RENAMED
@@ -10,13 +10,13 @@ from torch.nn import functional as F
10
  from transformers.modeling_outputs import MoeCausalLMOutputWithPast
11
  from transformers import SiglipVisionModel, SiglipImageProcessor, logging as hf_logging
12
 
13
- from omni.core import RMSNorm, precompute_freqs_cis, Block, MOEFeedForward
14
- from omni.models.lm.config import LMConfig
15
- from omni.models.lm.model import LMForCausalLM
16
- from omni.models.vam.config import VAMConfig
17
- from omni.encoders.audio import SenseVoiceAudioEncoder, SenseVoiceAudioProcessor
18
- from omni.encoders.vision import SiglipVisionEncoder
19
- from omni.projectors import MMVisionProjector, MMAudioProjector
20
 
21
 
22
  class TalkerHead(nn.Module):
 
10
  from transformers.modeling_outputs import MoeCausalLMOutputWithPast
11
  from transformers import SiglipVisionModel, SiglipImageProcessor, logging as hf_logging
12
 
13
+ from core import RMSNorm, precompute_freqs_cis, Block, MOEFeedForward
14
+ from models.lm.config import LMConfig
15
+ from models.lm.model import LMForCausalLM
16
+ from models.vam.config import VAMConfig
17
+ from encoders.audio import SenseVoiceAudioEncoder, SenseVoiceAudioProcessor
18
+ from encoders.vision import SiglipVisionEncoder
19
+ from projectors import MMVisionProjector, MMAudioProjector
20
 
21
 
22
  class TalkerHead(nn.Module):
src/models/vlm/__init__.py ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ from models.vlm.config import VLMConfig
2
+ from models.vlm.model import VLM
3
+
4
+ __all__ = ["VLMConfig", "VLM"]
src/{omni/models → models}/vlm/config.py RENAMED
@@ -1,4 +1,4 @@
1
- from omni.models.lm.config import LMConfig
2
 
3
 
4
  class VLMConfig(LMConfig):
 
1
+ from models.lm.config import LMConfig
2
 
3
 
4
  class VLMConfig(LMConfig):
src/{omni/models → models}/vlm/model.py RENAMED
@@ -7,11 +7,11 @@ from torch import nn
7
  from transformers.modeling_outputs import MoeCausalLMOutputWithPast
8
  from transformers import SiglipVisionModel, SiglipImageProcessor, logging as hf_logging
9
 
10
- from omni.core import precompute_freqs_cis, MOEFeedForward
11
- from omni.models.lm.model import LMForCausalLM
12
- from omni.models.vlm.config import VLMConfig
13
- from omni.encoders.vision import SiglipVisionEncoder
14
- from omni.projectors import MMVisionProjector
15
 
16
  warnings.filterwarnings('ignore')
17
 
 
7
  from transformers.modeling_outputs import MoeCausalLMOutputWithPast
8
  from transformers import SiglipVisionModel, SiglipImageProcessor, logging as hf_logging
9
 
10
+ from core import precompute_freqs_cis, MOEFeedForward
11
+ from models.lm.model import LMForCausalLM
12
+ from models.vlm.config import VLMConfig
13
+ from encoders.vision import SiglipVisionEncoder
14
+ from projectors import MMVisionProjector
15
 
16
  warnings.filterwarnings('ignore')
17
 
src/omni/__init__.py DELETED
File without changes
src/omni/models/vlm/__init__.py DELETED
@@ -1,4 +0,0 @@
1
- from omni.models.vlm.config import VLMConfig
2
- from omni.models.vlm.model import VLM
3
-
4
- __all__ = ["VLMConfig", "VLM"]
 
 
 
 
 
src/omni/serve/__init__.py DELETED
@@ -1 +0,0 @@
1
- import omni.serve
 
 
src/omni/trainers/__init__.py DELETED
@@ -1,15 +0,0 @@
1
- from omni.trainers.lm.pretrain import *
2
- from omni.trainers.lm.full_sft import *
3
- from omni.trainers.lm.lora import *
4
- from omni.trainers.lm.dpo import *
5
- from omni.trainers.lm.distillation import *
6
- from omni.trainers.lm.ppo import *
7
- from omni.trainers.lm.grpo import *
8
- from omni.trainers.lm.agent import *
9
- from omni.trainers.lm.rollout_engine import *
10
- from omni.trainers.lm.train_tokenizer import *
11
-
12
- from omni.trainers.vlm.pretrain import *
13
- from omni.trainers.vlm.full_sft import *
14
-
15
- from omni.trainers.vam.full_sft import *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/omni/trainers/lm/__init__.py DELETED
@@ -1,10 +0,0 @@
1
- from omni.trainers.lm.pretrain import *
2
- from omni.trainers.lm.full_sft import *
3
- from omni.trainers.lm.lora import *
4
- from omni.trainers.lm.dpo import *
5
- from omni.trainers.lm.distillation import *
6
- from omni.trainers.lm.ppo import *
7
- from omni.trainers.lm.grpo import *
8
- from omni.trainers.lm.agent import *
9
- from omni.trainers.lm.rollout_engine import *
10
- from omni.trainers.lm.train_tokenizer import *
 
 
 
 
 
 
 
 
 
 
 
src/omni/trainers/vam/__init__.py DELETED
@@ -1 +0,0 @@
1
- from omni.trainers.vam.full_sft import *
 
 
src/omni/trainers/vlm/__init__.py DELETED
@@ -1,2 +0,0 @@
1
- from omni.trainers.vlm.pretrain import *
2
- from omni.trainers.vlm.full_sft import *
 
 
 
src/{omni/projectors → projectors}/__init__.py RENAMED
@@ -1,4 +1,4 @@
1
- from omni.projectors.vision import MMVisionProjector
2
- from omni.projectors.audio import MMAudioProjector
3
 
4
  __all__ = ["MMVisionProjector", "MMAudioProjector"]
 
1
+ from projectors.vision import MMVisionProjector
2
+ from projectors.audio import MMAudioProjector
3
 
4
  __all__ = ["MMVisionProjector", "MMAudioProjector"]
src/{omni/projectors → projectors}/audio.py RENAMED
File without changes
src/{omni/projectors → projectors}/vision.py RENAMED
File without changes
src/serve/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ import serve