lucianotonet commited on
Commit
cf514d7
1 Parent(s): 65ac247

Adiciona suporte a multimídia e atualiza dependências

Browse files

Implementa processamento de entradas de imagem e vídeo no modelo, permitindo inferências mais robustas. A substituição do modelo por Qwen2VL resulta em maior eficácia no processamento. A inclusão de um arquivo .gitignore ajuda a evitar o versionamento de arquivos de ambiente. Além disso, a atualização da versão da biblioteca transformers assegura a compatibilidade com as novas funcionalidades.

Files changed (3) hide show
  1. .gitignore +1 -0
  2. app.py +15 -4
  3. requirements.txt +3 -2
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ .venv
app.py CHANGED
@@ -1,17 +1,28 @@
1
  from fastapi import FastAPI
2
- from transformers import AutoModelForCausalLM, AutoProcessor
 
3
  import torch
4
 
5
  app = FastAPI()
6
 
7
- model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-VL-2B-Instruct", torch_dtype="auto", device_map="auto")
8
  processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-2B-Instruct")
9
 
10
  @app.post("/predict")
11
  async def predict(messages: list):
12
  # Processamento e inferência
13
  text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
14
- inputs = processor(text=[text], padding=True, return_tensors="pt").to("cpu") # Altere para "cpu" se não tiver GPU
 
 
 
 
 
 
 
 
 
15
  generated_ids = model.generate(**inputs, max_new_tokens=128)
16
- output_text = processor.batch_decode(generated_ids, skip_special_tokens=True)
 
17
  return {"response": output_text}
 
1
  from fastapi import FastAPI
2
+ from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
3
+ from qwen_vl_utils import process_vision_info
4
  import torch
5
 
6
  app = FastAPI()
7
 
8
+ model = Qwen2VLForConditionalGeneration.from_pretrained("Qwen/Qwen2-VL-2B-Instruct", torch_dtype="auto", device_map="auto")
9
  processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-2B-Instruct")
10
 
11
  @app.post("/predict")
12
  async def predict(messages: list):
13
  # Processamento e inferência
14
  text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
15
+ image_inputs, video_inputs = process_vision_info(messages)
16
+ inputs = processor(
17
+ text=[text],
18
+ images=image_inputs,
19
+ videos=video_inputs,
20
+ padding=True,
21
+ return_tensors="pt"
22
+ )
23
+ inputs = inputs.to("cpu") # Altere para "cuda" se tiver GPU disponível
24
+
25
  generated_ids = model.generate(**inputs, max_new_tokens=128)
26
+ generated_ids_trimmed = [out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)]
27
+ output_text = processor.batch_decode(generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False)
28
  return {"response": output_text}
requirements.txt CHANGED
@@ -1,6 +1,7 @@
1
- transformers
2
  accelerate
3
  safetensors
4
  sentencepiece
5
  fastapi
6
- uvicorn
 
 
1
+ transformers>=4.37.0
2
  accelerate
3
  safetensors
4
  sentencepiece
5
  fastapi
6
+ uvicorn
7
+ qwen-vl-utils