{"service":"HALOWERK modellwerk","version":"1.0.0","currency":"USDC","network":"eip155:8453","network_name":"Base Mainnet","recipient":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","payment_header":"PAYMENT-SIGNATURE","endpoints":[{"method":"POST","path":"/v1/drift-check","url":"https://modell.halowerk.com/v1/drift-check","tool":"drift_check","price_usdc":0.003,"price_model":"per_call","summary":"Compare reference and current model feature samples for drift with PSI, Kolmogorov-Smirnov and Jensen-Shannon metrics per feature.","description":"Compares two submitted sample sets feature by feature and returns deterministic drift metrics. Continuous features are binned on the combined value range and receive PSI, Jensen-Shannon divergence and a Kolmogorov-Smirnov statistic; categorical features receive PSI and Jensen-Shannon divergence over exact category labels. The response names every feature, its sample counts, the metric values, the threshold used, and the reason a feature was flagged.","input_schema":{"type":"object","required":["reference_samples","current_samples"],"additionalProperties":false,"properties":{"reference_samples":{"type":"object","minProperties":1,"maxProperties":50,"description":"Baseline samples keyed by feature name. Each value is an array of finite numbers for continuous features or scalar category labels for categorical features.","additionalProperties":{"type":"array","minItems":2,"maxItems":10000,"items":{"type":["number","string","boolean"]}}},"current_samples":{"type":"object","minProperties":1,"maxProperties":50,"description":"Current samples keyed by the same feature names as reference_samples.","additionalProperties":{"type":"array","minItems":2,"maxItems":10000,"items":{"type":["number","string","boolean"]}}},"threshold":{"type":"number","minimum":0.01,"maximum":1,"default":0.2,"description":"Drift threshold applied to PSI for the final feature flag."},"bins":{"type":"integer","minimum":2,"maximum":50,"default":10,"description":"Number of equal-width bins for continuous features."},"feature_types":{"type":"object","maxProperties":50,"description":"Optional explicit feature types keyed by feature name.","additionalProperties":{"type":"string","enum":["continuous","categorical"]}}}},"needs_history":false,"payment_required":true,"serviceName":"drift_check","tags":["model","drift","monitoring","statistics"],"example_request":{"reference_samples":{"risk_score":[0.12,0.18,0.2,0.21,0.25,0.28,0.31,0.34],"segment":["retail","retail","smb","smb","enterprise","retail"]},"current_samples":{"risk_score":[0.14,0.19,0.23,0.32,0.4,0.44,0.48,0.52],"segment":["retail","smb","smb","enterprise","enterprise","enterprise"]},"threshold":0.2,"bins":5,"feature_types":{"risk_score":"continuous","segment":"categorical"}},"requestExample":{"reference_samples":{"risk_score":[0.12,0.18,0.2,0.21,0.25,0.28,0.31,0.34],"segment":["retail","retail","smb","smb","enterprise","retail"]},"current_samples":{"risk_score":[0.14,0.19,0.23,0.32,0.4,0.44,0.48,0.52],"segment":["retail","smb","smb","enterprise","enterprise","enterprise"]},"threshold":0.2,"bins":5,"feature_types":{"risk_score":"continuous","segment":"categorical"}},"outputSchema":{"type":"object"},"outputExample":{"drift_detected":true,"summary":{"features_checked":2,"flagged_features":2,"threshold":0.2,"bins":5,"strongest_feature":"risk_score"},"features":[{"feature":"risk_score","type":"continuous","drift":true,"severity":"high","reason":"PSI 10.283198 is at or above threshold 0.2.","metrics":{"psi":10.283198,"jensen_shannon":0.344361,"ks":0.5},"sample_counts":{"reference":8,"current":8},"distribution":[{"bin":"[0.12, 0.2)","reference_count":2,"current_count":2,"reference_share":0.25,"current_share":0.25},{"bin":"[0.2, 0.28)","reference_count":3,"current_count":1,"reference_share":0.375,"current_share":0.125},{"bin":"[0.28, 0.36)","reference_count":3,"current_count":1,"reference_share":0.375,"current_share":0.125},{"bin":"[0.36, 0.44)","reference_count":0,"current_count":1,"reference_share":0,"current_share":0.125},{"bin":"[0.44, 0.52]","reference_count":0,"current_count":3,"reference_share":0,"current_share":0.375}]},{"feature":"segment","type":"categorical","drift":true,"severity":"high","reason":"PSI 0.732408 is at or above threshold 0.2.","metrics":{"psi":0.732408,"jensen_shannon":0.125815,"ks":null},"sample_counts":{"reference":6,"current":6},"distribution":[{"bin":"enterprise","reference_count":1,"current_count":3,"reference_share":0.166667,"current_share":0.5},{"bin":"retail","reference_count":3,"current_count":1,"reference_share":0.5,"current_share":0.166667},{"bin":"smb","reference_count":2,"current_count":2,"reference_share":0.333333,"current_share":0.333333}]}],"recommendation":"Review the flagged feature distributions before trusting scores from a model calibrated on the reference sample.","limits":"This is a deterministic distribution comparison over submitted samples only. It does not prove root cause, model accuracy loss or business impact."}},{"method":"POST","path":"/v1/llm-catalog","url":"https://modell.halowerk.com/v1/llm-catalog","tool":"llm_catalog","price_usdc":0.005,"price_model":"per_call","summary":"List language models with prices per million tokens, context window, maximum output and batch discount, filtered by vendor, price ceiling or context requirement.","description":"A comparison table of language models: input, output and cache prices per million tokens, context window, maximum output length, batch discount and a short note on what each is suited to. Filter by vendor, by a maximum price, by the context window you need, or by capability tag. Every row carries the date its prices were last checked, so a stale figure is visible rather than silently wrong.","input_schema":{"type":"object","additionalProperties":false,"properties":{"vendor":{"type":"string","maxLength":64,"description":"Only models from this vendor, e.g. anthropic, openai, google."},"max_input_price":{"type":"number","minimum":0,"description":"Only models at or below this input price per million tokens."},"max_output_price":{"type":"number","minimum":0,"description":"Only models at or below this output price per million tokens."},"min_context":{"type":"integer","minimum":0,"description":"Only models whose context window is at least this many tokens."},"min_output":{"type":"integer","minimum":0,"description":"Only models able to emit at least this many output tokens."},"tag":{"type":"string","maxLength":40,"description":"Only models carrying this capability tag, e.g. coding, speed, reasoning, cheap."},"sort":{"type":"string","enum":["input_price","output_price","context","vendor"],"default":"output_price","description":"Sort order."}}},"needs_history":false,"payment_required":true,"serviceName":"llm_catalog","tags":["llm","catalog","pricing"],"example_request":{"sort":"output_price"},"requestExample":{"sort":"output_price"},"outputSchema":{"type":"object"},"outputExample":{"models":[{"model":"gpt-5-mini","vendor":"openai","family":"gpt","prices_per_mtok_usd":{"input":0.25,"output":2,"cache_read":0.025,"cache_write":null},"blended_price_3to1_usd":0.6875,"context_window":400000,"max_output":128000,"batch_discount":0.5,"strengths":["speed","cheap"],"note":null,"price_table_date":"2026-05-01"},{"model":"gemini-2.5-flash","vendor":"google","family":"gemini","prices_per_mtok_usd":{"input":0.3,"output":2.5,"cache_read":0.075,"cache_write":null},"blended_price_3to1_usd":0.85,"context_window":1048576,"max_output":65536,"batch_discount":0.5,"strengths":["speed","cheap","long-context"],"note":null,"price_table_date":"2026-05-01"},{"model":"claude-haiku-4-5","vendor":"anthropic","family":"haiku","prices_per_mtok_usd":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"blended_price_3to1_usd":2,"context_window":200000,"max_output":64000,"batch_discount":0.5,"strengths":["speed","classification","cheap"],"note":"Kleinstes Kontextfenster der Reihe.","price_table_date":"2026-06-24"},{"model":"gpt-5","vendor":"openai","family":"gpt","prices_per_mtok_usd":{"input":1.25,"output":10,"cache_read":0.125,"cache_write":null},"blended_price_3to1_usd":3.4375,"context_window":400000,"max_output":128000,"batch_discount":0.5,"strengths":["reasoning","coding"],"note":null,"price_table_date":"2026-05-01"},{"model":"gemini-2.5-pro","vendor":"google","family":"gemini","prices_per_mtok_usd":{"input":1.25,"output":10,"cache_read":0.31,"cache_write":null},"blended_price_3to1_usd":3.4375,"context_window":1048576,"max_output":65536,"batch_discount":0.5,"strengths":["long-context","multimodal"],"note":"Preis steigt oberhalb von 200.000 Token Eingabe.","price_table_date":"2026-05-01"},{"model":"claude-sonnet-5","vendor":"anthropic","family":"sonnet","prices_per_mtok_usd":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"blended_price_3to1_usd":6,"context_window":1000000,"max_output":128000,"batch_discount":0.5,"strengths":["coding","agents","balanced"],"note":"Einfuehrungspreis 2.00/10.00 bis 31.08.2026.","price_table_date":"2026-06-24"},{"model":"claude-sonnet-4-6","vendor":"anthropic","family":"sonnet","prices_per_mtok_usd":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"blended_price_3to1_usd":6,"context_window":1000000,"max_output":128000,"batch_discount":0.5,"strengths":["coding","balanced"],"note":null,"price_table_date":"2026-06-24"},{"model":"claude-opus-5","vendor":"anthropic","family":"opus","prices_per_mtok_usd":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"blended_price_3to1_usd":10,"context_window":1000000,"max_output":128000,"batch_discount":0.5,"strengths":["coding","agents","reasoning","vision"],"note":"Denken ist voreingestellt an. Abschalten nur bis Aufwandstufe high.","price_table_date":"2026-06-24"},{"model":"claude-opus-4-8","vendor":"anthropic","family":"opus","prices_per_mtok_usd":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"blended_price_3to1_usd":10,"context_window":1000000,"max_output":128000,"batch_discount":0.5,"strengths":["coding","agents","knowledge-work","memory"],"note":null,"price_table_date":"2026-06-24"},{"model":"claude-fable-5","vendor":"anthropic","family":"fable","prices_per_mtok_usd":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"blended_price_3to1_usd":20,"context_window":1000000,"max_output":128000,"batch_discount":0.5,"strengths":["reasoning","long-horizon-agents","research"],"note":"Denken ist immer an und laesst sich nicht abschalten. Nicht unter Zero-Data-Retention verfuegbar.","price_table_date":"2026-06-24"}],"count":10,"total_in_catalog":10,"filters_applied":["keine"],"sort":"output_price","cheapest_by_output":"gpt-5-mini","largest_context":"gemini-2.5-flash","vendors":["anthropic","openai","google"],"tags":["agents","balanced","cheap","classification","coding","knowledge-work","long-context","long-horizon-agents","memory","multimodal","reasoning","research","speed","vision"],"price_table_dates":["2026-05-01","2026-06-24"],"currency":"USD je 1 Million Token","blended_price_basis":"3 Teile Eingabe zu 1 Teil Ausgabe","limits":"Gepflegte Tabelle mit Stand je Eintrag, kein Live-Abruf. Nur oeffentliche Listenpreise; ausgehandelte Konditionen, Verfuegbarkeit und kontobezogene Ratengrenzen sind nicht abgebildet."}},{"method":"POST","path":"/v1/model-router","url":"https://modell.halowerk.com/v1/model-router","tool":"model_router","price_usdc":0.002,"price_model":"per_call","summary":"Pick a model for a task given budget, latency need, context size and data-residency constraints, with the score breakdown and the runners-up.","description":"Scores every catalogue model against one task and returns a ranked shortlist. You state the task kind, optionally a per-call budget in USD, how much speed matters, the input size and any vendor restriction; the answer names a model, the estimated cost per call, and the sub-scores it was chosen on, so the ranking can be checked rather than trusted. Models that cannot hold the input are excluded and listed separately with the reason. Weights are yours to set and are echoed back.","input_schema":{"type":"object","required":["task"],"additionalProperties":false,"properties":{"task":{"type":"string","enum":["classification","extraction","summarization","translation","chat","coding","agent","reasoning","research","vision","long_context"],"description":"What the model has to do."},"budget_usd_per_call":{"type":"number","minimum":0,"description":"Ceiling per call. Models above it are excluded."},"speed_priority":{"type":"string","enum":["low","normal","high"],"default":"normal","description":"How much latency matters."},"input_tokens":{"type":"integer","minimum":0,"default":2000,"description":"Expected input size in tokens."},"input_text":{"type":"string","maxLength":100000,"description":"Sample input. Used to estimate input_tokens if that is not given."},"output_tokens":{"type":"integer","minimum":0,"description":"Expected output length. Defaults to a value typical for the task."},"allowed_vendors":{"type":"array","items":{"type":"string"},"description":"Restrict to these vendors, e.g. for a data-residency or procurement rule."},"excluded_vendors":{"type":"array","items":{"type":"string"},"description":"Exclude these vendors."},"require_tags":{"type":"array","items":{"type":"string"},"description":"Capabilities the model must carry, e.g. vision."},"weights":{"type":"object","additionalProperties":false,"description":"Weighting of cost, capability and speed. Normalised to sum 1.","properties":{"cost":{"type":"number","minimum":0,"default":0.4},"capability":{"type":"number","minimum":0,"default":0.4},"speed":{"type":"number","minimum":0,"default":0.2}}}}},"needs_history":false,"payment_required":true,"serviceName":"model_router","tags":["llm","routing","selection"],"example_request":{"task":"classification","speed_priority":"normal","input_tokens":2000},"requestExample":{"task":"classification","speed_priority":"normal","input_tokens":2000},"outputSchema":{"type":"object"},"outputExample":{"task":"classification","task_profile":{"requires":["speed","cheap"],"reasoning_load":1,"typical_output_tokens":20},"recommendation":{"model":"gpt-5-mini","vendor":"openai","cost_usd_per_call":0.00054,"why":"Best weighted result among 10 eligible models: Kosten 100 von 100, Eignung 100 von 100 (speed, cheap), Tempo 100 von 100."},"ranked":[{"model":"gpt-5-mini","vendor":"openai","score":1,"subscores":{"cost":1,"capability":1,"speed_proxy":1},"cost_usd_per_call":0.00054,"matched_strengths":["speed","cheap"],"missing_strengths":[],"context_window":400000,"context_headroom":397980,"price_table_date":"2026-05-01","rank":1},{"model":"gemini-2.5-flash","vendor":"google","score":0.9958,"subscores":{"cost":0.9946,"capability":1,"speed_proxy":0.9896},"cost_usd_per_call":0.00065,"matched_strengths":["speed","cheap"],"missing_strengths":[],"context_window":1048576,"context_headroom":1046556,"price_table_date":"2026-05-01","rank":2},{"model":"claude-haiku-4-5","vendor":"anthropic","score":0.957,"subscores":{"cost":0.9238,"capability":1,"speed_proxy":0.9375},"cost_usd_per_call":0.0021,"matched_strengths":["speed","cheap"],"missing_strengths":[],"context_window":200000,"context_headroom":197980,"price_table_date":"2026-06-24","rank":3},{"model":"gpt-5","vendor":"openai","score":0.5244,"subscores":{"cost":0.8944,"capability":0,"speed_proxy":0.8333},"cost_usd_per_call":0.0027,"matched_strengths":[],"missing_strengths":["speed","cheap"],"context_window":400000,"context_headroom":397980,"price_table_date":"2026-05-01","rank":4},{"model":"gemini-2.5-pro","vendor":"google","score":0.5244,"subscores":{"cost":0.8944,"capability":0,"speed_proxy":0.8333},"cost_usd_per_call":0.0027,"matched_strengths":[],"missing_strengths":["speed","cheap"],"context_window":1048576,"context_headroom":1046556,"price_table_date":"2026-05-01","rank":5},{"model":"claude-sonnet-5","vendor":"anthropic","score":0.4332,"subscores":{"cost":0.7185,"capability":0,"speed_proxy":0.7292},"cost_usd_per_call":0.0063,"matched_strengths":[],"missing_strengths":["speed","cheap"],"context_window":1000000,"context_headroom":997980,"price_table_date":"2026-06-24","rank":6},{"model":"claude-sonnet-4-6","vendor":"anthropic","score":0.4332,"subscores":{"cost":0.7185,"capability":0,"speed_proxy":0.7292},"cost_usd_per_call":0.0063,"matched_strengths":[],"missing_strengths":["speed","cheap"],"context_window":1000000,"context_headroom":997980,"price_table_date":"2026-06-24","rank":7},{"model":"claude-opus-5","vendor":"anthropic","score":0.3094,"subscores":{"cost":0.5132,"capability":0,"speed_proxy":0.5208},"cost_usd_per_call":0.0105,"matched_strengths":[],"missing_strengths":["speed","cheap"],"context_window":1000000,"context_headroom":997980,"price_table_date":"2026-06-24","rank":8},{"model":"claude-opus-4-8","vendor":"anthropic","score":0.3094,"subscores":{"cost":0.5132,"capability":0,"speed_proxy":0.5208},"cost_usd_per_call":0.0105,"matched_strengths":[],"missing_strengths":["speed","cheap"],"context_window":1000000,"context_headroom":997980,"price_table_date":"2026-06-24","rank":9},{"model":"claude-fable-5","vendor":"anthropic","score":0,"subscores":{"cost":0,"capability":0,"speed_proxy":0},"cost_usd_per_call":0.021,"matched_strengths":[],"missing_strengths":["speed","cheap"],"context_window":1000000,"context_headroom":997980,"price_table_date":"2026-06-24","rank":10}],"runner_up":{"model":"gemini-2.5-flash","score":0.9958,"cost_difference_usd":0.00011},"excluded":[],"tokens":{"input":2000,"output":20,"total":2020,"estimated":false},"weights_used":{"cost":0.4,"capability":0.4,"speed":0.2,"speed_priority":"normal"},"limits":"Heuristik ueber veroeffentlichte Preise und Faehigkeitsmerkmale, kein Leistungsvergleich. speed_proxy ist vom Ausgabepreis abgeleitet, nicht gemessen. Fuer qualitaetskritische Faelle ist das eine Vorauswahl zum Testen, kein Urteil."}},{"method":"POST","path":"/v1/cost-estimate","url":"https://modell.halowerk.com/v1/cost-estimate","tool":"cost_estimate","price_usdc":0.002,"price_model":"per_call","summary":"Estimate token use and price for a prompt across several models before you spend anything, including cache and batch discounts.","description":"Works out what a call would cost. Give either the text itself or a token count, plus the expected output length, and get input, output, cache-read and cache-write cost per model with the total. Token counts derived from text are estimates from character and word statistics, not a tokeniser, and typically land within about 15 percent — where an exact count matters, count with the vendor tokeniser.","input_schema":{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":200000,"description":"The prompt text. Either this or input_tokens."},"input_tokens":{"type":"integer","minimum":0,"maximum":10000000,"description":"Known input token count. Either this or text."},"output_tokens":{"type":"integer","minimum":0,"maximum":1000000,"default":500,"description":"Expected output length in tokens."},"models":{"type":"array","items":{"type":"string"},"maxItems":20,"description":"Model ids to price. All known models if omitted."},"calls":{"type":"integer","minimum":1,"maximum":1000000,"default":1,"description":"Number of identical calls to multiply by."},"cached_input_tokens":{"type":"integer","minimum":0,"description":"Of the input tokens, how many are served from cache."},"batch":{"type":"boolean","default":false,"description":"Apply the batch discount where the model has one."}}},"needs_history":false,"payment_required":true,"serviceName":"cost_estimate","tags":["llm","cost","planning"],"example_request":{"output_tokens":500,"calls":1,"batch":false},"requestExample":{"output_tokens":500,"calls":1,"batch":false},"outputSchema":{"type":"object"}},{"method":"POST","path":"/v1/context-plan","url":"https://modell.halowerk.com/v1/context-plan","tool":"context_plan","price_usdc":0.002,"price_model":"per_call","summary":"Work out how to split a document across a model context window: how many chunks, where the cuts fall, how much overlap, and what it will cost.","description":"Plans the division of a long input for a given model. It reserves room for the system prompt, the expected answer and a safety margin, then works out how many chunks are needed and where to cut, preferring paragraph boundaries over line and sentence boundaries and never cutting inside a word. Optional overlap carries context across the seams.","input_schema":{"type":"object","required":["text","model"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":2000000,"description":"The document to split."},"model":{"type":"string","description":"Target model id, e.g. claude-opus-5."},"expected_output_tokens":{"type":"integer","minimum":0,"default":2000,"description":"Room to reserve for the answer per chunk."},"system_prompt_tokens":{"type":"integer","minimum":0,"default":500,"description":"Room to reserve for the system prompt per chunk."},"overlap_tokens":{"type":"integer","minimum":0,"maximum":20000,"default":0,"description":"Tokens of the previous chunk repeated at the start of the next."},"safety_margin":{"type":"number","minimum":0,"maximum":0.5,"default":0.1,"description":"Fraction of the window held back against estimation error. 0.1 = 10 percent."},"boundary":{"type":"string","enum":["absatz","zeile","satz","auto"],"default":"auto","description":"Where to cut. auto tries paragraph, then line, then sentence."}}},"needs_history":false,"payment_required":true,"serviceName":"context_plan","tags":["llm","context","planning"],"example_request":{"text":"First section with the customer requirements.\n\nSecond section with implementation constraints and acceptance criteria.","model":"gpt-5-mini","expected_output_tokens":800,"boundary":"auto"},"requestExample":{"text":"First section with the customer requirements.\n\nSecond section with implementation constraints and acceptance criteria.","model":"gpt-5-mini","expected_output_tokens":800,"boundary":"auto"},"outputSchema":{"type":"object"},"outputExample":{"model":"gpt-5-mini","fits_in_one_pass":true,"chunks":1,"tokens":{"total":26,"usable_per_chunk":358830,"context_window":400000,"reserved_for_system":500,"reserved_for_output":800,"safety_margin":0.1},"estimate_basis":"118 Zeichen, 14 Woerter, 4.00 Zeichen/Token angenommen","cost_usd":0.001731,"plan":[],"advice":"Der Text passt in einen Aufruf. Aufteilen wuerde nur Kosten und Fehlerquellen erzeugen.","limits":"Tokenzahlen sind geschaetzt, nicht tokenisiert."}},{"method":"POST","path":"/v1/output-validate","url":"https://modell.halowerk.com/v1/output-validate","tool":"output_validate","price_usdc":0.002,"price_model":"per_call","summary":"Check a model answer against a JSON schema and get every deviation named in plain language with its path, plus whether the JSON was wrapped in prose or a code fence.","description":"Validates output against a JSON Schema and reports each violation with its JSON path, the rule it broke and a sentence saying what to change. Accepts either a parsed object or the raw string a model returned: a payload wrapped in a code fence or surrounded by prose is unwrapped, and the wrapping is reported separately from schema errors so you fix the right layer. Draft 2020-12 and draft-07 are both supported, along with the common string formats.","input_schema":{"type":"object","required":["schema"],"additionalProperties":false,"properties":{"output":{"description":"The model answer, as a parsed JSON value. Either this or output_text."},"output_text":{"type":"string","maxLength":400000,"description":"The raw answer as text. Code fences and surrounding prose are stripped."},"schema":{"type":"object","description":"JSON Schema to validate against."},"all_errors":{"type":"boolean","default":true,"description":"Report every violation instead of stopping at the first."},"suggest_repairs":{"type":"boolean","default":true,"description":"List repairable problems (defaultable missing fields, extra fields)."}}},"needs_history":false,"payment_required":true,"serviceName":"output_validate","tags":["llm","validation","schema"],"example_request":{"schema":{},"all_errors":true,"suggest_repairs":true},"requestExample":{"schema":{},"all_errors":true,"suggest_repairs":true},"outputSchema":{"type":"object"}},{"method":"POST","path":"/v1/trace-grade","url":"https://modell.halowerk.com/v1/trace-grade","tool":"trace_grade","price_usdc":0.002,"price_model":"per_call","summary":"Grade an agent run: total cost, repeated identical tool calls, error streaks, calls that returned nothing, and which step consumed the budget.","description":"Takes the steps of one agent run and returns a scored report. It counts identical tool calls (same tool, same arguments) as loops, finds the longest run of consecutive failures, marks calls whose result was empty or null as wasted, and attributes cost per step and per tool so the expensive part is visible. Cost is taken from your figures when supplied, otherwise computed from token counts against the model price table.","input_schema":{"type":"object","required":["steps"],"additionalProperties":false,"properties":{"steps":{"type":"array","minItems":1,"maxItems":1000,"description":"The steps of the run, in order.","items":{"type":"object","additionalProperties":true,"properties":{"tool":{"type":"string","description":"Name of the tool or step."},"arguments":{"description":"The arguments used. Identical arguments on the same tool count as a loop."},"ok":{"type":"boolean","description":"Whether the step succeeded. Defaults to true unless error is set."},"error":{"type":"string","description":"Error text, if it failed."},"result":{"description":"The result. Empty, null or an empty list counts as a wasted call."},"input_tokens":{"type":"integer","minimum":0},"output_tokens":{"type":"integer","minimum":0},"cost_usd":{"type":"number","minimum":0,"description":"Cost of this step, if you already know it."},"duration_ms":{"type":"integer","minimum":0}}}},"model":{"type":"string","description":"Model id used, to price token counts when cost_usd is absent."},"loop_threshold":{"type":"integer","minimum":2,"default":2,"description":"From how many identical calls on it counts as a loop."}}},"needs_history":false,"payment_required":true,"serviceName":"trace_grade","tags":["agent","observability","cost"],"example_request":{"steps":[{}],"loop_threshold":2},"requestExample":{"steps":[{}],"loop_threshold":2},"outputSchema":{"type":"object"},"outputExample":{"grade":"B","score":80,"deductions":[{"reason":"Calls without a result","deducted":20,"value":1,"threshold":0.15}],"metrics":{"steps":1,"errors":0,"empty_results":1,"longest_error_streak":0,"loops":0,"wasted_calls":0,"distinct_tools":1,"loop_ratio":0,"error_ratio":0,"empty_ratio":1,"cost_concentration":0},"thresholds_used":{"loop_ratio":0.1,"error_ratio":0.15,"empty_ratio":0.15,"cost_concentration":0.6},"cost":{"total_usd":0,"estimated_from_tokens":false,"model":null,"input_tokens":0,"output_tokens":0,"wasted_usd":0,"duration_ms":0},"loops":[],"most_expensive_steps":[{"step":1,"tool":"schritt_1","cost_usd":0,"ok":true,"duration_ms":null}],"per_tool":[{"tool":"schritt_1","calls":1,"cost_usd":0,"errors":0,"empty":1,"duration_ms":0}],"recommendations":["1 call(s) returned nothing. Check whether the prerequisite is met before calling."],"limits":"This assesses the run's shape and cost, not its correctness. A run without loops or errors can still return the wrong result. Two calls with identical arguments count as repetition even if the world may have changed between them."}},{"method":"POST","path":"/v1/openapi-validate","url":"https://modell.halowerk.com/v1/openapi-validate","tool":"openapi_validate","price_usdc":0.002,"price_model":"per_call","summary":"Check an OpenAPI document for structural errors, dangling references, operations without an id, responses without a schema and endpoints without an example.","description":"Reads an OpenAPI 3.x document and reports what would stop a machine consumer. Errors: missing openapi, info or paths; a path that declares no method; an internal $ref that resolves to nothing; a parameter without a name, location or schema; a request body without content.","input_schema":{"type":"object","required":["document"],"additionalProperties":false,"properties":{"document":{"type":"object","description":"The OpenAPI document as JSON."},"require_examples":{"type":"boolean","default":true,"description":"Report operations with no example as a warning."},"require_operation_ids":{"type":"boolean","default":true,"description":"Report operations without operationId as a warning."}}},"needs_history":false,"payment_required":true,"serviceName":"openapi_validate","tags":["api","openapi","validation"],"example_request":{"document":{},"require_examples":true,"require_operation_ids":true},"requestExample":{"document":{},"require_examples":true,"require_operation_ids":true},"outputSchema":{"type":"object"},"outputExample":{"valid":false,"verdict":"invalid","counts":{"error":3,"warning":1,"info":0},"findings":[{"severity":"error","path":"/openapi","code":"version_missing","message":"Feld \"openapi\" fehlt. Ohne Version ist unklar, welche Regeln gelten."},{"severity":"error","path":"/info","code":"info_missing","message":"Block \"info\" fehlt."},{"severity":"error","path":"/paths","code":"paths_missing","message":"Block \"paths\" fehlt oder ist kein Objekt."},{"severity":"warning","path":"/servers","code":"servers_missing","message":"Kein servers-Eintrag. Ein Aufrufer muss die Basisadresse raten."}],"summary":{"openapi_version":null,"title":null,"api_version":null,"paths":0,"operations":0,"operations_with_example":0,"operations_with_operation_id":0,"refs_total":0,"refs_external":0,"schemas_defined":0},"operations":[],"machine_usable_operations":0,"limits":"Nur das uebergebene Dokument wird gelesen. Verweise in andere Dateien werden nicht nachgeladen, und es wird kein Aufruf gegen den beschriebenen Dienst gemacht — ob die Beschreibung der Wirklichkeit entspricht, steht hier nicht."}},{"method":"POST","path":"/v1/openapi-to-mcp","url":"https://modell.halowerk.com/v1/openapi-to-mcp","tool":"openapi_to_mcp","price_usdc":0.002,"price_model":"per_call","summary":"Turn an OpenAPI document into MCP tool definitions: one tool per operation, all parameters merged into a single flat input schema with references written out.","description":"Converts each OpenAPI operation into an MCP tool. Path, query and header parameters and the JSON request body are merged into one input schema, because MCP tools take exactly one; a name collision between a body field and a parameter is reported rather than silently overwritten. Internal $refs are expanded inline so each tool schema stands alone — an MCP client cannot resolve them.","input_schema":{"type":"object","required":["document"],"additionalProperties":false,"properties":{"document":{"type":"object","description":"The OpenAPI 3.x document as JSON."},"naming":{"type":"string","enum":["snake_case","preserve"],"default":"snake_case","description":"How to normalise tool names."},"include_methods":{"type":"array","items":{"type":"string"},"description":"Only convert these HTTP methods, e.g. [\"get\"] for a read-only server."},"prefix":{"type":"string","maxLength":40,"description":"Prefix for every tool name, to keep several APIs apart in one client."}}},"needs_history":false,"payment_required":true,"serviceName":"openapi_to_mcp","tags":["api","openapi","mcp"],"example_request":{"document":{},"naming":"snake_case"},"requestExample":{"document":{},"naming":"snake_case"},"outputSchema":{"type":"object"}},{"method":"POST","path":"/v1/tool-arg-validate","url":"https://modell.halowerk.com/v1/tool-arg-validate","tool":"tool_arg_validate","price_usdc":0.002,"price_model":"per_call","summary":"Check tool arguments against their schema before an expensive or irreversible call, and get warnings for values that pass the schema but look like mistakes.","description":"Two checks in one. First the arguments are validated against the tool input schema and every violation is reported with its path and a sentence saying what to change. Second, values that satisfy the schema but look wrong are flagged: an unset required field filled with a placeholder like \"string\" or \"TODO\", a number at a suspicious order of magnitude, an address that fails its checksum shape, a destructive flag set to true, an empty string where content was expected.","input_schema":{"type":"object","required":["arguments","schema"],"additionalProperties":false,"properties":{"arguments":{"type":"object","description":"The arguments about to be sent."},"schema":{"type":"object","description":"The tool input schema."},"tool_name":{"type":"string","maxLength":128,"description":"Name of the tool, carried into the report."},"irreversible":{"type":"boolean","default":false,"description":"Mark the call as irreversible. Raises every warning one level."},"expected_magnitude":{"type":"object","additionalProperties":{"type":"number"},"description":"Optional per-field order-of-magnitude hint, e.g. {\"amount\": 100}. A value more than 100x off is flagged."}}},"needs_history":false,"payment_required":true,"serviceName":"tool_arg_validate","tags":["agent","tools","validation","safety"],"example_request":{"arguments":{},"schema":{},"irreversible":false},"requestExample":{"arguments":{},"schema":{},"irreversible":false},"outputSchema":{"type":"object"},"outputExample":{"tool_name":null,"schema_valid":true,"schema_errors":[],"warnings":[],"counts":{"schema_errors":0,"error":0,"warning":0,"info":0},"safe_to_call":true,"verdict":"ok","irreversible":false,"advice":"Keine Auffaelligkeit gefunden.","limits":"Warnings are heuristics over field names and values. They can flag harmless cases and miss dangerous ones. They replace neither the schema nor the called tool's own validation."}},{"method":"POST","path":"/v1/tool-compat","url":"https://modell.halowerk.com/v1/tool-compat","tool":"tool_compat","price_usdc":0.002,"price_model":"per_call","summary":"Check whether one tool output can feed another tool input: which required fields are covered, which are missing, and which only match under a different name.","description":"Compares a producer output schema against a consumer input schema and reports whether the two can be chained. Every required field of the consumer is looked for in the producer: exact name matches first, then well-known synonyms (url/uri/link, id/key/ref, created_at/timestamp and so on), which are reported as renames needing a mapping rather than as clean matches.","input_schema":{"type":"object","required":["producer_schema","consumer_schema"],"additionalProperties":false,"properties":{"producer_schema":{"type":"object","description":"Output schema of the first tool."},"consumer_schema":{"type":"object","description":"Input schema of the second tool."},"producer_name":{"type":"string","maxLength":128,"description":"Name of the producing tool, for the report."},"consumer_name":{"type":"string","maxLength":128,"description":"Name of the consuming tool, for the report."},"use_synonyms":{"type":"boolean","default":true,"description":"Accept well-known renames as a match."}}},"needs_history":false,"payment_required":true,"serviceName":"tool_compat","tags":["agent","tools","schema","pipeline"],"example_request":{"producer_schema":{},"consumer_schema":{},"use_synonyms":true},"requestExample":{"producer_schema":{},"consumer_schema":{},"use_synonyms":true},"outputSchema":{"type":"object"}},{"method":"POST","path":"/v1/llm-catalog-diff","url":"https://modell.halowerk.com/v1/llm-catalog-diff","tool":"llm_catalog_diff","price_usdc":0.005,"price_model":"per_call","summary":"Compare two submitted language-model catalog snapshots and return added, removed and changed models with field-level price and context differences.","description":"Use this when an agent has an older and a newer LLM catalog snapshot and needs a deterministic migration diff before changing routing or budgets. Rows are matched by vendor plus model, id or name. The result separates added, removed and changed models and reports field-level differences for input, output and cached-input price, context window and maximum output tokens.","input_schema":{"type":"object","required":["before","after"],"additionalProperties":false,"properties":{"before":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"object","additionalProperties":true,"anyOf":[{"required":["model"]},{"required":["id"]},{"required":["name"]}],"properties":{"vendor":{"type":"string","maxLength":64,"description":"Provider name. Empty is allowed when model identifiers are globally unique."},"model":{"type":"string","minLength":1,"maxLength":160},"id":{"type":"string","minLength":1,"maxLength":160},"name":{"type":"string","minLength":1,"maxLength":160},"input_price_per_million":{"type":["number","null"],"minimum":0},"output_price_per_million":{"type":["number","null"],"minimum":0},"cached_input_price_per_million":{"type":["number","null"],"minimum":0},"context_window":{"type":["integer","null"],"minimum":0},"max_output_tokens":{"type":["integer","null"],"minimum":0}}},"description":"Older catalog snapshot."},"after":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"object","additionalProperties":true,"anyOf":[{"required":["model"]},{"required":["id"]},{"required":["name"]}],"properties":{"vendor":{"type":"string","maxLength":64,"description":"Provider name. Empty is allowed when model identifiers are globally unique."},"model":{"type":"string","minLength":1,"maxLength":160},"id":{"type":"string","minLength":1,"maxLength":160},"name":{"type":"string","minLength":1,"maxLength":160},"input_price_per_million":{"type":["number","null"],"minimum":0},"output_price_per_million":{"type":["number","null"],"minimum":0},"cached_input_price_per_million":{"type":["number","null"],"minimum":0},"context_window":{"type":["integer","null"],"minimum":0},"max_output_tokens":{"type":["integer","null"],"minimum":0}}},"description":"Newer catalog snapshot."}},"examples":[{"before":[{"vendor":"example-ai","model":"model-small","input_price_per_million":1,"output_price_per_million":3,"context_window":32000}],"after":[{"vendor":"example-ai","model":"model-small","input_price_per_million":0.8,"output_price_per_million":3,"context_window":64000}]}]},"needs_history":false,"payment_required":true,"serviceName":"llm_catalog_diff","tags":["llm","catalog","diff","pricing"],"example_request":{"before":[{"vendor":"example-ai","model":"model-small","input_price_per_million":1,"context_window":32000}],"after":[{"vendor":"example-ai","model":"model-small","input_price_per_million":0.8,"context_window":64000}]},"requestExample":{"before":[{"vendor":"example-ai","model":"model-small","input_price_per_million":1,"context_window":32000}],"after":[{"vendor":"example-ai","model":"model-small","input_price_per_million":0.8,"context_window":64000}]},"outputSchema":{"type":"object","required":["summary","added","removed","changed","unchanged"],"additionalProperties":false,"properties":{"summary":{"type":"object","required":["before","after","added","removed","changed","unchanged"],"properties":{"before":{"type":"integer"},"after":{"type":"integer"},"added":{"type":"integer"},"removed":{"type":"integer"},"changed":{"type":"integer"},"unchanged":{"type":"integer"}}},"added":{"type":"array","items":{"type":"object"}},"removed":{"type":"array","items":{"type":"object"}},"changed":{"type":"array","items":{"type":"object"}},"unchanged":{"type":"array","items":{"type":"object"}}}},"outputExample":{"summary":{"before":1,"after":1,"added":0,"removed":0,"changed":1,"unchanged":0},"added":[],"removed":[],"changed":[{"vendor":"example-ai","model":"model-small","changes":[{"field":"input_price_per_million","before":1,"after":0.8},{"field":"context_window","before":32000,"after":64000}]}],"unchanged":[]}},{"method":"POST","path":"/v1/chat-completions","url":"https://modell.halowerk.com/v1/chat-completions","tool":"chat_completions","price_usdc":0.003,"price_model":"per_call","summary":"Run a bounded non-streaming language-model completion.","description":"Runs openai/gpt-oss-20b via GroqCloud. Messages are sent to Groq Inc., USA; payment metadata is not forwarded. At most 8 messages, 8192 UTF-8 bytes overall and 1024 completion tokens including reasoning. A length finish_reason exposes truncation. No tool execution, browsing or API key resale.","input_schema":{"type":"object","properties":{"messages":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"object","properties":{"role":{"enum":["system","user","assistant"]},"content":{"type":"string","minLength":1,"maxLength":4000}},"required":["role","content"],"additionalProperties":false}}},"required":["messages"],"additionalProperties":false},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/text-embeddings","url":"https://modell.halowerk.com/v1/text-embeddings","tool":"text_embeddings","price_usdc":0.003,"price_model":"per_call","summary":"Embed up to four short texts on the local AX42 model.","description":"Runs nomic-embed-text locally through Ollama and returns 768-dimensional embeddings. No third-party text transfer. Input is rejected rather than silently truncated; at most four 1000-character strings per request.","input_schema":{"type":"object","properties":{"input":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","minLength":1,"maxLength":1000}}},"required":["input"],"additionalProperties":false},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/document-rerank","url":"https://modell.halowerk.com/v1/document-rerank","tool":"document_rerank","price_usdc":0.003,"price_model":"per_call","summary":"Rank supplied documents against a query using local embeddings.","description":"Embeds a query and at most 20 short documents on local nomic-embed-text, then sorts by cosine similarity with stable input-index tie breaks. Scores are not probabilities. No third-party text transfer; input is not silently truncated.","input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":1000},"documents":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":1000}},"top_n":{"type":"integer","minimum":1,"maximum":20},"return_documents":{"type":"boolean","default":false}},"required":["query","documents"],"additionalProperties":false},"needs_history":false,"payment_required":true}],"updated_at":"2026-11-11T00:26:41.969Z"}