import logging from http import HTTPStatus import time import dashscope class QwenDashscopeVLModel(object): def __init__(self, model, api_key): self.model = model dashscope.api_key = api_key.strip() or os.getenv('DASHSCOPE_API_KEY', default='') assert dashscope.api_key, 'DASHSCOPE_API_KEY is required.' def generate(self, prompt, stop_words=[]): if isinstance(prompt, str): prompt = [{'text': prompt}] MAX_TRY = 3 count = 0 while count < MAX_TRY: response = dashscope.MultiModalConversation.call( self.model, messages=[{'role': 'user', 'content': prompt}], top_p=0.01, top_k=1, ) if response.status_code == HTTPStatus.OK: output = response.output.choices[0].message.content[0]['text'] for stop_str in stop_words: idx = output.find(stop_str) if idx != -1: output = output[: idx + len(stop_str)] return output else: err = 'Error code: %s, error message: %s' % ( response.code, response.message, ) logging.error(err) count += 1 time.sleep(1)