zR commited on
Commit
5e8eeb1
1 Parent(s): 7375a2b

fix bug of config

Browse files

fix bug of config

fix bug of config

.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ *venv
2
+ *.DS_Store
3
+ *.idea/
README.md CHANGED
@@ -1,7 +1,7 @@
1
  ---
2
  license: other
3
  license_name: glm-4
4
- license_link: https://huggingface.co/THUDM/glm-4-9b-chat/blob/main/LICENSE
5
  language:
6
  - zh
7
  - en
@@ -10,20 +10,16 @@ tags:
10
  - chatglm
11
  - thudm
12
  inference: false
13
- pipeline_tag: text-generation
14
  ---
15
 
16
  # GLM-4-9B-Chat
 
17
 
18
- Read this in [English](README_en.md)
19
-
20
- GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。 在语义、数学、推理、代码和知识等多方面的数据集测评中,
21
- **GLM-4-9B** 及其人类偏好对齐的版本 **GLM-4-9B-Chat** 均表现出超越 Llama-3-8B 的卓越性能。除了能进行多轮对话,GLM-4-9B-Chat
22
- 还具备网页浏览、代码执行、自定义工具调用(Function Call)和长文本推理(支持最大 128K 上下文)等高级功能。本代模型增加了多语言支持,支持包括日语,韩语,德语在内的
23
- 26 种语言。我们还推出了支持 1M 上下文长度(约 200 万中文字符)的 **GLM-4-9B-Chat-1M** 模型和基于 GLM-4-9B 的多模态模型
24
- GLM-4V-9B。**GLM-4V-9B** 具备 1120 * 1120 高分辨率下的中英双语多轮对话能力,在中英文综合能力、感知推理、文字识别、图表理解等多方面多模态评测中,GLM-4V-9B
25
- 表现出超越 GPT-4-turbo-2024-04-09、Gemini
26
- 1.0 Pro、Qwen-VL-Max 和 Claude 3 Opus 的卓越性能。
27
 
28
  ## 评测结果
29
 
@@ -35,6 +31,7 @@ GLM-4V-9B。**GLM-4V-9B** 具备 1120 * 1120 高分辨率下的中英双语多
35
  | ChatGLM3-6B | 3.97 | 5.50 | 28.1 | 66.4 | 69.0 | 72.3 | 25.7 | 58.5 | 11.3 |
36
  | GLM-4-9B-Chat | 6.61 | 8.35 | 69.0 | 72.4 | 75.6 | 79.6 | 50.6 | 71.8 | 32.2 |
37
 
 
38
  ### 长文本
39
 
40
  在 1M 的上下文长度下进行[大海捞针实验](https://github.com/LargeWorldModel/LWM/blob/main/scripts/eval_needle.py),结果如下:
@@ -49,19 +46,20 @@ GLM-4V-9B。**GLM-4V-9B** 具备 1120 * 1120 高分辨率下的中英双语多
49
 
50
  在六个多语言数据集上对 GLM-4-9B-Chat 和 Llama-3-8B-Instruct 进行了测试,测试结果及数据集对应选取语言如下表
51
 
52
- | Dataset | Llama-3-8B-Instruct | GLM-4-9B-Chat | Languages |
53
  |:------------|:-------------------:|:-------------:|:----------------------------------------------------------------------------------------------:|
54
- | M-MMLU | 49.6 | 56.6 | all |
55
- | FLORES | 25.0 | 28.8 | ru, es, de, fr, it, pt, pl, ja, nl, ar, tr, cs, vi, fa, hu, el, ro, sv, uk, fi, ko, da, bg, no |
56
- | MGSM | 54.0 | 65.3 | zh, en, bn, de, es, fr, ja, ru, sw, te, th |
57
- | XWinograd | 61.7 | 73.1 | zh, en, fr, jp, ru, pt |
58
- | XStoryCloze | 84.7 | 90.7 | zh, en, ar, es, eu, hi, id, my, ru, sw, te |
59
- | XCOPA | 73.3 | 80.1 | zh, et, ht, id, it, qu, sw, ta, th, tr, vi |
 
 
60
 
61
  ### 工具调用能力
62
 
63
- 我们在 [Berkeley Function Calling Leaderboard](https://github.com/ShishirPatil/gorilla/tree/main/berkeley-function-call-leaderboard)
64
- 上进行了测试并得到了以下结果:
65
 
66
  | Model | Overall Acc. | AST Summary | Exec Summary | Relevance |
67
  |:-----------------------|:------------:|:-----------:|:------------:|:---------:|
@@ -74,7 +72,9 @@ GLM-4V-9B。**GLM-4V-9B** 具备 1120 * 1120 高分辨率下的中英双语多
74
 
75
  ## 运行模型
76
 
77
- 使用 transformers 后端进行推理:
 
 
78
 
79
  ```python
80
  import torch
@@ -82,7 +82,7 @@ from transformers import AutoModelForCausalLM, AutoTokenizer
82
 
83
  device = "cuda"
84
 
85
- tokenizer = AutoTokenizer.from_pretrained("THUDM/glm-4-9b-chat", trust_remote_code=True)
86
 
87
  query = "你好"
88
 
@@ -145,27 +145,20 @@ print(outputs[0].outputs[0].text)
145
 
146
  ## 协议
147
 
148
- GLM-4 模型的权重的使用则需要遵循 [LICENSE](LICENSE)。
 
149
 
150
  ## 引用
151
 
152
  如果你觉得我们的工作有帮助的话,请考虑引用下列论文。
153
 
154
  ```
155
- @article{zeng2022glm,
156
- title={Glm-130b: An open bilingual pre-trained model},
157
- author={Zeng, Aohan and Liu, Xiao and Du, Zhengxiao and Wang, Zihan and Lai, Hanyu and Ding, Ming and Yang, Zhuoyi and Xu, Yifan and Zheng, Wendi and Xia, Xiao and others},
158
- journal={arXiv preprint arXiv:2210.02414},
159
- year={2022}
 
 
160
  }
161
  ```
162
-
163
- ```
164
- @inproceedings{du2022glm,
165
- title={GLM: General Language Model Pretraining with Autoregressive Blank Infilling},
166
- author={Du, Zhengxiao and Qian, Yujie and Liu, Xiao and Ding, Ming and Qiu, Jiezhong and Yang, Zhilin and Tang, Jie},
167
- booktitle={Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)},
168
- pages={320--335},
169
- year={2022}
170
- }
171
- ```
 
1
  ---
2
  license: other
3
  license_name: glm-4
4
+ license_link: https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/file/view/master?fileName=LICENSE&status=0
5
  language:
6
  - zh
7
  - en
 
10
  - chatglm
11
  - thudm
12
  inference: false
 
13
  ---
14
 
15
  # GLM-4-9B-Chat
16
+ Read this in [English](https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/file/view/master?fileName=README_en.md&status=1).
17
 
18
+ GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。
19
+ 在语义、数学、推理、代码和知识等多方面的数据集测评中,GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出较高的性能。
20
+ 除了能进行多轮对话,GLM-4-9B-Chat 还具备网页浏览、代码执行、自定义工具调用(Function Call)和长文本推理(支持最大 128K
21
+ 上下文)等高级功能。
22
+ 本代模型增加了多语言支持,支持包括日语,韩语,德语在内的 26 种语言。我们还推出了支持 1M 上下文长度(约 200 万中文字符)的模型。
 
 
 
 
23
 
24
  ## 评测结果
25
 
 
31
  | ChatGLM3-6B | 3.97 | 5.50 | 28.1 | 66.4 | 69.0 | 72.3 | 25.7 | 58.5 | 11.3 |
32
  | GLM-4-9B-Chat | 6.61 | 8.35 | 69.0 | 72.4 | 75.6 | 79.6 | 50.6 | 71.8 | 32.2 |
33
 
34
+
35
  ### 长文本
36
 
37
  在 1M 的上下文长度下进行[大海捞针实验](https://github.com/LargeWorldModel/LWM/blob/main/scripts/eval_needle.py),结果如下:
 
46
 
47
  在六个多语言数据集上对 GLM-4-9B-Chat 和 Llama-3-8B-Instruct 进行了测试,测试结果及数据集对应选取语言如下表
48
 
49
+ | Dataset | Llama-3-8B-Instruct | GLM-4-9B-Chat | Languages
50
  |:------------|:-------------------:|:-------------:|:----------------------------------------------------------------------------------------------:|
51
+ | M-MMLU | 49.6 | 56.6 | all
52
+ | FLORES | 25.0 | 28.8 | ru, es, de, fr, it, pt, pl, ja, nl, ar, tr, cs, vi, fa, hu, el, ro, sv, uk, fi, ko, da, bg, no
53
+ | MGSM | 54.0 | 65.3 | zh, en, bn, de, es, fr, ja, ru, sw, te, th
54
+ | XWinograd | 61.7 | 73.1 | zh, en, fr, jp, ru, pt
55
+ | XStoryCloze | 84.7 | 90.7 | zh, en, ar, es, eu, hi, id, my, ru, sw, te
56
+ | XCOPA | 73.3 | 80.1 | zh, et, ht, id, it, qu, sw, ta, th, tr, vi
57
+
58
+
59
 
60
  ### 工具调用能力
61
 
62
+ 我们在 [Berkeley Function Calling Leaderboard](https://github.com/ShishirPatil/gorilla/tree/main/berkeley-function-call-leaderboard)上进行了测试并得到了以下结果:
 
63
 
64
  | Model | Overall Acc. | AST Summary | Exec Summary | Relevance |
65
  |:-----------------------|:------------:|:-----------:|:------------:|:---------:|
 
72
 
73
  ## 运行模型
74
 
75
+ 更多推理代码和依赖信息,请访问我们的 [github](https://github.com/THUDM/GLM-4)
76
+
77
+ ### 使用 transformers 后端进行推理:
78
 
79
  ```python
80
  import torch
 
82
 
83
  device = "cuda"
84
 
85
+ tokenizer = AutoTokenizer.from_pretrained("THUDM/glm-4-9b-chat",trust_remote_code=True)
86
 
87
  query = "你好"
88
 
 
145
 
146
  ## 协议
147
 
148
+ GLM-4 模型的权重的使用则需要遵循 [LICENSE](https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/file/view/master?fileName=LICENSE&status=0)。
149
+
150
 
151
  ## 引用
152
 
153
  如果你觉得我们的工作有帮助的话,请考虑引用下列论文。
154
 
155
  ```
156
+ @misc{glm2024chatglm,
157
+ title={ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools},
158
+ author={Team GLM and Aohan Zeng and Bin Xu and Bowen Wang and Chenhui Zhang and Da Yin and Diego Rojas and Guanyu Feng and Hanlin Zhao and Hanyu Lai and Hao Yu and Hongning Wang and Jiadai Sun and Jiajie Zhang and Jiale Cheng and Jiayi Gui and Jie Tang and Jing Zhang and Juanzi Li and Lei Zhao and Lindong Wu and Lucen Zhong and Mingdao Liu and Minlie Huang and Peng Zhang and Qinkai Zheng and Rui Lu and Shuaiqi Duan and Shudan Zhang and Shulin Cao and Shuxun Yang and Weng Lam Tam and Wenyi Zhao and Xiao Liu and Xiao Xia and Xiaohan Zhang and Xiaotao Gu and Xin Lv and Xinghan Liu and Xinyi Liu and Xinyue Yang and Xixuan Song and Xunkai Zhang and Yifan An and Yifan Xu and Yilin Niu and Yuantao Yang and Yueyan Li and Yushi Bai and Yuxiao Dong and Zehan Qi and Zhaoyu Wang and Zhen Yang and Zhengxiao Du and Zhenyu Hou and Zihan Wang},
159
+ year={2024},
160
+ eprint={2406.12793},
161
+ archivePrefix={arXiv},
162
+ primaryClass={id='cs.CL' full_name='Computation and Language' is_active=True alt_name='cmp-lg' in_archive='cs' is_general=False description='Covers natural language processing. Roughly includes material in ACM Subject Class I.2.7. Note that work on artificial languages (programming languages, logics, formal systems) that does not explicitly address natural-language issues broadly construed (natural-language processing, computational linguistics, speech, text retrieval, etc.) is not appropriate for this area.'}
163
  }
164
  ```
 
 
 
 
 
 
 
 
 
 
README_en.md CHANGED
@@ -64,9 +64,9 @@ on [Berkeley Function Calling Leaderboard](https://github.com/ShishirPatil/goril
64
 
65
  **This repository is the model repository of GLM-4-9B-Chat, supporting `128K` context length.**
66
 
67
- ## Quick call
68
 
69
- **For hardware configuration and system requirements, please check [here](basic_demo/README_en.md).**
70
 
71
  ### Use the following method to quickly call the GLM-4-9B-Chat language model
72
 
@@ -141,27 +141,19 @@ print(outputs[0].outputs[0].text)
141
 
142
  ## LICENSE
143
 
144
- The weights of the GLM-4 model are available under the terms of [LICENSE](LICENSE).
145
 
146
  ## Citations
147
 
148
  If you find our work useful, please consider citing the following paper.
149
 
150
  ```
151
- @article{zeng2022glm,
152
- title={Glm-130b: An open bilingual pre-trained model},
153
- author={Zeng, Aohan and Liu, Xiao and Du, Zhengxiao and Wang, Zihan and Lai, Hanyu and Ding, Ming and Yang, Zhuoyi and Xu, Yifan and Zheng, Wendi and Xia, Xiao and others},
154
- journal={arXiv preprint arXiv:2210.02414},
155
- year={2022}
156
- }
157
- ```
158
-
159
- ```
160
- @inproceedings{du2022glm,
161
- title={GLM: General Language Model Pretraining with Autoregressive Blank Infilling},
162
- author={Du, Zhengxiao and Qian, Yujie and Liu, Xiao and Ding, Ming and Qiu, Jiezhong and Yang, Zhilin and Tang, Jie},
163
- booktitle={Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)},
164
- pages={320--335},
165
- year={2022}
166
  }
167
  ```
 
64
 
65
  **This repository is the model repository of GLM-4-9B-Chat, supporting `128K` context length.**
66
 
67
+ ## Quick Start
68
 
69
+ For more inference code and requirements, please visit our [github page](https://github.com/THUDM/GLM-4).
70
 
71
  ### Use the following method to quickly call the GLM-4-9B-Chat language model
72
 
 
141
 
142
  ## LICENSE
143
 
144
+ The weights of the GLM-4 model are available under the terms of [LICENSE](https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/file/view/master?fileName=LICENSE&status=0).
145
 
146
  ## Citations
147
 
148
  If you find our work useful, please consider citing the following paper.
149
 
150
  ```
151
+ @misc{glm2024chatglm,
152
+ title={ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools},
153
+ author={Team GLM and Aohan Zeng and Bin Xu and Bowen Wang and Chenhui Zhang and Da Yin and Diego Rojas and Guanyu Feng and Hanlin Zhao and Hanyu Lai and Hao Yu and Hongning Wang and Jiadai Sun and Jiajie Zhang and Jiale Cheng and Jiayi Gui and Jie Tang and Jing Zhang and Juanzi Li and Lei Zhao and Lindong Wu and Lucen Zhong and Mingdao Liu and Minlie Huang and Peng Zhang and Qinkai Zheng and Rui Lu and Shuaiqi Duan and Shudan Zhang and Shulin Cao and Shuxun Yang and Weng Lam Tam and Wenyi Zhao and Xiao Liu and Xiao Xia and Xiaohan Zhang and Xiaotao Gu and Xin Lv and Xinghan Liu and Xinyi Liu and Xinyue Yang and Xixuan Song and Xunkai Zhang and Yifan An and Yifan Xu and Yilin Niu and Yuantao Yang and Yueyan Li and Yushi Bai and Yuxiao Dong and Zehan Qi and Zhaoyu Wang and Zhen Yang and Zhengxiao Du and Zhenyu Hou and Zihan Wang},
154
+ year={2024},
155
+ eprint={2406.12793},
156
+ archivePrefix={arXiv},
157
+ primaryClass={id='cs.CL' full_name='Computation and Language' is_active=True alt_name='cmp-lg' in_archive='cs' is_general=False description='Covers natural language processing. Roughly includes material in ACM Subject Class I.2.7. Note that work on artificial languages (programming languages, logics, formal systems) that does not explicitly address natural-language issues broadly construed (natural-language processing, computational linguistics, speech, text retrieval, etc.) is not appropriate for this area.'}
 
 
 
 
 
 
 
 
158
  }
159
  ```
config.json CHANGED
@@ -1,5 +1,5 @@
1
  {
2
- "_name_or_path": "THUDM/glm4-9b-chat",
3
  "model_type": "chatglm",
4
  "architectures": [
5
  "ChatGLMModel"
@@ -37,9 +37,8 @@
37
  "seq_length": 131072,
38
  "use_cache": true,
39
  "torch_dtype": "bfloat16",
40
- "transformers_version": "4.30.2",
41
  "tie_word_embeddings": false,
42
  "eos_token_id": [151329, 151336, 151338],
43
  "pad_token_id": 151329
44
- }
45
-
 
1
  {
2
+ "_name_or_path": "THUDM/glm-4-9b-chat",
3
  "model_type": "chatglm",
4
  "architectures": [
5
  "ChatGLMModel"
 
37
  "seq_length": 131072,
38
  "use_cache": true,
39
  "torch_dtype": "bfloat16",
40
+ "transformers_version": "4.40.2",
41
  "tie_word_embeddings": false,
42
  "eos_token_id": [151329, 151336, 151338],
43
  "pad_token_id": 151329
44
+ }
 
generation_config.json CHANGED
@@ -9,5 +9,5 @@
9
  "temperature": 0.8,
10
  "max_length": 128000,
11
  "top_p": 0.8,
12
- "transformers_version": "4.38.2"
13
  }
 
9
  "temperature": 0.8,
10
  "max_length": 128000,
11
  "top_p": 0.8,
12
+ "transformers_version": "4.40.2"
13
  }
tokenization_chatglm.py CHANGED
@@ -130,8 +130,6 @@ class ChatGLM4Tokenizer(PreTrainedTokenizer):
130
  prefix_tokens = [self.convert_tokens_to_ids("[gMASK]"), self.convert_tokens_to_ids("<sop>")]
131
  return prefix_tokens
132
 
133
- """ use chat_template, no need apply_chat_template
134
-
135
  def build_single_message(self, role, metadata, message, tokenize=True):
136
  assert role in ["system", "user", "assistant", "observation"], role
137
  if tokenize:
@@ -143,83 +141,98 @@ class ChatGLM4Tokenizer(PreTrainedTokenizer):
143
  else:
144
  return str(f"<|{role}|>{metadata}\n{message}")
145
 
146
-
147
- def apply_chat_template(
148
- self,
149
- conversation: Union[List[Dict[str, str]], List[List[Dict[str, str]]], "Conversation"],
150
- add_generation_prompt: bool = False,
151
- tokenize: bool = True,
152
- padding: bool = False,
153
- truncation: bool = False,
154
- max_length: Optional[int] = None,
155
- return_tensors: Optional[Union[str, TensorType]] = None,
156
- return_dict: bool = False,
157
- tokenizer_kwargs: Optional[Dict[str, Any]] = None,
158
- add_special_tokens: bool = True,
159
- **kwargs,
160
- ) -> Union[str, List[int], List[str], List[List[int]], BatchEncoding]:
161
-
162
- if return_dict and not tokenize:
163
- raise ValueError(
164
- "`return_dict=True` is incompatible with `tokenize=False`, because there is no dict "
165
- "of tokenizer outputs to return."
166
- )
167
-
168
- def handle_single_conversation(conversation):
169
- input_ids = self.get_prefix_tokens() if add_special_tokens else []
170
- input_message = "[gMASK]<sop>" if add_special_tokens else ""
171
- for item in conversation:
172
- if item.get("tools"):
173
- tools = item["tools"]
174
- content = "你是一个名为 GhatGLM 的人工智能助手。你是基于智谱AI训练的语言模型 GLM-4 模型开发的,你的任务是针对用户的问题和要求提供适当的答复和支持。"
175
- content += "\n\n# 可用工具"
176
- for tool in tools:
177
- if tool["type"] == "function":
178
- function = tool["function"]
179
- content += f"\n\n## {function['name']}\n\n{json.dumps(function, ensure_ascii=False, indent=4)}"
180
- content += "\n在调用上述函数时,请使用 Json 格式表示调用的参数。"
181
- elif tool["type"] == "python":
182
- content += "\n\n## python\n\n当你向 `python` 发送包含 Python 代码的消息时,该代码将会在一个有状态的 Jupyter notebook 环境中执行。\n`python` 返回代码执行的输出,或在执行 60 秒后返回超时。\n`/mnt/data` 将会持久化存储你的文件。在此会话中,`python` 无法访问互联网。不要使用 `python` 进行任何网络请求或者在线 API 调用,这些在线内容的访问将不会成功。"
183
- elif tool["type"] == "simple_browser":
184
- content += "\n\n## simple_browser\n\n你可以使用 `simple_browser` 工具。该工具支持以下函数:\n`search(query: str, recency_days: int)`:使用搜索引擎进行查询并显示结果,可以使用 `recency_days` 参数控制搜索内容的时效性。\n`mclick(ids: list[int])`:获取一系列指定 id 的页面内容。每次调用时,须选择3-10个页面。选择多个角度的页面,同时尽可能选择可信任的信息来源。考虑到部分页面是无法加载的,你也可以多打开一些可能有用的页面而不用担心内容过多。\n`open_url(url: str)`:打开指定的 URL。\n\n使用 `【{引用 id}†{引用文本}】` 来引用内容。\n\n操作步骤:1. 使用 `search` 来获得信息列表; 2. 使用 `mclick` 来获取指定 ID 页面的内容; 3. 根据获得的内容进行回复。在回复中应当引用信息来源。\n 如果用户提供了 URL,也可以用 `open_url` 直接打开页面。\n如果初次搜索结果没有找到合适的信息,也可以再次使用 `search` 进行搜索。"
185
- elif tool["type"] == "cogview":
186
- content += "\n\n## cogview\n\n如果用户的请求中包含了对图像的描述,你可以使用 `cogview` 来生成图像并展示给用户。你需要向 `cogview` 发送图像描述,规则:\n- 发送给 `cogview` 的消息必须使用英语。用户的中文描述必须完全翻译为英语。\n- 应当尽可能详细地描述图像生成的需求,需求描述约 100 英文单词。\n- 保持用户原始描述的意图。不要虚构内容或者没见过的人物。\n- 如无特殊说明,所在地为中国,持有中国立场并遵循中国社会主义价值观。"
187
- else:
188
- raise NotImplementedError(f"Unknown tool type {tool['type']}")
189
- input = self.build_single_message("system", "", content, tokenize=tokenize)
190
- if tokenize:
191
- input_ids.extend(input)
192
- else:
193
- input_message += input
194
- if item["content"]:
195
- input = self.build_single_message(
196
- item["role"],
197
- item.get("metadata", ""),
198
- item["content"],
199
- tokenize=tokenize
200
- )
201
- if tokenize:
202
- input_ids.extend(input)
203
- else:
204
- input_message += input
205
- if add_generation_prompt:
206
- if tokenize:
207
- input_ids.extend([self.convert_tokens_to_ids("<|assistant|>")])
208
- else:
209
- input_message += "<|assistant|>"
210
- return input_ids if tokenize else input_message
211
-
212
- # Main logic to handle different conversation formats
213
- if isinstance(conversation, list) and all(isinstance(i, dict) for i in conversation):
214
- result = handle_single_conversation(conversation)
215
- elif isinstance(conversation, list) and all(isinstance(i, list) for i in conversation):
216
- result = [handle_single_conversation(c) for c in conversation]
217
- elif hasattr(conversation, "messages"):
218
- result = handle_single_conversation(conversation.messages)
219
- else:
220
- raise ValueError("Invalid conversation format")
221
- """
222
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
223
 
224
  def build_inputs_with_special_tokens(
225
  self, token_ids_0: List[int], token_ids_1: Optional[List[int]] = None
 
130
  prefix_tokens = [self.convert_tokens_to_ids("[gMASK]"), self.convert_tokens_to_ids("<sop>")]
131
  return prefix_tokens
132
 
 
 
133
  def build_single_message(self, role, metadata, message, tokenize=True):
134
  assert role in ["system", "user", "assistant", "observation"], role
135
  if tokenize:
 
141
  else:
142
  return str(f"<|{role}|>{metadata}\n{message}")
143
 
144
+ # Use Jinja Template in tokenizer_config.json
145
+ # def apply_chat_template(
146
+ # self,
147
+ # conversation: Union[List[Dict[str, str]], List[List[Dict[str, str]]], "Conversation"],
148
+ # add_generation_prompt: bool = False,
149
+ # tokenize: bool = True,
150
+ # padding: bool = False,
151
+ # truncation: bool = False,
152
+ # max_length: Optional[int] = None,
153
+ # return_tensors: Optional[Union[str, TensorType]] = None,
154
+ # return_dict: bool = False,
155
+ # tokenizer_kwargs: Optional[Dict[str, Any]] = None,
156
+ # add_special_tokens: bool = True,
157
+ # **kwargs,
158
+ # ) -> Union[str, List[int], List[str], List[List[int]], BatchEncoding]:
159
+ #
160
+ # if return_dict and not tokenize:
161
+ # raise ValueError(
162
+ # "`return_dict=True` is incompatible with `tokenize=False`, because there is no dict "
163
+ # "of tokenizer outputs to return."
164
+ # )
165
+ #
166
+ # def handle_single_conversation(conversation):
167
+ # input_ids = self.get_prefix_tokens() if add_special_tokens else []
168
+ # input_message = "[gMASK]<sop>" if add_special_tokens else ""
169
+ # for item in conversation:
170
+ # if item.get("tools"):
171
+ # tools = item["tools"]
172
+ # content = "你是一个名为 GhatGLM 的人工智能助手。你是基于智谱AI训练的语言模型 GLM-4 模型开发的,你的任务是针对用户的问题和要求提供适当的答复和支持。"
173
+ # content += "\n\n# 可用工具"
174
+ # for tool in tools:
175
+ # if tool["type"] == "function":
176
+ # function = tool["function"]
177
+ # content += f"\n\n## {function['name']}\n\n{json.dumps(function, ensure_ascii=False, indent=4)}"
178
+ # content += "\n在调用上述函数时,请使用 Json 格式表示调用的参数。"
179
+ # elif tool["type"] == "python":
180
+ # content += "\n\n## python\n\n当你向 `python` 发送包含 Python 代码的消息时,该代码将会在一个有状态的 Jupyter notebook 环境中执行。\n`python` 返回代码执行的输出,或在执行 60 秒后返回超时。\n`/mnt/data` 将会持久化存储你的文件。在此会话中,`python` 无法访问互联网。不要使用 `python` 进行任何网络请求或者在线 API 调用,这些在线内容的访问将不会成功。"
181
+ # elif tool["type"] == "simple_browser":
182
+ # content += "\n\n## simple_browser\n\n你可以使用 `simple_browser` 工具。该工具支持以下函数:\n`search(query: str, recency_days: int)`:使用搜索引擎进行查询并显示结果,可以使用 `recency_days` 参数控制搜索内容的时效性。\n`mclick(ids: list[int])`:获取一系列指定 id 的页面内容。每次调用时,须选择3-10个页面。选择多个角度的页面,同时尽可能选择可信任的信息来源。考虑到部分页面是无法加载的,你也可以多打开一些可能有用的页面而不用担心内容过多。\n`open_url(url: str)`:打开指定的 URL。\n\n使用 `【{引用 id}†{引用文本}】` 来引用内容。\n\n操作步骤:1. 使用 `search` 来获得信息列表; 2. 使用 `mclick` 来获取指定 ID 页面的内容; 3. 根据获得的内容进行回复。在回复中应当引用信息来源。\n 如果用户提供了 URL,也可以�� `open_url` 直接打开页面。\n如果初次搜索结果没有找到合适的信息,也可以再次使用 `search` 进行搜索。"
183
+ # elif tool["type"] == "cogview":
184
+ # content += "\n\n## cogview\n\n如果用户的请求中包含了对图像的描述,你可以使用 `cogview` 来生成图像并展示给用户。你需要向 `cogview` 发送图像描述,规则:\n- 发送给 `cogview` 的消息必须使用英语。用户的中文描述必须完全翻译为英语。\n- 应当尽可能详细地描述图像生成的需求,需求描述约 100 英文单词。\n- 保持用户原始描述的意图。不要虚构内容或者没见过的人物。\n- 如无特殊说明,所在地为中国,持有中国立场并遵循中国社会主义价值观。"
185
+ # else:
186
+ # raise NotImplementedError(f"Unknown tool type {tool['type']}")
187
+ # input = self.build_single_message("system", "", content, tokenize=tokenize)
188
+ # if tokenize:
189
+ # input_ids.extend(input)
190
+ # else:
191
+ # input_message += input
192
+ # if item["content"]:
193
+ # input = self.build_single_message(
194
+ # item["role"],
195
+ # item.get("metadata", ""),
196
+ # item["content"],
197
+ # tokenize=tokenize
198
+ # )
199
+ # if tokenize:
200
+ # input_ids.extend(input)
201
+ # else:
202
+ # input_message += input
203
+ # if add_generation_prompt:
204
+ # if tokenize:
205
+ # input_ids.extend([self.convert_tokens_to_ids("<|assistant|>")])
206
+ # else:
207
+ # input_message += "<|assistant|>"
208
+ # return input_ids if tokenize else input_message
209
+ #
210
+ # # Main logic to handle different conversation formats
211
+ # if isinstance(conversation, list) and all(isinstance(i, dict) for i in conversation):
212
+ # result = handle_single_conversation(conversation)
213
+ # elif isinstance(conversation, list) and all(isinstance(i, list) for i in conversation):
214
+ # result = [handle_single_conversation(c) for c in conversation]
215
+ # elif hasattr(conversation, "messages"):
216
+ # result = handle_single_conversation(conversation.messages)
217
+ # else:
218
+ # raise ValueError("Invalid conversation format")
219
+ #
220
+ # if tokenize:
221
+ # output = self.batch_encode_plus(
222
+ # [result] if isinstance(result[0], int) else result,
223
+ # padding=padding,
224
+ # truncation=truncation,
225
+ # max_length=max_length,
226
+ # return_tensors=return_tensors,
227
+ # is_split_into_words=True,
228
+ # add_special_tokens=False
229
+ # )
230
+ # if return_dict:
231
+ # return output
232
+ # else:
233
+ # return output["input_ids"]
234
+ # else:
235
+ # return result
236
 
237
  def build_inputs_with_special_tokens(
238
  self, token_ids_0: List[int], token_ids_1: Optional[List[int]] = None
tokenizer_config.json CHANGED
@@ -123,7 +123,7 @@
123
  "<|user|>", "<|assistant|>", "<|observation|>", "<|begin_of_image|>", "<|end_of_image|>",
124
  "<|begin_of_video|>", "<|end_of_video|>"],
125
  "clean_up_tokenization_spaces": false,
126
- "chat_template": "[gMASK]<sop>{% for item in messages %}{% if item['tools'] is defined %}<|system|>\n你是一个名为 GhatGLM 的人工智能助手。你是基于智谱AI训练的语言模型 GLM-4 模型开发的,你的任务是针对用户的问题和要求提供适当的答复和支持。\n\n# 可用工具{% set tools = item['tools'] %}{% for tool in tools %}{% if tool['type'] == 'function' %}\n\n## {{ tool['function']['name'] }}\n\n{{ tool['function'] | tojson(indent=4) }}\n在调用上述函数时,请使用 Json 格式表示调用的参数。{% elif tool['type'] == 'python' %}\n\n## python\n\n当你向 `python` 发送包含 Python 代码的消息时,该代码将会在一个有状态的 Jupyter notebook 环境中执行。\n`python` 返回代码执行的输出,或在执行 60 秒后返回超时。\n`/mnt/data` 将会持久化存储你的文件。在此会话中,`python` 无法访问互联网。不要使用 `python` 进行任何网络请求或者在线 API 调用,这些在线内容的访问将不会成功。{% elif tool['type'] == 'simple_browser' %}\n\n## simple_browser\n\n你可以使用 `simple_browser` 工具。该工具支持以下函数:\n`search(query: str, recency_days: int)`:使用搜索引擎进行查询并显示结果,可以使用 `recency_days` 参数控制搜索内容的时效性。\n`mclick(ids: list[int])`:获取一系列指定 id 的页面内容。每次调用时,须选择3-10个页面。选择多个角度的页面,同时尽可能选择可信任的信息来源。考虑到部分页面是无法加载的,你也可以多打开一些可能有用的页面而不用担心内容过多。\n`open_url(url: str)`:打开指定的 URL。\n\n使用 `【{引用 id}†{引用文本}】` 来引用内容。\n\n操作步骤:1. 使用 `search` 来获得信息列表; 2. 使用 `mclick` 来获取指定 ID 页面的内容; 3. 根据获得的内容进行回复。在回复中应当引用信息来源。\n 如果用户提供了 URL,也可以用 `open_url` 直接打开页面。\n如果初次搜索结果没有找到合适的信息,也可以再次使用 `search` 进行搜索。{% elif tool['type'] == 'cogview' %}\n\n## cogview\n\n如果用户的请求中包含了对图像的描述,你可以使用 `cogview` 来生成图像并展示给用户。你需要向 `cogview` 发送图像描述,规则:\n- 发送给 `cogview` 的消息必须使用英语。用户的中文描述必须完全翻译为英语。\n- 应当尽可能详细地描述图像生成的需求,需求描述约 100 英文单词。\n- 保持用户原始描述的意图。不要虚构内容或者没见过的人物。\n- 如无特殊说明,所在地为中国,持有中国立场并遵循中国社会主义价值观。{% endif %}{% endfor %}{% endif %}{% if item['content'] %}<|{{ item['role'] }}|>{{ item['metadata'] }}\n{{ item['content'] }}{% endif %}{% endfor %}{% if add_generation_prompt %}<|assistant|>{% endif %}",
127
  "do_lower_case": false,
128
  "eos_token": "<|endoftext|>",
129
  "pad_token": "<|endoftext|>",
 
123
  "<|user|>", "<|assistant|>", "<|observation|>", "<|begin_of_image|>", "<|end_of_image|>",
124
  "<|begin_of_video|>", "<|end_of_video|>"],
125
  "clean_up_tokenization_spaces": false,
126
+ "chat_template": "[gMASK]<sop>{% for item in messages %}{% if item['tools'] is defined %}<|system|>\n你是一个名为 GLM-4 的人工智能助手。你是基于智谱AI训练的语言模型 GLM-4 模型开发的,你的任务是针对用户的问题和要求提供适当的答复和支持。\n\n# 可用工具{% set tools = item['tools'] %}{% for tool in tools %}{% if tool['type'] == 'function' %}\n\n## {{ tool['function']['name'] }}\n\n{{ tool['function'] | tojson(indent=4) }}\n在调用上述函数时,请使用 Json 格式表示调用的参数。{% elif tool['type'] == 'python' %}\n\n## python\n\n当你向 `python` 发送包含 Python 代码的消息时,该代码将会在一个有状态的 Jupyter notebook 环境中执行。\n`python` 返回代码执行的输出,或在执行 60 秒后返回超时。\n`/mnt/data` 将会持久化存储你的文件。在此会话中,`python` 无法访问互联网。不要使用 `python` 进行任何网络请求或者在线 API 调用,这些在线内容的访问将不会成功。{% elif tool['type'] == 'simple_browser' %}\n\n## simple_browser\n\n你可以使用 `simple_browser` 工具。该工具支持以下函数:\n`search(query: str, recency_days: int)`:使用搜索引擎进行查询并显示结果,可以使用 `recency_days` 参数控制搜索内容的时效性。\n`mclick(ids: list[int])`:获取一系列指定 id 的页面内容。每次调用时,须选择3-10个页面。选择多个角度的页面,同时尽可能选择可信任的信息来源。考虑到部分页面是无法加载的,你也可以多打开一些可能有用的页面而不用担心内容过多。\n`open_url(url: str)`:打开指定的 URL。\n\n使用 `【{引用 id}†{引用文本}】` 来引用内容。\n\n操作步骤:1. 使用 `search` 来获得信息列表; 2. 使用 `mclick` 来获取指定 ID 页面的内容; 3. 根据获得的内容进行回复。在回复中应当引用信息来源。\n 如果用户提供了 URL,也可以用 `open_url` 直接打开页面。\n如果初次搜索结果没有找到合适的信息,也可以再次使用 `search` 进行搜索。{% elif tool['type'] == 'cogview' %}\n\n## cogview\n\n如果用户的请求中包含了对图像的描述,你可以使用 `cogview` 来生成图像并展示给用户。你需要向 `cogview` 发送图像描述,规则:\n- 发送给 `cogview` 的消息必须使用英语。用户的中文描述必须完全翻译为英语。\n- 应当尽可能详细地描述图像生成的需求,需求描述约 100 英文单词。\n- 保持用户原始描述的意图。不要虚构内容或者没见过的人物。\n- 如无特殊说明,所在地为中国,持有中国立场并遵循中国社会主义价值观。{% endif %}{% endfor %}{% endif %}{% if item['content'] %}<|{{ item['role'] }}|>{{ item['metadata'] }}\n{{ item['content'] }}{% endif %}{% endfor %}{% if add_generation_prompt %}<|assistant|>{% endif %}",
127
  "do_lower_case": false,
128
  "eos_token": "<|endoftext|>",
129
  "pad_token": "<|endoftext|>",