|
@@ -0,0 +1,77 @@
|
|
|
+from pydantic import BaseModel, field_validator, model_validator, Field
|
|
|
+from typing import List, Optional, Generic, TypeVar
|
|
|
+from fastapi import FastAPI
|
|
|
+import uvicorn
|
|
|
+
|
|
|
+from qwenvl import model
|
|
|
+from qwenvl import processor
|
|
|
+from qwen_vl_utils import process_vision_info
|
|
|
+
|
|
|
+app = FastAPI()
|
|
|
+
|
|
|
+T = TypeVar("T")
|
|
|
+
|
|
|
+class APIRequest(BaseModel):
|
|
|
+ imageData : str
|
|
|
+ text : str
|
|
|
+
|
|
|
+class APIResponse(BaseModel, Generic[T]):
|
|
|
+ success: bool
|
|
|
+ data: Optional[List[T]]
|
|
|
+ msg: Optional[List[str]]
|
|
|
+
|
|
|
+@app.post("/llm/detect")
|
|
|
+@app.post("/llm/detect/")
|
|
|
+async def detect(item: APIRequest):
|
|
|
+
|
|
|
+
|
|
|
+ response = {
|
|
|
+ "sucess": "OK",
|
|
|
+ "data": {"illegal" : 0},
|
|
|
+ "msg": ""
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ prompt_text = item.text
|
|
|
+ base64_image = item.imageData
|
|
|
+ messages = [
|
|
|
+ {
|
|
|
+ "role": "user",
|
|
|
+ "content": [
|
|
|
+ {
|
|
|
+ "type": "image",
|
|
|
+ "image": f"data:image;base64,{base64_image}",
|
|
|
+ },
|
|
|
+ {"type": "text", "text": prompt_text},
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ text = processor.apply_chat_template(
|
|
|
+ messages, tokenize=False, add_generation_prompt=True
|
|
|
+ )
|
|
|
+ image_inputs, video_inputs = process_vision_info(messages)
|
|
|
+ inputs = processor(
|
|
|
+ text=[text],
|
|
|
+ images=image_inputs,
|
|
|
+ videos=video_inputs,
|
|
|
+ padding=True,
|
|
|
+ return_tensors="pt",
|
|
|
+ )
|
|
|
+ inputs = inputs.to("cuda")
|
|
|
+
|
|
|
+
|
|
|
+ generated_ids = model.generate(**inputs, max_new_tokens=128)
|
|
|
+ generated_ids_trimmed = [
|
|
|
+ out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
|
|
|
+ ]
|
|
|
+ output_text = processor.batch_decode(
|
|
|
+ generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
|
|
|
+ )
|
|
|
+ print(output_text)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return response
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ uvicorn.run('server:app', host="0.0.0.0", port=18000)
|