OutputMeta enables usage-based pricing by reporting what your app processes and generates.
Basic Structure
python
1from inferencesh import BaseAppOutput, OutputMeta, TextMeta, ImageMeta, VideoMeta, AudioMeta2 3class AppOutput(BaseAppOutput):4 result: File = Field(description="Generated output")5 # output_meta is inherited from BaseAppOutputMetaItem Types
| Type | Class | Key Fields |
|---|---|---|
| Text | TextMeta | tokens |
| Image | ImageMeta | width, height, resolution_mp, steps, count |
| Video | VideoMeta | width, height, resolution, seconds |
| Audio | AudioMeta | seconds |
Examples
LLM/Text Generation
Track both input (prompt) and output (completion) tokens:
python
1from inferencesh.models.usage import OutputMeta, TextMeta2 3# 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_tokens5 6# 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)Best Practices
- Always populate
output_metaif usage varies per request - Use accurate token counts from the actual tokenizer
- Report actual dimensions - don't hardcode
- Include relevant
extradata for pricing flexibility
Next
→ Secrets - API keys and sensitive values