From a11302b2f3969a311d4f2aa46d03b900f40cf778 Mon Sep 17 00:00:00 2001 From: Rick Staa Date: Tue, 28 Jan 2025 00:53:55 +0100 Subject: [PATCH] refactor(runner): update LLM 'tokens_used' to usage (#402) This commit updates the `tokens_used` field in the LLM API spec with `usage` to make it more compatible with the OpenAI spec. --- gateway.openapi.yaml | 1246 +++++++++++++++++++++++++++++++ openapi.yaml | 1390 +++++++++++++++++++++++++++++++++++ runner/app/pipelines/llm.py | 4 +- runner/app/routes/llm.py | 2 +- runner/app/routes/utils.py | 2 +- runner/gateway.openapi.yaml | 4 +- runner/openapi.yaml | 4 +- worker/runner.gen.go | 176 ++--- 8 files changed, 2732 insertions(+), 96 deletions(-) create mode 100644 gateway.openapi.yaml create mode 100644 openapi.yaml diff --git a/gateway.openapi.yaml b/gateway.openapi.yaml new file mode 100644 index 00000000..77ab9abf --- /dev/null +++ b/gateway.openapi.yaml @@ -0,0 +1,1246 @@ +# !!Auto-generated by 'gen_openapi.py'. DO NOT EDIT!! +openapi: 3.1.0 +info: + title: Livepeer AI Runner + description: An application to run AI pipelines + version: 0.0.0 +servers: +- url: https://dream-gateway.livepeer.cloud + description: Livepeer Cloud Community Gateway +- url: https://livepeer.studio/api/beta/generate + description: Livepeer Studio Gateway +paths: + /text-to-image: + post: + tags: + - generate + summary: Text To Image + description: Generate images from text prompts. + operationId: genTextToImage + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TextToImageParams' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ImageResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: textToImage + /image-to-image: + post: + tags: + - generate + summary: Image To Image + description: Apply image transformations to a provided image. + operationId: genImageToImage + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genImageToImage' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ImageResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: imageToImage + /image-to-video: + post: + tags: + - generate + summary: Image To Video + description: Generate a video from a provided image. + operationId: genImageToVideo + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genImageToVideo' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/VideoResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: imageToVideo + /upscale: + post: + tags: + - generate + summary: Upscale + description: Upscale an image by increasing its resolution. + operationId: genUpscale + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genUpscale' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ImageResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: upscale + /audio-to-text: + post: + tags: + - generate + summary: Audio To Text + description: Transcribe audio files to text. + operationId: genAudioToText + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genAudioToText' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/TextResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '413': + description: Request Entity Too Large + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '415': + description: Unsupported Media Type + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: audioToText + /segment-anything-2: + post: + tags: + - generate + summary: Segment Anything 2 + description: Segment objects in an image. + operationId: genSegmentAnything2 + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genSegmentAnything2' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/MasksResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: segmentAnything2 + /llm: + post: + tags: + - generate + summary: LLM + description: Generate text using a language model. + operationId: genLLM + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LLMRequest' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/LLMResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: llm + /image-to-text: + post: + tags: + - generate + summary: Image To Text + description: Transform image files to text. + operationId: genImageToText + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genImageToText' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ImageToTextResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '413': + description: Request Entity Too Large + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: imageToText + /live-video-to-video: + post: + tags: + - generate + summary: Live Video To Video + description: Apply transformations to a live video streamed to the returned + endpoints. + operationId: genLiveVideoToVideo + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LiveVideoToVideoParams' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/LiveVideoToVideoResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: liveVideoToVideo + /text-to-speech: + post: + tags: + - generate + summary: Text To Speech + description: Generate a text-to-speech audio file based on the provided text + input and speaker description. + operationId: genTextToSpeech + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TextToSpeechParams' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/AudioResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: textToSpeech +components: + schemas: + APIError: + properties: + msg: + type: string + title: Msg + description: The error message. + type: object + required: + - msg + title: APIError + description: API error response model. + AudioResponse: + properties: + audio: + allOf: + - $ref: '#/components/schemas/MediaURL' + description: The generated audio. + type: object + required: + - audio + title: AudioResponse + description: Response model for audio generation. + Body_genAudioToText: + properties: + audio: + type: string + format: binary + title: Audio + description: Uploaded audio file to be transcribed. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for transcription. + default: '' + return_timestamps: + type: string + title: Return Timestamps + description: 'Return timestamps for the transcribed text. Supported values: + ''sentence'', ''word'', or a string boolean (''true'' or ''false''). Default + is ''true'' (''sentence''). ''false'' means no timestamps. ''word'' means + word-based timestamps.' + default: 'true' + type: object + required: + - audio + - model_id + title: Body_genAudioToText + Body_genImageToImage: + properties: + prompt: + type: string + title: Prompt + description: Text prompt(s) to guide image generation. + image: + type: string + format: binary + title: Image + description: Uploaded image to modify with the pipeline. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for image generation. + default: '' + loras: + type: string + title: Loras + description: 'A LoRA (Low-Rank Adaptation) model and its corresponding weight + for image generation. Example: { "latent-consistency/lcm-lora-sdxl": 1.0, + "nerijs/pixel-art-xl": 1.2}.' + default: '' + strength: + type: number + title: Strength + description: Degree of transformation applied to the reference image (0 + to 1). + default: 0.8 + guidance_scale: + type: number + title: Guidance Scale + description: Encourages model to generate images closely linked to the text + prompt (higher values may reduce image quality). + default: 7.5 + image_guidance_scale: + type: number + title: Image Guidance Scale + description: Degree to which the generated image is pushed towards the initial + image. + default: 1.5 + negative_prompt: + type: string + title: Negative Prompt + description: Text prompt(s) to guide what to exclude from image generation. + Ignored if guidance_scale < 1. + default: '' + safety_check: + type: boolean + title: Safety Check + description: Perform a safety check to estimate if generated images could + be offensive or harmful. + default: true + seed: + type: integer + title: Seed + description: Seed for random number generation. + num_inference_steps: + type: integer + title: Num Inference Steps + description: Number of denoising steps. More steps usually lead to higher + quality images but slower inference. Modulated by strength. + default: 100 + num_images_per_prompt: + type: integer + title: Num Images Per Prompt + description: Number of images to generate per prompt. + default: 1 + type: object + required: + - prompt + - image + - model_id + title: Body_genImageToImage + Body_genImageToText: + properties: + image: + type: string + format: binary + title: Image + description: Uploaded image to transform with the pipeline. + prompt: + type: string + title: Prompt + description: Text prompt(s) to guide transformation. + default: '' + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for transformation. + default: '' + type: object + required: + - image + - model_id + title: Body_genImageToText + Body_genImageToVideo: + properties: + image: + type: string + format: binary + title: Image + description: Uploaded image to generate a video from. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for video generation. + default: '' + height: + type: integer + title: Height + description: The height in pixels of the generated video. + default: 576 + width: + type: integer + title: Width + description: The width in pixels of the generated video. + default: 1024 + fps: + type: integer + title: Fps + description: The frames per second of the generated video. + default: 6 + motion_bucket_id: + type: integer + title: Motion Bucket Id + description: Used for conditioning the amount of motion for the generation. + The higher the number the more motion will be in the video. + default: 127 + noise_aug_strength: + type: number + title: Noise Aug Strength + description: Amount of noise added to the conditioning image. Higher values + reduce resemblance to the conditioning image and increase motion. + default: 0.02 + safety_check: + type: boolean + title: Safety Check + description: Perform a safety check to estimate if generated images could + be offensive or harmful. + default: true + seed: + type: integer + title: Seed + description: Seed for random number generation. + num_inference_steps: + type: integer + title: Num Inference Steps + description: Number of denoising steps. More steps usually lead to higher + quality images but slower inference. Modulated by strength. + default: 25 + type: object + required: + - image + - model_id + title: Body_genImageToVideo + Body_genSegmentAnything2: + properties: + image: + type: string + format: binary + title: Image + description: Image to segment. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for image generation. + default: '' + point_coords: + type: string + title: Point Coords + description: Nx2 array of point prompts to the model, where each point is + in (X,Y) in pixels. + point_labels: + type: string + title: Point Labels + description: Labels for the point prompts, where 1 indicates a foreground + point and 0 indicates a background point. + box: + type: string + title: Box + description: A length 4 array given as a box prompt to the model, in XYXY + format. + mask_input: + type: string + title: Mask Input + description: A low-resolution mask input to the model, typically from a + previous prediction iteration, with the form 1xHxW (H=W=256 for SAM). + multimask_output: + type: boolean + title: Multimask Output + description: If true, the model will return three masks for ambiguous input + prompts, often producing better masks than a single prediction. + default: true + return_logits: + type: boolean + title: Return Logits + description: If true, returns un-thresholded mask logits instead of a binary + mask. + default: true + normalize_coords: + type: boolean + title: Normalize Coords + description: If true, the point coordinates will be normalized to the range + [0,1], with point_coords expected to be with respect to image dimensions. + default: true + type: object + required: + - image + - model_id + title: Body_genSegmentAnything2 + Body_genUpscale: + properties: + prompt: + type: string + title: Prompt + description: Text prompt(s) to guide upscaled image generation. + image: + type: string + format: binary + title: Image + description: Uploaded image to modify with the pipeline. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for upscaled image generation. + default: '' + safety_check: + type: boolean + title: Safety Check + description: Perform a safety check to estimate if generated images could + be offensive or harmful. + default: true + seed: + type: integer + title: Seed + description: Seed for random number generation. + num_inference_steps: + type: integer + title: Num Inference Steps + description: Number of denoising steps. More steps usually lead to higher + quality images but slower inference. Modulated by strength. + default: 75 + type: object + required: + - prompt + - image + - model_id + title: Body_genUpscale + Chunk: + properties: + timestamp: + items: {} + type: array + title: Timestamp + description: The timestamp of the chunk. + text: + type: string + title: Text + description: The text of the chunk. + type: object + required: + - timestamp + - text + title: Chunk + description: A chunk of text with a timestamp. + HTTPError: + properties: + detail: + allOf: + - $ref: '#/components/schemas/APIError' + description: Detailed error information. + type: object + required: + - detail + title: HTTPError + description: HTTP error response model. + HTTPValidationError: + properties: + detail: + items: + $ref: '#/components/schemas/ValidationError' + type: array + title: Detail + type: object + title: HTTPValidationError + ImageResponse: + properties: + images: + items: + $ref: '#/components/schemas/Media' + type: array + title: Images + description: The generated images. + type: object + required: + - images + title: ImageResponse + description: Response model for image generation. + ImageToTextResponse: + properties: + text: + type: string + title: Text + description: The generated text. + type: object + required: + - text + title: ImageToTextResponse + description: Response model for text generation. + LLMChoice: + properties: + index: + type: integer + title: Index + finish_reason: + type: string + title: Finish Reason + default: '' + delta: + allOf: + - $ref: '#/components/schemas/LLMMessage' + message: + allOf: + - $ref: '#/components/schemas/LLMMessage' + type: object + required: + - index + title: LLMChoice + LLMMessage: + properties: + role: + type: string + title: Role + content: + type: string + title: Content + type: object + required: + - role + - content + title: LLMMessage + LLMRequest: + properties: + messages: + items: + $ref: '#/components/schemas/LLMMessage' + type: array + title: Messages + model: + type: string + title: Model + default: '' + temperature: + type: number + title: Temperature + default: 0.7 + max_tokens: + type: integer + title: Max Tokens + default: 256 + top_p: + type: number + title: Top P + default: 1.0 + top_k: + type: integer + title: Top K + default: -1 + stream: + type: boolean + title: Stream + default: false + type: object + required: + - messages + title: LLMRequest + LLMResponse: + properties: + id: + type: string + title: Id + model: + type: string + title: Model + created: + type: integer + title: Created + usage: + $ref: '#/components/schemas/LLMTokenUsage' + choices: + items: + $ref: '#/components/schemas/LLMChoice' + type: array + title: Choices + type: object + required: + - id + - model + - created + - usage + - choices + title: LLMResponse + LLMTokenUsage: + properties: + prompt_tokens: + type: integer + title: Prompt Tokens + completion_tokens: + type: integer + title: Completion Tokens + total_tokens: + type: integer + title: Total Tokens + type: object + required: + - prompt_tokens + - completion_tokens + - total_tokens + title: LLMTokenUsage + LiveVideoToVideoParams: + properties: + subscribe_url: + type: string + title: Subscribe Url + description: Source URL of the incoming stream to subscribe to. + publish_url: + type: string + title: Publish Url + description: Destination URL of the outgoing stream to publish. + control_url: + type: string + title: Control Url + description: URL for subscribing via Trickle protocol for updates in the + live video-to-video generation params. + default: '' + events_url: + type: string + title: Events Url + description: URL for publishing events via Trickle protocol for pipeline + status and logs. + default: '' + model_id: + type: string + title: Model Id + description: Name of the pipeline to run in the live video to video job. + Notice that this is named model_id for consistency with other routes, + but it does not refer to a Hugging Face model ID. The exact model(s) depends + on the pipeline implementation and might be configurable via the `params` + argument. + default: '' + params: + type: object + title: Params + description: Initial parameters for the pipeline. + default: {} + type: object + required: + - subscribe_url + - publish_url + - model_id + title: LiveVideoToVideoParams + LiveVideoToVideoResponse: + properties: + subscribe_url: + type: string + title: Subscribe Url + description: Source URL of the incoming stream to subscribe to + publish_url: + type: string + title: Publish Url + description: Destination URL of the outgoing stream to publish to + control_url: + type: string + title: Control Url + description: URL for updating the live video-to-video generation + default: '' + events_url: + type: string + title: Events Url + description: URL for subscribing to events for pipeline status and logs + default: '' + type: object + required: + - subscribe_url + - publish_url + title: LiveVideoToVideoResponse + description: Response model for live video-to-video generation. + MasksResponse: + properties: + masks: + type: string + title: Masks + description: The generated masks. + scores: + type: string + title: Scores + description: The model's confidence scores for each generated mask. + logits: + type: string + title: Logits + description: The raw, unnormalized predictions (logits) for the masks. + type: object + required: + - masks + - scores + - logits + title: MasksResponse + description: Response model for object segmentation. + Media: + properties: + url: + type: string + title: Url + description: The URL where the media can be accessed. + seed: + type: integer + title: Seed + description: The seed used to generate the media. + nsfw: + type: boolean + title: Nsfw + description: Whether the media was flagged as NSFW. + type: object + required: + - url + - seed + - nsfw + title: Media + description: A media object containing information about the generated media. + MediaURL: + properties: + url: + type: string + title: Url + description: The URL where the media can be accessed. + type: object + required: + - url + title: MediaURL + description: A URL from which media can be accessed. + TextResponse: + properties: + text: + type: string + title: Text + description: The generated text. + chunks: + items: + $ref: '#/components/schemas/Chunk' + type: array + title: Chunks + description: The generated text chunks. + type: object + required: + - text + - chunks + title: TextResponse + description: Response model for text generation. + TextToImageParams: + properties: + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for image generation. + default: '' + loras: + type: string + title: Loras + description: 'A LoRA (Low-Rank Adaptation) model and its corresponding weight + for image generation. Example: { "latent-consistency/lcm-lora-sdxl": 1.0, + "nerijs/pixel-art-xl": 1.2}.' + default: '' + prompt: + type: string + title: Prompt + description: Text prompt(s) to guide image generation. Separate multiple + prompts with '|' if supported by the model. + height: + type: integer + title: Height + description: The height in pixels of the generated image. + default: 576 + width: + type: integer + title: Width + description: The width in pixels of the generated image. + default: 1024 + guidance_scale: + type: number + title: Guidance Scale + description: Encourages model to generate images closely linked to the text + prompt (higher values may reduce image quality). + default: 7.5 + negative_prompt: + type: string + title: Negative Prompt + description: Text prompt(s) to guide what to exclude from image generation. + Ignored if guidance_scale < 1. + default: '' + safety_check: + type: boolean + title: Safety Check + description: Perform a safety check to estimate if generated images could + be offensive or harmful. + default: true + seed: + type: integer + title: Seed + description: Seed for random number generation. + num_inference_steps: + type: integer + title: Num Inference Steps + description: Number of denoising steps. More steps usually lead to higher + quality images but slower inference. Modulated by strength. + default: 50 + num_images_per_prompt: + type: integer + title: Num Images Per Prompt + description: Number of images to generate per prompt. + default: 1 + type: object + required: + - prompt + - model_id + title: TextToImageParams + TextToSpeechParams: + properties: + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for text to speech generation. + default: '' + text: + type: string + title: Text + description: Text input for speech generation. + default: '' + description: + type: string + title: Description + description: Description of speaker to steer text to speech generation. + default: A male speaker delivers a slightly expressive and animated speech + with a moderate speed and pitch. + type: object + title: TextToSpeechParams + required: + - model_id + ValidationError: + properties: + loc: + items: + anyOf: + - type: string + - type: integer + type: array + title: Location + msg: + type: string + title: Message + type: + type: string + title: Error Type + type: object + required: + - loc + - msg + - type + title: ValidationError + VideoResponse: + properties: + images: + items: + $ref: '#/components/schemas/Media' + type: array + title: Images + description: The generated images. + type: object + required: + - images + title: VideoResponse + description: Response model for image generation. + securitySchemes: + HTTPBearer: + type: http + scheme: bearer diff --git a/openapi.yaml b/openapi.yaml new file mode 100644 index 00000000..94758142 --- /dev/null +++ b/openapi.yaml @@ -0,0 +1,1390 @@ +# !!Auto-generated by 'gen_openapi.py'. DO NOT EDIT!! +openapi: 3.1.0 +info: + title: Livepeer AI Runner + description: An application to run AI pipelines + version: 0.0.0 +servers: +- url: https://dream-gateway.livepeer.cloud + description: Livepeer Cloud Community Gateway +- url: https://livepeer.studio/api/beta/generate + description: Livepeer Studio Gateway +paths: + /text-to-image: + post: + tags: + - generate + summary: Text To Image + description: Generate images from text prompts. + operationId: genTextToImage + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TextToImageParams' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ImageResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: textToImage + /image-to-image: + post: + tags: + - generate + summary: Image To Image + description: Apply image transformations to a provided image. + operationId: genImageToImage + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genImageToImage' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ImageResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: imageToImage + /image-to-video: + post: + tags: + - generate + summary: Image To Video + description: Generate a video from a provided image. + operationId: genImageToVideo + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genImageToVideo' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/VideoResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: imageToVideo + /upscale: + post: + tags: + - generate + summary: Upscale + description: Upscale an image by increasing its resolution. + operationId: genUpscale + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genUpscale' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ImageResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: upscale + /audio-to-text: + post: + tags: + - generate + summary: Audio To Text + description: Transcribe audio files to text. + operationId: genAudioToText + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genAudioToText' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/TextResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '413': + description: Request Entity Too Large + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '415': + description: Unsupported Media Type + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: audioToText + /segment-anything-2: + post: + tags: + - generate + summary: Segment Anything 2 + description: Segment objects in an image. + operationId: genSegmentAnything2 + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genSegmentAnything2' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/MasksResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: segmentAnything2 + /llm: + post: + tags: + - generate + summary: LLM + description: Generate text using a language model. + operationId: genLLM + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LLMRequest' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/LLMResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: llm + /image-to-text: + post: + tags: + - generate + summary: Image To Text + description: Transform image files to text. + operationId: genImageToText + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/Body_genImageToText' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/ImageToTextResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '413': + description: Request Entity Too Large + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: imageToText + /live-video-to-video: + post: + tags: + - generate + summary: Live Video To Video + description: Apply transformations to a live video streamed to the returned + endpoints. + operationId: genLiveVideoToVideo + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LiveVideoToVideoParams' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/LiveVideoToVideoResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: liveVideoToVideo + /text-to-speech: + post: + tags: + - generate + summary: Text To Speech + description: Generate a text-to-speech audio file based on the provided text + input and speaker description. + operationId: genTextToSpeech + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TextToSpeechParams' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/AudioResponse' + x-speakeasy-name-override: data + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPError' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - HTTPBearer: [] + x-speakeasy-name-override: textToSpeech + /health: + get: + summary: Health + operationId: health + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/HealthCheck' + /hardware/info: + get: + summary: Hardware Info + operationId: hardware_info + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/HardwareInformation' + /hardware/stats: + get: + summary: Hardware Stats + operationId: hardware_stats + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/HardwareStats' +components: + schemas: + APIError: + properties: + msg: + type: string + title: Msg + description: The error message. + type: object + required: + - msg + title: APIError + description: API error response model. + AudioResponse: + properties: + audio: + allOf: + - $ref: '#/components/schemas/MediaURL' + description: The generated audio. + type: object + required: + - audio + title: AudioResponse + description: Response model for audio generation. + Body_genAudioToText: + properties: + audio: + type: string + format: binary + title: Audio + description: Uploaded audio file to be transcribed. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for transcription. + default: '' + return_timestamps: + type: string + title: Return Timestamps + description: 'Return timestamps for the transcribed text. Supported values: + ''sentence'', ''word'', or a string boolean (''true'' or ''false''). Default + is ''true'' (''sentence''). ''false'' means no timestamps. ''word'' means + word-based timestamps.' + default: 'true' + metadata: + type: string + title: Metadata + description: Additional job information to be passed to the pipeline. + default: '{}' + type: object + required: + - audio + title: Body_genAudioToText + Body_genImageToImage: + properties: + prompt: + type: string + title: Prompt + description: Text prompt(s) to guide image generation. + image: + type: string + format: binary + title: Image + description: Uploaded image to modify with the pipeline. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for image generation. + default: '' + loras: + type: string + title: Loras + description: 'A LoRA (Low-Rank Adaptation) model and its corresponding weight + for image generation. Example: { "latent-consistency/lcm-lora-sdxl": 1.0, + "nerijs/pixel-art-xl": 1.2}.' + default: '' + strength: + type: number + title: Strength + description: Degree of transformation applied to the reference image (0 + to 1). + default: 0.8 + guidance_scale: + type: number + title: Guidance Scale + description: Encourages model to generate images closely linked to the text + prompt (higher values may reduce image quality). + default: 7.5 + image_guidance_scale: + type: number + title: Image Guidance Scale + description: Degree to which the generated image is pushed towards the initial + image. + default: 1.5 + negative_prompt: + type: string + title: Negative Prompt + description: Text prompt(s) to guide what to exclude from image generation. + Ignored if guidance_scale < 1. + default: '' + safety_check: + type: boolean + title: Safety Check + description: Perform a safety check to estimate if generated images could + be offensive or harmful. + default: true + seed: + type: integer + title: Seed + description: Seed for random number generation. + num_inference_steps: + type: integer + title: Num Inference Steps + description: Number of denoising steps. More steps usually lead to higher + quality images but slower inference. Modulated by strength. + default: 100 + num_images_per_prompt: + type: integer + title: Num Images Per Prompt + description: Number of images to generate per prompt. + default: 1 + type: object + required: + - prompt + - image + title: Body_genImageToImage + Body_genImageToText: + properties: + image: + type: string + format: binary + title: Image + description: Uploaded image to transform with the pipeline. + prompt: + type: string + title: Prompt + description: Text prompt(s) to guide transformation. + default: '' + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for transformation. + default: '' + type: object + required: + - image + title: Body_genImageToText + Body_genImageToVideo: + properties: + image: + type: string + format: binary + title: Image + description: Uploaded image to generate a video from. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for video generation. + default: '' + height: + type: integer + title: Height + description: The height in pixels of the generated video. + default: 576 + width: + type: integer + title: Width + description: The width in pixels of the generated video. + default: 1024 + fps: + type: integer + title: Fps + description: The frames per second of the generated video. + default: 6 + motion_bucket_id: + type: integer + title: Motion Bucket Id + description: Used for conditioning the amount of motion for the generation. + The higher the number the more motion will be in the video. + default: 127 + noise_aug_strength: + type: number + title: Noise Aug Strength + description: Amount of noise added to the conditioning image. Higher values + reduce resemblance to the conditioning image and increase motion. + default: 0.02 + safety_check: + type: boolean + title: Safety Check + description: Perform a safety check to estimate if generated images could + be offensive or harmful. + default: true + seed: + type: integer + title: Seed + description: Seed for random number generation. + num_inference_steps: + type: integer + title: Num Inference Steps + description: Number of denoising steps. More steps usually lead to higher + quality images but slower inference. Modulated by strength. + default: 25 + type: object + required: + - image + title: Body_genImageToVideo + Body_genSegmentAnything2: + properties: + image: + type: string + format: binary + title: Image + description: Image to segment. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for image generation. + default: '' + point_coords: + type: string + title: Point Coords + description: Nx2 array of point prompts to the model, where each point is + in (X,Y) in pixels. + point_labels: + type: string + title: Point Labels + description: Labels for the point prompts, where 1 indicates a foreground + point and 0 indicates a background point. + box: + type: string + title: Box + description: A length 4 array given as a box prompt to the model, in XYXY + format. + mask_input: + type: string + title: Mask Input + description: A low-resolution mask input to the model, typically from a + previous prediction iteration, with the form 1xHxW (H=W=256 for SAM). + multimask_output: + type: boolean + title: Multimask Output + description: If true, the model will return three masks for ambiguous input + prompts, often producing better masks than a single prediction. + default: true + return_logits: + type: boolean + title: Return Logits + description: If true, returns un-thresholded mask logits instead of a binary + mask. + default: true + normalize_coords: + type: boolean + title: Normalize Coords + description: If true, the point coordinates will be normalized to the range + [0,1], with point_coords expected to be with respect to image dimensions. + default: true + type: object + required: + - image + title: Body_genSegmentAnything2 + Body_genUpscale: + properties: + prompt: + type: string + title: Prompt + description: Text prompt(s) to guide upscaled image generation. + image: + type: string + format: binary + title: Image + description: Uploaded image to modify with the pipeline. + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for upscaled image generation. + default: '' + safety_check: + type: boolean + title: Safety Check + description: Perform a safety check to estimate if generated images could + be offensive or harmful. + default: true + seed: + type: integer + title: Seed + description: Seed for random number generation. + num_inference_steps: + type: integer + title: Num Inference Steps + description: Number of denoising steps. More steps usually lead to higher + quality images but slower inference. Modulated by strength. + default: 75 + type: object + required: + - prompt + - image + title: Body_genUpscale + Chunk: + properties: + timestamp: + items: {} + type: array + title: Timestamp + description: The timestamp of the chunk. + text: + type: string + title: Text + description: The text of the chunk. + type: object + required: + - timestamp + - text + title: Chunk + description: A chunk of text with a timestamp. + GPUComputeInfo: + properties: + id: + type: string + title: Id + name: + type: string + title: Name + memory_total: + type: integer + title: Memory Total + memory_free: + type: integer + title: Memory Free + major: + type: integer + title: Major + minor: + type: integer + title: Minor + type: object + required: + - id + - name + - memory_total + - memory_free + - major + - minor + title: GPUComputeInfo + description: Model for detailed GPU compute information. + GPUUtilizationInfo: + properties: + id: + type: string + title: Id + name: + type: string + title: Name + memory_total: + type: integer + title: Memory Total + memory_free: + type: integer + title: Memory Free + utilization_compute: + type: integer + title: Utilization Compute + utilization_memory: + type: integer + title: Utilization Memory + type: object + required: + - id + - name + - memory_total + - memory_free + - utilization_compute + - utilization_memory + title: GPUUtilizationInfo + description: Model for GPU utilization statistics. + HTTPError: + properties: + detail: + allOf: + - $ref: '#/components/schemas/APIError' + description: Detailed error information. + type: object + required: + - detail + title: HTTPError + description: HTTP error response model. + HTTPValidationError: + properties: + detail: + items: + $ref: '#/components/schemas/ValidationError' + type: array + title: Detail + type: object + title: HTTPValidationError + HardwareInformation: + properties: + pipeline: + type: string + title: Pipeline + model_id: + type: string + title: Model Id + gpu_info: + additionalProperties: + $ref: '#/components/schemas/GPUComputeInfo' + type: object + title: Gpu Info + type: object + required: + - pipeline + - model_id + - gpu_info + title: HardwareInformation + description: Response model for GPU information. + HardwareStats: + properties: + pipeline: + type: string + title: Pipeline + model_id: + type: string + title: Model Id + gpu_stats: + additionalProperties: + $ref: '#/components/schemas/GPUUtilizationInfo' + type: object + title: Gpu Stats + type: object + required: + - pipeline + - model_id + - gpu_stats + title: HardwareStats + description: Response model for real-time GPU statistics. + HealthCheck: + properties: + status: + type: string + enum: + - OK + - ERROR + - IDLE + title: Status + description: The health status of the pipeline + type: object + required: + - status + title: HealthCheck + ImageResponse: + properties: + images: + items: + $ref: '#/components/schemas/Media' + type: array + title: Images + description: The generated images. + type: object + required: + - images + title: ImageResponse + description: Response model for image generation. + ImageToTextResponse: + properties: + text: + type: string + title: Text + description: The generated text. + type: object + required: + - text + title: ImageToTextResponse + description: Response model for text generation. + LLMChoice: + properties: + index: + type: integer + title: Index + finish_reason: + type: string + title: Finish Reason + default: '' + delta: + allOf: + - $ref: '#/components/schemas/LLMMessage' + message: + allOf: + - $ref: '#/components/schemas/LLMMessage' + type: object + required: + - index + title: LLMChoice + LLMMessage: + properties: + role: + type: string + title: Role + content: + type: string + title: Content + type: object + required: + - role + - content + title: LLMMessage + LLMRequest: + properties: + messages: + items: + $ref: '#/components/schemas/LLMMessage' + type: array + title: Messages + model: + type: string + title: Model + default: '' + temperature: + type: number + title: Temperature + default: 0.7 + max_tokens: + type: integer + title: Max Tokens + default: 256 + top_p: + type: number + title: Top P + default: 1.0 + top_k: + type: integer + title: Top K + default: -1 + stream: + type: boolean + title: Stream + default: false + type: object + required: + - messages + title: LLMRequest + LLMResponse: + properties: + id: + type: string + title: Id + model: + type: string + title: Model + created: + type: integer + title: Created + usage: + $ref: '#/components/schemas/LLMTokenUsage' + choices: + items: + $ref: '#/components/schemas/LLMChoice' + type: array + title: Choices + type: object + required: + - id + - model + - created + - usage + - choices + title: LLMResponse + LLMTokenUsage: + properties: + prompt_tokens: + type: integer + title: Prompt Tokens + completion_tokens: + type: integer + title: Completion Tokens + total_tokens: + type: integer + title: Total Tokens + type: object + required: + - prompt_tokens + - completion_tokens + - total_tokens + title: LLMTokenUsage + LiveVideoToVideoParams: + properties: + subscribe_url: + type: string + title: Subscribe Url + description: Source URL of the incoming stream to subscribe to. + publish_url: + type: string + title: Publish Url + description: Destination URL of the outgoing stream to publish. + control_url: + type: string + title: Control Url + description: URL for subscribing via Trickle protocol for updates in the + live video-to-video generation params. + default: '' + events_url: + type: string + title: Events Url + description: URL for publishing events via Trickle protocol for pipeline + status and logs. + default: '' + model_id: + type: string + title: Model Id + description: Name of the pipeline to run in the live video to video job. + Notice that this is named model_id for consistency with other routes, + but it does not refer to a Hugging Face model ID. The exact model(s) depends + on the pipeline implementation and might be configurable via the `params` + argument. + default: '' + params: + type: object + title: Params + description: Initial parameters for the pipeline. + default: {} + type: object + required: + - subscribe_url + - publish_url + title: LiveVideoToVideoParams + LiveVideoToVideoResponse: + properties: + subscribe_url: + type: string + title: Subscribe Url + description: Source URL of the incoming stream to subscribe to + publish_url: + type: string + title: Publish Url + description: Destination URL of the outgoing stream to publish to + control_url: + type: string + title: Control Url + description: URL for updating the live video-to-video generation + default: '' + events_url: + type: string + title: Events Url + description: URL for subscribing to events for pipeline status and logs + default: '' + type: object + required: + - subscribe_url + - publish_url + title: LiveVideoToVideoResponse + description: Response model for live video-to-video generation. + MasksResponse: + properties: + masks: + type: string + title: Masks + description: The generated masks. + scores: + type: string + title: Scores + description: The model's confidence scores for each generated mask. + logits: + type: string + title: Logits + description: The raw, unnormalized predictions (logits) for the masks. + type: object + required: + - masks + - scores + - logits + title: MasksResponse + description: Response model for object segmentation. + Media: + properties: + url: + type: string + title: Url + description: The URL where the media can be accessed. + seed: + type: integer + title: Seed + description: The seed used to generate the media. + nsfw: + type: boolean + title: Nsfw + description: Whether the media was flagged as NSFW. + type: object + required: + - url + - seed + - nsfw + title: Media + description: A media object containing information about the generated media. + MediaURL: + properties: + url: + type: string + title: Url + description: The URL where the media can be accessed. + type: object + required: + - url + title: MediaURL + description: A URL from which media can be accessed. + TextResponse: + properties: + text: + type: string + title: Text + description: The generated text. + chunks: + items: + $ref: '#/components/schemas/Chunk' + type: array + title: Chunks + description: The generated text chunks. + type: object + required: + - text + - chunks + title: TextResponse + description: Response model for text generation. + TextToImageParams: + properties: + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for image generation. + default: '' + loras: + type: string + title: Loras + description: 'A LoRA (Low-Rank Adaptation) model and its corresponding weight + for image generation. Example: { "latent-consistency/lcm-lora-sdxl": 1.0, + "nerijs/pixel-art-xl": 1.2}.' + default: '' + prompt: + type: string + title: Prompt + description: Text prompt(s) to guide image generation. Separate multiple + prompts with '|' if supported by the model. + height: + type: integer + title: Height + description: The height in pixels of the generated image. + default: 576 + width: + type: integer + title: Width + description: The width in pixels of the generated image. + default: 1024 + guidance_scale: + type: number + title: Guidance Scale + description: Encourages model to generate images closely linked to the text + prompt (higher values may reduce image quality). + default: 7.5 + negative_prompt: + type: string + title: Negative Prompt + description: Text prompt(s) to guide what to exclude from image generation. + Ignored if guidance_scale < 1. + default: '' + safety_check: + type: boolean + title: Safety Check + description: Perform a safety check to estimate if generated images could + be offensive or harmful. + default: true + seed: + type: integer + title: Seed + description: Seed for random number generation. + num_inference_steps: + type: integer + title: Num Inference Steps + description: Number of denoising steps. More steps usually lead to higher + quality images but slower inference. Modulated by strength. + default: 50 + num_images_per_prompt: + type: integer + title: Num Images Per Prompt + description: Number of images to generate per prompt. + default: 1 + type: object + required: + - prompt + title: TextToImageParams + TextToSpeechParams: + properties: + model_id: + type: string + title: Model Id + description: Hugging Face model ID used for text to speech generation. + default: '' + text: + type: string + title: Text + description: Text input for speech generation. + default: '' + description: + type: string + title: Description + description: Description of speaker to steer text to speech generation. + default: A male speaker delivers a slightly expressive and animated speech + with a moderate speed and pitch. + type: object + title: TextToSpeechParams + ValidationError: + properties: + loc: + items: + anyOf: + - type: string + - type: integer + type: array + title: Location + msg: + type: string + title: Message + type: + type: string + title: Error Type + type: object + required: + - loc + - msg + - type + title: ValidationError + VideoResponse: + properties: + frames: + items: + items: + $ref: '#/components/schemas/Media' + type: array + type: array + title: Frames + description: The generated video frames. + type: object + required: + - frames + title: VideoResponse + description: Response model for video generation. + securitySchemes: + HTTPBearer: + type: http + scheme: bearer diff --git a/runner/app/pipelines/llm.py b/runner/app/pipelines/llm.py index 67d37498..b60fec53 100644 --- a/runner/app/pipelines/llm.py +++ b/runner/app/pipelines/llm.py @@ -231,7 +231,7 @@ async def generate( index=0 ) ], - tokens_used=LLMTokenUsage( + usage=LLMTokenUsage( prompt_tokens=input_tokens, completion_tokens=total_tokens, total_tokens=input_tokens + total_tokens @@ -266,7 +266,7 @@ async def generate( finish_reason="stop" ) ], - tokens_used=LLMTokenUsage( + usage=LLMTokenUsage( prompt_tokens=input_tokens, completion_tokens=total_tokens, total_tokens=input_tokens + total_tokens diff --git a/runner/app/routes/llm.py b/runner/app/routes/llm.py index 40d29aeb..8d95fdf0 100644 --- a/runner/app/routes/llm.py +++ b/runner/app/routes/llm.py @@ -89,7 +89,7 @@ async def llm( finish_reason="stop" ) ], - tokens_used=last_chunk.tokens_used, + usage=last_chunk.usage, id=last_chunk.id, model=last_chunk.model, created=last_chunk.created diff --git a/runner/app/routes/utils.py b/runner/app/routes/utils.py index b17f9b37..27013ffc 100644 --- a/runner/app/routes/utils.py +++ b/runner/app/routes/utils.py @@ -95,7 +95,7 @@ class LLMResponse(BaseModel): id: str model: str created: int - tokens_used: LLMTokenUsage + usage: LLMTokenUsage choices: List[LLMChoice] diff --git a/runner/gateway.openapi.yaml b/runner/gateway.openapi.yaml index bd3d302e..77ab9abf 100644 --- a/runner/gateway.openapi.yaml +++ b/runner/gateway.openapi.yaml @@ -946,7 +946,7 @@ components: created: type: integer title: Created - tokens_used: + usage: $ref: '#/components/schemas/LLMTokenUsage' choices: items: @@ -958,7 +958,7 @@ components: - id - model - created - - tokens_used + - usage - choices title: LLMResponse LLMTokenUsage: diff --git a/runner/openapi.yaml b/runner/openapi.yaml index 2fd6a8bd..94758142 100644 --- a/runner/openapi.yaml +++ b/runner/openapi.yaml @@ -1092,7 +1092,7 @@ components: created: type: integer title: Created - tokens_used: + usage: $ref: '#/components/schemas/LLMTokenUsage' choices: items: @@ -1104,7 +1104,7 @@ components: - id - model - created - - tokens_used + - usage - choices title: LLMResponse LLMTokenUsage: diff --git a/worker/runner.gen.go b/worker/runner.gen.go index 1376bd81..eddaff9d 100644 --- a/worker/runner.gen.go +++ b/worker/runner.gen.go @@ -297,11 +297,11 @@ type LLMRequest struct { // LLMResponse defines model for LLMResponse. type LLMResponse struct { - Choices []LLMChoice `json:"choices"` - Created int `json:"created"` - Id string `json:"id"` - Model string `json:"model"` - TokensUsed LLMTokenUsage `json:"tokens_used"` + Choices []LLMChoice `json:"choices"` + Created int `json:"created"` + Id string `json:"id"` + Model string `json:"model"` + Usage LLMTokenUsage `json:"usage"` } // LLMTokenUsage defines model for LLMTokenUsage. @@ -3006,89 +3006,89 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", } // GetSwagger returns the content of the embedded swagger specification file