Inference Logoinference.sh

Output Metadata

OutputMeta enables usage-based pricing by reporting what your app processes and generates.


Basic Structure

1from inferencesh import BaseAppOutput, OutputMeta, TextMeta, ImageMeta, VideoMeta, AudioMeta23class AppOutput(BaseAppOutput):4    result: File = Field(description="Generated output")5    # output_meta is inherited from BaseAppOutput

MetaItem Types

TypeClassKey Fields
TextTextMetatokens
ImageImageMetawidth, height, resolution_mp, steps, count
VideoVideoMetawidth, height, resolution, seconds
AudioAudioMetaseconds

Examples

LLM/Text Generation

Track both input (prompt) and output (completion) tokens:

python
1from inferencesh.models.usage import OutputMeta, TextMeta23# In your run method, after getting the response:4return AppOutput(5    response=generated_text,6    output_meta=OutputMeta(7        inputs=[TextMeta(tokens=prompt_tokens)],8        outputs=[TextMeta(tokens=completion_tokens)]9    )10)

For streaming responses, update token counts from the final chunk:

python
1# Track usage from stream chunks2if hasattr(chunk, "usage") and chunk.usage:3    input_tokens = chunk.usage.prompt_tokens4    output_tokens = chunk.usage.completion_tokens56# Build output with token tracking7output_meta = OutputMeta(8    inputs=[TextMeta(tokens=input_tokens)] if input_tokens else [],9    outputs=[TextMeta(tokens=output_tokens)] if output_tokens else []10)

Image Generation

python
1return AppOutput(2    image=File(path=output_path),3    output_meta=OutputMeta(4        outputs=[ImageMeta(5            width=1024,6            height=1024,7            resolution_mp=1.05,8            steps=20,9            count=110        )]11    )12)

Video Generation

python
1return AppOutput(2    video=File(path=output_path),3    output_meta=OutputMeta(4        outputs=[VideoMeta(5            width=1280,6            height=720,7            resolution="720p",8            seconds=5.09        )]10    )11)

Audio Generation

python
1return AppOutput(2    audio=File(path=output_path),3    output_meta=OutputMeta(4        outputs=[AudioMeta(seconds=30.0)]5    )6)

Custom Data

Use extra for app-specific pricing factors:

python
1output_meta=OutputMeta(2    outputs=[ImageMeta(3        width=1024,4        height=1024,5        extra={6            "model": "sdxl-turbo",7            "lora_count": 28        }9    )]10)

Public API visibility

output_meta is pricing metadata for the platform. App authors should always set it on task output, but it is not returned on public surfaces:

SurfaceWhat you see
Task output (REST, WebSocket, SDK)output_meta is extracted at write time; only your app's user-facing fields remain in output
App output_schema (version DTO, app store, Grid)output_meta is stripped from schemas at deploy and on read

Your app code still returns output_meta in AppOutput / run results — the backend stores it for usage-based billing and CEL pricing formulas. Do not rely on clients reading output_meta from completed tasks or published schemas.


Best Practices

  1. Always populate output_meta if usage varies per request
  2. Use accurate token counts from the actual tokenizer
  3. Report actual dimensions - don't hardcode
  4. Include relevant extra data for pricing flexibility

Next

Usage-based pricing — CEL formulas that read output_meta
Secrets — API keys and sensitive values

we use cookies

we use cookies to ensure you get the best experience on our website. for more information on how we use cookies, please see our cookie policy.

by clicking "accept", you agree to our use of cookies.
learn more.