tagsChannel Tagging System

Configure services for deployment channels (voice, text, async) with validation and optimized LLM presets.

Overview

Different deployment channels have distinct requirements:

  • Voice channels need ultra-low latency and restricted state types

  • Text channels support full features with moderate latency

  • Async channels (email, API) have relaxed latency requirements

The channel tagging system helps you configure services appropriately and validates configurations before sync.

Channels

Channel
Type
Typical Use Case

phone

voice

Telephony (PSTN/VoIP)

web_voice

voice

Browser WebRTC

mobile_voice

voice

Mobile app voice

sms

text

SMS messaging

whatsapp

text

WhatsApp

web_chat

text

Web chat widget

mobile_chat

text

Mobile app chat

email

async

Email

api

async

Direct API integration

Channel Profiles

Each channel type has a profile defining its constraints:

Voice Channels

  • Max states: 5

  • Allowed state types: action, annotation, tool-call

  • Memory retrieval: Disabled

  • Dynamic behaviors: Not supported

  • Recommendation: Configure keyterms for transcription accuracy

Text Channels

  • Max states: Unlimited

  • Allowed state types: All

  • Memory retrieval: Supported

  • Dynamic behaviors: Supported

Async Channels

  • Max states: Unlimited

  • Allowed state types: All

  • Memory retrieval: Supported

  • Dynamic behaviors: Supported

  • Maximum capabilities with relaxed latency requirements

Version Set Presets

Presets configure LLM models optimized for each channel type:

Tier
Voice
Text
Async

Standard

voice

text

async

Premium

voice_premium

text_premium

async_premium

Economy

voice_economy

text_economy

async_economy

Ultra-Low

voice_ultra_low

Ultra-Low Premium

voice_ultra_low_premium

Regional Availability

Some presets use LLMs that are not available in all regions. See LLM Regional Availability for the full availability matrix.

circle-exclamation

Ultra-Low Latency Presets

The voice_ultra_low and voice_ultra_low_premium presets require single-state context graphs:

circle-exclamation

Tag Format

Services support two tag formats in local JSON/YAML files:

Or in YAML:

Object Format (Legacy)

circle-check

Tags encode:

  1. Channel (e.g., phone, web_chat) - which deployment channel

  2. Preset (e.g., voice_premium, text) - which LLM configuration

Service Environment Tags

Services can be tagged with dev or production to enforce different validation rules for version set pinning.

Environment Tag Options

Tag
Description
Validation Rules

dev

Development/sandbox services

No version pinning required. Can push directly to release.

production

Production services

Must have preview defined. release must match preview. All version sets must be pinned.

Adding Environment Tags

Add an environment tag alongside your channel tags:

circle-info

No environment tag? Services without an environment tag skip environment-specific validation entirely.

Production Service Requirements

When a service is tagged production, the following rules are enforced during forge sync-to-remote:

  1. Preview version set required: A preview version set must be defined

  2. Release matches preview: The release configuration must exactly match preview (agent version, context graph version, LLM preferences)

  3. Versions pinned: All version sets (except edge) must have explicit pinned version numbers—no latest

Example validation error:

Dev Service Flexibility

Services tagged dev have no version set restrictions:

  • Can use unpinned versions (latest) in any version set

  • No preview requirement

  • Can push directly to release without promotion workflow

circle-exclamation

LLM Validation

Service tags control LLM validation at the version set layer. This ensures LLM preferences match channel and cost requirements.

Voice-Optimized LLMs

Voice channels require low Time-To-First-Token (TTFT) for real-time conversation. Only these LLMs are voice-optimized:

LLM
Voice Optimized
Notes

azure_gpt-4.1-2025-04-14

Yes

Primary choice for voice

azure_gpt-4.1-mini-2025-04-14

Yes

Default for voice (cost-effective)

azure_gpt-5-*

No

Higher latency

azure_gpt-5.1-*

No

Highest latency

Claude, Gemini

No

Not optimized for voice TTFT

triangle-exclamation

Cost Tier Classifications

LLMs are classified into cost tiers for validation against preset expectations:

Tier
LLMs
Price (per 1M input)

Economy

GPT-5-nano, GPT-4.1-mini, Gemini 2.5 Flash

$0.05-$0.40

Standard

GPT-5-mini, GPT-4.1

$0.25-$2

Premium

GPT-5, GPT-5.1, Claude Sonnet 4.5, Gemini 2.5 Pro

$1.25-$15

Validation Rules

Tag
Validation
Severity

Voice channel (phone, web_voice, mobile_voice)

Non-voice-optimized LLMs

ERROR

Voice preset (voice, voice_premium, etc.)

Non-voice-optimized LLMs

ERROR

Economy preset (*_economy)

Premium-tier LLMs

ERROR

Premium preset (*_premium)

Only economy-tier LLMs

ERROR

Production environment

release LLM prefs != preview

ERROR

Empty llm_model_preferences (voice)

System defaults may not be voice-optimized

WARNING

No channel/preset tags

LLM preferences cannot be validated

WARNING

Example Validation Output

System Defaults vs Preset Defaults

circle-exclamation

Validation

Services with channel tags are validated against channel constraints:

  • Preset compatibility: Voice presets only work with voice channels

  • Regional LLM availability: Presets are validated against the target region's LLM availability

  • LLM preferences: Voice channels require voice-optimized LLMs; cost tiers must match preset expectations

  • Channel constraints: Context graphs are checked against channel profile limits

  • Keyterms warning: Voice services without keyterms trigger a warning

  • Untagged LLM preferences: Services with LLM preferences but no tags trigger a warning

  • Errors block sync, warnings prompt for confirmation

Standalone Validation

Use forge validate to check services locally before syncing:

This catches issues early without making any changes to the remote.

Dependency Validation (--check-dependencies)

The --check-dependencies flag validates that a service's linked assets are compatible with its channel constraints. This is essential for voice services which have strict latency requirements.

What gets validated:

Check
Voice Channels
Severity

Context graph state count ≤ 5

Warning

No decision/reflection/recall states

Error

No active memory retrieval

Warning

No dynamic behaviors applied

Error

Single-state for ultra-low presets

Error

Example output:

circle-exclamation

Validation Flow

spinner

CLI Commands

Use forge channel commands to explore and validate configurations:

List Channels

Shows all supported channels with their profiles.

List Presets

Show Channel Profile

Displays constraints and recommendations for a specific channel.

Show Tags

Outputs the JSON tags to add to your service.

Validate Preset

Checks if a preset is compatible with a channel and optionally validates regional LLM availability.

Validate Context Graph

Validates context graph characteristics against channel constraints.

LLM Info

Shows the LLM catalog with voice-optimized recommendations.

Best Practices

circle-check
circle-info

Preset Selection Guide

Scenario
Recommended Preset

Production voice with quality focus

voice_premium

High-volume voice, cost-sensitive

voice_economy

Single-state voice flows

voice_ultra_low

Standard text chat

text

Complex reasoning (email, API)

async_premium

Example: Configuring a Voice Service

  1. Check channel constraints:

  2. Get tags for your preset:

  3. Add tags to your service in local/<env>/entity_data/service/<service>.yaml:

  4. Validate locally (catches issues without touching remote):

  5. Validate dependencies (ensures context graph is compatible):

  6. Preview sync changes:

  7. Apply changes:

code-branchVersion Sets & Promotionchevron-right

Last updated

Was this helpful?