HridaAIofficial commited on
Commit
39c1184
1 Parent(s): 2588440

New weights for the model

Browse files
README.md DELETED
@@ -1,132 +0,0 @@
1
- ---
2
- license: apache-2.0
3
- language:
4
- - en
5
- library_name: transformers
6
- pipeline_tag: text2text-generation
7
- tags:
8
- - code
9
- - sql
10
- - text-to-sql
11
- ---
12
-
13
- Introducing Hrida-T2SQL-3B-128k-V0.1, our latest small language model (SLM) tailored for data scientists and industry professionals. This advanced model marks a significant upgrade from our previous release, now equipped with an expanded 128k token context window for handling even the most intricate data queries with precision. Powered by the Phi 3 architecture, it effortlessly converts natural language queries into precise SQL commands, enhancing data analysis efficiency and decision-making capabilities.
14
-
15
- For full details of this model please read our [blog post](https://www.hridaai.com/blog/t2sql).
16
-
17
-
18
- ## Prompt Template
19
-
20
- ```txt
21
- ### Instruction:
22
- Provide the system prompt.
23
-
24
- ### Dialect:
25
- Specify the SQL dialect (e.g., MySQL, PostgreSQL, SQL Server, etc.).
26
-
27
- ### Context:
28
- Provide the database schema including table names, column names, and data types.
29
-
30
- ### Input:
31
- User's query.
32
-
33
- ### Response:
34
- Expected SQL query output based on the input and context.
35
-
36
- ```
37
-
38
- - **Instruction (System Prompt)**: This guides the model on processing input to generate the SQL query response effectively.
39
- - **Dialect (Optional)**: Specify the SQL variant the model should use to ensure the generated query conforms to the correct syntax.
40
- - **Context**: Provide the database schema to the model for generating accurate SQL queries.
41
- - **Input**: Provide the user query for the model to comprehend and transform into an SQL query.
42
- - **Response**: Expected output from the model.
43
-
44
-
45
- ## Chat Prompt Template
46
-
47
- ```txt
48
- <s>
49
- <|system|>
50
- { Instruction / System Prompt }
51
- <|user|>
52
- { Context / User Query } <|end|>
53
- <|assistant|>
54
- ```
55
-
56
- ## Run the Model
57
-
58
- ### Using Transformers
59
-
60
- ```python
61
- import torch
62
- from transformers import AutoModelForCausalLM, AutoTokenizer
63
-
64
- # Define the model and tokenizer
65
- model_id = "HridaAI/Hrida-T2SQL-3B-128k-V0.1"
66
- tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
67
- model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16, trust_remote_code=True)
68
-
69
- # Define the context and prompt
70
- prompt = """
71
- Answer to the query will be in the form of an SQL query.
72
- ### Context: CREATE TABLE Employees (
73
- EmployeeID INT PRIMARY KEY,
74
- FirstName VARCHAR(50),
75
- LastName VARCHAR(50),
76
- Age INT,
77
- DepartmentID INT,
78
- Salary DECIMAL(10, 2),
79
- DateHired DATE,
80
- Active BOOLEAN,
81
- FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
82
- );
83
-
84
- CREATE TABLE Departments (
85
- DepartmentID INT PRIMARY KEY,
86
- DepartmentName VARCHAR(100),
87
- Location VARCHAR(100)
88
- );
89
- ### Input: Write a SQL query to select all the employees who are active.
90
- ### Response:
91
- """
92
- # Prepare the input
93
- messages = [{"role": "user", "content": prompt}]
94
- inputs = tokenizer.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True)
95
-
96
- # Generate the output
97
- outputs = model.generate(inputs, max_length=300)
98
- print(tokenizer.decode(outputs[0]))
99
-
100
-
101
- ```
102
-
103
- ### Using MLX
104
-
105
- ```python
106
- from mlx_lm import generate, load
107
-
108
- model,tokenizer = load("HridaAI/Hrida-T2SQL-3B-128k-V0.1")
109
-
110
- prompt = """
111
- Answer to the quey will be in the form of SQL query.
112
- ### Context: CREATE TABLE Employees (
113
- EmployeeID INT PRIMARY KEY,
114
- FirstName VARCHAR(50),
115
- LastName VARCHAR(50),
116
- Age INT,
117
- DepartmentID INT,
118
- Salary DECIMAL(10, 2),
119
- DateHired DATE,
120
- Active BOOLEAN,
121
- FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
122
- );
123
-
124
- CREATE TABLE Departments (
125
- DepartmentID INT PRIMARY KEY,
126
- DepartmentName VARCHAR(100),
127
- Location VARCHAR(100)
128
- ); ### Input: Write a SQL query to select all the employees who are active. ### Response:"""
129
-
130
- response = generate(model=model,tokenizer=tokenizer,prompt=prompt, verbose=True)
131
-
132
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
config.json CHANGED
@@ -6,9 +6,7 @@
6
  "attention_dropout": 0.0,
7
  "auto_map": {
8
  "AutoConfig": "configuration_phi3.Phi3Config",
9
- "AutoModelForCausalLM": "modeling_phi3.Phi3ForCausalLM",
10
- "AutoModelForSequenceClassification": "modeling_phi3.Phi3ForSequenceClassification",
11
- "AutoModelForTokenClassification": "modeling_phi3.Phi3ForTokenClassification"
12
  },
13
  "bos_token_id": 1,
14
  "embd_pdrop": 0.0,
@@ -28,71 +26,64 @@
28
  "rms_norm_eps": 1e-05,
29
  "rope_scaling": {
30
  "long_factor": [
31
- 1.0299999713897705,
32
- 1.0499999523162842,
33
- 1.0499999523162842,
34
- 1.0799999237060547,
35
- 1.2299998998641968,
36
- 1.2299998998641968,
37
- 1.2999999523162842,
38
- 1.4499999284744263,
39
- 1.5999999046325684,
40
- 1.6499998569488525,
41
- 1.8999998569488525,
42
- 2.859999895095825,
43
- 3.68999981880188,
44
- 5.419999599456787,
45
- 5.489999771118164,
46
- 5.489999771118164,
47
- 9.09000015258789,
48
- 11.579999923706055,
49
- 15.65999984741211,
50
- 15.769999504089355,
51
- 15.789999961853027,
52
- 18.360000610351562,
53
- 21.989999771118164,
54
- 23.079999923706055,
55
- 30.009998321533203,
56
- 32.35000228881836,
57
- 32.590003967285156,
58
- 35.56000518798828,
59
- 39.95000457763672,
60
- 53.840003967285156,
61
- 56.20000457763672,
62
- 57.95000457763672,
63
- 59.29000473022461,
64
- 59.77000427246094,
65
- 59.920005798339844,
66
- 61.190006256103516,
67
- 61.96000671386719,
68
- 62.50000762939453,
69
- 63.3700065612793,
70
- 63.48000717163086,
71
- 63.48000717163086,
72
- 63.66000747680664,
73
- 63.850006103515625,
74
- 64.08000946044922,
75
- 64.760009765625,
76
- 64.80001068115234,
77
- 64.81001281738281,
78
- 64.81001281738281
79
  ],
80
  "short_factor": [
81
- 1.05,
82
- 1.05,
83
- 1.05,
84
  1.1,
85
  1.1,
86
- 1.1500000000000001,
87
- 1.2000000000000002,
88
- 1.2500000000000002,
89
  1.3000000000000003,
90
  1.3500000000000003,
91
- 1.5000000000000004,
92
- 2.000000000000001,
93
- 2.000000000000001,
94
- 2.000000000000001,
95
- 2.000000000000001,
96
  2.000000000000001,
97
  2.000000000000001,
98
  2.000000000000001,
@@ -113,27 +104,34 @@
113
  2.0500000000000007,
114
  2.0500000000000007,
115
  2.0500000000000007,
 
 
 
116
  2.1000000000000005,
117
  2.1000000000000005,
118
- 2.1000000000000005,
119
- 2.1500000000000004,
120
  2.1500000000000004,
121
- 2.3499999999999996,
122
- 2.549999999999999,
123
- 2.5999999999999988,
124
- 2.5999999999999988,
 
 
 
 
 
 
125
  2.7499999999999982,
126
- 2.849999999999998,
127
- 2.849999999999998,
128
- 2.9499999999999975
129
  ],
130
- "type": "su"
131
  },
132
  "rope_theta": 10000.0,
133
  "sliding_window": 262144,
134
  "tie_word_embeddings": false,
135
  "torch_dtype": "bfloat16",
136
- "transformers_version": "4.39.3",
137
  "use_cache": true,
138
  "vocab_size": 32064
139
  }
 
6
  "attention_dropout": 0.0,
7
  "auto_map": {
8
  "AutoConfig": "configuration_phi3.Phi3Config",
9
+ "AutoModelForCausalLM": "modeling_phi3.Phi3ForCausalLM"
 
 
10
  },
11
  "bos_token_id": 1,
12
  "embd_pdrop": 0.0,
 
26
  "rms_norm_eps": 1e-05,
27
  "rope_scaling": {
28
  "long_factor": [
29
+ 1.0700000524520874,
30
+ 1.1200000047683716,
31
+ 1.149999976158142,
32
+ 1.4199999570846558,
33
+ 1.5699999332427979,
34
+ 1.7999999523162842,
35
+ 2.129999876022339,
36
+ 2.129999876022339,
37
+ 3.009999990463257,
38
+ 5.910000324249268,
39
+ 6.950000286102295,
40
+ 9.070000648498535,
41
+ 9.930000305175781,
42
+ 10.710000038146973,
43
+ 11.130000114440918,
44
+ 14.609999656677246,
45
+ 15.409998893737793,
46
+ 19.809999465942383,
47
+ 37.279998779296875,
48
+ 38.279998779296875,
49
+ 38.599998474121094,
50
+ 40.12000274658203,
51
+ 46.20000457763672,
52
+ 50.940006256103516,
53
+ 53.66000747680664,
54
+ 54.9373893737793,
55
+ 56.89738845825195,
56
+ 57.28738784790039,
57
+ 59.98738479614258,
58
+ 60.86738586425781,
59
+ 60.887386322021484,
60
+ 61.71739196777344,
61
+ 62.91739273071289,
62
+ 62.957393646240234,
63
+ 63.41739273071289,
64
+ 63.8173942565918,
65
+ 63.83739471435547,
66
+ 63.897396087646484,
67
+ 63.93739700317383,
68
+ 64.06739807128906,
69
+ 64.11434936523438,
70
+ 64.12435150146484,
71
+ 64.15435028076172,
72
+ 64.19435119628906,
73
+ 64.24435424804688,
74
+ 64.57435607910156,
75
+ 64.69000244140625,
76
+ 64.76000213623047
77
  ],
78
  "short_factor": [
 
 
 
79
  1.1,
80
  1.1,
81
+ 1.1,
 
 
82
  1.3000000000000003,
83
  1.3500000000000003,
84
+ 1.3500000000000003,
85
+ 1.4000000000000004,
86
+ 1.5500000000000005,
 
 
87
  2.000000000000001,
88
  2.000000000000001,
89
  2.000000000000001,
 
104
  2.0500000000000007,
105
  2.0500000000000007,
106
  2.0500000000000007,
107
+ 2.0500000000000007,
108
+ 2.0500000000000007,
109
+ 2.0500000000000007,
110
  2.1000000000000005,
111
  2.1000000000000005,
 
 
112
  2.1500000000000004,
113
+ 2.25,
114
+ 2.25,
115
+ 2.25,
116
+ 2.25,
117
+ 2.25,
118
+ 2.3999999999999995,
119
+ 2.4499999999999993,
120
+ 2.499999999999999,
121
+ 2.6999999999999984,
122
+ 2.6999999999999984,
123
  2.7499999999999982,
124
+ 2.799999999999998,
125
+ 2.8999999999999977,
126
+ 3.049999999999997
127
  ],
128
+ "type": "longrope"
129
  },
130
  "rope_theta": 10000.0,
131
  "sliding_window": 262144,
132
  "tie_word_embeddings": false,
133
  "torch_dtype": "bfloat16",
134
+ "transformers_version": "4.40.2",
135
  "use_cache": true,
136
  "vocab_size": 32064
137
  }
configuration_phi3.py CHANGED
@@ -1,213 +1,227 @@
1
- # coding=utf-8
2
- # Copyright 2024 Microsoft and the HuggingFace Inc. team. All rights reserved.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- """ Phi-3 model configuration"""
17
-
18
-
19
- from transformers.configuration_utils import PretrainedConfig
20
- from transformers.utils import logging
21
-
22
-
23
- logger = logging.get_logger(__name__)
24
-
25
- PHI3_PRETRAINED_CONFIG_ARCHIVE_MAP = {
26
- "microsoft/Phi-3-mini-4k-instruct": "https://huggingface.co/microsoft/Phi-3-mini-4k-instruct/resolve/main/config.json",
27
- "microsoft/Phi-3-mini-128k-instruct": "https://huggingface.co/microsoft/Phi-3-mini-128k-instruct/resolve/main/config.json",
28
- }
29
-
30
-
31
- class Phi3Config(PretrainedConfig):
32
- r"""
33
- This is the configuration class to store the configuration of a [`Phi3Model`]. It is used to instantiate a Phi-3
34
- model according to the specified arguments, defining the model architecture. Instantiating a configuration with the
35
- defaults will yield a similar configuration to that of the
36
- [microsoft/Phi-3-mini-4k-instruct](https://huggingface.co/microsoft/Phi-3-mini-4k-instruct).
37
-
38
- Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the
39
- documentation from [`PretrainedConfig`] for more information.
40
-
41
- Args:
42
- vocab_size (`int`, *optional*, defaults to 32064):
43
- Vocabulary size of the Phi-3 model. Defines the number of different tokens that can be represented by the
44
- `inputs_ids` passed when calling [`Phi3Model`].
45
- hidden_size (`int`, *optional*, defaults to 3072):
46
- Dimension of the hidden representations.
47
- intermediate_size (`int`, *optional*, defaults to 8192):
48
- Dimension of the MLP representations.
49
- num_hidden_layers (`int`, *optional*, defaults to 32):
50
- Number of hidden layers in the Transformer decoder.
51
- num_attention_heads (`int`, *optional*, defaults to 32):
52
- Number of attention heads for each attention layer in the Transformer decoder.
53
- num_key_value_heads (`int`, *optional*):
54
- This is the number of key_value heads that should be used to implement Grouped Query Attention. If
55
- `num_key_value_heads=num_attention_heads`, the model will use Multi Head Attention (MHA), if
56
- `num_key_value_heads=1 the model will use Multi Query Attention (MQA) otherwise GQA is used. When
57
- converting a multi-head checkpoint to a GQA checkpoint, each group key and value head should be constructed
58
- by meanpooling all the original heads within that group. For more details checkout [this
59
- paper](https://arxiv.org/pdf/2305.13245.pdf). If it is not specified, will default to
60
- `num_attention_heads`.
61
- resid_pdrop (`float`, *optional*, defaults to 0.0):
62
- Dropout probability for mlp outputs.
63
- embd_pdrop (`int`, *optional*, defaults to 0.0):
64
- The dropout ratio for the embeddings.
65
- attention_dropout (`float`, *optional*, defaults to 0.0):
66
- The dropout ratio after computing the attention scores.
67
- hidden_act (`str` or `function`, *optional*, defaults to `"silu"`):
68
- The non-linear activation function (function or string) in the decoder.
69
- max_position_embeddings (`int`, *optional*, defaults to 4096):
70
- The maximum sequence length that this model might ever be used with.
71
- original_max_position_embeddings (`int`, *optional*, defaults to 4096):
72
- The maximum sequence length that this model was trained with. This is used to determine the size of the
73
- original RoPE embeddings when using long scaling.
74
- initializer_range (`float`, *optional*, defaults to 0.02):
75
- The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
76
- rms_norm_eps (`float`, *optional*, defaults to 1e-05):
77
- The epsilon value used for the RMSNorm.
78
- use_cache (`bool`, *optional*, defaults to `True`):
79
- Whether or not the model should return the last key/values attentions (not used by all models). Only
80
- relevant if `config.is_decoder=True`. Whether to tie weight embeddings or not.
81
- tie_word_embeddings (`bool`, *optional*, defaults to `False`):
82
- Whether to tie weight embeddings
83
- rope_theta (`float`, *optional*, defaults to 10000.0):
84
- The base period of the RoPE embeddings.
85
- rope_scaling (`dict`, *optional*):
86
- The scaling strategy for the RoPE embeddings. If `None`, no scaling is applied. If a dictionary, it must
87
- contain the following keys: `type`, `short_factor` and `long_factor`. The `type` must be either `su` or `yarn` and
88
- the `short_factor` and `long_factor` must be lists of numbers with the same length as the hidden size
89
- divided by the number of attention heads divided by 2.
90
- bos_token_id (`int`, *optional*, defaults to 1):
91
- The id of the "beginning-of-sequence" token.
92
- eos_token_id (`int`, *optional*, defaults to 32000):
93
- The id of the "end-of-sequence" token.
94
- pad_token_id (`int`, *optional*, defaults to 32000):
95
- The id of the padding token.
96
- sliding_window (`int`, *optional*):
97
- Sliding window attention window size. If `None`, no sliding window is applied.
98
-
99
- Example:
100
-
101
- ```python
102
- >>> from transformers import Phi3Model, Phi3Config
103
-
104
- >>> # Initializing a Phi-3 style configuration
105
- >>> configuration = Phi3Config.from_pretrained("microsoft/Phi-3-mini-4k-instruct")
106
-
107
- >>> # Initializing a model from the configuration
108
- >>> model = Phi3Model(configuration)
109
-
110
- >>> # Accessing the model configuration
111
- >>> configuration = model.config
112
- ```"""
113
-
114
- model_type = "phi3"
115
- keys_to_ignore_at_inference = ["past_key_values"]
116
-
117
- def __init__(
118
- self,
119
- vocab_size=32064,
120
- hidden_size=3072,
121
- intermediate_size=8192,
122
- num_hidden_layers=32,
123
- num_attention_heads=32,
124
- num_key_value_heads=None,
125
- resid_pdrop=0.0,
126
- embd_pdrop=0.0,
127
- attention_dropout=0.0,
128
- hidden_act="silu",
129
- max_position_embeddings=4096,
130
- original_max_position_embeddings=4096,
131
- initializer_range=0.02,
132
- rms_norm_eps=1e-5,
133
- use_cache=True,
134
- tie_word_embeddings=False,
135
- rope_theta=10000.0,
136
- rope_scaling=None,
137
- bos_token_id=1,
138
- eos_token_id=32000,
139
- pad_token_id=32000,
140
- sliding_window=None,
141
- **kwargs,
142
- ):
143
- self.vocab_size = vocab_size
144
- self.hidden_size = hidden_size
145
- self.intermediate_size = intermediate_size
146
- self.num_hidden_layers = num_hidden_layers
147
- self.num_attention_heads = num_attention_heads
148
-
149
- if num_key_value_heads is None:
150
- num_key_value_heads = num_attention_heads
151
-
152
- self.num_key_value_heads = num_key_value_heads
153
- self.resid_pdrop = resid_pdrop
154
- self.embd_pdrop = embd_pdrop
155
- self.attention_dropout = attention_dropout
156
- self.hidden_act = hidden_act
157
- self.max_position_embeddings = max_position_embeddings
158
- self.original_max_position_embeddings = original_max_position_embeddings
159
- self.initializer_range = initializer_range
160
- self.rms_norm_eps = rms_norm_eps
161
- self.use_cache = use_cache
162
- self.rope_theta = rope_theta
163
- self.rope_scaling = rope_scaling
164
- self._rope_scaling_validation()
165
- self.sliding_window = sliding_window
166
-
167
- super().__init__(
168
- bos_token_id=bos_token_id,
169
- eos_token_id=eos_token_id,
170
- pad_token_id=pad_token_id,
171
- tie_word_embeddings=tie_word_embeddings,
172
- **kwargs,
173
- )
174
-
175
- def _rope_scaling_validation(self):
176
- """
177
- Validate the `rope_scaling` configuration.
178
- """
179
- if self.rope_scaling is None:
180
- return
181
-
182
- if not isinstance(self.rope_scaling, dict) or len(self.rope_scaling) != 3:
183
- raise ValueError(
184
- "`rope_scaling` must be a dictionary with three fields, `type`, `short_factor` and `long_factor`, "
185
- f"got {self.rope_scaling}"
186
- )
187
- rope_scaling_type = self.rope_scaling.get("type", None)
188
- rope_scaling_short_factor = self.rope_scaling.get("short_factor", None)
189
- rope_scaling_long_factor = self.rope_scaling.get("long_factor", None)
190
- if rope_scaling_type is None or rope_scaling_type not in ["su", "yarn"]:
191
- raise ValueError(f"`rope_scaling`'s type field must be one of ['su', 'yarn'], got {rope_scaling_type}")
192
- if not (
193
- isinstance(rope_scaling_short_factor, list)
194
- and all(isinstance(x, (int, float)) for x in rope_scaling_short_factor)
195
- ):
196
- raise ValueError(
197
- f"`rope_scaling`'s short_factor field must be a list of numbers, got {rope_scaling_short_factor}"
198
- )
199
- if not len(rope_scaling_short_factor) == self.hidden_size // self.num_attention_heads // 2:
200
- raise ValueError(
201
- f"`rope_scaling`'s short_factor field must have length {self.hidden_size // self.num_attention_heads // 2}, got {len(rope_scaling_short_factor)}"
202
- )
203
- if not (
204
- isinstance(rope_scaling_long_factor, list)
205
- and all(isinstance(x, (int, float)) for x in rope_scaling_long_factor)
206
- ):
207
- raise ValueError(
208
- f"`rope_scaling`'s long_factor field must be a list of numbers, got {rope_scaling_long_factor}"
209
- )
210
- if not len(rope_scaling_long_factor) == self.hidden_size // self.num_attention_heads // 2:
211
- raise ValueError(
212
- f"`rope_scaling`'s long_factor field must have length {self.hidden_size // self.num_attention_heads // 2}, got {len(rope_scaling_long_factor)}"
213
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding=utf-8
2
+ # Copyright 2024 Microsoft and the HuggingFace Inc. team. All rights reserved.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ """ Phi-3 model configuration"""
17
+
18
+
19
+ from transformers.configuration_utils import PretrainedConfig
20
+ from transformers.utils import logging
21
+
22
+
23
+ logger = logging.get_logger(__name__)
24
+
25
+ PHI3_PRETRAINED_CONFIG_ARCHIVE_MAP = {
26
+ "microsoft/Phi-3-mini-4k-instruct": "https://huggingface.co/microsoft/Phi-3-mini-4k-instruct/resolve/main/config.json",
27
+ "microsoft/Phi-3-mini-128k-instruct": "https://huggingface.co/microsoft/Phi-3-mini-128k-instruct/resolve/main/config.json",
28
+ }
29
+
30
+
31
+ class Phi3Config(PretrainedConfig):
32
+ r"""
33
+ This is the configuration class to store the configuration of a [`Phi3Model`]. It is used to instantiate a Phi-3
34
+ model according to the specified arguments, defining the model architecture. Instantiating a configuration with the
35
+ defaults will yield a similar configuration to that of the
36
+ [microsoft/Phi-3-mini-4k-instruct](https://huggingface.co/microsoft/Phi-3-mini-4k-instruct).
37
+
38
+ Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the
39
+ documentation from [`PretrainedConfig`] for more information.
40
+
41
+ Args:
42
+ vocab_size (`int`, *optional*, defaults to 32064):
43
+ Vocabulary size of the Phi-3 model. Defines the number of different tokens that can be represented by the
44
+ `inputs_ids` passed when calling [`Phi3Model`].
45
+ hidden_size (`int`, *optional*, defaults to 3072):
46
+ Dimension of the hidden representations.
47
+ intermediate_size (`int`, *optional*, defaults to 8192):
48
+ Dimension of the MLP representations.
49
+ num_hidden_layers (`int`, *optional*, defaults to 32):
50
+ Number of hidden layers in the Transformer decoder.
51
+ num_attention_heads (`int`, *optional*, defaults to 32):
52
+ Number of attention heads for each attention layer in the Transformer decoder.
53
+ num_key_value_heads (`int`, *optional*):
54
+ This is the number of key_value heads that should be used to implement Grouped Query Attention. If
55
+ `num_key_value_heads=num_attention_heads`, the model will use Multi Head Attention (MHA), if
56
+ `num_key_value_heads=1 the model will use Multi Query Attention (MQA) otherwise GQA is used. When
57
+ converting a multi-head checkpoint to a GQA checkpoint, each group key and value head should be constructed
58
+ by meanpooling all the original heads within that group. For more details checkout [this
59
+ paper](https://arxiv.org/pdf/2305.13245.pdf). If it is not specified, will default to
60
+ `num_attention_heads`.
61
+ resid_pdrop (`float`, *optional*, defaults to 0.0):
62
+ Dropout probability for mlp outputs.
63
+ embd_pdrop (`int`, *optional*, defaults to 0.0):
64
+ The dropout ratio for the embeddings.
65
+ attention_dropout (`float`, *optional*, defaults to 0.0):
66
+ The dropout ratio after computing the attention scores.
67
+ hidden_act (`str` or `function`, *optional*, defaults to `"silu"`):
68
+ The non-linear activation function (function or string) in the decoder.
69
+ max_position_embeddings (`int`, *optional*, defaults to 4096):
70
+ The maximum sequence length that this model might ever be used with.
71
+ original_max_position_embeddings (`int`, *optional*, defaults to 4096):
72
+ The maximum sequence length that this model was trained with. This is used to determine the size of the
73
+ original RoPE embeddings when using long scaling.
74
+ initializer_range (`float`, *optional*, defaults to 0.02):
75
+ The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
76
+ rms_norm_eps (`float`, *optional*, defaults to 1e-05):
77
+ The epsilon value used for the RMSNorm.
78
+ use_cache (`bool`, *optional*, defaults to `True`):
79
+ Whether or not the model should return the last key/values attentions (not used by all models). Only
80
+ relevant if `config.is_decoder=True`. Whether to tie weight embeddings or not.
81
+ tie_word_embeddings (`bool`, *optional*, defaults to `False`):
82
+ Whether to tie weight embeddings
83
+ rope_theta (`float`, *optional*, defaults to 10000.0):
84
+ The base period of the RoPE embeddings.
85
+ rope_scaling (`dict`, *optional*):
86
+ The scaling strategy for the RoPE embeddings. If `None`, no scaling is applied. If a dictionary, it must
87
+ contain the following keys: `type`, `short_factor` and `long_factor`. The `type` must be `longrope` and
88
+ the `short_factor` and `long_factor` must be lists of numbers with the same length as the hidden size
89
+ divided by the number of attention heads divided by 2.
90
+ bos_token_id (`int`, *optional*, defaults to 1):
91
+ The id of the "beginning-of-sequence" token.
92
+ eos_token_id (`int`, *optional*, defaults to 32000):
93
+ The id of the "end-of-sequence" token.
94
+ pad_token_id (`int`, *optional*, defaults to 32000):
95
+ The id of the padding token.
96
+ sliding_window (`int`, *optional*):
97
+ Sliding window attention window size. If `None`, no sliding window is applied.
98
+
99
+ Example:
100
+
101
+ ```python
102
+ >>> from transformers import Phi3Model, Phi3Config
103
+
104
+ >>> # Initializing a Phi-3 style configuration
105
+ >>> configuration = Phi3Config.from_pretrained("microsoft/Phi-3-mini-4k-instruct")
106
+
107
+ >>> # Initializing a model from the configuration
108
+ >>> model = Phi3Model(configuration)
109
+
110
+ >>> # Accessing the model configuration
111
+ >>> configuration = model.config
112
+ ```"""
113
+
114
+ model_type = "phi3"
115
+ keys_to_ignore_at_inference = ["past_key_values"]
116
+
117
+ def __init__(
118
+ self,
119
+ vocab_size=32064,
120
+ hidden_size=3072,
121
+ intermediate_size=8192,
122
+ num_hidden_layers=32,
123
+ num_attention_heads=32,
124
+ num_key_value_heads=None,
125
+ resid_pdrop=0.0,
126
+ embd_pdrop=0.0,
127
+ attention_dropout=0.0,
128
+ hidden_act="silu",
129
+ max_position_embeddings=4096,
130
+ original_max_position_embeddings=4096,
131
+ initializer_range=0.02,
132
+ rms_norm_eps=1e-5,
133
+ use_cache=True,
134
+ tie_word_embeddings=False,
135
+ rope_theta=10000.0,
136
+ rope_scaling=None,
137
+ bos_token_id=1,
138
+ eos_token_id=32000,
139
+ pad_token_id=32000,
140
+ sliding_window=None,
141
+ **kwargs,
142
+ ):
143
+ self.vocab_size = vocab_size
144
+ self.hidden_size = hidden_size
145
+ self.intermediate_size = intermediate_size
146
+ self.num_hidden_layers = num_hidden_layers
147
+ self.num_attention_heads = num_attention_heads
148
+
149
+ if num_key_value_heads is None:
150
+ num_key_value_heads = num_attention_heads
151
+
152
+ self.num_key_value_heads = num_key_value_heads
153
+ self.resid_pdrop = resid_pdrop
154
+ self.embd_pdrop = embd_pdrop
155
+ self.attention_dropout = attention_dropout
156
+ self.hidden_act = hidden_act
157
+ self.max_position_embeddings = max_position_embeddings
158
+ self.original_max_position_embeddings = original_max_position_embeddings
159
+ self.initializer_range = initializer_range
160
+ self.rms_norm_eps = rms_norm_eps
161
+ self.use_cache = use_cache
162
+ self.rope_theta = rope_theta
163
+ self.rope_scaling = rope_scaling
164
+ self._rope_scaling_adjustment()
165
+ self._rope_scaling_validation()
166
+ self.sliding_window = sliding_window
167
+
168
+ super().__init__(
169
+ bos_token_id=bos_token_id,
170
+ eos_token_id=eos_token_id,
171
+ pad_token_id=pad_token_id,
172
+ tie_word_embeddings=tie_word_embeddings,
173
+ **kwargs,
174
+ )
175
+
176
+ def _rope_scaling_adjustment(self):
177
+ """
178
+ Adjust the `type` of the `rope_scaling` configuration for backward compatibility.
179
+ """
180
+ if self.rope_scaling is None:
181
+ return
182
+
183
+ rope_scaling_type = self.rope_scaling.get("type", None)
184
+
185
+ # For backward compatibility if previous version used "su" or "yarn"
186
+ if rope_scaling_type is not None and rope_scaling_type in ["su", "yarn"]:
187
+ self.rope_scaling["type"] = "longrope"
188
+
189
+ def _rope_scaling_validation(self):
190
+ """
191
+ Validate the `rope_scaling` configuration.
192
+ """
193
+ if self.rope_scaling is None:
194
+ return
195
+
196
+ if not isinstance(self.rope_scaling, dict) or len(self.rope_scaling) != 3:
197
+ raise ValueError(
198
+ "`rope_scaling` must be a dictionary with three fields, `type`, `short_factor` and `long_factor`, "
199
+ f"got {self.rope_scaling}"
200
+ )
201
+ rope_scaling_type = self.rope_scaling.get("type", None)
202
+ rope_scaling_short_factor = self.rope_scaling.get("short_factor", None)
203
+ rope_scaling_long_factor = self.rope_scaling.get("long_factor", None)
204
+ if rope_scaling_type is None or rope_scaling_type not in ["longrope"]:
205
+ raise ValueError(f"`rope_scaling`'s type field must be one of ['longrope'], got {rope_scaling_type}")
206
+ if not (
207
+ isinstance(rope_scaling_short_factor, list)
208
+ and all(isinstance(x, (int, float)) for x in rope_scaling_short_factor)
209
+ ):
210
+ raise ValueError(
211
+ f"`rope_scaling`'s short_factor field must be a list of numbers, got {rope_scaling_short_factor}"
212
+ )
213
+ if not len(rope_scaling_short_factor) == self.hidden_size // self.num_attention_heads // 2:
214
+ raise ValueError(
215
+ f"`rope_scaling`'s short_factor field must have length {self.hidden_size // self.num_attention_heads // 2}, got {len(rope_scaling_short_factor)}"
216
+ )
217
+ if not (
218
+ isinstance(rope_scaling_long_factor, list)
219
+ and all(isinstance(x, (int, float)) for x in rope_scaling_long_factor)
220
+ ):
221
+ raise ValueError(
222
+ f"`rope_scaling`'s long_factor field must be a list of numbers, got {rope_scaling_long_factor}"
223
+ )
224
+ if not len(rope_scaling_long_factor) == self.hidden_size // self.num_attention_heads // 2:
225
+ raise ValueError(
226
+ f"`rope_scaling`'s long_factor field must have length {self.hidden_size // self.num_attention_heads // 2}, got {len(rope_scaling_long_factor)}"
227
+ )
model-00001-of-00002.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:f0f504204ef88a41c3a36c3e7ad8f7292a524642aec9b4fcf3d8650c8252ef0d
3
  size 5356281360
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:116ff9bda1d393660238f360909bf52758633a0096f26310ef0f522cc41d4c68
3
  size 5356281360
model-00002-of-00002.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:ddc323b2152c4160cac4e2c6794aa15b725d07ce4f3c735d52e50493d5282e9f
3
  size 2285900500
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b18d25709caa69a4028471c23f922cbce133096419a345371ecfae4289d6eb8f
3
  size 2285900500
modeling_phi3.py CHANGED
The diff for this file is too large to render. See raw diff
 
tokenizer.json CHANGED
@@ -150,12 +150,6 @@
150
  "post_processor": {
151
  "type": "TemplateProcessing",
152
  "single": [
153
- {
154
- "SpecialToken": {
155
- "id": "<s>",
156
- "type_id": 0
157
- }
158
- },
159
  {
160
  "Sequence": {
161
  "id": "A",
@@ -164,24 +158,12 @@
164
  }
165
  ],
166
  "pair": [
167
- {
168
- "SpecialToken": {
169
- "id": "<s>",
170
- "type_id": 0
171
- }
172
- },
173
  {
174
  "Sequence": {
175
  "id": "A",
176
  "type_id": 0
177
  }
178
  },
179
- {
180
- "SpecialToken": {
181
- "id": "<s>",
182
- "type_id": 1
183
- }
184
- },
185
  {
186
  "Sequence": {
187
  "id": "B",
@@ -189,17 +171,7 @@
189
  }
190
  }
191
  ],
192
- "special_tokens": {
193
- "<s>": {
194
- "id": "<s>",
195
- "ids": [
196
- 1
197
- ],
198
- "tokens": [
199
- "<s>"
200
- ]
201
- }
202
- }
203
  },
204
  "decoder": {
205
  "type": "Sequence",
 
150
  "post_processor": {
151
  "type": "TemplateProcessing",
152
  "single": [
 
 
 
 
 
 
153
  {
154
  "Sequence": {
155
  "id": "A",
 
158
  }
159
  ],
160
  "pair": [
 
 
 
 
 
 
161
  {
162
  "Sequence": {
163
  "id": "A",
164
  "type_id": 0
165
  }
166
  },
 
 
 
 
 
 
167
  {
168
  "Sequence": {
169
  "id": "B",
 
171
  }
172
  }
173
  ],
174
+ "special_tokens": {}
 
 
 
 
 
 
 
 
 
 
175
  },
176
  "decoder": {
177
  "type": "Sequence",
tokenizer_config.json CHANGED
@@ -1,6 +1,7 @@
1
  {
2
- "add_bos_token": true,
3
  "add_eos_token": false,
 
4
  "added_tokens_decoder": {
5
  "0": {
6
  "content": "<unk>",
@@ -116,9 +117,10 @@
116
  }
117
  },
118
  "bos_token": "<s>",
119
- "chat_template": "{{ bos_token }}{% for message in messages %}{% if (message['role'] == 'user') %}{{'<|user|>' + '\n' + message['content'] + '<|end|>' + '\n' + '<|assistant|>' + '\n'}}{% elif (message['role'] == 'assistant') %}{{message['content'] + '<|end|>' + '\n'}}{% endif %}{% endfor %}",
120
  "clean_up_tokenization_spaces": false,
121
  "eos_token": "<|endoftext|>",
 
122
  "model_max_length": 131072,
123
  "pad_token": "<|endoftext|>",
124
  "padding_side": "left",
 
1
  {
2
+ "add_bos_token": false,
3
  "add_eos_token": false,
4
+ "add_prefix_space": null,
5
  "added_tokens_decoder": {
6
  "0": {
7
  "content": "<unk>",
 
117
  }
118
  },
119
  "bos_token": "<s>",
120
+ "chat_template": "{% for message in messages %}{% if message['role'] == 'system' %}{{'<|system|>\n' + message['content'] + '<|end|>\n'}}{% elif message['role'] == 'user' %}{{'<|user|>\n' + message['content'] + '<|end|>\n'}}{% elif message['role'] == 'assistant' %}{{'<|assistant|>\n' + message['content'] + '<|end|>\n'}}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>\n' }}{% else %}{{ eos_token }}{% endif %}",
121
  "clean_up_tokenization_spaces": false,
122
  "eos_token": "<|endoftext|>",
123
+ "legacy": false,
124
  "model_max_length": 131072,
125
  "pad_token": "<|endoftext|>",
126
  "padding_side": "left",