| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from fastapi import APIRouter, Body
- from pydantic import BaseModel
- from starlette.requests import Request
- from modelscope.utils.input_output import \
- pipeline_output_to_service_base64_output # noqa E125
- from modelscope.utils.input_output import call_pipeline_with_json
- router = APIRouter()
- @router.post('/call')
- async def inference(
- request: Request,
- body: BaseModel = Body(examples=[{
- 'usage': 'copy body from describe'
- }])): # noqa E125
- """Inference general interface.
- For image, video, audio etc binary data, need encoded with base64.
- Args:
- request (Request): The request object.
- request_info (ModelScopeRequest): The post body.
- Returns:
- ApiResponse: For binary field, encoded with base64
- """
- pipeline_service = request.app.state.pipeline
- pipeline_info = request.app.state.pipeline_info
- request_json = await request.json()
- result = call_pipeline_with_json(pipeline_info, pipeline_service,
- request_json)
- # convert output to json, if binary field, we need encoded.
- output = pipeline_output_to_service_base64_output(
- pipeline_info['task_name'], result)
- return output
- @router.get('/describe')
- async def describe(request: Request):
- info = {}
- info['schema'] = request.app.state.pipeline_info
- info['sample'] = request.app.state.pipeline_sample
- return info
|