{"name": "Lenovo AI Express vendor agent", "description": "Lenovo AI Express vendor agent for MAGIC: sizing, validated references, full BOM by role with Lenovo rules, prices with source and date, photos, rack figures and answers from the Lenovo guides. Contract vendor-agent/1: send a data part {\"skill\": <skill id>, \"request\": {...}}. A long answer is a short text and files: result.must_read names the file to read and when (the drawing file before drawing); result.guide says what to use, draw and ask.", "supportedInterfaces": [{"url": "https://magiclenovo.nizamai.com/a2a/lenovo", "protocolBinding": "JSONRPC", "protocolVersion": "1.0"}, {"url": "https://magiclenovo.nizamai.com/a2a/lenovo/rest", "protocolBinding": "HTTP+JSON", "protocolVersion": "1.0"}], "provider": {"url": "https://magiclenovo.nizamai.com", "organization": "Data Monsters"}, "version": "1.1.0", "capabilities": {"streaming": true, "pushNotifications": true, "extensions": [{"uri": "urn:magic:vendor-agent:1", "description": "Input schema of every skill (vendor-agent/1)", "params": {"schemas": {"vendor_describe": {"type": "object", "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "bom_from_spec": {"$defs": {"StorageSpec": {"description": "Only when the customer asks for shared storage; empty for a list of server parts.", "type": "object", "properties": {"model": {"anyOf": [{"type": "string", "enum": ["DG5200", "DM7200F", "DM5200F", "DM3200F", "DG7200"]}, {"type": "null"}], "default": null}, "protocol": {"description": "FC, iSCSI, NFS", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "usable_tb": {"anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "growth_tb": {"anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "NetworkSpec": {"description": "Only when the customer asks for switches, a fabric or cabling. Ports and cards in a server are server parts:\nleave this empty for them, and the switches come as a priced option.", "type": "object", "properties": {"data_switches": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": null}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "fc_switches": {"anyOf": [{"type": "string", "enum": ["existing", "new", "none"]}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "switch": {"description": "The compute switch the request names, e.g. 'Q3200-RA': it takes the GPU ports, with optics of its own generation; an unknown name keeps the reference switches and is asked", "anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "CpuSpec": {"type": "object", "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "sockets": {"anyOf": [{"type": "integer", "maximum": 2.0, "minimum": 1.0}, {"type": "null"}], "default": null}, "min_cores": {"description": "Cores per CPU", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "vendor": {"anyOf": [{"type": "string", "enum": ["AMD", "Intel", "amd", "intel"]}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "Workload": {"type": "object", "properties": {"model": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "users": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "FcSpec": {"type": "object", "properties": {"ports": {"type": "integer", "default": 2.0, "minimum": 1.0}, "speed_gb": {"type": "integer", "default": 32.0, "minimum": 8.0}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "GpuSpec": {"type": "object", "properties": {"model": {"description": "GPU model as the RFP names it, e.g. H200 NVL, RTX PRO 6000", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "nvlink": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": null}, "per_server": {"anyOf": [{"type": "integer", "maximum": 8.0, "minimum": 1.0}, {"type": "null"}], "default": null}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "future_per_server": {"description": "Room the RFP asks for, in GPUs per server", "anyOf": [{"type": "integer", "maximum": 8.0, "minimum": 0.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "RackSpec": {"description": "Only when the customer asks for racks or PDUs.", "type": "object", "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "racks": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "pdus": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "ServerSpec": {"type": "object", "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "ethernet": {"type": "array", "items": {"$ref": "#/$defs/EthernetSpec"}, "default": []}, "fc": {"description": "Fibre Channel HBAs only. InfiniBand and Ethernet ports do not go here: give them in parts, in the customer's words", "anyOf": [{"$ref": "#/$defs/FcSpec"}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "max_kw": {"description": "Power limit per server in kW", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "power_redundancy": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "cooling": {"description": "air or liquid", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "cpu": {"anyOf": [{"$ref": "#/$defs/CpuSpec"}, {"type": "null"}], "default": null}, "max_rack_units": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "memory_gb": {"description": "Per server", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "count": {"description": "How many servers: the RFP's minimum, or the nodes of a cluster", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "gpu": {"anyOf": [{"$ref": "#/$defs/GpuSpec"}, {"type": "null"}], "default": null}, "boot": {"anyOf": [{"$ref": "#/$defs/BootSpec"}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "SpecPart": {"type": "object", "required": ["text"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "qty": {"description": "Per server", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "text": {"description": "The requirement as written, e.g. '8x InfiniBand XDR'", "type": "string", "maxLength": 300.0}, "query": {"description": "Catalog words that find the part", "anyOf": [{"type": "string", "maxLength": 200.0}, {"type": "null"}], "default": null}, "replaces": {"description": "Words of the reference part it replaces", "anyOf": [{"type": "string", "maxLength": 200.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "EthernetSpec": {"type": "object", "required": ["speed_gb", "ports"], "properties": {"ports": {"description": "Ports per adapter as the RFP asks", "type": "integer", "minimum": 1.0}, "speed_gb": {"type": "integer", "minimum": 1.0}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "adapters": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "BootSpec": {"type": "object", "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "raid": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "size_tb": {"type": "number", "default": 1.0, "exclusiveMinimum": 0.0}, "drives": {"type": "integer", "default": 2.0, "minimum": 1.0}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}}, "type": "object", "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "network": {"anyOf": [{"$ref": "#/$defs/NetworkSpec"}, {"type": "null"}], "default": null}, "preferred_platforms": {"description": "Servers the RFP names, of any vendor: the Lenovo equivalent is offered and named as a deviation", "type": "array", "items": {"type": "string"}, "default": []}, "terms": {"description": "Conditions that are no part (repair time, sealed cases): asked of Lenovo", "type": "array", "items": {"type": "string"}, "default": []}, "storage": {"anyOf": [{"$ref": "#/$defs/StorageSpec"}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "servers": {"anyOf": [{"$ref": "#/$defs/ServerSpec"}, {"type": "null"}], "default": null}, "country": {"description": "The deal's country, the asking organisation's", "anyOf": [{"type": "string", "maxLength": 60.0}, {"type": "null"}], "default": null}, "rack": {"anyOf": [{"$ref": "#/$defs/RackSpec"}, {"type": "null"}], "default": null}, "purpose": {"description": "'training' or 'fine-tuning'; empty = inference", "anyOf": [{"type": "string", "maxLength": 60.0}, {"type": "null"}], "default": null}, "service_years": {"description": "Years of Premier service, 1 to 5", "type": "integer", "maximum": 5.0, "default": 5.0, "minimum": 1.0}, "workload": {"anyOf": [{"$ref": "#/$defs/Workload"}, {"type": "null"}], "default": null}, "parts": {"description": "Every line of the customer's list, in the customer's words, one line each, also the lines given as fields here (CPU model, memory, drives, cards, power): the agent reads them as written, and a CPU model has no other field", "type": "array", "items": {"$ref": "#/$defs/SpecPart"}, "default": []}}, "additionalProperties": false}, "design_figure": {"type": "object", "required": ["part"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "part": {"type": "object", "additionalProperties": true}}, "additionalProperties": false}, "assets_get": {"type": "object", "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "products": {"type": "array", "items": {"type": "string"}, "default": []}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "codes": {"type": "array", "items": {"type": "string"}, "default": []}, "views": {"type": "array", "items": {"type": "string", "enum": ["front", "angled", "rear", "internal", "card", "product", "block_diagram"]}, "default": []}}, "additionalProperties": false}, "rules_check": {"$defs": {"Line": {"type": "object", "required": ["code", "qty"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "qty": {"type": "integer", "minimum": 1.0}, "code": {"type": "string", "minLength": 4.0, "maxLength": 16.0}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}}, "type": "object", "required": ["platform", "lines"], "properties": {"model": {"anyOf": [{"type": "string", "enum": ["SXM5", "4-DW", "8-DW"]}, {"type": "null"}], "default": null}, "lines": {"type": "array", "items": {"$ref": "#/$defs/Line"}, "minItems": 1.0}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "platform": {"description": "A platform of vendor_describe.platforms", "type": "string"}, "country": {"anyOf": [{"type": "string", "maxLength": 60.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "price_get": {"type": "object", "required": ["codes"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "platform": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "codes": {"type": "array", "items": {"type": "string"}, "minItems": 1.0}, "country": {"anyOf": [{"type": "string", "maxLength": 60.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "design_change": {"$defs": {"Change": {"type": "object", "required": ["kind"], "properties": {"kind": {"type": "string", "enum": ["users", "model", "params_b", "precision", "tier", "country", "service_years", "rag", "ha", "tokens_in", "tokens_out", "requests_per_minute", "ttft_s", "keep_your_drive", "qty", "add", "remove"]}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "code": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "value": {"default": null}}, "additionalProperties": false}}, "type": "object", "required": ["part", "change"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "part": {"type": "object", "additionalProperties": true}, "change": {"$ref": "#/$defs/Change"}}, "additionalProperties": false}, "design_propose": {"$defs": {"ExistingGpus": {"type": "object", "required": ["gpu", "count"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "gpu": {"description": "GPUs the customer has, e.g. 'L40S', 'H100 SXM'", "type": "string", "maxLength": 80.0}, "count": {"type": "integer", "minimum": 1.0}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "Workload": {"description": "One workload of the cluster (22 Oct): a chat LLM, an embedding model or a speech-to-text model.", "type": "object", "properties": {"tokens_in": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "requests_per_minute": {"anyOf": [{"type": "number", "minimum": 0.0}, {"type": "null"}], "default": null}, "kind": {"type": "string", "enum": ["llm", "embedding", "speech"], "default": "llm"}, "tokens_per_s": {"description": "Embedding load, tokens per second, when known", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "users": {"description": "People at once (LLM, embedding)", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "tokens_out": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "model": {"description": "e.g. 'Llama 3.3 70B', 'bge-m3', 'Whisper large-v3'", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "use_case": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "streams": {"description": "Live audio streams at once (speech)", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "params_b": {"anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "custom_model": {"anyOf": [{"$ref": "#/$defs/CustomModel"}, {"type": "null"}], "default": null}, "name": {"anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}, "precision": {"anyOf": [{"type": "string", "enum": ["fp32", "fp16", "bf16", "fp8", "int8", "int4", "fp4"]}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "CustomModel": {"description": "A model the Lenovo Sizing Tool does not list, described as its \"Custom model\" form asks.", "type": "object", "required": ["params_b", "layers", "hidden", "heads", "kv_heads"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "heads": {"description": "Attention heads", "type": "integer", "minimum": 1.0}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "kv_heads": {"description": "Key-value heads", "type": "integer", "minimum": 1.0}, "is_moe": {"type": "boolean", "default": false}, "hidden": {"description": "Hidden size", "type": "integer", "minimum": 1.0}, "params_b": {"description": "Parameters, billions", "type": "number", "exclusiveMinimum": 0.0}, "name": {"description": "e.g. 'acme/custom-34b'", "anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}, "layers": {"type": "integer", "minimum": 1.0}, "active_params_b": {"description": "Active parameters per token, billions (MoE)", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}}, "type": "object", "properties": {"tokens_in": {"type": "integer", "default": 1500.0, "minimum": 1.0}, "itl_ms": {"description": "Target time between tokens, ms", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "gpu": {"description": "The GPU the customer names, as said, e.g. 'B200', 'H200 SXM', 'H100 NVL', 'L40S'. A reference built on it is used (AI Express or SR680a V3); when none is, the design keeps its own GPU and requested_gpu gives the Lenovo Sizing Tool's answer for the named one", "anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}, "precision": {"type": "string", "enum": ["fp32", "fp16", "bf16", "fp8", "int8", "int4", "fp4"], "default": "fp8"}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "requests_per_minute": {"description": "Requests per user per minute; 0 = every user always has a request waiting (the Lenovo Sizing Tool's meaning)", "type": "number", "default": 2.0, "minimum": 0.0}, "country": {"description": "The deal's country, the asking organisation's: name or ISO code; none: no country's prices", "anyOf": [{"type": "string", "maxLength": 60.0}, {"type": "null"}], "default": null}, "gpu_overhead_pct": {"description": "GPU memory kept free, percent (default 20)", "anyOf": [{"type": "number", "maximum": 95.0, "minimum": 0.0}, {"type": "null"}], "default": null}, "users": {"description": "Concurrent users", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "tokens_out": {"type": "integer", "default": 400.0, "minimum": 1.0}, "model": {"description": "Model key, e.g. llama3-70b, qwen3-32b, deepseek-v3", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "ttft_s": {"description": "Target time to first token, s", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "rag_corpus_gb": {"anyOf": [{"type": "number", "minimum": 0.0}, {"type": "null"}], "default": null}, "terms": {"description": "Conditions in the customer's words (a price ceiling, repair time): read as bom_from_spec reads its terms", "type": "array", "items": {"type": "string"}, "default": []}, "workloads": {"description": "Several workloads on one cluster, instead of model/users; each gets its own GPUs, packed into servers", "anyOf": [{"type": "array", "items": {"$ref": "#/$defs/Workload"}}, {"type": "null"}], "default": null}, "tier": {"anyOf": [{"type": "string", "enum": ["Small", "Medium", "Large"]}, {"type": "null"}], "default": null}, "use_case": {"description": "The Lenovo Sizing Tool's use case: its preset tokens and rate when those are not given", "anyOf": [{"type": "string", "enum": ["chatbot", "multimodal", "codeassistant", "content", "documentqa", "api", "research", "custom"]}, {"type": "null"}], "default": null}, "ha": {"description": "One extra server for availability", "type": "boolean", "default": false}, "existing": {"description": "GPUs the customer already has: they carry the load first; only the rest is sized on new servers", "anyOf": [{"type": "array", "items": {"$ref": "#/$defs/ExistingGpus"}}, {"type": "null"}], "default": null}, "nvlink": {"description": "NVLink between GPUs; default: as the GPU supports it", "anyOf": [{"type": "boolean"}, {"type": "null"}], "default": null}, "service_years": {"type": "integer", "enum": [3.0, 5.0], "default": 3.0}, "rag": {"type": "boolean", "default": false}, "params_b": {"description": "Model size in billions, when the model is not known", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "custom_model": {"description": "A model by its numbers, instead of model", "anyOf": [{"$ref": "#/$defs/CustomModel"}, {"type": "null"}], "default": null}, "line": {"description": "Product line: ai_express (default), mvp (HGX servers), edge (ThinkEdge servers for sites without a server room: shops, factories, branches); vendor_describe lists the lines of the pack", "anyOf": [{"type": "string", "maxLength": 40.0}, {"type": "null"}], "default": null}, "gpu_count": {"description": "A fixed number of GPUs in all, counted across the servers: the answer says if they hold the load. A number of servers or nodes is not a number of GPUs: a cluster the customer gives by its servers goes to bom_from_spec", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "catalog_search": {"type": "object", "properties": {"region": {"type": "string", "default": ""}, "aie_only": {"type": "boolean", "default": false}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "limit": {"type": "integer", "maximum": 200.0, "default": 20.0, "minimum": 1.0}, "query": {"type": "string", "default": ""}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "platform": {"description": "A platform of vendor_describe.platforms", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "sizing_calc": {"$defs": {"ExistingGpus": {"type": "object", "required": ["gpu", "count"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "gpu": {"description": "GPUs the customer has, e.g. 'L40S', 'H100 SXM'", "type": "string", "maxLength": 80.0}, "count": {"type": "integer", "minimum": 1.0}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "Workload": {"description": "One workload of the cluster (22 Oct): a chat LLM, an embedding model or a speech-to-text model.", "type": "object", "properties": {"tokens_in": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "requests_per_minute": {"anyOf": [{"type": "number", "minimum": 0.0}, {"type": "null"}], "default": null}, "kind": {"type": "string", "enum": ["llm", "embedding", "speech"], "default": "llm"}, "tokens_per_s": {"description": "Embedding load, tokens per second, when known", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "users": {"description": "People at once (LLM, embedding)", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "tokens_out": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "model": {"description": "e.g. 'Llama 3.3 70B', 'bge-m3', 'Whisper large-v3'", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "use_case": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "streams": {"description": "Live audio streams at once (speech)", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "params_b": {"anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "custom_model": {"anyOf": [{"$ref": "#/$defs/CustomModel"}, {"type": "null"}], "default": null}, "name": {"anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}, "precision": {"anyOf": [{"type": "string", "enum": ["fp32", "fp16", "bf16", "fp8", "int8", "int4", "fp4"]}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "CustomModel": {"description": "A model the Lenovo Sizing Tool does not list, described as its \"Custom model\" form asks.", "type": "object", "required": ["params_b", "layers", "hidden", "heads", "kv_heads"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "heads": {"description": "Attention heads", "type": "integer", "minimum": 1.0}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "kv_heads": {"description": "Key-value heads", "type": "integer", "minimum": 1.0}, "is_moe": {"type": "boolean", "default": false}, "hidden": {"description": "Hidden size", "type": "integer", "minimum": 1.0}, "params_b": {"description": "Parameters, billions", "type": "number", "exclusiveMinimum": 0.0}, "name": {"description": "e.g. 'acme/custom-34b'", "anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}, "layers": {"type": "integer", "minimum": 1.0}, "active_params_b": {"description": "Active parameters per token, billions (MoE)", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}}, "type": "object", "properties": {"tokens_in": {"type": "integer", "default": 1500.0, "minimum": 1.0}, "itl_ms": {"description": "Target time between tokens, ms", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "gpu": {"description": "The GPU the customer names, as said, e.g. 'B200', 'H200 SXM', 'H100 NVL', 'L40S'. A reference built on it is used (AI Express or SR680a V3); when none is, the design keeps its own GPU and requested_gpu gives the Lenovo Sizing Tool's answer for the named one", "anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}, "precision": {"type": "string", "enum": ["fp32", "fp16", "bf16", "fp8", "int8", "int4", "fp4"], "default": "fp8"}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "requests_per_minute": {"description": "Requests per user per minute; 0 = every user always has a request waiting (the Lenovo Sizing Tool's meaning)", "type": "number", "default": 2.0, "minimum": 0.0}, "country": {"description": "The deal's country, the asking organisation's: name or ISO code; none: no country's prices", "anyOf": [{"type": "string", "maxLength": 60.0}, {"type": "null"}], "default": null}, "gpu_overhead_pct": {"description": "GPU memory kept free, percent (default 20)", "anyOf": [{"type": "number", "maximum": 95.0, "minimum": 0.0}, {"type": "null"}], "default": null}, "users": {"description": "Concurrent users", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "tokens_out": {"type": "integer", "default": 400.0, "minimum": 1.0}, "model": {"description": "Model key, e.g. llama3-70b, qwen3-32b, deepseek-v3", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "ttft_s": {"description": "Target time to first token, s", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "rag_corpus_gb": {"anyOf": [{"type": "number", "minimum": 0.0}, {"type": "null"}], "default": null}, "terms": {"description": "Conditions in the customer's words (a price ceiling, repair time): read as bom_from_spec reads its terms", "type": "array", "items": {"type": "string"}, "default": []}, "workloads": {"description": "Several workloads on one cluster, instead of model/users; each gets its own GPUs, packed into servers", "anyOf": [{"type": "array", "items": {"$ref": "#/$defs/Workload"}}, {"type": "null"}], "default": null}, "tier": {"anyOf": [{"type": "string", "enum": ["Small", "Medium", "Large"]}, {"type": "null"}], "default": null}, "use_case": {"description": "The Lenovo Sizing Tool's use case: its preset tokens and rate when those are not given", "anyOf": [{"type": "string", "enum": ["chatbot", "multimodal", "codeassistant", "content", "documentqa", "api", "research", "custom"]}, {"type": "null"}], "default": null}, "ha": {"description": "One extra server for availability", "type": "boolean", "default": false}, "existing": {"description": "GPUs the customer already has: they carry the load first; only the rest is sized on new servers", "anyOf": [{"type": "array", "items": {"$ref": "#/$defs/ExistingGpus"}}, {"type": "null"}], "default": null}, "nvlink": {"description": "NVLink between GPUs; default: as the GPU supports it", "anyOf": [{"type": "boolean"}, {"type": "null"}], "default": null}, "service_years": {"type": "integer", "enum": [3.0, 5.0], "default": 3.0}, "rag": {"type": "boolean", "default": false}, "params_b": {"description": "Model size in billions, when the model is not known", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "custom_model": {"description": "A model by its numbers, instead of model", "anyOf": [{"$ref": "#/$defs/CustomModel"}, {"type": "null"}], "default": null}, "line": {"description": "Product line: ai_express (default), mvp (HGX servers), edge (ThinkEdge servers for sites without a server room: shops, factories, branches); vendor_describe lists the lines of the pack", "anyOf": [{"type": "string", "maxLength": 40.0}, {"type": "null"}], "default": null}, "gpu_count": {"description": "A fixed number of GPUs in all, counted across the servers: the answer says if they hold the load. A number of servers or nodes is not a number of GPUs: a cluster the customer gives by its servers goes to bom_from_spec", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "advice_explain": {"type": "object", "required": ["question"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "question": {"type": "string", "minLength": 3.0, "maxLength": 1000.0}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "part": {"description": "The part the question is about, as context", "anyOf": [{"type": "object", "additionalProperties": true}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "reference_match": {"$defs": {"ExistingGpus": {"type": "object", "required": ["gpu", "count"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "gpu": {"description": "GPUs the customer has, e.g. 'L40S', 'H100 SXM'", "type": "string", "maxLength": 80.0}, "count": {"type": "integer", "minimum": 1.0}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "Workload": {"description": "One workload of the cluster (22 Oct): a chat LLM, an embedding model or a speech-to-text model.", "type": "object", "properties": {"tokens_in": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "requests_per_minute": {"anyOf": [{"type": "number", "minimum": 0.0}, {"type": "null"}], "default": null}, "kind": {"type": "string", "enum": ["llm", "embedding", "speech"], "default": "llm"}, "tokens_per_s": {"description": "Embedding load, tokens per second, when known", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "users": {"description": "People at once (LLM, embedding)", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "tokens_out": {"anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "model": {"description": "e.g. 'Llama 3.3 70B', 'bge-m3', 'Whisper large-v3'", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "use_case": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "streams": {"description": "Live audio streams at once (speech)", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "params_b": {"anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "custom_model": {"anyOf": [{"$ref": "#/$defs/CustomModel"}, {"type": "null"}], "default": null}, "name": {"anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}, "precision": {"anyOf": [{"type": "string", "enum": ["fp32", "fp16", "bf16", "fp8", "int8", "int4", "fp4"]}, {"type": "null"}], "default": null}}, "additionalProperties": false}, "CustomModel": {"description": "A model the Lenovo Sizing Tool does not list, described as its \"Custom model\" form asks.", "type": "object", "required": ["params_b", "layers", "hidden", "heads", "kv_heads"], "properties": {"request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "heads": {"description": "Attention heads", "type": "integer", "minimum": 1.0}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "kv_heads": {"description": "Key-value heads", "type": "integer", "minimum": 1.0}, "is_moe": {"type": "boolean", "default": false}, "hidden": {"description": "Hidden size", "type": "integer", "minimum": 1.0}, "params_b": {"description": "Parameters, billions", "type": "number", "exclusiveMinimum": 0.0}, "name": {"description": "e.g. 'acme/custom-34b'", "anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}, "layers": {"type": "integer", "minimum": 1.0}, "active_params_b": {"description": "Active parameters per token, billions (MoE)", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}}, "type": "object", "properties": {"tokens_in": {"type": "integer", "default": 1500.0, "minimum": 1.0}, "itl_ms": {"description": "Target time between tokens, ms", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "gpu": {"description": "The GPU the customer names, as said, e.g. 'B200', 'H200 SXM', 'H100 NVL', 'L40S'. A reference built on it is used (AI Express or SR680a V3); when none is, the design keeps its own GPU and requested_gpu gives the Lenovo Sizing Tool's answer for the named one", "anyOf": [{"type": "string", "maxLength": 80.0}, {"type": "null"}], "default": null}, "precision": {"type": "string", "enum": ["fp32", "fp16", "bf16", "fp8", "int8", "int4", "fp4"], "default": "fp8"}, "request_id": {"description": "MAGIC's random request number; echoed", "anyOf": [{"type": "string", "maxLength": 128.0}, {"type": "null"}], "default": null}, "role": {"description": "The role MAGIC asks this part for; echoed", "anyOf": [{"type": "string", "maxLength": 64.0}, {"type": "null"}], "default": null}, "requests_per_minute": {"description": "Requests per user per minute; 0 = every user always has a request waiting (the Lenovo Sizing Tool's meaning)", "type": "number", "default": 2.0, "minimum": 0.0}, "country": {"anyOf": [{"type": "string", "maxLength": 60.0}, {"type": "null"}], "default": null}, "gpu_overhead_pct": {"description": "GPU memory kept free, percent (default 20)", "anyOf": [{"type": "number", "maximum": 95.0, "minimum": 0.0}, {"type": "null"}], "default": null}, "users": {"description": "Concurrent users", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}, "tokens_out": {"type": "integer", "default": 400.0, "minimum": 1.0}, "model": {"description": "Model key, e.g. llama3-70b, qwen3-32b, deepseek-v3", "anyOf": [{"type": "string"}, {"type": "null"}], "default": null}, "ttft_s": {"description": "Target time to first token, s", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "rag_corpus_gb": {"anyOf": [{"type": "number", "minimum": 0.0}, {"type": "null"}], "default": null}, "terms": {"description": "Conditions in the customer's words (a price ceiling, repair time): read as bom_from_spec reads its terms", "type": "array", "items": {"type": "string"}, "default": []}, "workloads": {"description": "Several workloads on one cluster, instead of model/users; each gets its own GPUs, packed into servers", "anyOf": [{"type": "array", "items": {"$ref": "#/$defs/Workload"}}, {"type": "null"}], "default": null}, "tier": {"anyOf": [{"type": "string", "enum": ["Small", "Medium", "Large"]}, {"type": "null"}], "default": null}, "use_case": {"description": "The Lenovo Sizing Tool's use case: its preset tokens and rate when those are not given", "anyOf": [{"type": "string", "enum": ["chatbot", "multimodal", "codeassistant", "content", "documentqa", "api", "research", "custom"]}, {"type": "null"}], "default": null}, "ha": {"description": "One extra server for availability", "type": "boolean", "default": false}, "existing": {"description": "GPUs the customer already has: they carry the load first; only the rest is sized on new servers", "anyOf": [{"type": "array", "items": {"$ref": "#/$defs/ExistingGpus"}}, {"type": "null"}], "default": null}, "nvlink": {"description": "NVLink between GPUs; default: as the GPU supports it", "anyOf": [{"type": "boolean"}, {"type": "null"}], "default": null}, "service_years": {"type": "integer", "enum": [3.0, 5.0], "default": 3.0}, "rag": {"type": "boolean", "default": false}, "params_b": {"description": "Model size in billions, when the model is not known", "anyOf": [{"type": "number", "exclusiveMinimum": 0.0}, {"type": "null"}], "default": null}, "custom_model": {"description": "A model by its numbers, instead of model", "anyOf": [{"$ref": "#/$defs/CustomModel"}, {"type": "null"}], "default": null}, "line": {"description": "Product line: ai_express (default), mvp (HGX servers), edge (ThinkEdge servers for sites without a server room: shops, factories, branches); vendor_describe lists the lines of the pack", "anyOf": [{"type": "string", "maxLength": 40.0}, {"type": "null"}], "default": null}, "gpu_count": {"description": "A fixed number of GPUs in all, counted across the servers: the answer says if they hold the load. A number of servers or nodes is not a number of GPUs: a cluster the customer gives by its servers goes to bom_from_spec", "anyOf": [{"type": "integer", "minimum": 1.0}, {"type": "null"}], "default": null}}, "additionalProperties": false}}}}], "extendedAgentCard": true}, "securitySchemes": {"apiKey": {"apiKeySecurityScheme": {"description": "Client key, given by the agent's admin", "location": "header", "name": "x-api-key"}}}, "securityRequirements": [{"schemes": {"apiKey": {}}}], "defaultInputModes": ["application/json", "text/plain"], "defaultOutputModes": ["application/json"], "skills": [{"id": "vendor_describe", "name": "Vendor describe", "description": "The agent profile: vendor, product lines, actions, agent version, data date.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "data"], "examples": ["{\"skill\": \"vendor_describe\", \"request\": {}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "catalog_search", "name": "Catalog search", "description": "Lenovo items by words, platform, AI Express and region.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "data"], "examples": ["{\"skill\": \"catalog_search\", \"request\": {\"query\": \"RTX PRO 6000\", \"platform\": \"SR675 V3\", \"aie_only\": true}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "sizing_calc", "name": "Sizing calc", "description": "GPU memory, GPUs and the AI Express tier for a workload. Code only.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "data"], "examples": ["{\"skill\": \"sizing_calc\", \"request\": {\"model\": \"Llama 3.3 70B\", \"users\": 150, \"country\": \"UAE\"}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "reference_match", "name": "Reference match", "description": "Validated reference configurations; the tier, or the requirement from which the tier is found.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "data"], "examples": ["{\"skill\": \"reference_match\", \"request\": {\"tier\": \"Medium\"}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "rules_check", "name": "Rules check", "description": "Check BOM lines of ONE server against Lenovo rules (quantities per server, not per cluster): {\"platform\": \"SR680a V4\", \"lines\": [{\"code\": \"C5QY\", \"qty\": 2}, {\"code\": \"CBAG\", \"qty\": 1}]}. Each violation has its BOM lines and a fix, and the nearest valid configuration.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "data"], "examples": ["{\"skill\": \"rules_check\", \"request\": {\"platform\": \"SR675 V3\", \"model\": \"8-DW\", \"lines\": [{\"code\": \"BKTJ\", \"qty\": 4}]}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "price_get", "name": "Price get", "description": "List prices with date and source; indicative prices, marked, where no list price exists, and a whole server's published price apart from the lines.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "data"], "examples": ["{\"skill\": \"price_get\", \"request\": {\"codes\": [\"CBK8\", \"BKTJ\"], \"platform\": \"SR675 V3\", \"country\": \"AE\"}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "assets_get", "name": "Assets get", "description": "Product photos as links, with source and licence.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "data"], "examples": ["{\"skill\": \"assets_get\", \"request\": {\"products\": [\"SR675 V3\"], \"views\": [\"front\", \"rear\"]}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "design_propose", "name": "Design propose", "description": "A full part of the solution sized from a workload (model, users, tokens): tier, servers, BOM by role, rules check with fixes, interfaces, layers, gaps and caveats; the BOM as an Excel link. When the customer lists the server's parts (CPU, memory, GPUs, drives, network cards, power), gives an exact specification (GPU, CPU, memory, drives, network, storage, service), or names how many servers or nodes it wants (\"a cluster of 5 B300 nodes\"), call bom_from_spec instead. 15-60 s.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "design"], "examples": ["{\"skill\": \"design_propose\", \"request\": {\"model\": \"gpt-oss-120b\", \"users\": 400, \"ha\": true, \"country\": \"UAE\", \"request_id\": \"deal-42\"}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "design_change", "name": "Design change", "description": "Apply one change to a part; returns the new part and the difference. The change is a requirement {kind, value} of a design_propose part, or one line {kind: qty | add | remove, code, value}. A change that breaks a hard rule is refused with the nearest valid configuration.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "design"], "examples": ["{\"skill\": \"design_change\", \"request\": {\"part\": {\"...\": \"the part from design_propose\"}, \"change\": {\"kind\": \"users\", \"value\": 600}}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "design_figure", "name": "Design figure", "description": "Rack elevation of a part as an SVG link, and the layered description.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "design"], "examples": ["{\"skill\": \"design_figure\", \"request\": {\"part\": {\"...\": \"the part from design_propose\"}}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "advice_explain", "name": "Advice explain", "description": "Answer from the Lenovo guides, with quotes and sources.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "data"], "examples": ["{\"skill\": \"advice_explain\", \"request\": {\"question\": \"Why Medium and not Large for 400 people?\"}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}, {"id": "bom_from_spec", "name": "Bom from spec", "description": "Use it whenever the customer gives an exact specification (GPU, CPU, memory, drives, network, storage, service), not only a workload: when it lists the server's parts, as in an RFP or a server specification, or names how many servers it wants: a cluster of N nodes is servers.count N with their GPU, and the networks, storage and head nodes it names. For a list, send every line of the customer's list as one line of parts, in the customer's words, with its count (for example \"2x CPU Intel Xeon 6767p\", \"2TB RAM\", \"8x GPU B300 SXM\", \"1x 2-Port 25G Ethernet\"). Ask only for what the customer listed: no network, storage or rack fields unless the customer asks for switches, storage or racks. Each memory or other variant is its own call. A full BOM from the requirements of an RFP: servers configured to the parts asked, storage by usable capacity, switches, service, rack and power, ports; the deviations from the RFP and the questions, each with the value taken. A missing fact is an assumption. 5-30 s.", "tags": ["lenovo", "ai-express", "vendor-agent/1", "data"], "examples": ["{\"skill\": \"bom_from_spec\", \"request\": {\"servers\": {\"count\": 2, \"gpu\": {\"model\": \"H200 NVL\", \"per_server\": 2, \"nvlink\": true, \"future_per_server\": 6}, \"cpu\": {\"vendor\": \"AMD\", \"min_cores\": 96}, \"memory_gb\": 2048, \"ethernet\": [{\"speed_gb\": 100, \"ports\": 4, \"adapters\": 2}], \"fc\": {\"speed_gb\": 32, \"ports\": 2}, \"boot\": {\"drives\": 2, \"size_tb\": 1}}, \"storage\": {\"usable_tb\": 30, \"growth_tb\": 100, \"protocol\": \"FC\"}, \"service_years\": 5, \"country\": \"Jordan\"}}"], "inputModes": ["application/json", "text/plain"], "outputModes": ["application/json"]}]}