123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- from pydantic import BaseModel, field_validator, model_validator, Field
- from typing import List, Optional, Generic, TypeVar
- from fastapi import FastAPI
- import uvicorn
- import logging
- from qwenvl import model
- from qwenvl import processor
- from qwen_vl_utils import process_vision_info
- logger = logging.getLogger()
- logger.setLevel(logging.INFO)
- handler1 = logging.StreamHandler()
- handler2 = logging.FileHandler(filename='../log/llmserver.log')
- formatter = logging.Formatter(
- "%(asctime)s - %(module)s - %(funcName)s - line:%(lineno)d - %(levelname)s - %(message)s"
- )
- handler1.setFormatter(formatter)
- handler2.setFormatter(formatter)
- logger.addHandler(handler1)
- logger.addHandler(handler2)
- 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)
-
-
- if "yes" in output_text[0].lower():
- response["data"]["illegal"] = 1
- return response
- if __name__ == "__main__":
- uvicorn.run('server:app', host="0.0.0.0", port=18000)
|