Product Kit · 1.0.0
Browser-local · no provider calls
LLM Provider Message Migration Kit
Convert submitted message and tool-call fixtures between OpenAI, Anthropic, Gemini, and canonical Utilito shapes without a model rewrite.
AI builders migrating deterministic message fixtures, tools, and tool results between provider APIs.
Converted provider payload
{
"system": [
{
"type": "text",
"text": "Keep submitted content exact."
}
],
"messages": [
{
"role": "user",
"content": "Weather for Paris?"
},
{
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "call_weather_1",
"name": "weather",
"input": {
"city": "Paris"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "call_weather_1",
"content": "{\"temperature\":21}"
}
]
}
],
"tools": [
{
"name": "weather",
"description": "Read a submitted weather fixture.",
"input_schema": {
"additionalProperties": false,
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
}
}
]
}Unsupported-field diagnostics
[
{
"code": "SYSTEM_ROLE_LOCATION",
"path": "messages[0].role",
"message": "The target represents the system instruction outside its ordinary message array.",
"disposition": "remapped"
}
]Role and tool-call mapping
[
{
"source_index": 0,
"source_role": "system",
"canonical_role": "system",
"target_role": "system",
"tool_calls": []
},
{
"source_index": 1,
"source_role": "user",
"canonical_role": "user",
"target_role": "user",
"tool_calls": []
},
{
"source_index": 2,
"source_role": "assistant",
"canonical_role": "assistant",
"target_role": "assistant",
"tool_calls": [
{
"source_id": "call_weather_1",
"target_id": "call_weather_1",
"status": "preserved"
}
]
},
{
"source_index": 3,
"source_role": "tool",
"canonical_role": "tool",
"target_role": "user",
"tool_calls": []
}
]Complete migration envelope
{
"ok": true,
"schema_version": "utilito.product-kit.v1",
"kit": {
"id": "provider-message-migration-kit",
"version": "1.0.0"
},
"result": {
"source_provider": "openai",
"target_provider": "anthropic",
"unsupported_field_policy": "diagnose",
"converted_payload": {
"system": [
{
"type": "text",
"text": "Keep submitted content exact."
}
],
"messages": [
{
"role": "user",
"content": "Weather for Paris?"
},
{
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "call_weather_1",
"name": "weather",
"input": {
"city": "Paris"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "call_weather_1",
"content": "{\"temperature\":21}"
}
]
}
],
"tools": [
{
"name": "weather",
"description": "Read a submitted weather fixture.",
"input_schema": {
"additionalProperties": false,
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
}
}
]
},
"unsupported_diagnostics": [
{
"code": "SYSTEM_ROLE_LOCATION",
"path": "messages[0].role",
"message": "The target represents the system instruction outside its ordinary message array.",
"disposition": "remapped"
}
],
"role_tool_call_mapping": [
{
"source_index": 0,
"source_role": "system",
"canonical_role": "system",
"target_role": "system",
"tool_calls": []
},
{
"source_index": 1,
"source_role": "user",
"canonical_role": "user",
"target_role": "user",
"tool_calls": []
},
{
"source_index": 2,
"source_role": "assistant",
"canonical_role": "assistant",
"target_role": "assistant",
"tool_calls": [
{
"source_id": "call_weather_1",
"target_id": "call_weather_1",
"status": "preserved"
}
]
},
{
"source_index": 3,
"source_role": "tool",
"canonical_role": "tool",
"target_role": "user",
"tool_calls": []
}
],
"canonical_intermediate": {
"schema_version": "utilito.provider-message.v1",
"source_provider": "openai",
"messages": [
{
"role": "system",
"content": "Keep submitted content exact.",
"tool_calls": []
},
{
"role": "user",
"content": "Weather for Paris?",
"tool_calls": []
},
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "call_weather_1",
"name": "weather",
"arguments": {
"city": "Paris"
},
"arguments_json": "{\"city\":\"Paris\"}",
"source_call_index": 0
}
]
},
{
"role": "tool",
"content": "{\"temperature\":21}",
"tool_call_id": "call_weather_1",
"tool_name": "weather",
"tool_calls": []
}
],
"tools": [
{
"name": "weather",
"description": "Read a submitted weather fixture.",
"parameters": {
"additionalProperties": false,
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
}
}
]
}
},
"receipt": {
"input_bytes": 683,
"output_bytes": 2729,
"operations": 3,
"omitted_items": 0,
"warnings": [
"SYSTEM_ROLE_LOCATION"
],
"messages": 4,
"tools": 1,
"diagnostics": 1,
"tool_call_ids_preserved": 1,
"tool_call_ids_remapped": 0,
"values_invented": 0
},
"provenance": {
"deterministic": true,
"model_used": false,
"network_used": false,
"storage_used": false,
"core_versions": {
"provider_message_migration_kit": "1.0.0",
"message_json": "message-json-core"
}
},
"error": null
}Free runnable capability
Convert one bounded fixture locally and download the current JSON envelope with no signup.
Builder capability
The existing Builder Pilot can coordinate bounded fixture-suite batches; it does not add provider calls, credentials, model rewriting, storage, or hidden retries.
See the existing Builder PilotPrivacy boundary
Browser conversion runs locally with deterministic message adapters. API and MCP requests are response-only; no provider call, credential, arbitrary URL, model, network, storage, or telemetry is accepted or used.
Limits and trust boundary
- Only the documented bounded message, text, tool-call, tool-result, and function-definition subset is converted. Provider-specific multimodal, cache, reasoning, safety, streaming, and transport fields are not inferred.
- System and developer semantics differ by provider. Every preserved or remapped role and every non-representable or generated tool-call ID is exposed in diagnostics and the mapping table.
- Tool arguments must already be valid JSON objects. Content, arguments, results, and tool schemas are never rewritten, summarized, coerced, or completed by a model.
- Credentials and credential-bearing fields are rejected. The kit never calls a provider, accepts arbitrary URLs, stores fixtures, emits payload telemetry, or sends converted payloads.