初始化项目,由ModelHub XC社区提供模型

Model: tommy1235/cvx-coder
Source: Original Platform
This commit is contained in:
ModelHub XC
2026-09-27 11:30:14 +08:00
commit c2e8198d17
16 changed files with 95947 additions and 0 deletions

143
ms_wrapper.py Normal file
View File

@@ -0,0 +1,143 @@
import os
import torch
from typing import Union, Dict, Any
from modelscope.pipelines.builder import PIPELINES
from modelscope.models.builder import MODELS
from modelscope.utils.constant import Tasks
from modelscope.pipelines.base import Pipeline
from modelscope.outputs import OutputKeys
from modelscope.pipelines.nlp.text_generation_pipeline import TextGenerationPipeline
from modelscope.models.base import Model, TorchModel
from modelscope.utils.logger import get_logger
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
from transformers.generation.utils import GenerationConfig
import torch
from modelscope.models.base import TorchModel
from modelscope.preprocessors.base import Preprocessor
from modelscope.pipelines.base import Model, Pipeline
from modelscope.utils.config import Config
from modelscope.pipelines.builder import PIPELINES
from modelscope.preprocessors.builder import PREPROCESSORS
from modelscope.models.builder import MODELS
# m_path="你的路径/cvx-coder"
# model = AutoModelForCausalLM.from_pretrained(
# m_path,
# device_map="cuda",
# torch_dtype="auto",
# trust_remote_code=True,
# )
# tokenizer = AutoTokenizer.from_pretrained(m_path)
# pipe = pipeline(
# "text-generation",
# model=model,
# tokenizer=tokenizer,
# )
# generation_args = {
# "max_new_tokens": 2000,
# "return_full_text": False,
# "temperature": 0,
# "do_sample": False,
# }
# content='''my problem is not convex, can i use cvx? if not, what should i do, be specific.'''
# messages = [
# {"role": "user", "content": content},
# ]
# output = pipe(messages, **generation_args)
# print(output[0]['generated_text'])
@PIPELINES.register_module('text-generation', module_name='cvx-coder-pipe')
class Baichuan7BTextGenerationPipeline(TextGenerationPipeline):
def __init__(
self,
model: Union[Model, str],
*args,
**kwargs):
self.model = Baichuan7BTextGeneration(model) if isinstance(model, str) else model
super().__init__(model=model, **kwargs)
def preprocess(self, inputs, **preprocess_params) -> Dict[str, Any]:
return inputs
def _sanitize_parameters(self, **pipeline_parameters):
return {},pipeline_parameters,{}
# define the forward pass
def forward(self, inputs: str, **forward_params) -> Dict[str, Any]:
output = {}
content=inputs
messages = [
{"role": "user", "content": content},
]
outputs = self.model.pipeline(messages, **self.model.generation_args)
output['text'] = outputs[0]['generated_text']
return output
# format the outputs from pipeline
def postprocess(self, input, **kwargs) -> Dict[str, Any]:
return input
@MODELS.register_module('text-generation', module_name='cvx-coder')
class Baichuan7BTextGeneration(TorchModel):
def __init__(self, model_dir=None, *args, **kwargs):
super().__init__(model_dir, *args, **kwargs)
self.logger = get_logger()
# loading tokenizer
self.tokenizer = AutoTokenizer.from_pretrained(model_dir)
self.model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", torch_dtype="auto", trust_remote_code=True)
# self.model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto",trust_remote_code=True)
self.model.generation_config = GenerationConfig.from_pretrained(model_dir)
self.model = self.model.eval()
from transformers import pipeline
self.pipeline=pipeline("text-generation",model=self.model,tokenizer=self.tokenizer,)
self.generation_args= {"max_new_tokens": 2000, "return_full_text": False,"temperature": 0, "do_sample": False,}
def forward(self, input: str, *args, **kwargs) -> Dict[str, Any]:
content = input
messages = [
{"role": "user", "content": content},
]
outputs = self.model.pipeline(messages, **self.model.generation_args)
response = outputs[0]['generated_text']
return {OutputKeys.RESPONSE:response, OutputKeys.HISTORY: ""}
def quantize(self, bits: int):
self.model = self.model.quantize(bits)
return self
def infer(self, input, **kwargs):
content = input
messages = [
{"role": "user", "content": content},
]
outputs = self.pipeline(messages, **self.model.generation_args)
response = outputs[0]['generated_text']
return response
# Tips: usr_config_path is the temporary save configuration location, after upload modelscope hub, it is the model_id
# usr_config_path = '/mnt/workspace/cvx-coder3'
usr_config_path = './'
config = Config({
"framework": 'pytorch',
"task": 'text-generation',
"model": {'type': 'cvx-coder'},
"pipeline": {"type": "cvx-coder-pipe"},
"allow_remote": True
})
config.dump('./'+ 'configuration.json')
if __name__ == "__main__":
from modelscope.models import Model
from modelscope.pipelines import pipeline
# model = Model.from_pretrained(usr_config_path)
input = "Hello, ModelScope!"
inference = pipeline('text-generation', model=usr_config_path)
output = inference(input)
print(output)