初始化项目,由ModelHub XC社区提供模型
Model: MainStack/marvy-1-14B Source: Original Platform
This commit is contained in:
37
.gitattributes
vendored
Normal file
37
.gitattributes
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.arrow filter=lfs diff=lfs merge=lfs -text
|
||||
*.bin filter=lfs diff=lfs merge=lfs -text
|
||||
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
||||
*.ftz filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.h5 filter=lfs diff=lfs merge=lfs -text
|
||||
*.joblib filter=lfs diff=lfs merge=lfs -text
|
||||
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
||||
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
||||
*.model filter=lfs diff=lfs merge=lfs -text
|
||||
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
||||
*.npy filter=lfs diff=lfs merge=lfs -text
|
||||
*.npz filter=lfs diff=lfs merge=lfs -text
|
||||
*.onnx filter=lfs diff=lfs merge=lfs -text
|
||||
*.ot filter=lfs diff=lfs merge=lfs -text
|
||||
*.parquet filter=lfs diff=lfs merge=lfs -text
|
||||
*.pb filter=lfs diff=lfs merge=lfs -text
|
||||
*.pickle filter=lfs diff=lfs merge=lfs -text
|
||||
*.pkl filter=lfs diff=lfs merge=lfs -text
|
||||
*.pt filter=lfs diff=lfs merge=lfs -text
|
||||
*.pth filter=lfs diff=lfs merge=lfs -text
|
||||
*.rar filter=lfs diff=lfs merge=lfs -text
|
||||
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
||||
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar filter=lfs diff=lfs merge=lfs -text
|
||||
*.tflite filter=lfs diff=lfs merge=lfs -text
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.wasm filter=lfs diff=lfs merge=lfs -text
|
||||
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.zst filter=lfs diff=lfs merge=lfs -text
|
||||
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
||||
tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
||||
marvy_vs_base_ppl.png filter=lfs diff=lfs merge=lfs -text
|
||||
28
CITATION.cff
Normal file
28
CITATION.cff
Normal file
@@ -0,0 +1,28 @@
|
||||
cff-version: 1.2.0
|
||||
message: "If you use marvy-1-14B as a baseline, fine-tune it, distill from it, or evaluate against it, please cite this work and credit MainStack."
|
||||
title: "marvy-1-14B: An open fine-tuned model for the full ServiceNow delivery lifecycle"
|
||||
abstract: "marvy-1-14B is an Apache-2.0 fine-tune of Qwen2.5-14B-Instruct specialized for the full ServiceNow delivery lifecycle: business analysis, requirements, stakeholder mapping, systems inventory, solution design documents, user stories, implementation planning, test cases, and validation."
|
||||
type: software
|
||||
authors:
|
||||
- name: "MainStack"
|
||||
website: "https://www.mainstack.co.uk/"
|
||||
url: "https://huggingface.co/MainStack/marvy-1-14B"
|
||||
repository-artifact: "https://huggingface.co/MainStack/marvy-1-14B"
|
||||
version: "1"
|
||||
date-released: "2026-06-01"
|
||||
license: Apache-2.0
|
||||
keywords:
|
||||
- ServiceNow
|
||||
- ITSM
|
||||
- CSDM
|
||||
- solution-design
|
||||
- delivery
|
||||
- qwen2.5
|
||||
- lora
|
||||
references:
|
||||
- type: software
|
||||
title: "Qwen2.5-14B-Instruct"
|
||||
authors:
|
||||
- name: "Qwen Team, Alibaba Cloud"
|
||||
url: "https://huggingface.co/Qwen/Qwen2.5-14B-Instruct"
|
||||
license: Apache-2.0
|
||||
202
LICENSE
Normal file
202
LICENSE
Normal file
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
396
LICENSE-CC-BY-4.0
Normal file
396
LICENSE-CC-BY-4.0
Normal file
@@ -0,0 +1,396 @@
|
||||
Attribution 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution 4.0 International Public License ("Public License"). To the
|
||||
extent this Public License may be interpreted as a contract, You are
|
||||
granted the Licensed Rights in consideration of Your acceptance of
|
||||
these terms and conditions, and the Licensor grants You such rights in
|
||||
consideration of benefits the Licensor receives from making the
|
||||
Licensed Material available under these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
d. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
f. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
g. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's
|
||||
License You apply must not prevent recipients of the Adapted
|
||||
Material from complying with this Public License.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
||||
47
LICENSING.md
Normal file
47
LICENSING.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# Licensing — marvy-1-14B
|
||||
|
||||
marvy-1-14B uses a **layered (dual) license** that reflects what is built on top
|
||||
of an upstream open model versus what MainStack authored.
|
||||
|
||||
| Component | License | What it covers |
|
||||
|---|---|---|
|
||||
| **Model weights** (`*.safetensors`, GGUF quants, LoRA adapter) | **Apache-2.0** | The fine-tuned weights. These are a derivative of Qwen2.5-14B-Instruct (Apache-2.0); per that license they remain Apache-2.0 and free to use, modify, and redistribute. |
|
||||
| **MainStack original contributions** | **CC-BY-4.0** | The model cards, documentation (`USAGE.md`, `VALIDATION.md`, benchmark), the benchmark charts, the curated training-data methodology, and the pipeline framing authored by MainStack. |
|
||||
|
||||
## What this means in practice
|
||||
|
||||
### You may (under Apache-2.0, for the weights)
|
||||
- Use marvy-1-14B commercially, privately, or in research.
|
||||
- Fine-tune, distill, quantize, merge, or otherwise build on the weights.
|
||||
- Redistribute the weights, including modified versions.
|
||||
|
||||
…provided you **retain the `NOTICE` file** in derivatives and redistributions
|
||||
(Apache-2.0 §4(d) — this is mandatory and carries the attribution request).
|
||||
|
||||
### You must (under CC-BY-4.0, for our contributions)
|
||||
If you reuse MainStack's **documentation, model cards, benchmark, or charts** —
|
||||
e.g. copying our eval methodology, reproducing our charts, or lifting card text
|
||||
into your own model — you must give **attribution**: credit "MainStack" and link
|
||||
to https://huggingface.co/MainStack/marvy-1-14B. This is a binding condition of
|
||||
CC-BY-4.0, not just a request.
|
||||
|
||||
### We ask (attribution for the model)
|
||||
If you use marvy-1-14B **as a baseline, a starting point for your own fine-tune,
|
||||
a distillation source, or an evaluation comparison**, please credit MainStack
|
||||
and cite the entry in the model card. See `NOTICE` and the card's Citation
|
||||
section.
|
||||
|
||||
## Why the weights can't be more restricted
|
||||
|
||||
Qwen2.5-14B-Instruct is released under Apache-2.0, which grants every recipient
|
||||
an irrevocable, royalty-free right to use and redistribute. A fine-tune cannot
|
||||
revoke those rights on the resulting weights. MainStack's protection therefore
|
||||
lives where it legally can: (1) the CC-BY-4.0 license on our **own** authored
|
||||
materials, and (2) the Apache-2.0 **NOTICE** that must travel with the weights.
|
||||
|
||||
## Files
|
||||
- `LICENSE` — Apache-2.0 (governs the weights; inherited from the base model).
|
||||
- `LICENSE-CC-BY-4.0` — CC-BY-4.0 (governs MainStack's documentation and other
|
||||
original contributions).
|
||||
- `NOTICE` — required attribution notices (retain in derivatives).
|
||||
- `CITATION.cff` — citation metadata.
|
||||
80
NOTICE
Normal file
80
NOTICE
Normal file
@@ -0,0 +1,80 @@
|
||||
marvy-1-14B
|
||||
Copyright 2026 MainStack
|
||||
|
||||
This product is licensed under the Apache License, Version 2.0 (the "License").
|
||||
You may obtain a copy of the License in the accompanying LICENSE file or at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
================================================================================
|
||||
Attribution request (downstream use)
|
||||
================================================================================
|
||||
|
||||
marvy-1-14B was created by MainStack (https://huggingface.co/MainStack).
|
||||
|
||||
If you use marvy-1-14B as a baseline, fine-tune it, distill from it, evaluate
|
||||
against it, or otherwise build on it, please credit MainStack and link to:
|
||||
|
||||
https://huggingface.co/MainStack/marvy-1-14B
|
||||
|
||||
Under the Apache License, Version 2.0, this NOTICE file MUST be retained and
|
||||
reproduced in any derivative works and redistributions (License §4(d)).
|
||||
|
||||
================================================================================
|
||||
Dual licensing
|
||||
================================================================================
|
||||
|
||||
* Model weights (safetensors / GGUF / LoRA adapter): Apache-2.0 (LICENSE).
|
||||
* MainStack original contributions — model cards, documentation, benchmark,
|
||||
charts, and curated training methodology: CC-BY-4.0 (LICENSE-CC-BY-4.0).
|
||||
|
||||
Reuse of MainStack's contributions requires attribution to MainStack under the
|
||||
terms of CC-BY-4.0. See LICENSING.md for the full breakdown.
|
||||
|
||||
================================================================================
|
||||
Attribution
|
||||
================================================================================
|
||||
|
||||
marvy-1-14B is a fine-tuned derivative of:
|
||||
|
||||
Qwen2.5-14B-Instruct
|
||||
Copyright Alibaba Cloud / Qwen Team
|
||||
Licensed under the Apache License, Version 2.0
|
||||
https://huggingface.co/Qwen/Qwen2.5-14B-Instruct
|
||||
|
||||
The base model weights are the property of their respective authors and are
|
||||
used and redistributed in modified (fine-tuned) form under the terms of the
|
||||
Apache License, Version 2.0.
|
||||
|
||||
Citation for the base model:
|
||||
|
||||
@misc{qwen2.5,
|
||||
title = {Qwen2.5: A Party of Foundation Models},
|
||||
author = {Qwen Team},
|
||||
year = {2024},
|
||||
url = {https://qwenlm.github.io/blog/qwen2.5/}
|
||||
}
|
||||
|
||||
@article{qwen2,
|
||||
title = {Qwen2 Technical Report},
|
||||
author = {Qwen Team},
|
||||
journal= {arXiv preprint arXiv:2407.10671},
|
||||
year = {2024}
|
||||
}
|
||||
|
||||
================================================================================
|
||||
Tooling
|
||||
================================================================================
|
||||
|
||||
Trained and fused with MLX-LM (https://github.com/ml-explore/mlx-lm),
|
||||
Copyright Apple Inc., licensed under the MIT License.
|
||||
|
||||
================================================================================
|
||||
Training data provenance
|
||||
================================================================================
|
||||
|
||||
marvy-1-14B was fine-tuned on a corpus of anonymized ServiceNow delivery
|
||||
artifacts. All customer and partner names were replaced with stable aliases,
|
||||
and emails, hostnames, IP addresses, and credential-bearing files were removed
|
||||
or redacted prior to training. No customer-identifying information is present
|
||||
in the training corpus. See the model card for the full redaction methodology.
|
||||
350
README.md
Normal file
350
README.md
Normal file
@@ -0,0 +1,350 @@
|
||||
---
|
||||
license: apache-2.0
|
||||
base_model: Qwen/Qwen2.5-14B-Instruct
|
||||
base_model_relation: finetune
|
||||
library_name: transformers
|
||||
pipeline_tag: text-generation
|
||||
language:
|
||||
- en
|
||||
tags:
|
||||
- servicenow
|
||||
- itsm
|
||||
- csdm
|
||||
- itom
|
||||
- delivery
|
||||
- solution-design
|
||||
- user-stories
|
||||
- business-analysis
|
||||
- qwen2.5
|
||||
- lora
|
||||
- sft
|
||||
- mlx
|
||||
model-index:
|
||||
- name: marvy-1-14B
|
||||
results:
|
||||
- task:
|
||||
type: text-generation
|
||||
name: Text Generation
|
||||
dataset:
|
||||
type: custom
|
||||
name: ServiceNow Delivery SFT (project-disjoint test split)
|
||||
metrics:
|
||||
- type: perplexity
|
||||
value: 13.107
|
||||
name: Test perplexity
|
||||
- type: loss
|
||||
value: 2.573
|
||||
name: Test cross-entropy loss
|
||||
---
|
||||
|
||||
# marvy-1-14B
|
||||
|
||||
**The first open, fine-tuned LLM for the full ServiceNow delivery lifecycle — from business analysis to validation.**
|
||||
|
||||
marvy-1-14B is an open-source language model fine-tuned for the complete ServiceNow delivery lifecycle: business analysis, requirements, stakeholder mapping, systems inventory, Solution Design Documents, user stories with acceptance criteria, implementation planning, test cases, and validation. Where general-purpose models treat ServiceNow as one topic among many, marvy is built to draft the actual artifacts a delivery team produces — in the structure and sequence real engagements follow. It is a first-draft specialist, not a consultant replacement, and it is not an agentic or tool-use fine-tune.
|
||||
|
||||
It was built by [MainStack](https://huggingface.co/MainStack), a consultancy specializing in ServiceNow Agentic Delivery. marvy is a LoRA SFT fine-tune of [Qwen2.5-14B-Instruct](https://huggingface.co/Qwen/Qwen2.5-14B-Instruct) (Apache-2.0), trained on ~1,958 anonymized artifacts from real engagements (~887k tokens), rigorously redacted to zero residual PII per an automated leakage scanner. Its test perplexity of 13.107 was measured on a project- and customer-disjoint held-out split — the model generalizes to unseen work rather than memorizing the training set.
|
||||
|
||||
> Released under **Apache-2.0**. Built with Qwen — see `NOTICE`.
|
||||
|
||||
## Why marvy-1-14B
|
||||
|
||||
- **Drafts the full lifecycle, not just snippets.** Business analysis through validation — the artifacts and sequence real delivery teams actually work in.
|
||||
- **OOTB-first and implementation-grade.** Tuned to favor out-of-the-box correctness and produce drafts you can review, not rewrite.
|
||||
- **Runs locally and privately.** Merged FP16, a LoRA adapter, and GGUF quants — run it on Apple Silicon via LM Studio or Ollama, with your engagement data never leaving your machine.
|
||||
- **Trained on real, anonymized delivery work.** ~1,958 redacted engagement artifacts (~887k tokens), with zero residual PII verified by an automated leakage scanner.
|
||||
- **Open and Apache-2.0.** Built on Qwen2.5-14B-Instruct — inspect it, fine-tune it, and deploy it on your own terms.
|
||||
|
||||
📖 **Full docs:** [`USAGE.md`](./USAGE.md) (every runtime + OpenCode wiring) ·
|
||||
[`VALIDATION.md`](./VALIDATION.md) (prove the fine-tune works) ·
|
||||
[`validate.sh`](./validate.sh) (one-command probe harness)
|
||||
|
||||
---
|
||||
|
||||
## Quick start
|
||||
|
||||
### Transformers
|
||||
|
||||
```python
|
||||
from transformers import AutoTokenizer, AutoModelForCausalLM
|
||||
|
||||
model_id = "MainStack/marvy-1-14B"
|
||||
tok = AutoTokenizer.from_pretrained(model_id)
|
||||
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="auto")
|
||||
|
||||
SYSTEM = (
|
||||
"You are a senior ServiceNow delivery consultant. You produce precise, "
|
||||
"implementation-grade artifacts: business analyses, requirements, solution "
|
||||
"design documents, user stories with acceptance criteria, test cases, and "
|
||||
"validation reviews. You favor out-of-the-box capabilities, cite concrete "
|
||||
"tables/plugins/sys_ids when relevant, and write in clear professional English."
|
||||
)
|
||||
|
||||
messages = [
|
||||
{"role": "system", "content": SYSTEM},
|
||||
{"role": "user", "content": "Write a ServiceNow user story with acceptance criteria for SLA escalation on P1 incidents."},
|
||||
]
|
||||
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
|
||||
out = model.generate(inputs, max_new_tokens=1024, temperature=0.4)
|
||||
print(tok.decode(out[0][inputs.shape[-1]:], skip_special_tokens=True))
|
||||
```
|
||||
|
||||
### vLLM
|
||||
|
||||
```bash
|
||||
pip install vllm
|
||||
vllm serve MainStack/marvy-1-14B
|
||||
```
|
||||
|
||||
### Ollama (via GGUF)
|
||||
|
||||
Use the companion repo [`MainStack/marvy-1-14B-GGUF`](https://huggingface.co/MainStack/marvy-1-14B-GGUF):
|
||||
|
||||
```bash
|
||||
ollama run hf.co/MainStack/marvy-1-14B-GGUF:Q4_K_M
|
||||
```
|
||||
|
||||
### MLX (Apple Silicon native)
|
||||
|
||||
```bash
|
||||
pip install mlx-lm
|
||||
python -m mlx_lm generate --model MainStack/marvy-1-14B \
|
||||
--system-prompt "You are a senior ServiceNow delivery consultant..." \
|
||||
--prompt "Draft the Platform Architecture section of an ITSM SDD." \
|
||||
--max-tokens 1024 --temp 0.4
|
||||
```
|
||||
|
||||
### LoRA-only (apply on top of the base)
|
||||
|
||||
If you prefer a tiny adapter (~175 MB) on top of the BF16 base, see [`MainStack/marvy-1-14B-lora`](https://huggingface.co/MainStack/marvy-1-14B-lora).
|
||||
|
||||
---
|
||||
|
||||
## Intended use
|
||||
|
||||
marvy-1-14B is designed to produce implementation-grade first drafts across the ServiceNow delivery lifecycle — accelerating the artifacts a practitioner would otherwise write from scratch, then review and refine. Built for solution architects, business analysts, technical consultants, and project managers. Typical tasks:
|
||||
|
||||
| Task family | What it produces |
|
||||
|------------------------|---------------------------------------------------------------------------------|
|
||||
| `business_analysis` | Structured BA reports from SOWs / discovery notes |
|
||||
| `requirements_extraction` | Functional/non-functional requirements with acceptance bullets |
|
||||
| `stakeholder_mapping` | RACI / influence-interest grids from raw notes |
|
||||
| `systems_inventory` | CMDB-shaped systems inventories from architecture inputs |
|
||||
| `sdd_design` | Solution Design Document sections (architecture, integrations, data model) |
|
||||
| `story_authoring` | User stories with crisp acceptance criteria |
|
||||
| `implementation_planning` | Story-level implementation plans citing tables/plugins |
|
||||
| `test_case_generation` | Test cases per story, mapped to acceptance criteria |
|
||||
| `validation_critique` | Gap analysis, follow-up questions, assumption checks against source docs |
|
||||
| `delivery_chain` | Multi-turn: story → implementation → test, end-to-end |
|
||||
|
||||
### Recommended system prompt
|
||||
|
||||
```
|
||||
You are a senior ServiceNow delivery consultant. You produce precise, implementation-grade
|
||||
artifacts: business analyses, requirements, solution design documents, user stories with
|
||||
acceptance criteria, test cases, and validation reviews. You favor out-of-the-box
|
||||
capabilities, cite concrete tables/plugins/sys_ids when relevant, and write in clear
|
||||
professional English.
|
||||
```
|
||||
|
||||
### Recommended generation settings
|
||||
|
||||
| Use case | temperature | top_p | max_new_tokens |
|
||||
|-----------------------------|-------------|-------|----------------|
|
||||
| Structured artifacts (SDD, stories) | 0.3 – 0.5 | 0.9 | 1024 – 4096 |
|
||||
| Exploratory brainstorming | 0.7 – 0.9 | 0.95 | 1024 |
|
||||
| Validation / critique | 0.2 – 0.4 | 0.9 | 1024 – 2048 |
|
||||
|
||||
---
|
||||
|
||||
## Training data
|
||||
|
||||
> **The training dataset is proprietary to MainStack and is not publicly
|
||||
> released.** It is derived from confidential, anonymized client engagement
|
||||
> artifacts. The statistics below describe the corpus for transparency; the data
|
||||
> itself is not distributed with the model.
|
||||
|
||||
| Item | Value |
|
||||
|---|---|
|
||||
| Source | Anonymized real engagement artifacts (`.md`, `.csv`, `.json`, `.mmd`, `.txt`) |
|
||||
| Availability | **Proprietary — not released** |
|
||||
| Total records | **1,958** (after schema + exact-dedupe) |
|
||||
| Estimated tokens | **~887k** |
|
||||
| Splits (project-disjoint) | train 1,359 · val 347 · test 252 |
|
||||
| Tasks | 11 task families (see table above) |
|
||||
| Multi-turn share | `delivery_chain` (158 records) — story→implementation→test |
|
||||
|
||||
### Privacy & redaction
|
||||
|
||||
- All customer/partner names → stable aliases (e.g. `Customer-FIN-03`, `Customer-ENERGY-01`).
|
||||
- Emails → `user@example.com`; hostnames → `instance.example.service-now.com`; IPs → RFC 5737 range; `key: value` secrets → `[REDACTED]`.
|
||||
- Credential/login/VPN files excluded entirely; bulk CMDB dumps >1.5 MB excluded.
|
||||
- ServiceNow `sys_id`s and table/plugin names preserved (instance-local, technically valuable, low risk).
|
||||
- A leakage scanner asserts **0** residual emails, hostnames, or mapped real names in message content.
|
||||
|
||||
### Split integrity
|
||||
|
||||
Train / val / test are split **by project**, so no customer appears in more than one split. The largest project is forced into `train` to keep eval honest:
|
||||
- val projects: `Customer-ENERGY-01`
|
||||
- test projects: `Customer-CHEM-01`, `Customer-FININST-01`
|
||||
|
||||
---
|
||||
|
||||
## Training procedure
|
||||
|
||||
| Setting | Value |
|
||||
|---|---|
|
||||
| Method | LoRA SFT (QLoRA-style: LoRA on 4-bit base) |
|
||||
| Base model | `mlx-community/Qwen2.5-14B-Instruct-4bit` (training) → fused onto `Qwen/Qwen2.5-14B-Instruct` BF16 (release) |
|
||||
| Framework | [MLX-LM](https://github.com/ml-explore/mlx-lm) 0.31.3 |
|
||||
| Hardware | Apple Silicon (M-series), Metal |
|
||||
| Max sequence length | 8,192 |
|
||||
| Batch size / grad accum | 1 / 16 (effective batch 16) |
|
||||
| Iterations | 350 (~4 epochs over 1,359 train records) |
|
||||
| Optimizer | AdamW, cosine decay, warmup 20, lr 1e-4 → 1e-6 |
|
||||
| LoRA rank / scale / dropout | 32 / 20.0 / 0.0 |
|
||||
| LoRA target keys | `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj` |
|
||||
| Adapted layers | top 16 transformer layers |
|
||||
| Prompt masking | yes — loss computed only on assistant turns |
|
||||
| Seed | 42 |
|
||||
|
||||
---
|
||||
|
||||
## Evaluation
|
||||
|
||||
### Fine-tuned vs. base — efficiency on the held-out test set
|
||||
|
||||
The cleanest measure of the fine-tune's value is to score the **same base
|
||||
model twice** — plain vs. with the marvy adapter — on the **project-disjoint**
|
||||
test split (252 records from two customers never seen in training/val), using
|
||||
per-token cross-entropy/perplexity on the **assistant tokens only**
|
||||
(prompt-masked, the same objective used in training). Lower perplexity = the
|
||||
model assigns higher probability to the real, human-authored delivery artifact.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
**Overall: perplexity 8.91 → 6.03, a 32.3% reduction** on unseen customers.
|
||||
|
||||
| Task | Base ppl | marvy-1-14B ppl | Improvement |
|
||||
|---|---:|---:|---:|
|
||||
| Systems inventory | 77.07 | 10.53 | **−86.3%** |
|
||||
| Requirements extraction | 46.76 | 9.39 | **−79.9%** |
|
||||
| Stakeholder mapping | 27.81 | 6.91 | **−75.2%** |
|
||||
| Story authoring | 15.38 | 7.86 | **−48.9%** |
|
||||
| Validation / critique | 9.72 | 8.23 | −15.3% |
|
||||
| Business analysis | 7.14 | 6.66 | −6.6% |
|
||||
| SDD design | 4.48 | 4.40 | −1.7% |
|
||||
| **Overall** | **8.91** | **6.03** | **−32.3%** |
|
||||
|
||||
The gains are largest on **structured, format-heavy artifacts** (inventories,
|
||||
requirements, stakeholder registers, stories) where the base model wanders from
|
||||
the expected schema; they are smaller on long-form prose (SDD sections, business
|
||||
analysis) where the base was already competent. This is the honest, expected
|
||||
shape of a domain SFT.
|
||||
|
||||
> Notes: the test customers (`Customer-CHEM-01`, `Customer-FININST-01`) appear in
|
||||
> neither train nor val, so this reflects generalization, not memorization. The
|
||||
> test split happens to cover 7 of the 11 task families. An earlier MLX
|
||||
> batch-eval reported aggregate ppl ≈ 13.1 with 2,048-token truncation; the
|
||||
> figures above recompute per-task with full assistant-token masking, so the
|
||||
> base-vs-marvy **delta** is the result of interest.
|
||||
|
||||
Reproduce it yourself: `bash benchmark/run_benchmark.sh` (see
|
||||
[`VALIDATION.md`](./VALIDATION.md) for qualitative probes too).
|
||||
|
||||
---
|
||||
|
||||
## Limitations & known issues
|
||||
|
||||
- **Text-only sources.** SOWs/SDDs/workbooks in `.docx/.pptx/.pdf/.xlsx` are not parsed in this build. Coverage of binary-only engagements is therefore thin.
|
||||
- **Project concentration.** ~95% of records come from ~12 data-rich projects; the long tail contributes a single case study each. Some task families (e.g. `case_study`, `validation_critique`) are smaller and may exhibit higher variance.
|
||||
- **Synthetic instructions.** User prompts are templated paraphrases (3–5 variants per task); assistant outputs are the original human-authored artifacts.
|
||||
- **English-only.** The corpus is English.
|
||||
- **Not a replacement for a consultant.** Output is first-draft, implementation-grade content that requires expert review before client delivery or production use.
|
||||
- **No tool use / function calling fine-tune.** `marvy-1-14B` is a text-completion specialist; agentic tool use is left to the orchestrator.
|
||||
- **Hallucination risk on instance-specific facts.** The model will confidently invent `sys_id`s, plugin IDs, and table fields if asked about specifics it has not seen. Always verify against an actual ServiceNow instance.
|
||||
- **No safety fine-tune beyond the base.** Inherits Qwen2.5-14B-Instruct safety behavior; no additional RLHF.
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
marvy-1-14B is **dual-licensed** — see [`LICENSING.md`](./LICENSING.md) for the full breakdown:
|
||||
|
||||
| Component | License |
|
||||
|---|---|
|
||||
| **Model weights** (safetensors / GGUF / LoRA) | **Apache-2.0** (`LICENSE`) — inherited from the Qwen2.5-14B-Instruct base; free to use, fine-tune, and redistribute, with `NOTICE` retained. |
|
||||
| **MainStack contributions** (model cards, docs, benchmark, charts, training methodology) | **CC-BY-4.0** (`LICENSE-CC-BY-4.0`) — reuse requires attribution to MainStack. |
|
||||
|
||||
The model weights are a derivative of **Qwen2.5-14B-Instruct** (Apache-2.0).
|
||||
Per Apache-2.0, the weights cannot be placed under a more restrictive license;
|
||||
MainStack's protection is the CC-BY-4.0 license on our own authored materials
|
||||
plus the mandatory `NOTICE` retention. See `NOTICE` for attribution.
|
||||
|
||||
## Attribution
|
||||
|
||||
`marvy-1-14B` is free to use, fine-tune, and redistribute under Apache-2.0.
|
||||
**If you use marvy-1-14B as a baseline, fine-tune it, distill from it, evaluate
|
||||
against it, or otherwise build on it, please credit MainStack** and link back to
|
||||
this model:
|
||||
|
||||
> Built on / evaluated against **marvy-1-14B** by **MainStack** —
|
||||
> https://huggingface.co/MainStack/marvy-1-14B
|
||||
|
||||
Concretely, we ask that derivatives and comparisons:
|
||||
|
||||
- keep the `NOTICE` file intact (this is **required** by Apache-2.0 §4),
|
||||
- name `MainStack/marvy-1-14B` in the model card, paper, or README, and
|
||||
- cite the entry below.
|
||||
|
||||
Per Apache-2.0, you must also continue to attribute the upstream base model
|
||||
(Qwen2.5-14B-Instruct) — see `NOTICE`.
|
||||
|
||||
## Citation
|
||||
|
||||
If you use marvy-1-14B (as a baseline, a starting point, or in evaluation),
|
||||
please cite:
|
||||
|
||||
```bibtex
|
||||
@software{marvy_1_14b_2026,
|
||||
title = {marvy-1-14B: An open fine-tuned model for the full ServiceNow delivery lifecycle},
|
||||
author = {MainStack},
|
||||
year = {2026},
|
||||
publisher = {Hugging Face},
|
||||
url = {https://huggingface.co/MainStack/marvy-1-14B},
|
||||
note = {Fine-tune of Qwen2.5-14B-Instruct},
|
||||
license = {Apache-2.0}
|
||||
}
|
||||
|
||||
@misc{qwen2.5,
|
||||
title = {Qwen2.5: A Party of Foundation Models},
|
||||
author = {Qwen Team},
|
||||
year = {2024},
|
||||
url = {https://qwenlm.github.io/blog/qwen2.5/}
|
||||
}
|
||||
```
|
||||
|
||||
```bibtex
|
||||
@software{marvy_14b_2026,
|
||||
title = {marvy-1-14B: A ServiceNow delivery lifecycle fine-tune of Qwen2.5-14B-Instruct},
|
||||
author = {MainStack},
|
||||
year = {2026},
|
||||
url = {https://huggingface.co/MainStack/marvy-1-14B},
|
||||
license= {Apache-2.0}
|
||||
}
|
||||
|
||||
@misc{qwen2.5,
|
||||
title = {Qwen2.5: A Party of Foundation Models},
|
||||
author = {Qwen Team},
|
||||
year = {2024},
|
||||
url = {https://qwenlm.github.io/blog/qwen2.5/}
|
||||
}
|
||||
```
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
- **Qwen team** at Alibaba Cloud for the Qwen2.5 family.
|
||||
- **Apple MLX team** for `mlx` and `mlx-lm`, enabling native Apple Silicon training.
|
||||
- **Hugging Face** for hosting and the surrounding ecosystem.
|
||||
191
USAGE.md
Normal file
191
USAGE.md
Normal file
@@ -0,0 +1,191 @@
|
||||
# Using marvy-1-14B
|
||||
|
||||
marvy-1-14B is a ServiceNow delivery specialist. This guide covers every common
|
||||
way to run it — cloud or fully local — plus how to wire it into OpenCode.
|
||||
|
||||
- [Choosing a format](#choosing-a-format)
|
||||
- [Recommended system prompt & settings](#recommended-system-prompt--settings)
|
||||
- [Transformers (PyTorch)](#transformers-pytorch)
|
||||
- [vLLM (OpenAI-compatible server)](#vllm-openai-compatible-server)
|
||||
- [MLX (Apple Silicon, native)](#mlx-apple-silicon-native)
|
||||
- [LM Studio (GUI + local server)](#lm-studio-gui--local-server)
|
||||
- [Ollama / llama.cpp (GGUF)](#ollama--llamacpp-gguf)
|
||||
- [LoRA adapter (apply on the base)](#lora-adapter-apply-on-the-base)
|
||||
- [Use marvy-1-14B in OpenCode](#use-marvy-14b-in-opencode)
|
||||
- [Prompt recipes per task](#prompt-recipes-per-task)
|
||||
|
||||
---
|
||||
|
||||
## Choosing a format
|
||||
|
||||
| You want… | Use | Repo |
|
||||
|---|---|---|
|
||||
| Max quality, GPU/server | Merged FP16 | `MainStack/marvy-1-14B` |
|
||||
| Apple Silicon, native speed | Merged (MLX) | `MainStack/marvy-1-14B` |
|
||||
| Laptop / CPU / Ollama / LM Studio | GGUF (Q4_K_M or Q8_0) | `MainStack/marvy-1-14B-GGUF` |
|
||||
| Smallest download, compose yourself | LoRA adapter (~175 MB) | `MainStack/marvy-1-14B-lora` |
|
||||
|
||||
---
|
||||
|
||||
## Recommended system prompt & settings
|
||||
|
||||
Always lead with the delivery-consultant system prompt — marvy was trained with it:
|
||||
|
||||
```
|
||||
You are a senior ServiceNow delivery consultant. You produce precise, implementation-grade
|
||||
artifacts: business analyses, requirements, solution design documents, user stories with
|
||||
acceptance criteria, test cases, and validation reviews. You favor out-of-the-box
|
||||
capabilities, cite concrete tables/plugins/sys_ids when relevant, and write in clear
|
||||
professional English.
|
||||
```
|
||||
|
||||
| Use case | temperature | top_p | max_tokens |
|
||||
|---|---|---|---|
|
||||
| Structured artifacts (SDD, stories, test cases) | 0.3 – 0.5 | 0.9 | 1024 – 4096 |
|
||||
| Exploratory brainstorming | 0.7 – 0.9 | 0.95 | 1024 |
|
||||
| Validation / critique | 0.2 – 0.4 | 0.9 | 1024 – 2048 |
|
||||
|
||||
---
|
||||
|
||||
## Transformers (PyTorch)
|
||||
|
||||
```python
|
||||
from transformers import AutoTokenizer, AutoModelForCausalLM
|
||||
|
||||
model_id = "MainStack/marvy-1-14B"
|
||||
tok = AutoTokenizer.from_pretrained(model_id)
|
||||
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="auto")
|
||||
|
||||
SYSTEM = "You are a senior ServiceNow delivery consultant. ..." # full prompt above
|
||||
messages = [
|
||||
{"role": "system", "content": SYSTEM},
|
||||
{"role": "user", "content": "Write a user story with acceptance criteria for P1 SLA escalation."},
|
||||
]
|
||||
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
|
||||
out = model.generate(inputs, max_new_tokens=1024, temperature=0.4, top_p=0.9)
|
||||
print(tok.decode(out[0][inputs.shape[-1]:], skip_special_tokens=True))
|
||||
```
|
||||
|
||||
## vLLM (OpenAI-compatible server)
|
||||
|
||||
```bash
|
||||
pip install vllm
|
||||
vllm serve MainStack/marvy-1-14B --served-model-name marvy-1-14B
|
||||
```
|
||||
|
||||
```bash
|
||||
curl -s http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
|
||||
"model": "marvy-1-14B", "temperature": 0.4,
|
||||
"messages": [
|
||||
{"role":"system","content":"You are a senior ServiceNow delivery consultant. ..."},
|
||||
{"role":"user","content":"Draft the Incident Management section of an SDD."}
|
||||
]}'
|
||||
```
|
||||
|
||||
## MLX (Apple Silicon, native)
|
||||
|
||||
```bash
|
||||
pip install mlx-lm
|
||||
|
||||
# one-off
|
||||
python -m mlx_lm generate --model MainStack/marvy-1-14B \
|
||||
--system-prompt "You are a senior ServiceNow delivery consultant. ..." \
|
||||
--prompt "Write test cases for a Major Incident workflow." --max-tokens 1024 --temp 0.4
|
||||
|
||||
# OpenAI-compatible server
|
||||
python -m mlx_lm server --model MainStack/marvy-1-14B --port 8080
|
||||
```
|
||||
|
||||
## LM Studio (GUI + local server)
|
||||
|
||||
1. **Install the model** — either search `MainStack/marvy-1-14B-GGUF` in the
|
||||
in-app model browser, or place a local copy under
|
||||
`~/.lmstudio/models/MainStack/marvy-1-14B/` (MLX or GGUF layout).
|
||||
2. **Load** it from the GUI, or:
|
||||
```bash
|
||||
lms load MainStack/marvy-1-14B
|
||||
lms server start # OpenAI-compatible on http://localhost:1234/v1
|
||||
```
|
||||
3. In the Chat tab, set the system prompt (above) and temperature ~0.4.
|
||||
|
||||
## Ollama / llama.cpp (GGUF)
|
||||
|
||||
```bash
|
||||
# Ollama — pull straight from the Hub
|
||||
ollama run hf.co/MainStack/marvy-1-14B-GGUF:Q4_K_M
|
||||
|
||||
# llama.cpp
|
||||
llama-cli -hf MainStack/marvy-1-14B-GGUF:Q4_K_M \
|
||||
-p "Write a user story with acceptance criteria for P1 SLA escalation." --temp 0.4
|
||||
```
|
||||
|
||||
| Quant | Size | Use when |
|
||||
|---|---|---|
|
||||
| `Q4_K_M` | ~9 GB | Default — best size/quality balance |
|
||||
| `Q8_0` | ~16 GB | Highest fidelity, near-FP16 |
|
||||
|
||||
## LoRA adapter (apply on the base)
|
||||
|
||||
```bash
|
||||
# MLX
|
||||
python -m mlx_lm generate --model Qwen/Qwen2.5-14B-Instruct \
|
||||
--adapter-path . --system-prompt "You are a senior ServiceNow delivery consultant. ..." \
|
||||
--prompt "Validate this requirement and list follow-up questions: ..." --max-tokens 1024
|
||||
```
|
||||
|
||||
```python
|
||||
# PEFT
|
||||
from peft import PeftModel
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
base = "Qwen/Qwen2.5-14B-Instruct"
|
||||
model = AutoModelForCausalLM.from_pretrained(base, torch_dtype="auto", device_map="auto")
|
||||
model = PeftModel.from_pretrained(model, "MainStack/marvy-1-14B-lora")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Use marvy-1-14B in OpenCode
|
||||
|
||||
marvy runs behind any OpenAI-compatible endpoint (LM Studio, mlx_lm server,
|
||||
vLLM). Register it as a custom provider in `opencode.json`.
|
||||
|
||||
1. **Start a local server** (LM Studio shown; adjust port for others):
|
||||
```bash
|
||||
lms load MainStack/marvy-1-14B && lms server start # http://localhost:1234/v1
|
||||
```
|
||||
2. **Add the provider** to your project `opencode.json` (or global
|
||||
`~/.config/opencode/opencode.json`):
|
||||
```jsonc
|
||||
{
|
||||
"provider": {
|
||||
"lmstudio": {
|
||||
"npm": "@ai-sdk/openai-compatible",
|
||||
"name": "LM Studio (local)",
|
||||
"options": { "baseURL": "http://localhost:1234/v1" },
|
||||
"models": {
|
||||
"marvy-1-14B": { "name": "marvy-1-14B (ServiceNow delivery)" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
3. **Select** `lmstudio/marvy-1-14B` in the OpenCode model picker.
|
||||
|
||||
> marvy-1-14B is a drafting specialist, not a tool-use/agentic fine-tune. It excels
|
||||
> at producing delivery artifacts inside chat; for MCP tool-calling agent loops,
|
||||
> keep a frontier model as the orchestrator and switch to marvy for drafting.
|
||||
|
||||
---
|
||||
|
||||
## Prompt recipes per task
|
||||
|
||||
| Task | Prompt skeleton |
|
||||
|---|---|
|
||||
| Business analysis | "Produce a Business Analysis for the following engagement: <context>. Cover organization, IT landscape, scope, and risks." |
|
||||
| Requirements | "Extract structured requirements (id, category, requirement, priority, target_phase, success_metric) from: <notes>." |
|
||||
| Stakeholders | "Build a stakeholder register (role, name, interest, influence, RACI) for: <context>." |
|
||||
| SDD section | "Write the <section> section of a Solution Design Document for a ServiceNow <module> implementation. Include design decisions and concrete tables/plugins." |
|
||||
| User story | "Write a ServiceNow user story with acceptance criteria for: <capability>." |
|
||||
| Implementation plan | "Given this story, describe the implementation: tables, plugins, configuration, records touched, manual follow-ups. Story: <story>." |
|
||||
| Test case | "Write a test case (pre-conditions, steps, expected results, pass/fail) for the story: <story>." |
|
||||
| Validation | "Validate this artifact against ServiceNow best practice and the SOW. List gaps, risks, and follow-up questions. Artifact: <artifact>." |
|
||||
138
VALIDATION.md
Normal file
138
VALIDATION.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# Validating marvy-1-14B
|
||||
|
||||
This guide gives you three independent ways to confirm the fine-tune actually
|
||||
learned the ServiceNow delivery style — from a 60-second smoke test to a
|
||||
quantitative base-vs-marvy comparison on a held-out, customer-disjoint test set.
|
||||
|
||||
> TL;DR: run `bash docs/validate.sh` (from the model repo) for the quick path,
|
||||
> or follow the manual steps below.
|
||||
|
||||
---
|
||||
|
||||
## What "working" means here
|
||||
|
||||
marvy-1-14B is a **specialist drafting model**. A successful fine-tune should show:
|
||||
|
||||
1. **Format fidelity** — it emits the delivery artifact shape on cue (user
|
||||
stories with acceptance criteria, SDD sections, test cases with
|
||||
pre-conditions/steps/expected results) without being told the structure.
|
||||
2. **Domain voice** — OOTB-first framing, ServiceNow tables/plugins, ITIL/CSDM
|
||||
vocabulary, `sys_id` citations where relevant.
|
||||
3. **Lower loss than the base** on held-out ServiceNow delivery text.
|
||||
|
||||
The base model (Qwen2.5-14B-Instruct) is a strong generalist and will produce
|
||||
*plausible* answers — the point of validation is to show marvy is **more
|
||||
on-format, more domain-specific, and lower-perplexity** on this task.
|
||||
|
||||
---
|
||||
|
||||
## Test 1 — 60-second smoke test (qualitative)
|
||||
|
||||
Prompt the model with a bare instruction and check it produces a correctly
|
||||
structured artifact with no format coaching.
|
||||
|
||||
### LM Studio (local)
|
||||
|
||||
```bash
|
||||
lms load MainStack/marvy-1-14B
|
||||
lms server start # OpenAI-compatible on http://localhost:1234/v1
|
||||
|
||||
curl -s http://localhost:1234/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"model": "marvy-1-14B",
|
||||
"temperature": 0.4,
|
||||
"messages": [
|
||||
{"role": "system", "content": "You are a senior ServiceNow delivery consultant. You produce precise, implementation-grade artifacts and favor out-of-the-box capabilities."},
|
||||
{"role": "user", "content": "Write a user story with acceptance criteria for auto-escalating P1 incidents that breach a 15-minute response SLA."}
|
||||
]
|
||||
}' | python3 -c "import sys,json;print(json.load(sys.stdin)['choices'][0]['message']['content'])"
|
||||
```
|
||||
|
||||
### MLX (Apple Silicon)
|
||||
|
||||
```bash
|
||||
python -m mlx_lm generate --model MainStack/marvy-1-14B \
|
||||
--system-prompt "You are a senior ServiceNow delivery consultant..." \
|
||||
--prompt "Write a user story with acceptance criteria for auto-escalating P1 incidents that breach a 15-minute response SLA." \
|
||||
--max-tokens 512 --temp 0.4
|
||||
```
|
||||
|
||||
### Pass criteria
|
||||
|
||||
- [ ] Output is a **user story** (`As a … I want … so that …`) followed by
|
||||
discrete, testable **acceptance criteria**.
|
||||
- [ ] References ServiceNow concretely (e.g. `incident`, SLA definitions,
|
||||
`sla_definition`, escalation/notification, assignment groups).
|
||||
- [ ] No meta-chatter ("Sure, here is…") dominating the answer; it reads like a
|
||||
backlog item, not a chatbot reply.
|
||||
|
||||
---
|
||||
|
||||
## Test 2 — Task-coverage probes (qualitative, one per skill)
|
||||
|
||||
Run each prompt with the recommended system prompt. Each should yield the
|
||||
artifact named, in the right shape.
|
||||
|
||||
| # | Prompt | Expect |
|
||||
|---|--------|--------|
|
||||
| 1 | "Draft the Incident Management section of an SDD for a greenfield ITSM implementation. Include assignment rules and SLA design." | SDD section: architecture/process, assignment rules (condition/action/order), SLA table |
|
||||
| 2 | "Extract structured requirements (id, category, priority, target phase, success metric) from: 'We need to replace email-based access requests with a catalog item routed for manager approval.'" | Tabular/structured requirements with priorities & metrics |
|
||||
| 3 | "Write a test case for the story: 'Restrict the Assignment Group field on incidents to groups with the itil role.'" | Test case: pre-conditions, steps, expected results, pass/fail |
|
||||
| 4 | "We are migrating CMDB to CSDM. Produce the foundation-data load sequence and the CI classes involved." | CSDM/CMDB sequence, classes (cmdb_ci_*), foundation order |
|
||||
| 5 | "Validate this requirement against best practice and list follow-up questions: 'All incidents must auto-close after 3 days.'" | Critique + concrete follow-up questions + risks |
|
||||
|
||||
### Pass criteria
|
||||
At least **4 of 5** produce the correct artifact type with ServiceNow-specific,
|
||||
implementation-grade content (not generic ITSM prose).
|
||||
|
||||
---
|
||||
|
||||
## Test 3 — Quantitative: base vs marvy on the held-out test set
|
||||
|
||||
This is the strongest signal. The test split is **customer-disjoint** — two
|
||||
customers that never appear in training or validation — so it measures
|
||||
generalization, not memorization.
|
||||
|
||||
### With the MLX training kit (in the source repo)
|
||||
|
||||
```bash
|
||||
cd training
|
||||
|
||||
# marvy (fine-tuned adapter on the base)
|
||||
python -m mlx_lm lora \
|
||||
--model mlx-community/Qwen2.5-14B-Instruct-4bit \
|
||||
--adapter-path train/adapters \
|
||||
--data train/data --test --test-batches 50
|
||||
# -> Test loss 2.573, Test ppl 13.107 (lower is better)
|
||||
|
||||
# base (no adapter) for comparison
|
||||
python -m mlx_lm lora \
|
||||
--model mlx-community/Qwen2.5-14B-Instruct-4bit \
|
||||
--data train/data --test --test-batches 50
|
||||
# -> expect a HIGHER loss/ppl than marvy
|
||||
```
|
||||
|
||||
### Pass criteria
|
||||
- [ ] marvy's **test perplexity is meaningfully lower** than the base on the
|
||||
same held-out split.
|
||||
- [ ] No data leakage: the test customers (`Customer-CHEM-01`,
|
||||
`Customer-FININST-01`) are absent from `train.jsonl` / `valid.jsonl`.
|
||||
|
||||
> Reference result for this release: **test loss 2.573 / ppl 13.107** on 50
|
||||
> batches of the project-disjoint test split (two sequences >2048 tokens are
|
||||
> truncated by the eval harness, so this is a slight upper bound).
|
||||
|
||||
---
|
||||
|
||||
## Interpreting results
|
||||
|
||||
| Symptom | Likely cause | Action |
|
||||
|---|---|---|
|
||||
| Generic ITSM prose, no ServiceNow specifics | wrong/short system prompt | use the full recommended system prompt; temp 0.3–0.5 |
|
||||
| Rambling, no artifact structure | temperature too high | lower to 0.3–0.4 |
|
||||
| Invents `sys_id`s / plugin IDs | expected limitation | verify against a real instance; never trust IDs blindly |
|
||||
| marvy ppl ≈ base ppl | adapter not applied / wrong checkpoint | confirm `--adapter-path` points at the trained adapter (iter-150) |
|
||||
|
||||
marvy-1-14B is a first-draft assistant. All output must be reviewed by a qualified
|
||||
ServiceNow consultant before client delivery or production configuration.
|
||||
54
chat_template.jinja
Normal file
54
chat_template.jinja
Normal file
@@ -0,0 +1,54 @@
|
||||
{%- if tools %}
|
||||
{{- '<|im_start|>system\n' }}
|
||||
{%- if messages[0]['role'] == 'system' %}
|
||||
{{- messages[0]['content'] }}
|
||||
{%- else %}
|
||||
{{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}
|
||||
{%- endif %}
|
||||
{{- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
|
||||
{%- for tool in tools %}
|
||||
{{- "\n" }}
|
||||
{{- tool | tojson }}
|
||||
{%- endfor %}
|
||||
{{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
|
||||
{%- else %}
|
||||
{%- if messages[0]['role'] == 'system' %}
|
||||
{{- '<|im_start|>system\n' + messages[0]['content'] + '<|im_end|>\n' }}
|
||||
{%- else %}
|
||||
{{- '<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n' }}
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
{%- for message in messages %}
|
||||
{%- if (message.role == "user") or (message.role == "system" and not loop.first) or (message.role == "assistant" and not message.tool_calls) %}
|
||||
{{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }}
|
||||
{%- elif message.role == "assistant" %}
|
||||
{{- '<|im_start|>' + message.role }}
|
||||
{%- if message.content %}
|
||||
{{- '\n' + message.content }}
|
||||
{%- endif %}
|
||||
{%- for tool_call in message.tool_calls %}
|
||||
{%- if tool_call.function is defined %}
|
||||
{%- set tool_call = tool_call.function %}
|
||||
{%- endif %}
|
||||
{{- '\n<tool_call>\n{"name": "' }}
|
||||
{{- tool_call.name }}
|
||||
{{- '", "arguments": ' }}
|
||||
{{- tool_call.arguments | tojson }}
|
||||
{{- '}\n</tool_call>' }}
|
||||
{%- endfor %}
|
||||
{{- '<|im_end|>\n' }}
|
||||
{%- elif message.role == "tool" %}
|
||||
{%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %}
|
||||
{{- '<|im_start|>user' }}
|
||||
{%- endif %}
|
||||
{{- '\n<tool_response>\n' }}
|
||||
{{- message.content }}
|
||||
{{- '\n</tool_response>' }}
|
||||
{%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
|
||||
{{- '<|im_end|>\n' }}
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
{%- if add_generation_prompt %}
|
||||
{{- '<|im_start|>assistant\n' }}
|
||||
{%- endif %}
|
||||
30
config.json
Normal file
30
config.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"architectures": [
|
||||
"Qwen2ForCausalLM"
|
||||
],
|
||||
"attention_dropout": 0.0,
|
||||
"bos_token_id": 151643,
|
||||
"eos_token_id": [
|
||||
151645,
|
||||
151643
|
||||
],
|
||||
"hidden_act": "silu",
|
||||
"hidden_size": 5120,
|
||||
"initializer_range": 0.02,
|
||||
"intermediate_size": 13824,
|
||||
"max_position_embeddings": 32768,
|
||||
"max_window_layers": 70,
|
||||
"model_type": "qwen2",
|
||||
"num_attention_heads": 40,
|
||||
"num_hidden_layers": 48,
|
||||
"num_key_value_heads": 8,
|
||||
"rms_norm_eps": 1e-06,
|
||||
"rope_theta": 1000000.0,
|
||||
"sliding_window": 131072,
|
||||
"tie_word_embeddings": false,
|
||||
"torch_dtype": "bfloat16",
|
||||
"transformers_version": "4.43.1",
|
||||
"use_cache": true,
|
||||
"use_sliding_window": false,
|
||||
"vocab_size": 152064
|
||||
}
|
||||
14
generation_config.json
Normal file
14
generation_config.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"bos_token_id": 151643,
|
||||
"pad_token_id": 151643,
|
||||
"do_sample": true,
|
||||
"eos_token_id": [
|
||||
151645,
|
||||
151643
|
||||
],
|
||||
"repetition_penalty": 1.05,
|
||||
"temperature": 0.7,
|
||||
"top_p": 0.8,
|
||||
"top_k": 20,
|
||||
"transformers_version": "4.37.0"
|
||||
}
|
||||
BIN
marvy_improvement.png
Normal file
BIN
marvy_improvement.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 56 KiB |
3
marvy_vs_base_ppl.png
Normal file
3
marvy_vs_base_ppl.png
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:64d0eec4d311d5db10138e4c2994269eaff4ada63b51571a6249369654435ca4
|
||||
size 104116
|
||||
3
model-00001-of-00006.safetensors
Normal file
3
model-00001-of-00006.safetensors
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c9f4f094712adb9411691fc9b47d2ba6488a426bd92cc9881c7e9a5e6e76cdbc
|
||||
size 5269326976
|
||||
3
model-00002-of-00006.safetensors
Normal file
3
model-00002-of-00006.safetensors
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:26d4a35ad7a246ee3469da5d6518eac04afde333c5dcef1d8d5e47dec8467c01
|
||||
size 5363828073
|
||||
3
model-00003-of-00006.safetensors
Normal file
3
model-00003-of-00006.safetensors
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bb1f0d357f4173ad7cf5e1b63ccf2c92212733a4f278eee807047ee5b63d457e
|
||||
size 5363828102
|
||||
3
model-00004-of-00006.safetensors
Normal file
3
model-00004-of-00006.safetensors
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:944e634f1c825e4706b285f808267e0891d8f918f14073b575fc790d5302f560
|
||||
size 5237963142
|
||||
3
model-00005-of-00006.safetensors
Normal file
3
model-00005-of-00006.safetensors
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:10a41b64fb4f2b0789260bda84cf7fac69f2241cd3d85418164be365a9626d8c
|
||||
size 5363828102
|
||||
3
model-00006-of-00006.safetensors
Normal file
3
model-00006-of-00006.safetensors
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:03e43f4ec3d8d36c1feab31069c77fffdaace3dc5a472369d1f0222dc2033ebb
|
||||
size 2941359481
|
||||
587
model.safetensors.index.json
Normal file
587
model.safetensors.index.json
Normal file
@@ -0,0 +1,587 @@
|
||||
{
|
||||
"metadata": {
|
||||
"total_size": 29540067328,
|
||||
"total_parameters": 14770033664
|
||||
},
|
||||
"weight_map": {
|
||||
"lm_head.weight": "model-00006-of-00006.safetensors",
|
||||
"model.embed_tokens.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.input_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.mlp.down_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.mlp.gate_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.mlp.up_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.post_attention_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.self_attn.k_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.self_attn.k_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.self_attn.o_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.self_attn.q_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.self_attn.q_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.self_attn.v_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.0.self_attn.v_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.input_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.mlp.down_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.mlp.gate_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.mlp.up_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.post_attention_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.self_attn.k_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.self_attn.k_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.self_attn.o_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.self_attn.q_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.self_attn.q_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.self_attn.v_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.1.self_attn.v_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.10.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.mlp.down_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.10.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.mlp.down_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.11.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.mlp.down_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.12.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.mlp.down_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.13.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.mlp.down_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.14.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.mlp.down_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.15.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.16.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.16.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.16.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.16.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.16.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.16.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.16.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.16.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.16.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.16.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.16.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.16.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.17.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.mlp.gate_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.17.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.mlp.gate_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.18.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.mlp.gate_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.19.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.2.input_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.mlp.down_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.mlp.gate_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.mlp.up_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.post_attention_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.self_attn.k_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.self_attn.k_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.self_attn.o_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.self_attn.q_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.self_attn.q_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.self_attn.v_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.2.self_attn.v_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.20.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.mlp.gate_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.20.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.mlp.gate_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.21.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.mlp.gate_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.22.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.mlp.gate_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.23.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.mlp.gate_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.24.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.input_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.mlp.down_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.mlp.gate_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.mlp.up_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.post_attention_layernorm.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.25.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.26.input_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.26.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.26.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.26.mlp.up_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.26.post_attention_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.26.self_attn.k_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.26.self_attn.k_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.26.self_attn.o_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.26.self_attn.q_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.26.self_attn.q_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.26.self_attn.v_proj.bias": "model-00003-of-00006.safetensors",
|
||||
"model.layers.26.self_attn.v_proj.weight": "model-00003-of-00006.safetensors",
|
||||
"model.layers.27.input_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.mlp.up_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.post_attention_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.self_attn.k_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.self_attn.k_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.self_attn.o_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.self_attn.q_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.self_attn.q_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.self_attn.v_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.27.self_attn.v_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.input_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.mlp.up_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.post_attention_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.self_attn.k_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.self_attn.k_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.self_attn.o_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.self_attn.q_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.self_attn.q_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.self_attn.v_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.28.self_attn.v_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.input_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.mlp.up_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.post_attention_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.self_attn.k_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.self_attn.k_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.self_attn.o_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.self_attn.q_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.self_attn.q_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.self_attn.v_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.29.self_attn.v_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.3.input_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.mlp.down_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.mlp.gate_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.mlp.up_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.post_attention_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.self_attn.k_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.self_attn.k_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.self_attn.o_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.self_attn.q_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.self_attn.q_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.self_attn.v_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.3.self_attn.v_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.30.input_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.mlp.up_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.post_attention_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.self_attn.k_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.self_attn.k_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.self_attn.o_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.self_attn.q_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.self_attn.q_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.self_attn.v_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.30.self_attn.v_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.input_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.mlp.up_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.post_attention_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.self_attn.k_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.self_attn.k_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.self_attn.o_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.self_attn.q_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.self_attn.q_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.self_attn.v_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.31.self_attn.v_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.input_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.mlp.up_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.post_attention_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.self_attn.k_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.self_attn.k_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.self_attn.o_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.self_attn.q_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.self_attn.q_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.self_attn.v_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.32.self_attn.v_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.input_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.mlp.up_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.post_attention_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.self_attn.k_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.self_attn.k_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.self_attn.o_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.self_attn.q_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.self_attn.q_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.self_attn.v_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.33.self_attn.v_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.input_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.mlp.up_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.post_attention_layernorm.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.self_attn.k_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.self_attn.k_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.self_attn.o_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.self_attn.q_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.self_attn.q_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.self_attn.v_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.34.self_attn.v_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.35.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.35.mlp.down_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.35.mlp.gate_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.35.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.35.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.35.self_attn.k_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.35.self_attn.k_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.35.self_attn.o_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.35.self_attn.q_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.35.self_attn.q_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.35.self_attn.v_proj.bias": "model-00004-of-00006.safetensors",
|
||||
"model.layers.35.self_attn.v_proj.weight": "model-00004-of-00006.safetensors",
|
||||
"model.layers.36.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.mlp.down_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.36.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.mlp.down_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.37.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.mlp.down_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.38.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.mlp.down_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.39.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.4.input_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.mlp.down_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.mlp.gate_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.mlp.up_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.post_attention_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.self_attn.k_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.self_attn.k_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.self_attn.o_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.self_attn.q_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.self_attn.q_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.self_attn.v_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.4.self_attn.v_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.40.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.mlp.down_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.40.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.mlp.down_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.41.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.mlp.down_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.42.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.mlp.down_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.43.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.input_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.mlp.down_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.mlp.up_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.post_attention_layernorm.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.44.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.45.input_layernorm.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.45.mlp.down_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.45.mlp.gate_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.45.mlp.up_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.45.post_attention_layernorm.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.45.self_attn.k_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.45.self_attn.k_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.45.self_attn.o_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.45.self_attn.q_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.45.self_attn.q_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.45.self_attn.v_proj.bias": "model-00005-of-00006.safetensors",
|
||||
"model.layers.45.self_attn.v_proj.weight": "model-00005-of-00006.safetensors",
|
||||
"model.layers.46.input_layernorm.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.mlp.down_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.mlp.gate_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.mlp.up_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.post_attention_layernorm.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.self_attn.k_proj.bias": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.self_attn.k_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.self_attn.o_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.self_attn.q_proj.bias": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.self_attn.q_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.self_attn.v_proj.bias": "model-00006-of-00006.safetensors",
|
||||
"model.layers.46.self_attn.v_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.input_layernorm.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.mlp.down_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.mlp.gate_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.mlp.up_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.post_attention_layernorm.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.self_attn.k_proj.bias": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.self_attn.k_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.self_attn.o_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.self_attn.q_proj.bias": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.self_attn.q_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.self_attn.v_proj.bias": "model-00006-of-00006.safetensors",
|
||||
"model.layers.47.self_attn.v_proj.weight": "model-00006-of-00006.safetensors",
|
||||
"model.layers.5.input_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.mlp.down_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.mlp.gate_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.mlp.up_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.post_attention_layernorm.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.self_attn.k_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.self_attn.k_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.self_attn.o_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.self_attn.q_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.self_attn.q_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.self_attn.v_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.5.self_attn.v_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.6.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.6.mlp.down_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.6.mlp.gate_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.6.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.6.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.6.self_attn.k_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.6.self_attn.k_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.6.self_attn.o_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.6.self_attn.q_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.6.self_attn.q_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.6.self_attn.v_proj.bias": "model-00001-of-00006.safetensors",
|
||||
"model.layers.6.self_attn.v_proj.weight": "model-00001-of-00006.safetensors",
|
||||
"model.layers.7.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.mlp.down_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.7.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.mlp.down_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.8.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.input_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.mlp.down_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.mlp.gate_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.mlp.up_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.post_attention_layernorm.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.self_attn.k_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.self_attn.k_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.self_attn.o_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.self_attn.q_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.self_attn.q_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.self_attn.v_proj.bias": "model-00002-of-00006.safetensors",
|
||||
"model.layers.9.self_attn.v_proj.weight": "model-00002-of-00006.safetensors",
|
||||
"model.norm.weight": "model-00006-of-00006.safetensors"
|
||||
}
|
||||
}
|
||||
3
tokenizer.json
Normal file
3
tokenizer.json
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3fd169731d2cbde95e10bf356d66d5997fd885dd8dbb6fb4684da3f23b2585d8
|
||||
size 11421892
|
||||
31
tokenizer_config.json
Normal file
31
tokenizer_config.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"add_prefix_space": false,
|
||||
"backend": "tokenizers",
|
||||
"bos_token": null,
|
||||
"clean_up_tokenization_spaces": false,
|
||||
"eos_token": "<|im_end|>",
|
||||
"errors": "replace",
|
||||
"extra_special_tokens": [
|
||||
"<|im_start|>",
|
||||
"<|im_end|>",
|
||||
"<|object_ref_start|>",
|
||||
"<|object_ref_end|>",
|
||||
"<|box_start|>",
|
||||
"<|box_end|>",
|
||||
"<|quad_start|>",
|
||||
"<|quad_end|>",
|
||||
"<|vision_start|>",
|
||||
"<|vision_end|>",
|
||||
"<|vision_pad|>",
|
||||
"<|image_pad|>",
|
||||
"<|video_pad|>"
|
||||
],
|
||||
"is_local": true,
|
||||
"local_files_only": false,
|
||||
"model_max_length": 131072,
|
||||
"pad_token": "<|endoftext|>",
|
||||
"split_special_tokens": false,
|
||||
"tokenizer_class": "Qwen2Tokenizer",
|
||||
"tool_parser_type": "json_tools",
|
||||
"unk_token": null
|
||||
}
|
||||
61
validate.sh
Normal file
61
validate.sh
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
# marvy-14B quick validation harness.
|
||||
#
|
||||
# Runs the task-coverage probes (Test 2 in VALIDATION.md) against any
|
||||
# OpenAI-compatible endpoint — LM Studio, mlx_lm server, vLLM, etc. — and prints
|
||||
# each artifact plus a lightweight heuristic PASS/FAIL on domain keywords.
|
||||
#
|
||||
# Usage:
|
||||
# bash validate.sh # defaults to LM Studio
|
||||
# BASE_URL=http://localhost:8080/v1 MODEL=marvy-14B bash validate.sh
|
||||
# API_KEY=xxx BASE_URL=https://... MODEL=MainStack/marvy-14B bash validate.sh
|
||||
set -uo pipefail
|
||||
|
||||
BASE_URL="${BASE_URL:-http://localhost:1234/v1}" # LM Studio default
|
||||
MODEL="${MODEL:-marvy-14B}"
|
||||
API_KEY="${API_KEY:-lm-studio}"
|
||||
TEMP="${TEMP:-0.4}"
|
||||
MAXTOK="${MAXTOK:-700}"
|
||||
|
||||
SYSTEM="You are a senior ServiceNow delivery consultant. You produce precise, implementation-grade artifacts: business analyses, requirements, solution design documents, user stories with acceptance criteria, test cases, and validation reviews. You favor out-of-the-box capabilities, cite concrete tables/plugins/sys_ids when relevant, and write in clear professional English."
|
||||
|
||||
# probe | expected-keyword-regex (case-insensitive) for a heuristic pass
|
||||
PROMPTS=(
|
||||
"Write a user story with acceptance criteria for auto-escalating P1 incidents that breach a 15-minute response SLA.|as a.*i want.*so that|acceptance|sla"
|
||||
"Draft the Incident Management section of an SDD for a greenfield ITSM implementation. Include assignment rules and SLA design.|assignment|sla|incident"
|
||||
"Extract structured requirements (id, category, priority, target phase, success metric) from: replace email-based access requests with a catalog item routed for manager approval.|priority|requirement|catalog"
|
||||
"Write a test case for the story: Restrict the Assignment Group field on incidents to groups with the itil role.|pre-condition|step|expected|itil"
|
||||
"Validate this requirement against best practice and list follow-up questions: All incidents must auto-close after 3 days.|follow-up|risk|question"
|
||||
)
|
||||
|
||||
command -v jq >/dev/null 2>&1 || { echo "ERROR: jq is required (brew install jq)"; exit 1; }
|
||||
|
||||
echo "Endpoint: $BASE_URL Model: $MODEL Temp: $TEMP"
|
||||
echo "============================================================"
|
||||
pass=0; total=0
|
||||
for entry in "${PROMPTS[@]}"; do
|
||||
total=$((total+1))
|
||||
prompt="${entry%%|*}"
|
||||
rest="${entry#*|}"; regex="$rest"
|
||||
payload=$(jq -n --arg m "$MODEL" --arg s "$SYSTEM" --arg p "$prompt" \
|
||||
--argjson t "$TEMP" --argjson mx "$MAXTOK" \
|
||||
'{model:$m,temperature:$t,max_tokens:$mx,messages:[{role:"system",content:$s},{role:"user",content:$p}]}')
|
||||
resp=$(curl -s "$BASE_URL/chat/completions" -H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer $API_KEY" -d "$payload")
|
||||
content=$(echo "$resp" | jq -r '.choices[0].message.content // .error.message // "<<no response>>"')
|
||||
echo ""
|
||||
echo "### Probe $total: $prompt"
|
||||
echo "------------------------------------------------------------"
|
||||
echo "$content" | head -40
|
||||
if echo "$content" | grep -iqE "$regex"; then
|
||||
echo ">>> heuristic: PASS"
|
||||
pass=$((pass+1))
|
||||
else
|
||||
echo ">>> heuristic: REVIEW (expected pattern not matched: $regex)"
|
||||
fi
|
||||
echo "============================================================"
|
||||
done
|
||||
echo ""
|
||||
echo "Heuristic result: $pass/$total probes matched domain patterns."
|
||||
echo "Pass threshold: >= 4/5 with implementation-grade, ServiceNow-specific content."
|
||||
echo "Note: heuristics are a sanity check — read the outputs to judge true quality."
|
||||
Reference in New Issue
Block a user