{
  "schemaVersion": "1.0",
  "item": {
    "slug": "which-llm",
    "name": "Which LLM? Deterministic model selection for agents",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Zapkid/which-llm",
    "canonicalUrl": "https://clawhub.ai/Zapkid/which-llm",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/which-llm",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=which-llm",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "skill.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/which-llm"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/which-llm",
    "agentPageUrl": "https://openagent3.xyz/skills/which-llm/agent",
    "manifestUrl": "https://openagent3.xyz/skills/which-llm/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/which-llm/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Overview",
        "body": "Use this skill when you need a deterministic recommendation for which LLM to use under explicit constraints such as cost and quality.\n\nThis skill is for calling the Which‑LLM API. It does not run an LLM itself. For paid requests, the AI bot needs access to a crypto wallet."
      },
      {
        "title": "When to use it",
        "body": "Pick the cheapest model that still meets a quality target\nChoose a fallback model if the preferred one fails\nKeep model selection deterministic and auditable\nReport execution results and earn credits for later requests"
      },
      {
        "title": "Quick Reference",
        "body": "API base URL: https://api.which-llm.com\nPrimary paid endpoint: POST /decision/optimize\nOutcome endpoint: POST /decision/outcome\nFree discovery endpoints: GET /capabilities, GET /pricing, GET /status\nPayment asset: USDC\nSupported chains: Base, Ethereum, Arbitrum, Optimism, Avalanche"
      },
      {
        "title": "Registry Summary Expectations",
        "body": "Primary credential: WALLET_CREDENTIALS\nInstall mechanism: instruction-only\nWrites to disk on install: false\nDownloads code on install: false"
      },
      {
        "title": "Prerequisites",
        "body": "Before using this skill, have the following ready:\n\nAbility to make HTTPS requests to https://api.which-llm.com\nAbility to send and receive JSON\nAI bot access to a crypto wallet for paid requests"
      },
      {
        "title": "What this skill does",
        "body": "Sends requests to the Which‑LLM API\nUses POST /decision/optimize to get a recommended model and fallback plan\nUses POST /decision/outcome to report real execution results\nExplains the request and response shapes for the public API\nDescribes how to retry requests after payment has been satisfied externally"
      },
      {
        "title": "What this skill does not do",
        "body": "It does not call an LLM directly\nIt does not execute arbitrary code from your prompt\nIt does not require unrelated files or system access beyond API usage and payment handling"
      },
      {
        "title": "Runtime Scope",
        "body": "always_on: false: the skill is not force-installed and does not run continuously\ndisable_model_invocation: false: an agent may invoke it on demand\nThe skill is limited to outbound HTTP API usage and response handling\nFor paid requests, the AI bot needs access to a crypto wallet"
      },
      {
        "title": "Payment Model",
        "body": "Paid calls may use HTTP 402 Payment Required.\n\nHigh-level flow:\n\nCall POST /decision/optimize\nIf the API returns 402, inspect fields such as required_amount, accepts, and payment_reference\nSatisfy the payment requirement outside this skill using host- or client-managed infrastructure\nRetry the same request with payment proof headers if available\n\nThis skill documents the API behavior and payment-related response handling. The wallet requirement is limited to paid requests."
      },
      {
        "title": "GET /capabilities",
        "body": "Use this to discover supported constraints, decision types, and payment behavior."
      },
      {
        "title": "GET /pricing",
        "body": "Use this to check current pricing and supported chains before making a paid request."
      },
      {
        "title": "GET /status",
        "body": "Use this for service-health checks."
      },
      {
        "title": "POST /decision/optimize",
        "body": "This is the main endpoint. Send the goal and constraints, then receive:\n\nrecommended_model\nfallback_plan\ndecision metadata and explainability fields\n\nTypical request shape:\n\n{\n  \"goal\": \"Summarize customer feedback emails into a 5-bullet executive summary\",\n  \"constraints\": {\n    \"min_quality_score\": 0.8,\n    \"max_cost_usd\": 0.01\n  },\n  \"workload\": {\n    \"input_tokens\": 1200,\n    \"output_tokens\": 300,\n    \"requests\": 1\n  },\n  \"task_type\": \"summarize\"\n}\n\nIf payment is required, the API may first return 402 with fields such as:\n\nrequired_amount\ncurrency\naccepts[].chain\naccepts[].pay_to\npayment_reference\n\nRetry the request after external payment handling with:\n\nX-Payment-Chain\nX-Payment-Tx\nX-Payer\nX-Payment-Amount\nX-Payment-Asset\n\nIf you have a valid credit token, also send:\n\nX-Credit-Token"
      },
      {
        "title": "POST /decision/outcome",
        "body": "Use this after running the recommended model. Report what actually happened so the system can issue a credit token for future use.\n\nTypical request shape:\n\n{\n  \"decision_id\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n  \"option_used\": \"openai/gpt-4o-mini\",\n  \"actual_cost\": 0.008,\n  \"actual_latency\": 650,\n  \"quality_score\": 0.86,\n  \"success\": true\n}\n\nTypical response includes:\n\nstatus\ndecision_id\noutcome_hash\nrefund_credit.credit_token"
      },
      {
        "title": "Request Strategy For Agents",
        "body": "Call GET /capabilities or GET /pricing first if you need to discover current payment behavior\nUse POST /decision/optimize only when you actually need model selection help\nReuse the returned decision data rather than repeatedly asking the same question\nAfter running the chosen model, call POST /decision/outcome to earn credits\nUse the host or client payment flow when a paid request requires wallet-backed settlement"
      },
      {
        "title": "PAYMENT_REQUIRED",
        "body": "The endpoint needs payment first. Read the 402 response, satisfy the payment requirement externally, then retry with payment proof headers if available."
      },
      {
        "title": "PAYMENT_INVALID",
        "body": "Check:\n\nexact amount sent\ncorrect chain\ncorrect recipient\nconfirmed transaction\nheaders match the actual transaction"
      },
      {
        "title": "NO_FEASIBLE_OPTIONS",
        "body": "Your cost and quality constraints are too strict for the available models. Relax the budget or quality threshold and retry."
      },
      {
        "title": "RATE_LIMIT_EXCEEDED",
        "body": "Back off and retry later. Use an idempotency key for safe retries."
      }
    ],
    "body": "Which‑LLM: Outcome‑Driven Decision Optimizer\nOverview\n\nUse this skill when you need a deterministic recommendation for which LLM to use under explicit constraints such as cost and quality.\n\nThis skill is for calling the Which‑LLM API. It does not run an LLM itself. For paid requests, the AI bot needs access to a crypto wallet.\n\nWhen to use it\nPick the cheapest model that still meets a quality target\nChoose a fallback model if the preferred one fails\nKeep model selection deterministic and auditable\nReport execution results and earn credits for later requests\nQuick Reference\nAPI base URL: https://api.which-llm.com\nPrimary paid endpoint: POST /decision/optimize\nOutcome endpoint: POST /decision/outcome\nFree discovery endpoints: GET /capabilities, GET /pricing, GET /status\nPayment asset: USDC\nSupported chains: Base, Ethereum, Arbitrum, Optimism, Avalanche\nRegistry Summary Expectations\nPrimary credential: WALLET_CREDENTIALS\nInstall mechanism: instruction-only\nWrites to disk on install: false\nDownloads code on install: false\nPrerequisites\n\nBefore using this skill, have the following ready:\n\nAbility to make HTTPS requests to https://api.which-llm.com\nAbility to send and receive JSON\nAI bot access to a crypto wallet for paid requests\nWhat this skill does\nSends requests to the Which‑LLM API\nUses POST /decision/optimize to get a recommended model and fallback plan\nUses POST /decision/outcome to report real execution results\nExplains the request and response shapes for the public API\nDescribes how to retry requests after payment has been satisfied externally\nWhat this skill does not do\nIt does not call an LLM directly\nIt does not execute arbitrary code from your prompt\nIt does not require unrelated files or system access beyond API usage and payment handling\nRuntime Scope\nalways_on: false: the skill is not force-installed and does not run continuously\ndisable_model_invocation: false: an agent may invoke it on demand\nThe skill is limited to outbound HTTP API usage and response handling\nFor paid requests, the AI bot needs access to a crypto wallet\nPayment Model\n\nPaid calls may use HTTP 402 Payment Required.\n\nHigh-level flow:\n\nCall POST /decision/optimize\nIf the API returns 402, inspect fields such as required_amount, accepts, and payment_reference\nSatisfy the payment requirement outside this skill using host- or client-managed infrastructure\nRetry the same request with payment proof headers if available\n\nThis skill documents the API behavior and payment-related response handling. The wallet requirement is limited to paid requests.\n\nEndpoints\nGET /capabilities\n\nUse this to discover supported constraints, decision types, and payment behavior.\n\nGET /pricing\n\nUse this to check current pricing and supported chains before making a paid request.\n\nGET /status\n\nUse this for service-health checks.\n\nPOST /decision/optimize\n\nThis is the main endpoint. Send the goal and constraints, then receive:\n\nrecommended_model\nfallback_plan\ndecision metadata and explainability fields\n\nTypical request shape:\n\n{\n  \"goal\": \"Summarize customer feedback emails into a 5-bullet executive summary\",\n  \"constraints\": {\n    \"min_quality_score\": 0.8,\n    \"max_cost_usd\": 0.01\n  },\n  \"workload\": {\n    \"input_tokens\": 1200,\n    \"output_tokens\": 300,\n    \"requests\": 1\n  },\n  \"task_type\": \"summarize\"\n}\n\n\nIf payment is required, the API may first return 402 with fields such as:\n\nrequired_amount\ncurrency\naccepts[].chain\naccepts[].pay_to\npayment_reference\n\nRetry the request after external payment handling with:\n\nX-Payment-Chain\nX-Payment-Tx\nX-Payer\nX-Payment-Amount\nX-Payment-Asset\n\nIf you have a valid credit token, also send:\n\nX-Credit-Token\nPOST /decision/outcome\n\nUse this after running the recommended model. Report what actually happened so the system can issue a credit token for future use.\n\nTypical request shape:\n\n{\n  \"decision_id\": \"d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90\",\n  \"option_used\": \"openai/gpt-4o-mini\",\n  \"actual_cost\": 0.008,\n  \"actual_latency\": 650,\n  \"quality_score\": 0.86,\n  \"success\": true\n}\n\n\nTypical response includes:\n\nstatus\ndecision_id\noutcome_hash\nrefund_credit.credit_token\nRequest Strategy For Agents\nCall GET /capabilities or GET /pricing first if you need to discover current payment behavior\nUse POST /decision/optimize only when you actually need model selection help\nReuse the returned decision data rather than repeatedly asking the same question\nAfter running the chosen model, call POST /decision/outcome to earn credits\nUse the host or client payment flow when a paid request requires wallet-backed settlement\nTroubleshooting\nPAYMENT_REQUIRED\n\nThe endpoint needs payment first. Read the 402 response, satisfy the payment requirement externally, then retry with payment proof headers if available.\n\nPAYMENT_INVALID\n\nCheck:\n\nexact amount sent\ncorrect chain\ncorrect recipient\nconfirmed transaction\nheaders match the actual transaction\nNO_FEASIBLE_OPTIONS\n\nYour cost and quality constraints are too strict for the available models. Relax the budget or quality threshold and retry.\n\nRATE_LIMIT_EXCEEDED\n\nBack off and retry later. Use an idempotency key for safe retries."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Zapkid/which-llm",
    "publisherUrl": "https://clawhub.ai/Zapkid/which-llm",
    "owner": "Zapkid",
    "version": "1.0.18",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/which-llm",
    "downloadUrl": "https://openagent3.xyz/downloads/which-llm",
    "agentUrl": "https://openagent3.xyz/skills/which-llm/agent",
    "manifestUrl": "https://openagent3.xyz/skills/which-llm/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/which-llm/agent.md"
  }
}