{"components": {"schemas": {"AnalysisBenchmarkResponse": {"additionalProperties": true, "properties": {"benchmark": {"type": "object"}, "ok": {"const": true}, "operation": {"const": "analysis_benchmark_report"}, "privacy": {"type": "object"}, "report": {"description": "Aggregate-only benchmark decision report. Raw conversations, CRM values, contact IDs, prompts, and provider responses are rejected by the server.", "type": "object"}}, "required": ["ok", "operation", "benchmark", "report", "privacy"], "type": "object"}, "AnalysisBenchmarksResponse": {"additionalProperties": true, "properties": {"ok": {"const": true}, "operation": {"const": "analysis_list_benchmarks"}, "privacy": {"type": "object"}, "run_count": {"type": "integer"}, "runs": {"items": {"type": "object"}, "type": "array"}}, "required": ["ok", "operation", "run_count", "runs", "privacy"], "type": "object"}, "AnalysisDatasetProfileResponse": {"additionalProperties": true, "properties": {"available": {"type": "boolean"}, "notes": {"items": {"type": "string"}, "type": "array"}, "ok": {"const": true}, "operation": {"const": "analysis_dataset_profile"}, "profile": {"description": "Aggregate-only statistics. Contains no conversation IDs, paths, or raw text.", "type": "object"}}, "required": ["ok", "operation", "available", "profile"], "type": "object"}, "AnalysisRunReportResponse": {"additionalProperties": true, "properties": {"manifest": {"type": "object"}, "notes": {"items": {"type": "string"}, "type": "array"}, "ok": {"const": true}, "operation": {"const": "analysis_run_report"}, "report": {"type": "object"}, "run": {"type": "object"}, "summary": {"type": "object"}}, "required": ["ok", "operation", "run", "summary", "report"], "type": "object"}, "AnalysisRunsResponse": {"additionalProperties": true, "properties": {"notes": {"items": {"type": "string"}, "type": "array"}, "ok": {"const": true}, "operation": {"const": "analysis_list_runs"}, "root": {"type": "string"}, "run_count": {"type": "integer"}, "runs": {"items": {"type": "object"}, "type": "array"}}, "required": ["ok", "operation", "run_count", "runs"], "type": "object"}, "AnalysisScaleEstimateRequest": {"description": "Estimate-only scale projection. It uses local pricing metadata and token assumptions; it does not call providers.", "properties": {"avg_messages_per_conversation": {"exclusiveMinimum": 0, "type": "number"}, "avg_text_tokens_per_message": {"exclusiveMinimum": 0, "type": "number"}, "budget_usd_ceiling": {"default": 60, "minimum": 0, "type": "number"}, "conversation_count": {"default": 1500, "minimum": 1, "type": "integer"}, "estimated_input_tokens_per_call": {"minimum": 1, "type": "integer"}, "estimated_input_tokens_per_conversation": {"deprecated": true, "description": "Legacy alias interpreted as tokens per provider call.", "minimum": 1, "type": "integer"}, "estimated_output_tokens_per_call": {"minimum": 1, "type": "integer"}, "estimated_output_tokens_per_conversation": {"deprecated": true, "description": "Legacy alias interpreted as tokens per provider call.", "minimum": 1, "type": "integer"}, "message_count": {"default": 1000, "minimum": 1, "type": "integer"}, "selections": {"items": {"$ref": "#/components/schemas/AnalysisSelection"}, "type": "array"}, "turn_trigger_rate": {"default": 1, "maximum": 1, "minimum": 0, "type": "number"}, "turn_window_messages": {"default": 12, "minimum": 1, "type": "integer"}}, "type": "object"}, "AnalysisScaleEstimateResponse": {"additionalProperties": true, "properties": {"budget_usd_ceiling": {"type": "number"}, "conversation_count": {"type": "integer"}, "dataset_profile": {"type": "object"}, "estimate_only": {"const": true}, "message_count": {"type": "integer"}, "mode_comparisons": {"items": {"type": "object"}, "type": "array"}, "notes": {"items": {"type": "string"}, "type": "array"}, "ok": {"const": true}, "operation": {"const": "analysis_estimate_scale"}, "rows": {"items": {"type": "object"}, "type": "array"}, "selection_count": {"type": "integer"}, "within_budget_count": {"type": "integer"}}, "required": ["ok", "operation", "estimate_only", "conversation_count", "rows"], "type": "object"}, "AnalysisSelection": {"description": "Estimate-only provider/model candidate selection. Values come from provider_catalog and do not imply that live execution is enabled.", "properties": {"chunk_size_messages": {"anyOf": [{"maximum": 10000, "minimum": 1, "type": "integer"}, {"type": "null"}]}, "framework": {"enum": ["current_house", "langextract"], "type": "string"}, "max_output_tokens": {"anyOf": [{"maximum": 32768, "minimum": 1, "type": "integer"}, {"type": "null"}]}, "mode": {"enum": ["chunk", "message_by_message", "turn"], "type": "string"}, "model_id": {"description": "Model ID must belong to the selected provider. See x-provider-models.", "enum": ["fixture-current-house", "gemini-2.5-flash", "gemini-2.5-pro", "gpt-4o-mini", "gpt-4o", "gpt-5-mini", "openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol", "deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro"], "type": "string", "x-provider-models": {"fixture": ["fixture-current-house"], "gemini": ["gemini-2.5-flash", "gemini-2.5-pro"], "openai": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "openrouter": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol", "deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro"]}}, "modes": {"items": {"enum": ["chunk", "message_by_message", "turn"], "type": "string"}, "minItems": 1, "type": "array"}, "provider": {"enum": ["fixture", "gemini", "openai", "openrouter"], "type": "string"}, "reasoning_effort": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "temperature": {"anyOf": [{"maximum": 2, "minimum": 0, "type": "number"}, {"type": "null"}]}}, "type": "object"}, "ConversationListResponse": {"properties": {"conversations": {"items": {"$ref": "#/components/schemas/ConversationSummary"}, "type": "array"}, "golden_set_count": {"minimum": 0, "type": "integer"}, "golden_source_available_count": {"minimum": 0, "type": "integer"}, "has_more": {"type": "boolean"}, "limit": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "offset": {"type": "integer"}, "query": {"type": "string"}, "returned_count": {"type": "integer"}, "total_count": {"type": "integer"}}, "required": ["conversations"], "type": "object"}, "ConversationResponse": {"description": "Conversation catalog response. Live shared-data deployments expose sanitized message metadata through service adapters.", "type": "object"}, "ConversationSummary": {"additionalProperties": true, "properties": {"captured_field_count": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}]}, "conversation_id": {"type": "string"}, "crm_extraction_status": {"enum": ["extracted", "not_extracted", "unknown"], "type": "string"}, "crm_store_status": {"enum": ["available", "unavailable", "not_configured"], "type": "string"}, "golden_case": {"anyOf": [{"$ref": "#/components/schemas/GoldenCaseSummary"}, {"type": "null"}]}, "message_count": {"minimum": 0, "type": "integer"}}, "required": ["conversation_id", "message_count", "captured_field_count", "crm_store_status", "crm_extraction_status"], "type": "object"}, "CostCalculation": {"additionalProperties": true, "properties": {"currency": {"const": "USD"}, "formula": {"type": "string"}, "formula_substitution": {"type": "string"}, "input_cost_usd": {"type": "number"}, "input_tokens": {"type": "integer"}, "input_usd_per_1m_tokens": {"type": "number"}, "input_usd_per_token": {"type": "number"}, "output_cost_usd": {"type": "number"}, "output_tokens": {"type": "integer"}, "output_usd_per_1m_tokens": {"type": "number"}, "output_usd_per_token": {"type": "number"}, "pricing_source": {"type": "object"}, "rounding_policy": {"type": "string"}, "token_count_kind": {"enum": ["estimated", "provider_usage", "billing_actual", "mixed"], "type": "string"}, "total_cost_usd": {"type": "number"}, "total_tokens": {"type": "integer"}}, "required": ["currency", "token_count_kind", "input_tokens", "output_tokens", "total_tokens", "input_usd_per_token", "output_usd_per_token", "input_cost_usd", "output_cost_usd", "total_cost_usd", "formula", "formula_substitution", "rounding_policy", "pricing_source"], "type": "object"}, "CsvBatchRequest": {"anyOf": [{"required": ["file"]}, {"required": ["files"]}, {"required": ["files[]"]}], "description": "Upload one or more CSV files using any accepted file field name. Each CSV may contain one conversation or multiple conversations grouped by contact_id.", "properties": {"budget_usd_ceiling": {"minimum": 0, "type": "number"}, "chunk_size_messages": {"anyOf": [{"maximum": 10000, "minimum": 1, "type": "integer"}, {"type": "null"}]}, "file": {"contentEncoding": "binary", "description": "Single CSV upload alias for browser FormData clients.", "type": "string"}, "files": {"anyOf": [{"contentEncoding": "binary", "type": "string"}, {"items": {"contentEncoding": "binary", "type": "string"}, "type": "array"}], "description": "One or more CSV uploads."}, "files[]": {"anyOf": [{"contentEncoding": "binary", "type": "string"}, {"items": {"contentEncoding": "binary", "type": "string"}, "type": "array"}], "description": "One or more CSV uploads using bracket notation."}, "framework": {"enum": ["current_house", "langextract"], "type": "string"}, "max_output_tokens": {"anyOf": [{"maximum": 32768, "minimum": 1, "type": "integer"}, {"type": "null"}]}, "mode": {"enum": ["chunk", "message_by_message"], "type": "string"}, "model_id": {"description": "Model ID must belong to the selected provider. See x-provider-models.", "enum": ["gemini-2.5-flash", "gemini-2.5-pro", "gpt-4o-mini", "gpt-4o", "gpt-5-mini", "openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"], "type": "string", "x-provider-models": {"gemini": ["gemini-2.5-flash", "gemini-2.5-pro"], "openai": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "openrouter": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"]}}, "provider": {"enum": ["gemini", "openai", "openrouter"], "type": "string"}, "reasoning_effort": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "response_format": {"enum": ["zip", "inline_json"], "type": "string"}, "selection_profile": {"enum": ["turn_low_cost", "chunk_balanced", "openrouter_balanced", "openrouter_gemini_flash", "openrouter_gemini_flash_lite", "openrouter_claude_haiku", "openrouter_claude_sonnet", "openrouter_claude_fable_5", "openrouter_low_cost_turn", "openrouter_qwen_budget", "openrouter_qwen_quality", "openrouter_zai_budget", "openrouter_zai_quality", "openrouter_gpt56_luna_turn", "openrouter_gpt56_terra_chunk", "openrouter_gpt56_sol_chunk"], "type": "string"}, "temperature": {"anyOf": [{"maximum": 2, "minimum": 0, "type": "number"}, {"type": "null"}]}}, "type": "object", "x-accepted-column-groups": {"conversation_id": ["conversation_id", "contact_id", "thread_id", "lead_id"], "message_id": ["message_id", "id", "event_id"], "speaker": ["speaker", "role", "sender_type", "incoming", "is_incoming", "from_customer"], "text": ["contents", "content", "text", "message", "body"], "timestamp": ["timestamp", "created_at", "sent_at", "date"]}, "x-expected-csv-columns": ["contact_id", "message_id", "timestamp", "speaker", "text"], "x-file-field-names": ["file", "files", "files[]"], "x-result-granularity": "conversation", "x-supports-multi-conversation-uploads": true}, "CsvEstimateBatchResponse": {"properties": {"budget_usd_ceiling": {"type": "number"}, "estimated_cost_calculation": {"$ref": "#/components/schemas/CostCalculation"}, "estimated_count": {"type": "integer"}, "failed_count": {"type": "integer"}, "latency_breakdown_ms": {"$ref": "#/components/schemas/LatencyBreakdown"}, "latency_ms": {"type": "number"}, "methodology_version": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "operation": {"const": "estimate_csv_batch"}, "pricing": {"$ref": "#/components/schemas/PricingMetadata"}, "prompt_version": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "results": {"items": {"type": "object"}, "type": "array"}, "setup_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "setup_id_version": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "total_estimated_cost_usd": {"type": "number"}, "total_estimated_input_tokens": {"type": "integer"}, "total_estimated_output_tokens": {"type": "integer"}, "total_estimated_provider_call_count": {"type": "integer"}, "total_estimated_tokens": {"type": "integer"}, "within_budget": {"type": "boolean"}}, "required": ["operation", "estimated_count", "failed_count", "results"], "type": "object"}, "CsvExtractBatchResponse": {"properties": {"budget_usd_ceiling": {"type": "number"}, "completed_count": {"type": "integer"}, "cost_calculation": {"$ref": "#/components/schemas/CostCalculation"}, "estimated_cost_calculation": {"$ref": "#/components/schemas/CostCalculation"}, "failed_count": {"type": "integer"}, "latency_breakdown_ms": {"$ref": "#/components/schemas/LatencyBreakdown"}, "latency_ms": {"type": "number"}, "methodology_version": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "operation": {"const": "extract_csv_batch"}, "pricing": {"$ref": "#/components/schemas/PricingMetadata"}, "prompt_version": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "provider_usage_coverage_count": {"type": "integer"}, "response_format": {"type": "string"}, "results": {"items": {"type": "object"}, "type": "array"}, "setup_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "setup_id_version": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "token_count_kind": {"type": "string"}, "total_cost_kind": {"type": "string"}, "total_cost_usd": {"type": "number"}, "total_estimated_cost_usd": {"type": "number"}, "total_estimated_input_tokens": {"type": "integer"}, "total_estimated_output_tokens": {"type": "integer"}, "total_estimated_provider_call_count": {"type": "integer"}, "total_estimated_tokens": {"type": "integer"}, "total_input_tokens": {"type": "integer"}, "total_output_tokens": {"type": "integer"}, "total_provider_call_count": {"type": "integer"}, "total_provider_usage_input_tokens": {"type": "integer"}, "total_provider_usage_output_tokens": {"type": "integer"}, "total_provider_usage_tokens": {"type": "integer"}, "total_tokens": {"type": "integer"}, "within_budget": {"type": "boolean"}}, "required": ["operation", "completed_count", "failed_count", "results"], "type": "object"}, "DataDictionary": {"properties": {"data_dictionary_version": {"type": "string"}, "field_count": {"type": "integer"}, "fields": {"items": {"type": "object"}, "type": "array"}, "form_id": {"const": "real_estate_buyer_profile"}, "form_ref": {"const": "real_estate_buyer_profile@4"}, "form_version": {"const": "4"}, "locale": {"type": "string"}}, "required": ["form_id", "form_version", "form_ref", "field_count", "fields"], "type": "object"}, "ErrorResponse": {"additionalProperties": true, "properties": {"error": {"description": "Stable error code when available, otherwise the sanitized exception class.", "type": "string"}, "error_category": {"description": "Stable category for model/API operational failures.", "enum": ["budget_exceeded", "incomplete_response", "invalid_json", "invalid_schema", "live_guardrail", "not_found", "provider_unavailable", "retry_exhausted", "storage_unavailable", "timeout", "unknown", "validation_error"], "type": "string"}, "message": {"description": "Sanitized operator/client-facing error detail.", "type": "string"}, "ok": {"const": false}}, "required": ["ok", "error", "error_category", "message"], "type": "object"}, "EstimateResponse": {"properties": {"chunk_size_messages": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "conversation_id": {"type": "string"}, "cost_calculation": {"$ref": "#/components/schemas/CostCalculation"}, "data_dictionary_version": {"type": "string"}, "effective_chunk_size_messages": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "error_taxonomy_version": {"type": "string"}, "estimate_only": {"const": true}, "estimated_cost_usd": {"type": "number"}, "estimated_input_tokens": {"type": "integer"}, "estimated_output_tokens": {"type": "integer"}, "estimated_provider_call_count": {"type": "integer"}, "estimated_total_tokens": {"type": "integer"}, "form_ref": {"type": "string"}, "framework": {"type": "string"}, "framework_version": {"type": "string"}, "input_safety": {"type": "object"}, "is_paid_provider": {"type": "boolean"}, "latency_schema_version": {"type": "string"}, "max_output_tokens": {"type": "integer"}, "methodology_version": {"type": "string"}, "mode": {"type": "string"}, "model_id": {"type": "string"}, "parameter_support": {"type": "object"}, "pricing": {"$ref": "#/components/schemas/PricingMetadata"}, "prompt_version": {"type": "string"}, "provider": {"type": "string"}, "reasoning_effort": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "selection_profile": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "setup_id": {"type": "string"}, "setup_id_version": {"type": "string"}, "temperature": {"anyOf": [{"type": "number"}, {"type": "null"}]}}, "required": ["conversation_id", "provider", "model_id", "framework", "mode", "estimated_cost_usd", "estimate_only"], "type": "object"}, "ExtractionMetadata": {"properties": {"accepted_annotation_count": {"type": "integer"}, "chunk_size_messages": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "contract_id": {"type": "string"}, "contract_version": {"type": "string"}, "cost_calculation": {"$ref": "#/components/schemas/CostCalculation"}, "cost_kind": {"description": "Whether cost came from estimate, provider token usage, or per-generation provider billing reconciliation.", "enum": ["estimated", "provider_usage", "billing_actual"], "type": "string"}, "cost_source": {"type": "string"}, "cost_usd": {"type": "number"}, "data_dictionary_version": {"type": "string"}, "effective_chunk_size_messages": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "error_taxonomy_version": {"type": "string"}, "estimate": {"$ref": "#/components/schemas/EstimateResponse"}, "estimated_cost_usd": {"type": "number"}, "form_ref": {"type": "string"}, "framework": {"type": "string"}, "framework_latency_ms": {"type": "number"}, "framework_version": {"type": "string"}, "generation_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "generation_ids": {"items": {"type": "string"}, "type": "array"}, "input_safety": {"type": "object"}, "latency_breakdown_ms": {"$ref": "#/components/schemas/LatencyBreakdown"}, "latency_ms": {"type": "number"}, "latency_schema_version": {"type": "string"}, "max_output_tokens": {"type": "integer"}, "methodology_version": {"type": "string"}, "mode": {"type": "string"}, "model_id": {"type": "string"}, "parameter_support": {"type": "object"}, "pricing": {"$ref": "#/components/schemas/PricingMetadata"}, "prompt_count": {"type": "integer"}, "prompt_version": {"type": "string"}, "provider": {"type": "string"}, "provider_call_count": {"type": "integer"}, "provider_calls": {"items": {"type": "object"}, "type": "array"}, "provider_usage": {"$ref": "#/components/schemas/ProviderUsage"}, "raw_annotation_count": {"type": "integer"}, "reasoning_effort": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "rejected_annotation_count": {"type": "integer"}, "selection_profile": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "setup_id": {"type": "string"}, "setup_id_version": {"type": "string"}, "temperature": {"anyOf": [{"type": "number"}, {"type": "null"}]}, "validation_status": {"type": "string"}}, "required": ["provider", "model_id", "framework", "mode", "cost_usd", "estimated_cost_usd", "cost_kind", "cost_source", "max_output_tokens", "setup_id", "latency_ms", "latency_breakdown_ms", "validation_status"], "type": "object"}, "ExtractionRequest": {"allOf": [{"$ref": "#/components/schemas/RuntimeSelection"}, {"properties": {"conversation_id": {"type": "string"}, "messages": {"items": {"$ref": "#/components/schemas/Message"}, "minItems": 1, "type": "array"}}, "type": "object"}], "description": "Provide either messages or conversation_id."}, "ExtractionResponse": {"properties": {"conversation_id": {"type": "string"}, "crm": {"$ref": "#/components/schemas/RuntimeCrmResult"}, "metadata": {"$ref": "#/components/schemas/ExtractionMetadata"}, "stored": {"type": "boolean"}}, "required": ["conversation_id", "metadata", "crm", "stored"], "type": "object"}, "FieldAnnotation": {"properties": {"certainty_score": {"type": "number"}, "evidence": {"items": {"type": "object"}, "type": "array"}, "field_id": {"type": "string"}, "reviewer_note": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "status": {"enum": ["captured", "ambiguous", "missing"], "type": "string"}, "value": {}}, "required": ["field_id", "status", "value", "evidence"], "type": "object"}, "GoldenCaseSummary": {"description": "Reviewed Golden Set reference. source_available indicates whether the matching conversation can currently be loaded and extracted.", "properties": {"case_id": {"type": "string"}, "conversation_id": {"type": "string"}, "full_real_id": {"type": "string"}, "source_available": {"type": "boolean"}, "source_unavailable_reason": {"anyOf": [{"enum": ["source_conversation_not_available"], "type": "string"}, {"type": "null"}]}}, "required": ["conversation_id", "case_id", "full_real_id"], "type": "object"}, "GoldenCrmResponse": {"allOf": [{"$ref": "#/components/schemas/GoldenCaseSummary"}, {"properties": {"crm": {"required": ["contract_id", "contract_version", "form_ref", "field_annotations"], "type": "object"}}, "required": ["crm"], "type": "object"}]}, "GoldenSetListResponse": {"properties": {"items": {"items": {"$ref": "#/components/schemas/GoldenCaseSummary"}, "type": "array"}}, "required": ["items"], "type": "object"}, "HealthResponse": {"properties": {"ok": {"type": "boolean"}, "service": {"const": "crm-extractor"}, "surface": {"const": "api"}}, "required": ["ok", "service", "surface"], "type": "object"}, "LatencyBreakdown": {"additionalProperties": true, "properties": {"chunking_ms": {"type": "number"}, "estimation_ms": {"type": "number"}, "extraction_ms": {"type": "number"}, "input_load_ms": {"type": "number"}, "merge_ms": {"type": "number"}, "parsing_ms": {"type": "number"}, "prompt_build_ms": {"type": "number"}, "provider_call_ms": {"type": "number"}, "runtime_total_ms": {"type": "number"}, "service_total_ms": {"type": "number"}, "store_ms": {"type": "number"}, "total_ms": {"type": "number"}, "validation_ms": {"type": "number"}}, "type": "object"}, "LatestCrmResponse": {"description": "Latest stored CRM JSON plus operational metadata when a CRM store is configured.", "type": "object"}, "MemoryUpdateRequest": {"allOf": [{"$ref": "#/components/schemas/ExtractionRequest"}, {"properties": {"mode": {"const": "turn"}}, "type": "object"}], "description": "Recent-window messages must be ordered and include message_id or timestamp on the latest message."}, "Message": {"properties": {"message_id": {"type": "string"}, "message_ordinal": {"minimum": 1, "type": "integer"}, "speaker": {"enum": ["customer", "assistant"], "type": "string"}, "text": {"minLength": 1, "type": "string"}, "timestamp": {"type": "string"}}, "required": ["speaker", "text"], "type": "object"}, "MethodologyResponse": {"additionalProperties": true, "properties": {"data_dictionary": {"$ref": "#/components/schemas/DataDictionary"}, "methodology": {"type": "object"}, "ok": {"const": true}, "operation": {"const": "methodology"}}, "required": ["ok", "operation", "methodology", "data_dictionary"], "type": "object"}, "PricingMetadata": {"description": "Local pricing metadata used for budgeting and provider-usage cost calculations. It is not billing truth; verify current provider prices before paid runs and reconcile billing separately when billing_actual exists.", "properties": {"approximate": {"type": "boolean"}, "billing_policy": {"type": "string"}, "calculation_formula": {"type": "string"}, "confidence": {"type": "string"}, "input_usd_per_1m_tokens": {"type": "number"}, "input_usd_per_token": {"type": "number"}, "last_verified_at": {"type": "string"}, "model_id": {"type": "string"}, "output_usd_per_1m_tokens": {"type": "number"}, "output_usd_per_token": {"type": "number"}, "price_unit_description": {"type": "string"}, "pricing_status": {"type": "string"}, "provider": {"type": "string"}, "source": {"type": "string"}, "source_conversion": {"type": "string"}, "source_description": {"type": "string"}, "source_model_id": {"type": "string"}, "source_native_unit": {"type": "string"}, "source_url": {"type": "string"}, "token_count_policy": {"type": "string"}, "unit": {"const": "usd_per_1m_tokens"}, "verification_required_before_paid_run": {"type": "boolean"}}, "type": "object"}, "ProviderUsage": {"additionalProperties": true, "properties": {"candidate_output_tokens": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "generation_ids": {"items": {"type": "string"}, "type": "array"}, "input_tokens": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "output_tokens": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "provider_reported_cost_usd": {"anyOf": [{"type": "number"}, {"type": "null"}]}, "thoughts_tokens": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "total_tokens": {"anyOf": [{"type": "integer"}, {"type": "null"}]}, "usage_source": {"type": "string"}}, "type": "object"}, "RuntimeCrmResult": {"properties": {"contract_id": {"const": "buyer_profile_runtime_result_v1"}, "contract_version": {"const": "1"}, "field_annotations": {"items": {"$ref": "#/components/schemas/FieldAnnotation"}, "type": "array"}, "form_ref": {"type": "object"}}, "required": ["contract_id", "contract_version", "form_ref", "field_annotations"], "type": "object"}, "RuntimeSelection": {"properties": {"chunk_size_messages": {"anyOf": [{"maximum": 10000, "minimum": 1, "type": "integer"}, {"type": "null"}], "description": "Maximum message segments sent per provider call in chunk mode. message_by_message always uses 1; turn does not accept this field."}, "form_ref": {"const": "real_estate_buyer_profile@4"}, "framework": {"enum": ["current_house", "langextract"], "type": "string"}, "max_output_tokens": {"anyOf": [{"maximum": 32768, "minimum": 1, "type": "integer"}, {"type": "null"}]}, "mode": {"enum": ["chunk", "message_by_message", "turn"], "type": "string"}, "model_id": {"description": "Model ID must belong to the selected provider. See x-provider-models.", "enum": ["gemini-2.5-flash", "gemini-2.5-pro", "gpt-4o-mini", "gpt-4o", "gpt-5-mini", "openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"], "type": "string", "x-provider-models": {"gemini": ["gemini-2.5-flash", "gemini-2.5-pro"], "openai": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "openrouter": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"]}}, "provider": {"enum": ["gemini", "openai", "openrouter"], "type": "string"}, "reasoning_effort": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Optional model-specific reasoning level. Read allowed values from options.providers[].model_details[].parameter_support."}, "selection_profile": {"enum": ["turn_low_cost", "chunk_balanced", "openrouter_balanced", "openrouter_gemini_flash", "openrouter_gemini_flash_lite", "openrouter_claude_haiku", "openrouter_claude_sonnet", "openrouter_claude_fable_5", "openrouter_low_cost_turn", "openrouter_qwen_budget", "openrouter_qwen_quality", "openrouter_zai_budget", "openrouter_zai_quality", "openrouter_gpt56_luna_turn", "openrouter_gpt56_terra_chunk", "openrouter_gpt56_sol_chunk"], "type": "string"}, "temperature": {"anyOf": [{"maximum": 2, "minimum": 0, "type": "number"}, {"type": "null"}]}}, "type": "object"}}, "securitySchemes": {"CognitoJwt": {"description": "Amazon Cognito access token using the Authorization: Bearer header.", "flows": {"clientCredentials": {"scopes": {"crm-extractor/estimate": "Run cost estimates without provider calls.", "crm-extractor/execute": "Run provider-backed CRM extraction.", "crm-extractor/read": "Read protected CRM and analysis data."}, "tokenUrl": "https://cognito.example.invalid/oauth2/token"}}, "type": "oauth2"}}}, "info": {"description": "API-first CRM extraction service for real-estate conversations. Paid provider calls remain blocked unless CRM_EXTRACTOR_LIVE=1 is set by the operator.", "title": "CRM Extractor API", "version": "v1"}, "openapi": "3.1.0", "paths": {"/api/v1/analysis/benchmark": {"get": {"operationId": "getAnalysisBenchmark", "parameters": [{"in": "query", "name": "run", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalysisBenchmarkResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "Read one sanitized consolidated AnnotationSystem benchmark report."}}, "/api/v1/analysis/benchmarks": {"get": {"operationId": "listAnalysisBenchmarks", "parameters": [], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalysisBenchmarksResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "List sanitized consolidated AnnotationSystem benchmark reports."}}, "/api/v1/analysis/dataset-profile": {"get": {"operationId": "getAnalysisDatasetProfile", "parameters": [], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalysisDatasetProfileResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "Read an aggregate-only profile of the private local conversation base."}}, "/api/v1/analysis/estimate-scale": {"post": {"operationId": "estimateAnalysisScale", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalysisScaleEstimateRequest"}}}, "required": true}, "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalysisScaleEstimateResponse"}}}, "description": "Successful response."}, "400": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Invalid request or guarded provider call."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/estimate"]}], "summary": "Estimate provider/model cost for a target number of conversations without provider calls."}}, "/api/v1/analysis/report": {"get": {"operationId": "getAnalysisRunReport", "parameters": [{"in": "query", "name": "run", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalysisRunReportResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "Read one local sanitized experiment-analysis report."}}, "/api/v1/analysis/runs": {"get": {"operationId": "listAnalysisRuns", "parameters": [], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalysisRunsResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "List local sanitized experiment-analysis runs."}}, "/api/v1/contract": {"get": {"operationId": "apiContract", "responses": {"200": {"content": {"application/json": {"schema": {"type": "object"}}}, "description": "OpenAPI-style API contract."}}, "summary": "Return this machine-readable API contract."}}, "/api/v1/conversations": {"get": {"operationId": "listConversations", "parameters": [{"in": "query", "name": "q", "schema": {"type": "string"}}, {"in": "query", "name": "limit", "schema": {"minimum": 1, "type": "integer"}}, {"in": "query", "name": "offset", "schema": {"minimum": 0, "type": "integer"}}], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ConversationListResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "List or search eligible catalog conversations."}}, "/api/v1/conversations/{conversation_id}": {"get": {"operationId": "getConversation", "parameters": [{"in": "path", "name": "conversation_id", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ConversationResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "Fetch one eligible catalog conversation."}}, "/api/v1/crms/{conversation_id}": {"get": {"operationId": "getLatestCrm", "parameters": [{"in": "path", "name": "conversation_id", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/LatestCrmResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "Fetch the latest stored CRM result for a conversation."}}, "/api/v1/estimate": {"post": {"operationId": "estimateConversation", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExtractionRequest"}}}, "required": true}, "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EstimateResponse"}}}, "description": "Successful response."}, "400": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Invalid request or guarded provider call."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/estimate"]}], "summary": "Estimate extraction cost for messages or a catalog conversation."}}, "/api/v1/estimate-csv-batch": {"post": {"operationId": "estimateCsvBatch", "requestBody": {"content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/CsvBatchRequest"}}}, "required": true}, "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CsvEstimateBatchResponse"}}, "application/zip": {"schema": {"contentEncoding": "binary", "type": "string"}}}, "description": "Successful response. Extract may return JSON or application/zip."}, "400": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "No valid upload, invalid selection, budget guard, or guarded provider call."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}}, "security": [{"CognitoJwt": ["crm-extractor/estimate"]}], "summary": "Estimate chunk extraction cost for one or more uploaded CSV conversations."}}, "/api/v1/extract": {"post": {"operationId": "extractConversation", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExtractionRequest"}}}, "required": true}, "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExtractionResponse"}}}, "description": "Successful response."}, "400": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Invalid request or guarded provider call."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/execute"]}], "summary": "Extract CRM JSON from messages or a catalog conversation."}}, "/api/v1/extract-csv-batch": {"post": {"operationId": "extractCsvBatch", "requestBody": {"content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/CsvBatchRequest"}}}, "required": true}, "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CsvExtractBatchResponse"}}, "application/zip": {"schema": {"contentEncoding": "binary", "type": "string"}}}, "description": "Successful response. Extract may return JSON or application/zip."}, "400": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "No valid upload, invalid selection, budget guard, or guarded provider call."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}}, "security": [{"CognitoJwt": ["crm-extractor/execute"]}], "summary": "Run chunk extraction for one or more uploaded CSV conversations."}}, "/api/v1/golden-set": {"get": {"operationId": "listGoldenSet", "parameters": [], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GoldenSetListResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "List locally available Golden Set case metadata."}}, "/api/v1/golden-set/{conversation_id}": {"get": {"operationId": "getGoldenCrm", "parameters": [{"in": "path", "name": "conversation_id", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/GoldenCrmResponse"}}}, "description": "Successful response."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/read"]}], "summary": "Fetch the local Golden Set CRM for one conversation."}}, "/api/v1/health": {"get": {"operationId": "health", "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/HealthResponse"}}}, "description": "Service is available."}}, "summary": "Check service health."}}, "/api/v1/memory/estimate": {"post": {"operationId": "estimateMemoryUpdate", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MemoryUpdateRequest"}}}, "required": true}, "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EstimateResponse"}}}, "description": "Successful response."}, "400": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Invalid request or guarded provider call."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/estimate"]}], "summary": "Estimate a recent-window turn update."}}, "/api/v1/memory/update": {"post": {"operationId": "updateMemory", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MemoryUpdateRequest"}}}, "required": true}, "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ExtractionResponse"}}}, "description": "Successful response."}, "400": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Invalid request or guarded provider call."}, "401": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Missing, invalid, or expired Cognito access token."}, "403": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Access token does not include the required scope."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [{"CognitoJwt": ["crm-extractor/execute"]}], "summary": "Run a recent-window turn update and persist the latest CRM when a store is configured."}}, "/api/v1/methodology": {"get": {"operationId": "getMethodology", "parameters": [], "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MethodologyResponse"}}}, "description": "Successful response."}, "404": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ErrorResponse"}}}, "description": "Conversation or CRM was not found."}}, "security": [], "summary": "Read methodology, setup naming, status definitions, and CRM data dictionary."}}, "/api/v1/openapi.json": {"get": {"operationId": "apiContract", "responses": {"200": {"content": {"application/json": {"schema": {"type": "object"}}}, "description": "OpenAPI-style API contract."}}, "summary": "Return this machine-readable API contract."}}, "/api/v1/options": {"get": {"operationId": "options", "responses": {"200": {"content": {"application/json": {"schema": {"type": "object"}}}, "description": "Runtime options."}}, "summary": "Discover runtime provider/model options and integration settings."}}}, "x-crm-extractor": {"data_dictionary": {"data_dictionary_version": "real_estate_buyer_profile@4", "field_count": 39, "fields": [{"aliases": ["client_name", "nome", "nome_cliente", "full_name", "contact_name"], "canonical_value_type": "free_text_name", "canonicalization": "Trim whitespace and preserve the customer's preferred spelling.", "capture_rule": "Capture only when the customer explicitly states or confirms their own name, e.g. meu nome e Carla, me chamo Joao, sou a Rosana. Do not infer from assistant greetings, CRM labels, family references, pronouns, or contact context.", "data_classification": "direct_contact", "description": "Buyer full name or preferred name when the customer explicitly shares it.", "field_id": "name", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"aliases": ["telefone", "numero_telefone", "numero_de_telefone", "celular", "whatsapp_number"], "canonical_value_type": "e164_or_digits", "canonicalization": "Normalize to digits/E.164 when possible; preserve raw text separately if coercion fails.", "capture_rule": "Capture only explicit phone or WhatsApp number.", "data_classification": "direct_contact", "description": "Primary phone or WhatsApp number explicitly confirmed for follow-up contact.", "field_id": "phone_number", "field_type": "phone", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"aliases": ["email_contato", "e_mail", "mail"], "canonical_value_type": "email", "canonicalization": "Lowercase domain and trim whitespace.", "capture_rule": "Capture only explicit email address.", "data_classification": "direct_contact", "description": "Primary email address explicitly shared for project follow-up or document exchange.", "field_id": "email", "field_type": "email", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"aliases": ["cpf", "cnpj", "documento", "cpf_cnpj"], "canonical_value_type": "cpf_or_cnpj_digits", "canonicalization": "Normalize to digits only for comparison.", "capture_rule": "Capture only explicit CPF/CNPJ.", "data_classification": "direct_contact", "description": "CPF or CNPJ explicitly shared for CRM identity confirmation.", "field_id": "legal_id_document", "field_type": "brazilian_tax_id", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"aliases": ["ano_nascimento", "ano_de_nascimento", "birth_date_year"], "canonical_value_type": "yyyy", "canonicalization": "Four-digit year string.", "capture_rule": "Capture only explicit birth year. Do not infer age unless a future rule explicitly allows age-to-year conversion.", "data_classification": "direct_contact", "description": "Birth year only when the buyer explicitly shares it or when it is quoted from an existing CRM context.", "field_id": "birth_year", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"aliases": ["genero", "sexo"], "canonical_value_type": "enum", "canonicalization": "Map explicit customer wording to canonical enum.", "capture_rule": "Capture only explicit self-identification or quoted CRM context. Do not infer from name or pronouns used by the assistant.", "data_classification": "direct_contact", "description": "Gender only when the buyer explicitly identifies it or when it is quoted from existing CRM context.", "enum_values": ["female", "male", "non_binary", "other"], "field_id": "gender", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": false, "value_aliases": {"female": ["mulher", "feminino", "ela"], "male": ["homem", "masculino", "ele"], "non_binary": ["nao binario", "não binário", "non binary"], "other": ["outro"]}}, {"canonical_value_type": "integer", "canonicalization": "Use integer count as string. If unclear, leave missing and use household_composition_note. Example: assistant asks 'quem vai morar com voce?' and customer answers 'marido e uma filha' => household_adult_count='2'.", "capture_rule": "Number of adults who will live in the property, inferable from customer wording. When the assistant asks who will live with the customer and the customer lists partner/family members without saying the property is for someone else, count the speaking customer as an implicit adult resident.", "data_classification": "customer_intent", "description": "Number of adults who will live in the property as a string integer.", "field_id": "household_adult_count", "field_type": "text", "multi_value": false, "replaces_or_derives_from": "family_structure", "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "integer", "canonicalization": "Use integer count as string. If unclear, leave missing and use household_composition_note.", "capture_rule": "Number of children/dependents who will live in the property when inferable from customer wording.", "data_classification": "customer_intent", "description": "Number of children or dependents who will live in the property as a string integer.", "field_id": "household_child_count", "field_type": "text", "multi_value": false, "replaces_or_derives_from": "family_structure", "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[enum]", "canonical_values": ["self", "partner", "children", "parents", "relatives", "roommates", "alone"], "canonicalization": "Append each explicit or safely inferred member category. Example: assistant asks 'quem vai morar com voce?' and customer answers 'marido e uma filha' => ['self','partner','children']. Do not include self when the customer says the property is for another person, for rental/investment use, or for parents/children to live without the customer.", "capture_rule": "Capture who will live in the property. Do not capture names as member types. When the assistant asks who will live with the customer and the customer lists household members without saying the property is for someone else, include self implicitly.", "data_classification": "customer_intent", "description": "Who will live in the property as a list of canonical member categories.", "field_id": "household_member_types", "field_type": "text", "multi_value": true, "replaces_or_derives_from": "family_structure", "required": false, "score_in_primary_benchmark": true, "value_aliases": {"alone": ["sozinho", "sozinha", "moro sozinho", "vou morar sozinho"], "children": ["filho", "filha", "filhos", "criança", "crianca", "crianças", "criancas"], "parents": ["pai", "mae", "mãe", "pais"], "partner": ["marido", "esposa", "companheiro", "companheira", "namorado", "namorada"], "relatives": ["familia", "família", "parente", "parentes"], "roommates": ["amigo", "amiga", "colega", "dividir"], "self": ["eu", "comigo"]}}, {"canonical_value_type": "short_free_text", "canonicalization": "Short PT-BR note; exclude from primary benchmark score. Leave missing when household_adult_count, household_child_count, and household_member_types fully represent the customer wording.", "capture_rule": "Residual family composition note only when counts/member types cannot fully represent the customer wording, e.g. vague family composition, conditional residents, or unclear household structure.", "data_classification": "customer_intent", "description": "Residual household composition note when counts or member types cannot fully represent the customer wording.", "field_id": "household_composition_note", "field_type": "text", "multi_value": false, "replaces_or_derives_from": "family_structure", "required": false, "score_in_primary_benchmark": false}, {"aliases": ["cidade_atual", "cidade_onde_mora", "onde_mora", "cidade_residencia"], "canonical_value_type": "canonical_city", "canonicalization": "Open-domain city. Normalize spelling/accent/case and resolve through a city gazetteer/geocoder when available. Do not restrict to Sao Paulo. If unresolved, preserve normalized customer text and flag unresolved_geography.", "capture_rule": "Capture where the customer lives today, not where they want to buy.", "data_classification": "location_profile", "description": "Current city of residence when the customer mentions where they live today.", "field_id": "current_city", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"aliases": ["cidade_desejada", "cidade_interesse", "cidade_de_interesse", "cidade_preferida"], "canonical_value_type": "list[canonical_city]", "canonicalization": "Open-domain city list. Normalize spelling/accent/case and resolve through a city gazetteer/geocoder when available. If unresolved but clearly customer-stated, preserve normalized customer text and flag unresolved_geography.", "capture_rule": "Append every city the customer expresses as acceptable for search or purchase, regardless of current business service area. Opening utterances such as 'encontre meu apartamento em Sao Paulo' count as preferred_city when customer-stated. Do not mark as ambiguous merely because the customer mentions more than one acceptable city.", "data_classification": "location_profile", "description": "Cities where the buyer wants to search or buy a property.", "field_id": "preferred_city", "field_type": "text", "multi_value": true, "removal_rule": "Remove a city only when the customer explicitly rejects it, e.g. nao quero Barueri, tira Barueri, Barueri nao.", "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[canonical_city]", "canonicalization": "Same open-domain city resolution as preferred_city.", "capture_rule": "Capture every city explicitly rejected by the customer, regardless of current business service area.", "data_classification": "location_profile", "description": "Cities explicitly rejected by the buyer during the conversation.", "field_id": "excluded_cities", "field_type": "text", "multi_value": true, "removal_rule": "If a city is added to excluded_cities, remove the same canonical city from preferred_city unless the customer later explicitly re-accepts it.", "required": false, "score_in_primary_benchmark": false}, {"aliases": ["regiao_preferida", "regioes_preferidas", "zona_preferida", "preferred_regions"], "canonical_value_type": "list[canonical_region]", "canonicalization": "Open-domain region. Normalize spelling/accent/case and resolve through a region gazetteer/geocoder when available. If unresolved, preserve normalized customer text and flag unresolved_geography.", "capture_rule": "Capture broad accepted regions only when the customer states or accepts them, e.g. Zona Sul, ABC, Grande Sao Paulo, litoral, centro, regiao metropolitana, perto do metro. Do not force a region into city or neighborhood fields.", "data_classification": "location_profile", "description": "Broader regions, zones, or landmark-based areas inside the preferred city that the buyer accepts.", "field_id": "preferred_region", "field_type": "text", "multi_value": true, "removal_rule": "Remove a region only when the customer explicitly rejects/removes it.", "required": false, "score_in_primary_benchmark": true}, {"aliases": ["regiao_excluida", "regioes_excluidas", "zona_excluida", "excluded_region"], "canonical_value_type": "list[canonical_region]", "canonicalization": "Same open-domain region resolution as preferred_region.", "capture_rule": "Capture every broad region or zone explicitly rejected by the customer, e.g. nao quero Zona Leste, menos litoral, tirar centro. Do not force rejected regions into excluded_cities or excluded_neighborhoods.", "data_classification": "location_profile", "description": "Broader regions or zones explicitly rejected by the buyer during the conversation.", "field_id": "excluded_regions", "field_type": "text", "multi_value": true, "removal_rule": "If a region is added to excluded_regions, remove the same canonical region from preferred_region unless the customer later explicitly re-accepts it.", "required": false, "score_in_primary_benchmark": false}, {"aliases": ["neighborhood_preference", "bairro_preferido", "bairro_desejado", "bairros_preferidos"], "canonical_value_type": "list[canonical_neighborhood]", "canonicalization": "Open-domain neighborhood list. Normalize spelling/accent/case and resolve through a neighborhood gazetteer/geocoder when available. If unresolved, preserve normalized customer text and flag unresolved_geography.", "capture_rule": "Append neighborhoods the customer explicitly asks for or accepts, regardless of city or current business inventory. Assistant-suggested neighborhoods require customer confirmation, choice, or acceptance. If the assistant offers expansion to named neighborhoods and the customer responds no/not now/keep only current area, do not add those suggested neighborhoods to preferred_neighborhoods.", "data_classification": "location_profile", "description": "Neighborhoods or micro-areas the buyer explicitly asks for or accepts.", "field_id": "preferred_neighborhoods", "field_type": "text", "multi_value": true, "removal_rule": "Remove from preferred_neighborhoods when the customer explicitly rejects/removes it. A negative answer to an assistant offer to expand to suggested neighborhoods counts as rejection of those suggestions for this search unless the customer later explicitly accepts them.", "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[canonical_neighborhood]", "canonicalization": "Same open-domain neighborhood resolution as preferred_neighborhoods.", "capture_rule": "Capture every neighborhood explicitly rejected by the customer, regardless of city or current business inventory. If the assistant offers expansion to named neighborhoods and the customer says no/not now/keep only current area, those suggested neighborhoods are rejected for the current search rather than preferred.", "data_classification": "location_profile", "description": "Neighborhoods explicitly rejected by the buyer during the conversation.", "field_id": "excluded_neighborhoods", "field_type": "text", "multi_value": true, "removal_rule": "If a neighborhood is added to excluded_neighborhoods, remove the same canonical neighborhood from preferred_neighborhoods unless the customer later explicitly re-accepts it.", "required": false, "score_in_primary_benchmark": false}, {"aliases": ["property_type_desired", "tipo_imovel", "tipo_de_imovel", "tipos_imovel", "preferred_types"], "canonical_value_type": "list[enum]", "canonical_values": ["apartment", "house", "garden", "studio", "penthouse", "garden", "land"], "canonicalization": "Map to enum list.", "capture_rule": "Capture only property types explicitly requested or accepted by the customer. Do not infer from the assistant's inventory or project card.", "data_classification": "customer_intent", "description": "Property types the buyer explicitly requests or accepts.", "field_id": "preferred_property_types", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"apartment": ["apartamento", "apto", "ape", "apê"], "garden": ["garden"], "house": ["casa", "sobrado"], "land": ["terreno", "lote"], "penthouse": ["cobertura"], "studio": ["studio", "kitnet", "loft"]}}, {"aliases": ["dormitorios", "quartos", "qtd_quartos", "bedrooms"], "canonical_value_type": "list[enum]", "canonical_values": ["studio", "1", "2", "3", "4_plus"], "canonicalization": "Map each accepted option to enum list. For 3 quartos ou mais, use [\"3\", \"4_plus\"]. For studio ou 1 dormitorio, use [\"studio\", \"1\"].", "capture_rule": "Capture every bedroom count explicitly requested or accepted by the customer. Multiple acceptable options are not ambiguous, e.g. 2 ou 3 dormitorios => [\"2\", \"3\"]. Resolve elliptical answers using the assistant's immediately prior question: if assistant asks '2 ou 3 dormitorios?' and customer answers '2', capture [\"2\"]. Use ambiguous only when the customer's intent is unclear or conflicting without explicit correction/removal.", "data_classification": "customer_intent", "description": "Bedroom counts the buyer explicitly requests or accepts as a list.", "field_id": "preferred_bedrooms", "field_type": "text", "multi_value": true, "removal_rule": "Remove a bedroom option only when the customer explicitly rejects/removes it, e.g. nao quero 2 quartos, tira 1 dormitorio.", "required": false, "score_in_primary_benchmark": true, "value_aliases": {"1": ["1 quarto", "um quarto", "1 dormitorio", "um dormitorio"], "2": ["2 quartos", "dois quartos", "2 dormitorios", "dois dormitorios"], "3": ["3 quartos", "tres quartos", "três quartos", "3 dormitorios", "tres dormitorios"], "4_plus": ["4 quartos", "quatro quartos", "5 quartos", "mais de 3 quartos"], "studio": ["studio", "kitnet", "loft sem dormitorio"]}}, {"aliases": ["vaga", "vaga_garagem", "garagem", "parking"], "canonical_value_type": "enum", "canonicalization": "Map to a single enum. Do not encode com ou sem vaga as must_have_parking + must_not_have_parking; use accepts_with_or_without_parking because parking is not a hard filter.", "capture_rule": "Capture the customer's current parking constraint as a matching state. Use must_have_parking when parking is mandatory, prefers_parking when it is desired but not mandatory, accepts_with_or_without_parking when the customer accepts both with and without parking, and must_not_have_parking only when the customer explicitly rejects parking. Do not infer parking_requirement from a unit/card/project that happens to include a parking space or from a generic 'sim' unless the assistant's question was specifically about parking.", "correction_rule": "If the customer changes the parking constraint, replace the prior value with the latest explicit constraint.", "data_classification": "customer_intent", "description": "How the buyer relates to parking availability as a property filter.", "enum_values": ["must_have_parking", "prefers_parking", "accepts_with_or_without_parking", "must_not_have_parking"], "field_id": "parking_requirement", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"accepts_with_or_without_parking": ["pode ser com ou sem vaga", "com ou sem vaga", "tanto faz vaga", "vaga nao e filtro", "nao preciso de vaga", "aceito sem vaga"], "must_have_parking": ["preciso de vaga", "tem que ter vaga", "necessario vaga", "obrigatorio vaga", "vaga obrigatoria", "com vaga obrigatorio"], "must_not_have_parking": ["nao quero vaga", "prefiro sem vaga", "sem vaga obrigatorio", "nao quero pagar vaga"], "prefers_parking": ["seria bom vaga", "preferia vaga", "se tiver vaga", "com vaga melhor", "preferencialmente com vaga"]}}, {"aliases": ["perto_metro", "proximo_transporte", "near_transit", "metro"], "canonical_value_type": "list[proximity_target]", "canonicalization": "Keep raw_text and normalize target_name spelling/accent/case when possible. Do not drop unresolved place names.", "capture_rule": "Capture every place, service, landmark, or facility the customer wants the property to be near. This is open-domain: metro stations, bus stops, supermarkets, named markets, schools, named schools, workplace, family home, shopping malls, hospitals, parks, beaches, highways, or any customer-relevant landmark.", "data_classification": "customer_intent", "description": "List of places, services, or facilities the buyer wants the property to be near.", "field_id": "proximity_preferences", "field_type": "text", "item_schema": {"proximity_strength": ["required", "preferred", "accepted"], "raw_text": "Customer wording that expressed the proximity preference.", "target_name": "Specific open-text place name when the customer provides one; otherwise null.", "target_type": ["transit_station", "bus_stop", "school", "supermarket", "shopping_mall", "workplace", "family_home", "hospital", "park", "beach", "highway", "landmark", "other", "unknown_place_or_landmark"]}, "merge_rule": "Append each distinct proximity target accepted by the customer, dedupe by target_type + normalized target_name + proximity_strength, preserve first-accepted order.", "multi_value": true, "proximity_strength_rule": "Use required when proximity is mandatory, preferred when desired but not mandatory, accepted when the customer accepts a proximity option suggested by the assistant.", "removal_rule": "Remove a proximity target only when the customer explicitly rejects/removes it.", "replaces_or_derives_from": "near_transit_preference", "required": false, "score_in_primary_benchmark": true, "target_type_rule": "Classify target_type from customer wording when clear. If the customer says metro Santa Cruz, use transit_station and target_name Santa Cruz. If the customer says only Santa Cruz without enough context, use unknown_place_or_landmark with target_name Santa Cruz."}, {"aliases": ["condominio_fechado", "gated_community", "condominio"], "canonical_value_type": "boolean", "canonicalization": "Map to boolean.", "capture_rule": "Capture only explicit requirement or explicit dismissal.", "data_classification": "customer_intent", "description": "Whether the buyer explicitly requires a gated community or condominium setting.", "field_id": "needs_gated_community", "field_type": "boolean", "multi_value": false, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"false": ["nao precisa condominio", "condominio nao importa"], "true": ["condominio fechado", "quero condominio", "preciso de condominio"]}}, {"alias_policy": "Aliases are examples, not a closed vocabulary. The extractor must interpret semantically equivalent customer wording even when the exact phrase is not listed.", "aliases": ["aceita_pet", "pet_friendly", "pets", "pet"], "canonical_value_type": "boolean", "canonicalization": "Map semantically to boolean.", "capture_rule": "Capture true when the customer indicates they have a pet, will bring an animal, asks if pets are accepted, or requires the property/condo to accept animals. Capture false only when the customer explicitly says they do not have pets or that pet acceptance is irrelevant.", "data_classification": "customer_intent", "description": "Whether pet-friendly rules or features are a stated requirement.", "field_id": "pet_friendly_required", "field_type": "boolean", "multi_value": false, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"false": ["nao tenho pet", "sem pet", "pet nao importa"], "true": ["tenho pet", "tenho cachorro", "tenho gato", "aceita pet", "aceita cachorro", "precisa aceitar animal", "vou levar meu pet"]}}, {"aliases": ["estado_imovel", "estagio_obra", "condicao_imovel"], "canonical_value_type": "list[enum]", "canonicalization": "Map to enum list. Use used_resale when the customer explicitly asks for or accepts used/resale properties.", "capture_rule": "Capture every accepted property condition or market stage, including preference for used/resale properties. Multiple accepted values are valid when the customer says they accept both new and used, or otherwise accepts more than one condition. Do not suppress used_resale because current business inventory may focus on new properties.", "data_classification": "customer_intent", "description": "Buyer preference for launch stage or move-in readiness including used/resale properties.", "enum_values": ["ready_to_move_in", "new_launch", "under_construction", "used_resale", "open_to_any"], "field_id": "property_condition_preference", "field_type": "enum", "multi_value": true, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"new_launch": ["lancamento", "lançamento", "novo"], "open_to_any": ["tanto faz", "qualquer um", "aberto a opcoes"], "ready_to_move_in": ["pronto", "pronto para morar", "entrega imediata"], "under_construction": ["em obras", "na planta", "em construcao", "em construção"], "used_resale": ["usado", "imovel usado", "imóvel usado", "apartamento usado", "apto usado", "seminovo", "revenda"]}}, {"aliases": ["budget", "budget_max", "orcamento", "orcamento_maximo", "preco_maximo", "valor_maximo", "teto", "faixa_preco", "limite_imovel"], "assistant_context_rule": "Assistant-proposed price ceilings become captured only when the customer confirms, accepts, or agrees in the following turn/context.", "canonical_value_type": "integer_brl", "canonicalization": "Integer BRL. For ranges, use the upper bound when the customer accepts the range as search budget, e.g. 700 a 800 mil => 800000. Normalize shorthand like 800 mil to 800000.", "capture_rule": "Capture the customer's current accepted maximum total property price. Capture when the customer states a ceiling/range directly or explicitly accepts a ceiling/range proposed by the assistant, including elliptical confirmations like 'sim' after 'topa considerar ate R$ 370 mil?'.", "correction_rule": "When the customer later states or accepts a new ceiling, replace the previous budget_max_brl with the latest accepted ceiling.", "data_classification": "financial_profile", "description": "Maximum total property price the buyer says they want, can pay, or were approved to target. This is the purchase ceiling, not the monthly installment and not the down payment.", "exclusion_rule": "Do not capture monthly installment, monthly income, down payment, FGTS balance, financing simulation value, or project/unit price as budget_max_brl unless the customer explicitly states that amount is their accepted total property price ceiling.", "field_id": "budget_max_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"alias_policy": "Aliases are examples, not a closed vocabulary. Interpret semantically equivalent customer wording.", "canonical_value_type": "list[enum]", "canonical_values": ["cash", "down_payment", "bank_financing", "developer_financing", "fgts", "consortium"], "canonicalization": "Map each payment method to enum list. Do not use payment_methods to store amounts.", "capture_rule": "Capture all payment methods the customer explicitly plans, accepts, asks to use, or requests availability for. Multiple values are valid, e.g. tenho entrada e financio o resto => [\"down_payment\", \"bank_financing\"]. If the assistant only offers to simulate financing and the customer says 'sim', treat the method as uncertain/ambiguous rather than high-confidence captured. Explicit customer wording such as quero financiar, vou financiar, preciso financiar, financiamento com banco, financiamento com construtora, direto com a construtora, or tenho entrada e financio o resto can be high-confidence captured.", "data_classification": "financial_profile", "description": "Payment methods the buyer plans or accepts to use in the purchase composition.", "exclusion_rule": "Do not capture payment_methods from assistant-only financing offers, project payment descriptions, or a generic 'sim' unless the prior assistant question clearly asked whether the customer wants to use/evaluate that payment method; in that simulation-only case, use low/medium confidence so runtime can keep it ambiguous.", "field_id": "payment_methods", "field_type": "text", "merge_rule": "Append accepted payment methods, dedupe by canonical enum, and preserve first-accepted order. Replace only when the customer explicitly corrects the plan.", "multi_value": true, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"bank_financing": ["financiamento bancario", "financiamento bancário", "financiar pelo banco", "financio o resto", "financiamento"], "cash": ["a vista", "à vista", "pagamento a vista", "sem financiamento"], "consortium": ["consorcio", "consórcio", "carta de consorcio", "carta de consórcio"], "developer_financing": ["financiamento com construtora", "financiar com a construtora", "direto com a construtora", "parcelar com a construtora"], "down_payment": ["entrada", "valor de entrada", "sinal", "vou dar de entrada"], "fgts": ["usar fgts", "tenho fgts", "vou usar fgts"]}}, {"alias_policy": "Aliases are examples, not a closed vocabulary. Interpret semantically equivalent customer wording.", "aliases": ["financiamento", "forma_pagamento", "credito_imobiliario", "payment_mode"], "canonical_value_type": "enum", "canonicalization": "Map to a single enum.", "capture_rule": "Capture the customer's financing/credit state, not the whole payment composition. Use bank_restricted when the customer reports bank restriction or SPC/Serasa issues.", "data_classification": "financial_profile", "description": "How the buyer expects to fund the purchase from a credit and financing state perspective.", "enum_values": ["not_needed", "needs_financing", "pre_approved", "bank_restricted", "undecided"], "exclusion_rule": "Do not use financing_status to encode down payment, FGTS, consortium, developer financing, or cash as payment methods; those belong in payment_methods.", "field_id": "financing_status", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"bank_restricted": ["tenho restricao com banco", "tenho restrição com banco", "nome sujo", "restricao no banco", "banco nao aprova"], "needs_financing": ["vou financiar", "preciso financiar", "financio o resto", "preciso de financiamento"], "not_needed": ["a vista", "à vista", "sem financiamento", "nao preciso financiar"], "pre_approved": ["credito aprovado", "crédito aprovado", "carta aprovada", "pre aprovado", "pré aprovado", "tenho carta"], "undecided": ["nao sei ainda", "não sei ainda", "a decidir", "vou ver financiamento"]}}, {"aliases": ["renda", "renda_mensal", "salario", "income"], "canonical_value_type": "integer_brl", "canonicalization": "Integer BRL.", "capture_rule": "Gross monthly income explicitly shared by the customer.", "data_classification": "financial_profile", "description": "Gross monthly income the buyer explicitly shares for financing qualification. Do not store property budget or monthly installment here.", "field_id": "monthly_income_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"aliases": ["installment", "installment_max", "parcela", "parcela_maxima", "prestacao", "mensalidade"], "canonical_value_type": "integer_brl", "canonicalization": "Integer BRL.", "capture_rule": "Monthly installment ceiling explicitly stated as comfortable/acceptable.", "data_classification": "financial_profile", "description": "Maximum monthly installment the buyer says is comfortable or acceptable. This is a monthly payment ceiling, not the full property budget and not the down payment.", "field_id": "comfortable_installment_max_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"aliases": ["down_payment", "entrada", "valor_entrada", "sinal", "ato"], "canonical_value_type": "integer_brl", "canonicalization": "Integer BRL.", "capture_rule": "Upfront cash/down payment/entry amount only.", "data_classification": "financial_profile", "description": "Maximum amount the buyer can pay upfront as down payment or cash entry. This is the upfront contribution, not the full property budget and not the monthly installment.", "field_id": "down_payment_max_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"aliases": ["fgts", "usar_fgts", "uses_fgts"], "canonical_value_type": "boolean", "canonicalization": "Map to boolean.", "capture_rule": "Capture whether the customer expects to use FGTS.", "data_classification": "financial_profile", "description": "Whether the buyer explicitly wants or expects to use FGTS in the purchase composition.", "field_id": "uses_fgts", "field_type": "boolean", "multi_value": false, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"false": ["nao vou usar fgts", "sem fgts"], "true": ["usar fgts", "tenho fgts", "vou usar fgts"]}}, {"canonical_value_type": "integer_brl", "canonicalization": "Integer BRL. Normalize shorthand like 40 mil de FGTS to 40000. When captured, payment_methods should include fgts and uses_fgts should be true.", "capture_rule": "Capture the amount of FGTS the customer says is available to use. This is a resource amount, not the total property budget.", "data_classification": "financial_profile", "description": "Amount of FGTS the buyer says is available to use in the purchase.", "exclusion_rule": "Do not use fgts_available_brl as budget_max_brl, down_payment_max_brl, monthly income, installment, or project price. If the customer only says they will use FGTS without an amount, set uses_fgts=true and leave fgts_available_brl missing.", "field_id": "fgts_available_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"aliases": ["objetivo", "finalidade", "uso_imovel", "goal"], "canonical_value_type": "enum", "canonicalization": "Map to enum. If the customer says investimento only, use investment. If they specify Airbnb or temporada, use short_term_rental. If they specify aluguel/locacao for tenants, use long_term_rental.", "capture_rule": "Capture intended use from customer wording. Use primary_residence when the customer will live there, vacation_home for personal vacation use, investment for generic investment without rental model, long_term_rental for standard rental income, and short_term_rental for Airbnb/seasonal/short-stay use.", "data_classification": "customer_intent", "description": "How the buyer intends to use the property once purchased.", "enum_values": ["primary_residence", "vacation_home", "investment", "long_term_rental", "short_term_rental"], "field_id": "intended_use", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"investment": ["investimento", "renda", "patrimonio", "patrimônio", "valorizacao", "valorização"], "long_term_rental": ["alugar", "locacao", "locação", "renda de aluguel", "aluguel mensal", "inquilino", "locar"], "primary_residence": ["morar", "moradia", "residir", "minha casa"], "short_term_rental": ["airbnb", "air bnb", "aluguel de temporada", "locacao por temporada", "temporada", "short stay", "curta temporada"], "vacation_home": ["casa de ferias", "férias", "veraneio"]}}, {"aliases": ["prazo_compra", "quando_comprar", "urgencia_compra", "timeline"], "canonical_value_type": "enum", "canonicalization": "Map to enum. Do not force event-dependent timing into within_3_months/within_6_months unless the customer also gives or confirms an explicit date window. Because purchase_timeline is scalar, a later confirmed explicit window supersedes an earlier conditional value, while the dependency event can remain in purchase_timeline_conditions.", "capture_rule": "Capture purchase urgency/timeline from customer wording. Use conditional when the purchase depends on an event instead of a date. Use within_3_months/within_6_months when the customer explicitly accepts a date/delivery window offered by the assistant. Use exploring when the customer is only researching, and flexible when they are open but not date-driven.", "data_classification": "customer_intent", "description": "Expected purchase timeline based on the buyer's own words.", "enum_values": ["immediate", "within_3_months", "within_6_months", "within_12_months", "conditional", "flexible", "exploring"], "field_id": "purchase_timeline", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"conditional": ["quando vender", "assim que vender", "quando aprovar financiamento", "depende"], "exploring": ["pesquisando", "olhando", "sem pressa", "so pesquisando"], "flexible": ["sem prazo definido", "sem data", "nao tenho pressa", "não tenho pressa", "flexivel"], "immediate": ["agora", "imediato", "urgente", "esse mes", "este mês"], "within_12_months": ["em ate 1 ano", "até 1 ano", "12 meses"], "within_3_months": ["em ate 3 meses", "até 3 meses", "proximos 3 meses"], "within_6_months": ["em ate 6 meses", "até 6 meses", "semestre"]}}, {"alias_policy": "Aliases are examples, not a closed vocabulary. Interpret semantically equivalent customer wording.", "canonical_value_type": "list[enum]", "canonical_values": ["sell_current_property", "financing_approval", "document_regularization", "family_decision", "job_relocation", "waiting_for_launch", "other"], "canonicalization": "Map to enum list. If the condition is clear but not covered by a specific enum, use other and preserve the raw wording in evidence/reviewer note.", "capture_rule": "Capture event dependencies that explain a conditional purchase timeline, such as waiting to sell the current property. This field stores event conditions only; do not put timeline enum values such as within_3_months or within_6_months here. If a later explicit date window supersedes purchase_timeline, keep the event dependency here when it remains stated.", "data_classification": "customer_intent", "description": "Event dependencies that explain a conditional purchase timeline.", "field_id": "purchase_timeline_conditions", "field_type": "text", "merge_rule": "Append every explicit condition, dedupe by canonical enum, and preserve first-mentioned order.", "multi_value": true, "required": false, "score_in_primary_benchmark": true, "value_aliases": {"document_regularization": ["regularizar documento", "documentacao", "documentação", "resolver escritura", "resolver inventario"], "family_decision": ["decidir com familia", "decidir com família", "falar com meu marido", "falar com minha esposa"], "financing_approval": ["aprovar financiamento", "quando aprovar financiamento", "sair financiamento"], "job_relocation": ["transferencia de trabalho", "transferência de trabalho", "mudar de emprego"], "other": ["outra condicao", "outra condição", "depende de outra coisa"], "sell_current_property": ["vender meu imovel", "vender meu imóvel", "quando vender", "assim que vender", "vender a casa"], "waiting_for_launch": ["esperar lancamento", "esperar lançamento", "quando lançar"]}}, {"aliases": ["canal_contato", "melhor_canal", "contact_channel"], "canonical_value_type": "enum", "canonicalization": "Map to enum.", "capture_rule": "Capture explicit preferred contact channel.", "data_classification": "direct_contact", "description": "Preferred outreach channel for project follow-up or human handoff.", "enum_values": ["whatsapp", "phone", "either"], "field_id": "preferred_contact_channel", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": false, "value_aliases": {"either": ["tanto faz", "qualquer um", "pode ser os dois"], "phone": ["telefone", "ligacao", "ligação", "me liga"], "whatsapp": ["whatsapp", "zap", "mensagem"]}}, {"aliases": ["horario_contato", "melhor_horario", "contact_time"], "canonical_value_type": "enum", "canonicalization": "Map to enum.", "capture_rule": "Capture explicit contact time preference.", "data_classification": "direct_contact", "description": "Preferred time window for follow-up contact.", "enum_values": ["morning", "afternoon", "evening", "flexible"], "field_id": "preferred_contact_time", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": false, "value_aliases": {"afternoon": ["tarde", "a tarde", "à tarde"], "evening": ["noite", "a noite", "à noite"], "flexible": ["qualquer horario", "qualquer horário", "tanto faz", "flexivel"], "morning": ["manha", "manhã", "de manha", "de manhã"]}}, {"aliases": ["selected_project", "nome_projeto", "empreendimento", "project_name"], "canonical_value_type": "canonical_project_name", "canonicalization": "Normalize punctuation/spacing against project catalog. Keep catalog canonical name.", "capture_rule": "Capture a project only when the customer explicitly selects, accepts, asks about, or continues with a named project. Assistant merely showing a card is not enough.", "data_classification": "customer_intent", "description": "Project or development explicitly chosen by the buyer during the conversation.", "field_id": "selected_project_name", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"aliases": ["observacoes", "notas", "notes", "comentarios"], "canonical_value_type": "free_text_note", "canonicalization": "Not scored in primary benchmark until subcategories are defined.", "capture_rule": "Residual material handoff note only. Do not duplicate facts captured in dedicated fields.", "data_classification": "customer_intent", "description": "Additional relevant buyer notes that materially affect matching or handoff and do not belong in another field.", "field_id": "extra_info", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": false}], "form_id": "real_estate_buyer_profile", "form_ref": "real_estate_buyer_profile@4", "form_version": "4", "locale": "pt-BR"}, "guardrails": ["Do not send provider API keys from clients.", "Estimate before paid batch runs.", "Live CRM stores persist CRM JSON plus operational metadata, not raw conversation text."], "integration_examples": {"annotation_system_csv_batch": {"csv_text": "contact_id,message_id,timestamp,speaker,text\nsynthetic_annotation_002,m2,2026-01-02T10:01:00Z,assistant,Posso buscar opcoes\nsynthetic_annotation_001,m1,2026-01-01T10:00:00Z,customer,Quero apartamento em Santos\nsynthetic_annotation_002,m1,2026-01-02T10:00:00Z,customer,Busco casa em Campinas\n", "estimate_endpoint": "/api/v1/estimate-csv-batch", "estimate_form_fields": {"budget_usd_ceiling": "5.0", "chunk_size_messages": "8", "framework": "current_house", "mode": "chunk", "model_id": "gpt-5-mini", "provider": "openai"}, "expected": {"batch_totals": ["total_input_tokens", "total_output_tokens", "total_tokens", "total_cost_usd", "latency_ms"], "completed_count": 2, "conversation_ids": ["synthetic_annotation_001", "synthetic_annotation_002"], "cost_kind": "estimated", "crm_contract_id": "buyer_profile_runtime_result_v1", "estimated_count": 2, "failed_count": 0, "result_granularity": "conversation"}, "extract_endpoint": "/api/v1/extract-csv-batch", "extract_form_fields": {"budget_usd_ceiling": "5.0", "chunk_size_messages": "8", "framework": "current_house", "mode": "chunk", "model_id": "gpt-5-mini", "provider": "openai", "response_format": "inline_json"}, "file_field": "file", "purpose": "Synthetic multipart CSV batch request shape for AnnotationSystem-style clients.", "transport": "multipart/form-data", "upload_filename": "synthetic_annotation_aggregate.csv"}}, "legacy_aliases": {"conversation_path_pattern": "/api/conversations/{conversation_id}", "conversations_path": "/api/conversations", "estimate_path": "/api/estimate", "extract_path": "/api/extract", "golden_crm_path_pattern": "/api/golden-set/{conversation_id}", "golden_set_path": "/api/golden-set", "latest_crm_path_pattern": "/api/crms/{conversation_id}", "memory_estimate_path": "/api/memory/estimate", "memory_update_path": "/api/memory/update"}, "methodology": {"active_form_ref": "real_estate_buyer_profile@4", "architecture_candidates": [{"input_scope": "fixed number of messages supplied by chunk_size_messages; when omitted, only the context-safety text budget splits calls", "mode": "chunk", "status": "primary"}, {"input_scope": "recent message window for one CRM memory refresh; a chatbot typically invokes it once per triggered message event", "mode": "turn", "status": "secondary"}, {"input_scope": "one prompt with the whole conversation", "mode": "full_conversation", "status": "planned_experiment"}, {"input_scope": "one extraction call per message followed by deterministic CRM merge; this is distinct from the stateful turn memory endpoint", "mode": "message_by_message", "status": "experimental"}], "cost_kind_definitions": {"billing_actual": "Cost reported for one or more concrete provider generations by a provider billing/usage API. OpenRouter is implemented through GET /api/v1/generation; this is not the consolidated account invoice.", "estimated": "Cost uses token estimates plus the local PRICE_TABLE. This is planning evidence only and must be marked as estimated.", "provider_usage": "Cost uses token counts returned by the provider API plus the local PRICE_TABLE. Token volume is more precise than an estimate, but the USD value is still not a billing ledger."}, "cost_methodology": {"architecture_normalization": {"chunk_calls": "ceil(messages / chunk_size_messages), with additional calls when the context-safety splitter bounds an oversized message. When chunk_size_messages is omitted, the conversation is grouped only by the context-safety text budget.", "comparison_unit": "1000 message events", "message_by_message_calls": "One call per message, with additional calls only when one individual message must be segmented for context safety.", "turn_calls": "1000 * turn_trigger_rate, because chatbot CRM memory is refreshed on each triggered message event.", "why_turn_uses_more_tokens": "Every turn call repeats the CRM instructions, 39-field schema, recent context window, and a generated CRM result."}, "billing_reconciliation_support": {"gemini": {"status": "pending_provider_specific_billing_export"}, "openai": {"status": "pending_provider_specific_account_export"}, "openrouter": {"command": "crm-extractor reconcile-openrouter-cost", "cost_kind": "billing_actual", "source": "GET https://openrouter.ai/api/v1/generation?id=<generation_id>", "status": "implemented"}}, "formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "limitations": ["Provider prices change; refresh current prices before paid pilots.", "Provider usage tokens do not include invoice adjustments, credits, minimum charges, or taxes.", "OpenRouter routed prices can differ from direct-provider prices for the same underlying model family.", "OpenRouter billing_actual is per generation, not an account invoice; OpenAI and Gemini account reconciliation remain pending."], "price_unit": "USD per 1 million input tokens and USD per 1 million output tokens.", "source_definitions": {"deterministic_fixture_no_provider_cost": {"confidence": "deterministic_zero_cost", "meaning": "Local fixture execution; no external provider call and zero provider cost.", "paid_run_action": "No price verification required.", "source": "fixture"}, "manual_estimate_verify_before_paid_run": {"confidence": "planning_only", "meaning": "Manual price entered in PRICE_TABLE for planning. Treat as a placeholder until someone verifies the provider's official price immediately before a paid run.", "paid_run_action": "Verify current provider pricing and update the table or runbook.", "source": "local PRICE_TABLE"}, "verified_official_provider_page": {"confidence": "official_catalog_snapshot", "last_verified_at": "2026-07-26", "meaning": "Direct-provider price copied from the provider's official model or pricing page. The date is recorded in last_verified_at.", "paid_run_action": "Recheck the official page immediately before a paid pilot.", "source": "official provider pricing page"}, "verified_openrouter_models_api": {"confidence": "catalog_snapshot", "last_verified_at": "2026-07-27", "meaning": "OpenRouter routed-model price copied from the public models API snapshot at https://openrouter.ai/api/v1/models.", "paid_run_action": "Refresh OpenRouter model availability and price before a paid pilot.", "source": "https://openrouter.ai/api/v1/models"}}, "token_sources": {"billing_actual": "OpenRouter reconciliation uses native prompt/completion tokens and total_cost returned for each generation ID.", "estimate_only": "Uses local token assumptions/counts from the input and configured output cap. It does not call providers.", "fallback_estimate": "If a live provider response has no usage metadata, the USD value remains estimated and cost_kind stays estimated.", "provider_usage": "Uses usage tokens returned by OpenAI, Gemini, or OpenRouter when their API response includes usage metadata."}, "where_prices_are_exposed": ["/api/v1/options providers[].model_details[].pricing", "/api/v1/estimate pricing", "/api/v1/extract metadata.pricing", "experiment_manifest.jsonl rows[].pricing", "experiment_decision_report pricing_provenance_summary", "reconcile-openrouter-cost sanitized billing_actual report"], "where_prices_live": "src/crm_extractor/providers/pricing.py::PRICE_TABLE"}, "data_dictionary_version": "real_estate_buyer_profile@4", "error_category_definitions": {"budget_exceeded": "The estimate or run exceeded the configured USD budget guardrail.", "incomplete_response": "The provider returned empty, truncated, or structurally incomplete content.", "invalid_json": "The model response could not be parsed as valid JSON.", "invalid_schema": "JSON was returned but did not satisfy the expected CRM/provider schema.", "live_guardrail": "A paid call was blocked because CRM_EXTRACTOR_LIVE=1 was not enabled.", "not_found": "A requested local/API resource was not found.", "provider_unavailable": "The provider was unavailable, rate-limited, or returned a service error.", "retry_exhausted": "The retry or failure-threshold policy stopped additional attempts.", "storage_unavailable": "The configured CRM store could not be reached or authenticated.", "timeout": "The provider or guarded matrix row exceeded its configured wall-clock limit.", "unknown": "The sanitized error did not match a stable category yet and requires triage.", "validation_error": "Input or generated CRM data failed local validation."}, "error_taxonomy_version": "model_error_taxonomy_v1", "experimental_modes": ["message_by_message"], "framework_prompt_versions": {"current_house": "current_house_chunk_v3_bounded_input", "langextract": "langextract_chunk_pack_v3_bounded_input"}, "latency_methodology": {"batch_total_metric": "CSV batch responses expose latency_breakdown_ms.total_ms around CSV parsing, estimate preflight, and all serial extraction calls. HTTP transfer, client rendering, and final ZIP serialization are outside that boundary. Per-conversation latency_ms remains the service runtime for that conversation.", "clock_source": "Python time.perf_counter() around each backend stage.", "frontend_metric": "The static frontend additionally measures frontend_roundtrip_ms around fetch/form uploads. This is displayed in the UI but is not part of backend latency reports unless a client persists it.", "interactive_turn_rule": "For a chatbot, turn latency is the observed wall-clock latency of one memory refresh request. Serial latency for 1000 messages is not user-perceived latency; capacity planning must separately model concurrency, queues, provider quotas, retries, and debounce policy.", "measurement_type": "observed_wall_clock_ms", "normalization_rule": "Average latency is computed only over completed rows for the same setup. Reports expose completion rate and multiply quality on completed rows by that rate for ranking/Pareto comparisons. Success/failure counts must remain beside latency.", "not_included": ["Queue wait time unless a future queue stage records it explicitly.", "Human annotation/review time.", "External dashboard rendering time.", "Provider billing reconciliation time."], "primary_runtime_metric": "metadata.latency_ms and latency_breakdown_ms.total_ms", "projection_rule": "Experiment reports project latency by multiplying observed average latency per completed extraction by the target conversation count. This is a normalized comparison, not a production SLA.", "runtime_total_metric": "latency_breakdown_ms.runtime_total_ms wraps the runtime service call around extraction and metadata assembly."}, "latency_schema_version": "latency_breakdown_v2", "latency_stage_definitions": {"chunking_ms": "Conversation chunk construction.", "estimate_ms": "Estimate preflight time for a request or CSV batch.", "extraction_ms": "Wall-clock time spent executing all conversation extractions in a CSV batch.", "frontend_roundtrip_ms": "Browser-observed request/response time measured by the frontend when available.", "input_load_ms": "CSV/request parsing and message loading before extraction when the caller records it.", "merge_ms": "CRM merge across chunks.", "parsing_ms": "Provider JSON parsing and field validation.", "prompt_build_ms": "Prompt rendering before provider calls.", "provider_call_ms": "Provider API/client time across all calls.", "runtime_total_ms": "Runtime service wrapper around extraction plus metadata assembly.", "service_total_ms": "Live service boundary including catalog work, extraction, and CRM store persistence.", "store_ms": "CRM store write/read operation when configured.", "total_ms": "End-to-end runtime time captured by this service surface.", "validation_ms": "Runtime CRM contract validation."}, "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "primary_mode": "chunk", "secondary_mode": "turn", "setup_id_compatibility": "setup_id_v3 adds turn_window to keep recent-window turn architectures distinct. Historical setup_id_v2 values remain valid evidence and are not rewritten.", "setup_id_parameters": ["temperature", "max_output_tokens", "reasoning_effort", "chunk_size_messages", "turn_window_messages"], "setup_id_version": "setup_id_v3", "status_definitions": {"ambiguous": "Useful signal exists but evidence is insufficient or contradictory.", "captured": "Field value is supported by customer evidence.", "missing": "No safely supported value is present."}}, "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "primary_mode": "chunk", "provider_catalog": {"batch_modes_supported": ["chunk", "message_by_message"], "frameworks": ["current_house", "langextract"], "modes_supported": ["chunk", "message_by_message", "turn"], "provider_model_map": {"fixture": ["fixture-current-house"], "gemini": ["gemini-2.5-flash", "gemini-2.5-pro"], "openai": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "openrouter": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol", "deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro"]}, "providers": [{"default_model": "fixture-current-house", "model_details": [{"candidate_class": "deterministic_baseline", "cost_tier": "free", "is_default": true, "latency_tier": "local", "model_id": "fixture-current-house", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "deterministic_zero_cost", "input_usd_per_1m_tokens": 0.0, "input_usd_per_token": 0.0, "last_verified_at": "", "model_id": "fixture-current-house", "output_usd_per_1m_tokens": 0.0, "output_usd_per_token": 0.0, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "deterministic_fixture_no_provider_cost", "provider": "fixture", "source": "fixture", "source_conversion": "none", "source_description": "Local deterministic fixture provider. It does not call an external LLM provider, so the modeled provider cost is always zero.", "source_model_id": "fixture-current-house", "source_native_unit": "usd_per_1m_tokens", "source_url": "", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": false}, "quality_tier": "fixture", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/fixture/fixture-current-house/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["fixture-current-house"], "provider": "fixture"}, {"default_model": "gemini-2.5-flash", "model_details": [{"candidate_class": "low_cost_fast", "cost_tier": "low", "is_default": true, "latency_tier": "fast", "model_id": "gemini-2.5-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "thinking_budget_0", "reasoning_effort_supported": ["thinking_budget_0", "thinking_budget_1024", "thinking_budget_8192", "thinking_budget_24576", "thinking_budget_dynamic"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 0.3, "input_usd_per_token": 3e-07, "last_verified_at": "2026-07-26", "model_id": "gemini-2.5-flash", "output_usd_per_1m_tokens": 2.5, "output_usd_per_token": 2.5e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "gemini", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official Google Gemini model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gemini-2.5-flash", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://ai.google.dev/gemini-api/docs/pricing", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "thinking_budget_0", "setup_id": "current_house@current_house_chunk_v3_bounded_input/gemini/gemini-2.5-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=thinking_budget_0,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "quality_sensitive_chunk", "cost_tier": "high", "is_default": false, "latency_tier": "slower", "model_id": "gemini-2.5-pro", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "thinking_budget_128", "reasoning_effort_supported": ["thinking_budget_128", "thinking_budget_2048", "thinking_budget_8192", "thinking_budget_32768", "thinking_budget_dynamic"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 1.25, "input_usd_per_token": 1.25e-06, "last_verified_at": "2026-07-26", "model_id": "gemini-2.5-pro", "output_usd_per_1m_tokens": 10.0, "output_usd_per_token": 1e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "gemini", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official Google Gemini model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gemini-2.5-pro", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://ai.google.dev/gemini-api/docs/pricing", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "thinking_budget_128", "setup_id": "current_house@current_house_chunk_v3_bounded_input/gemini/gemini-2.5-pro/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=thinking_budget_128,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["gemini-2.5-flash", "gemini-2.5-pro"], "provider": "gemini"}, {"default_model": "gpt-4o-mini", "model_details": [{"candidate_class": "low_cost_fast", "cost_tier": "low", "is_default": true, "latency_tier": "fast", "model_id": "gpt-4o-mini", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 0.15, "input_usd_per_token": 1.5e-07, "last_verified_at": "2026-07-26", "model_id": "gpt-4o-mini", "output_usd_per_1m_tokens": 0.6, "output_usd_per_token": 6e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "openai", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official OpenAI model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gpt-4o-mini", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://developers.openai.com/api/docs/models/gpt-4o-mini", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openai/gpt-4o-mini/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "quality_sensitive_chunk", "cost_tier": "high", "is_default": false, "latency_tier": "medium", "model_id": "gpt-4o", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 2.5, "input_usd_per_token": 2.5e-06, "last_verified_at": "2026-07-26", "model_id": "gpt-4o", "output_usd_per_1m_tokens": 10.0, "output_usd_per_token": 1e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "openai", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official OpenAI model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gpt-4o", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://developers.openai.com/api/docs/models/gpt-4o", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openai/gpt-4o/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "balanced_chunk", "cost_tier": "medium", "is_default": false, "latency_tier": "medium", "model_id": "gpt-5-mini", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "low", "reasoning_effort_supported": ["minimal", "low", "medium", "high"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 0.25, "input_usd_per_token": 2.5e-07, "last_verified_at": "2026-07-26", "model_id": "gpt-5-mini", "output_usd_per_1m_tokens": 2.0, "output_usd_per_token": 2e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "openai", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official OpenAI model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gpt-5-mini", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://developers.openai.com/api/docs/models/gpt-5-mini", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced_high", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "low", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openai/gpt-5-mini/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=low,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "provider": "openai"}, {"default_model": "openai/gpt-4o-mini", "model_details": [{"candidate_class": "openrouter_low_cost_fast", "cost_tier": "low", "is_default": true, "latency_tier": "fast", "model_id": "openai/gpt-4o-mini", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.15, "input_usd_per_token": 1.5e-07, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-4o-mini", "output_usd_per_1m_tokens": 0.6, "output_usd_per_token": 6e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-4o-mini", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-4o-mini/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_budget_fast", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast", "model_id": "google/gemini-2.5-flash-lite", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.1, "input_usd_per_token": 1e-07, "last_verified_at": "2026-07-27", "model_id": "google/gemini-2.5-flash-lite", "output_usd_per_1m_tokens": 0.4, "output_usd_per_token": 4e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "google/gemini-2.5-flash-lite", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "budget_balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/google%2Fgemini-2.5-flash-lite/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_low_cost_fast", "cost_tier": "low", "is_default": false, "latency_tier": "fast", "model_id": "google/gemini-2.5-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.3, "input_usd_per_token": 3e-07, "last_verified_at": "2026-07-27", "model_id": "google/gemini-2.5-flash", "output_usd_per_1m_tokens": 2.5, "output_usd_per_token": 2.5e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "google/gemini-2.5-flash", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/google%2Fgemini-2.5-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_balanced_chunk", "cost_tier": "medium", "is_default": false, "latency_tier": "medium", "model_id": "anthropic/claude-3-haiku", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.25, "input_usd_per_token": 2.5e-07, "last_verified_at": "2026-07-27", "model_id": "anthropic/claude-3-haiku", "output_usd_per_1m_tokens": 1.25, "output_usd_per_token": 1.25e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "anthropic/claude-3-haiku", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/anthropic%2Fclaude-3-haiku/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_quality_chunk", "cost_tier": "high", "is_default": false, "latency_tier": "slower", "model_id": "anthropic/claude-sonnet-4.5", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 3.0, "input_usd_per_token": 3e-06, "last_verified_at": "2026-07-27", "model_id": "anthropic/claude-sonnet-4.5", "output_usd_per_1m_tokens": 15.0, "output_usd_per_token": 1.5e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "anthropic/claude-sonnet-4.5", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/anthropic%2Fclaude-sonnet-4.5/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_robust_chunk", "cost_tier": "very_high", "is_default": false, "latency_tier": "slow", "model_id": "anthropic/claude-fable-5", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 10.0, "input_usd_per_token": 1e-05, "last_verified_at": "2026-07-27", "model_id": "anthropic/claude-fable-5", "output_usd_per_1m_tokens": 50.0, "output_usd_per_token": 5e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "anthropic/claude-fable-5", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/anthropic%2Fclaude-fable-5/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_low_cost_fast", "cost_tier": "low", "is_default": false, "latency_tier": "fast", "model_id": "deepseek/deepseek-chat", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.2002, "input_usd_per_token": 2.002e-07, "last_verified_at": "2026-07-27", "model_id": "deepseek/deepseek-chat", "output_usd_per_1m_tokens": 0.8001, "output_usd_per_token": 8.001e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "deepseek/deepseek-chat", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/deepseek%2Fdeepseek-chat/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_budget_fast", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast", "model_id": "qwen/qwen3.5-flash-02-23", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "none", "reasoning_effort_supported": ["none", "minimal", "low", "medium", "high"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.065, "input_usd_per_token": 6.5e-08, "last_verified_at": "2026-07-27", "model_id": "qwen/qwen3.5-flash-02-23", "output_usd_per_1m_tokens": 0.26, "output_usd_per_token": 2.6e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "qwen/qwen3.5-flash-02-23", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_budget", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "none", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/qwen%2Fqwen3.5-flash-02-23/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=none,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_quality_chunk", "cost_tier": "low", "is_default": false, "latency_tier": "medium", "model_id": "qwen/qwen3-235b-a22b-2507", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.09, "input_usd_per_token": 9e-08, "last_verified_at": "2026-07-27", "model_id": "qwen/qwen3-235b-a22b-2507", "output_usd_per_1m_tokens": 0.55, "output_usd_per_token": 5.5e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "qwen/qwen3-235b-a22b-2507", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/qwen%2Fqwen3-235b-a22b-2507/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_budget_fast", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast", "model_id": "z-ai/glm-4.7-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "none", "reasoning_effort_supported": ["none", "minimal", "low", "medium", "high"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.06, "input_usd_per_token": 6e-08, "last_verified_at": "2026-07-27", "model_id": "z-ai/glm-4.7-flash", "output_usd_per_1m_tokens": 0.4, "output_usd_per_token": 4e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "z-ai/glm-4.7-flash", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_budget", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "none", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/z-ai%2Fglm-4.7-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=none,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_quality_chunk", "cost_tier": "medium", "is_default": false, "latency_tier": "medium", "model_id": "z-ai/glm-5.2", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["high", "xhigh"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.7574, "input_usd_per_token": 7.574e-07, "last_verified_at": "2026-07-27", "model_id": "z-ai/glm-5.2", "output_usd_per_1m_tokens": 2.3804, "output_usd_per_token": 2.3804e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "z-ai/glm-5.2", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/z-ai%2Fglm-5.2/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_cost_sensitive", "cost_tier": "medium", "is_default": false, "latency_tier": "medium_unmeasured", "model_id": "openai/gpt-5.6-luna", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "medium", "reasoning_effort_supported": ["none", "low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.5, "input_usd_per_token": 5e-07, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-5.6-luna", "output_usd_per_1m_tokens": 3.0, "output_usd_per_token": 3e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-5.6-luna", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "medium", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-5.6-luna/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=medium,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_balanced", "cost_tier": "high", "is_default": false, "latency_tier": "medium_unmeasured", "model_id": "openai/gpt-5.6-terra", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "medium", "reasoning_effort_supported": ["none", "low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 1.25, "input_usd_per_token": 1.25e-06, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-5.6-terra", "output_usd_per_1m_tokens": 7.5, "output_usd_per_token": 7.5e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-5.6-terra", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "medium", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-5.6-terra/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=medium,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_robust_chunk", "cost_tier": "very_high", "is_default": false, "latency_tier": "slow_unmeasured", "model_id": "openai/gpt-5.6-sol", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "medium", "reasoning_effort_supported": ["none", "low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 5.0, "input_usd_per_token": 5e-06, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-5.6-sol", "output_usd_per_1m_tokens": 30.0, "output_usd_per_token": 3e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-5.6-sol", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "medium", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-5.6-sol/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=medium,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_low_cost_reasoning", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast_unmeasured", "model_id": "deepseek/deepseek-v4-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["high", "xhigh"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.09, "input_usd_per_token": 9e-08, "last_verified_at": "2026-08-09", "model_id": "deepseek/deepseek-v4-flash", "output_usd_per_1m_tokens": 0.18, "output_usd_per_token": 1.8e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "deepseek/deepseek-v4-flash", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/deepseek%2Fdeepseek-v4-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_quality_reasoning", "cost_tier": "low", "is_default": false, "latency_tier": "medium_unmeasured", "model_id": "deepseek/deepseek-v4-pro", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["high", "xhigh"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.435, "input_usd_per_token": 4.35e-07, "last_verified_at": "2026-08-09", "model_id": "deepseek/deepseek-v4-pro", "output_usd_per_1m_tokens": 0.87, "output_usd_per_token": 8.7e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "deepseek/deepseek-v4-pro", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/deepseek%2Fdeepseek-v4-pro/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol", "deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro"], "provider": "openrouter"}], "selection_profiles": [{"framework": "current_house", "mode": "chunk", "model_id": "fixture-current-house", "profile": "fixture_smoke", "provider": "fixture", "purpose": "CI-safe deterministic smoke test.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "gpt-4o-mini", "profile": "turn_low_cost", "provider": "openai", "purpose": "Low-cost recent-window CRM memory refresh candidate.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "gpt-5-mini", "profile": "chunk_balanced", "provider": "openai", "purpose": "Balanced full-conversation extraction candidate.", "reasoning_effort": "low", "temperature": null}, {"framework": "current_house", "mode": "chunk", "model_id": "openai/gpt-4o-mini", "profile": "openrouter_balanced", "provider": "openrouter", "purpose": "OpenRouter baseline for provider-routing comparison.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "google/gemini-2.5-flash", "profile": "openrouter_gemini_flash", "provider": "openrouter", "purpose": "OpenRouter Gemini candidate for direct-vs-routed provider comparison.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "google/gemini-2.5-flash-lite", "profile": "openrouter_gemini_flash_lite", "provider": "openrouter", "purpose": "OpenRouter Google budget candidate for low-latency memory refresh.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "anthropic/claude-3-haiku", "profile": "openrouter_claude_haiku", "provider": "openrouter", "purpose": "OpenRouter Anthropic candidate for balanced extraction comparison.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "anthropic/claude-sonnet-4.5", "profile": "openrouter_claude_sonnet", "provider": "openrouter", "purpose": "OpenRouter Anthropic quality candidate for full-conversation extraction.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "anthropic/claude-fable-5", "profile": "openrouter_claude_fable_5", "provider": "openrouter", "purpose": "High-cost robust candidate; CRM quality and latency are not measured yet.", "reasoning_effort": "high", "temperature": null}, {"framework": "current_house", "mode": "turn", "model_id": "deepseek/deepseek-chat", "profile": "openrouter_low_cost_turn", "provider": "openrouter", "purpose": "Low-cost OpenRouter candidate for recent-window memory refresh.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "qwen/qwen3.5-flash-02-23", "profile": "openrouter_qwen_budget", "provider": "openrouter", "purpose": "Low-cost Qwen candidate routed through OpenRouter.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "qwen/qwen3-235b-a22b-2507", "profile": "openrouter_qwen_quality", "provider": "openrouter", "purpose": "Larger Qwen candidate routed through OpenRouter for quality comparison.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "z-ai/glm-4.7-flash", "profile": "openrouter_zai_budget", "provider": "openrouter", "purpose": "Low-cost Z.ai GLM candidate routed through OpenRouter.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "z-ai/glm-5.2", "profile": "openrouter_zai_quality", "provider": "openrouter", "purpose": "Higher-capability Z.ai GLM candidate routed through OpenRouter.", "reasoning_effort": "high", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "openai/gpt-5.6-luna", "profile": "openrouter_gpt56_luna_turn", "provider": "openrouter", "purpose": "Cost-sensitive GPT-5.6 candidate for chatbot CRM refresh.", "reasoning_effort": "medium", "temperature": null}, {"framework": "current_house", "mode": "chunk", "model_id": "openai/gpt-5.6-terra", "profile": "openrouter_gpt56_terra_chunk", "provider": "openrouter", "purpose": "Balanced GPT-5.6 candidate for full-conversation extraction.", "reasoning_effort": "medium", "temperature": null}, {"framework": "current_house", "mode": "chunk", "model_id": "openai/gpt-5.6-sol", "profile": "openrouter_gpt56_sol_chunk", "provider": "openrouter", "purpose": "Robust GPT-5.6 candidate; CRM quality and latency are not measured yet.", "reasoning_effort": "medium", "temperature": null}, {"framework": "current_house", "mode": "turn", "model_id": "deepseek/deepseek-v4-flash", "profile": "openrouter_deepseek_v4_flash_turn", "provider": "openrouter", "purpose": "Low-cost DeepSeek V4 candidate for frequent CRM memory refresh; CRM quality and latency are not measured yet.", "reasoning_effort": "high", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "deepseek/deepseek-v4-pro", "profile": "openrouter_deepseek_v4_pro_chunk", "provider": "openrouter", "purpose": "DeepSeek V4 quality candidate for full-conversation extraction; CRM quality and latency are not measured yet.", "reasoning_effort": "high", "temperature": 0}], "usage": "Controlled inventory of registered candidates. Submit only provider/model pairs listed in execution_policy.enabled_provider_model_map."}, "provider_models": {"gemini": ["gemini-2.5-flash", "gemini-2.5-pro"], "openai": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "openrouter": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"]}, "runtime_options": {"allow_selection_changes": true, "analysis_api": {"benchmark_path": "/api/v1/analysis/benchmark", "benchmarks_path": "/api/v1/analysis/benchmarks", "dataset_profile_path": "/api/v1/analysis/dataset-profile", "default_budget_usd_ceiling": 60.0, "default_conversation_counts": [1000, 1400, 1500], "default_message_counts": [1000], "default_turn_window_messages": 12, "estimate_only": true, "estimate_scale_path": "/api/v1/analysis/estimate-scale", "report_path": "/api/v1/analysis/report", "runs_path": "/api/v1/analysis/runs", "supports_experiment_reports": true, "supports_scale_estimates": true}, "auth": {"browser": {"authorization_url": null, "client_id": null, "enabled": false, "logout_url": null, "scopes": ["openid", "crm-extractor/read", "crm-extractor/estimate", "crm-extractor/execute"], "token_url": null}, "enabled": false, "issuer": null, "required_scopes": {"estimate": "crm-extractor/estimate", "execute": "crm-extractor/execute", "read": "crm-extractor/read"}, "type": "none"}, "available_frameworks": ["current_house", "langextract"], "available_models": ["gemini-2.5-flash", "gemini-2.5-pro", "gpt-4o-mini", "gpt-4o", "gpt-5-mini", "openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"], "available_providers": ["gemini", "openai", "openrouter"], "batch_modes_supported": ["chunk", "message_by_message"], "cors": {"allowed_origins": [], "enabled": false}, "csv_batch_api": {"accepted_column_groups": {"conversation_id": ["conversation_id", "contact_id", "thread_id", "lead_id"], "message_id": ["message_id", "id", "event_id"], "speaker": ["speaker", "role", "sender_type", "incoming", "is_incoming", "from_customer"], "text": ["contents", "content", "text", "message", "body"], "timestamp": ["timestamp", "created_at", "sent_at", "date"]}, "budget_fields": ["budget_usd_ceiling"], "content_type": "multipart/form-data", "contract_path": "/api/v1/contract", "default_budget_usd_ceiling": 5.0, "default_response_format": "zip", "estimate_path": "/api/v1/estimate-csv-batch", "expected_csv_columns": ["contact_id", "message_id", "timestamp", "speaker", "text"], "extract_path": "/api/v1/extract-csv-batch", "file_field_names": ["file", "files", "files[]"], "health_path": "/api/v1/health", "modes_supported": ["chunk", "message_by_message"], "multi_conversation_output_filename_pattern": "extracted_<uploaded_csv_stem>_<conversation_id>.json", "openapi_path": "/api/v1/openapi.json", "options_path": "/api/v1/options", "output_filename_pattern": "extracted_<uploaded_csv_stem>.json", "response_formats": ["zip", "inline_json"], "result_granularity": "conversation", "selection_fields": ["selection_profile", "provider", "model_id", "framework", "mode", "temperature", "reasoning_effort", "max_output_tokens", "chunk_size_messages"], "selection_per_request": true, "supports_multi_conversation_uploads": true}, "data_dictionary": {"data_dictionary_version": "real_estate_buyer_profile@4", "field_count": 39, "fields": [{"canonical_value_type": "free_text_name", "data_classification": "direct_contact", "description": "Buyer full name or preferred name when the customer explicitly shares it.", "field_id": "name", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "e164_or_digits", "data_classification": "direct_contact", "description": "Primary phone or WhatsApp number explicitly confirmed for follow-up contact.", "field_id": "phone_number", "field_type": "phone", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "email", "data_classification": "direct_contact", "description": "Primary email address explicitly shared for project follow-up or document exchange.", "field_id": "email", "field_type": "email", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "cpf_or_cnpj_digits", "data_classification": "direct_contact", "description": "CPF or CNPJ explicitly shared for CRM identity confirmation.", "field_id": "legal_id_document", "field_type": "brazilian_tax_id", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "yyyy", "data_classification": "direct_contact", "description": "Birth year only when the buyer explicitly shares it or when it is quoted from an existing CRM context.", "field_id": "birth_year", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "enum", "data_classification": "direct_contact", "description": "Gender only when the buyer explicitly identifies it or when it is quoted from existing CRM context.", "field_id": "gender", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "integer", "data_classification": "customer_intent", "description": "Number of adults who will live in the property as a string integer.", "field_id": "household_adult_count", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "integer", "data_classification": "customer_intent", "description": "Number of children or dependents who will live in the property as a string integer.", "field_id": "household_child_count", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[enum]", "data_classification": "customer_intent", "description": "Who will live in the property as a list of canonical member categories.", "field_id": "household_member_types", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "short_free_text", "data_classification": "customer_intent", "description": "Residual household composition note when counts or member types cannot fully represent the customer wording.", "field_id": "household_composition_note", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "canonical_city", "data_classification": "location_profile", "description": "Current city of residence when the customer mentions where they live today.", "field_id": "current_city", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[canonical_city]", "data_classification": "location_profile", "description": "Cities where the buyer wants to search or buy a property.", "field_id": "preferred_city", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[canonical_city]", "data_classification": "location_profile", "description": "Cities explicitly rejected by the buyer during the conversation.", "field_id": "excluded_cities", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "list[canonical_region]", "data_classification": "location_profile", "description": "Broader regions, zones, or landmark-based areas inside the preferred city that the buyer accepts.", "field_id": "preferred_region", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[canonical_region]", "data_classification": "location_profile", "description": "Broader regions or zones explicitly rejected by the buyer during the conversation.", "field_id": "excluded_regions", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "list[canonical_neighborhood]", "data_classification": "location_profile", "description": "Neighborhoods or micro-areas the buyer explicitly asks for or accepts.", "field_id": "preferred_neighborhoods", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[canonical_neighborhood]", "data_classification": "location_profile", "description": "Neighborhoods explicitly rejected by the buyer during the conversation.", "field_id": "excluded_neighborhoods", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "list[enum]", "data_classification": "customer_intent", "description": "Property types the buyer explicitly requests or accepts.", "field_id": "preferred_property_types", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[enum]", "data_classification": "customer_intent", "description": "Bedroom counts the buyer explicitly requests or accepts as a list.", "field_id": "preferred_bedrooms", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "enum", "data_classification": "customer_intent", "description": "How the buyer relates to parking availability as a property filter.", "field_id": "parking_requirement", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[proximity_target]", "data_classification": "customer_intent", "description": "List of places, services, or facilities the buyer wants the property to be near.", "field_id": "proximity_preferences", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "boolean", "data_classification": "customer_intent", "description": "Whether the buyer explicitly requires a gated community or condominium setting.", "field_id": "needs_gated_community", "field_type": "boolean", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "boolean", "data_classification": "customer_intent", "description": "Whether pet-friendly rules or features are a stated requirement.", "field_id": "pet_friendly_required", "field_type": "boolean", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[enum]", "data_classification": "customer_intent", "description": "Buyer preference for launch stage or move-in readiness including used/resale properties.", "field_id": "property_condition_preference", "field_type": "enum", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "integer_brl", "data_classification": "financial_profile", "description": "Maximum total property price the buyer says they want, can pay, or were approved to target. This is the purchase ceiling, not the monthly installment and not the down payment.", "field_id": "budget_max_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[enum]", "data_classification": "financial_profile", "description": "Payment methods the buyer plans or accepts to use in the purchase composition.", "field_id": "payment_methods", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "enum", "data_classification": "financial_profile", "description": "How the buyer expects to fund the purchase from a credit and financing state perspective.", "field_id": "financing_status", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "integer_brl", "data_classification": "financial_profile", "description": "Gross monthly income the buyer explicitly shares for financing qualification. Do not store property budget or monthly installment here.", "field_id": "monthly_income_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "integer_brl", "data_classification": "financial_profile", "description": "Maximum monthly installment the buyer says is comfortable or acceptable. This is a monthly payment ceiling, not the full property budget and not the down payment.", "field_id": "comfortable_installment_max_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "integer_brl", "data_classification": "financial_profile", "description": "Maximum amount the buyer can pay upfront as down payment or cash entry. This is the upfront contribution, not the full property budget and not the monthly installment.", "field_id": "down_payment_max_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "boolean", "data_classification": "financial_profile", "description": "Whether the buyer explicitly wants or expects to use FGTS in the purchase composition.", "field_id": "uses_fgts", "field_type": "boolean", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "integer_brl", "data_classification": "financial_profile", "description": "Amount of FGTS the buyer says is available to use in the purchase.", "field_id": "fgts_available_brl", "field_type": "currency", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "enum", "data_classification": "customer_intent", "description": "How the buyer intends to use the property once purchased.", "field_id": "intended_use", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "enum", "data_classification": "customer_intent", "description": "Expected purchase timeline based on the buyer's own words.", "field_id": "purchase_timeline", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "list[enum]", "data_classification": "customer_intent", "description": "Event dependencies that explain a conditional purchase timeline.", "field_id": "purchase_timeline_conditions", "field_type": "text", "multi_value": true, "required": false, "score_in_primary_benchmark": true}, {"canonical_value_type": "enum", "data_classification": "direct_contact", "description": "Preferred outreach channel for project follow-up or human handoff.", "field_id": "preferred_contact_channel", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "enum", "data_classification": "direct_contact", "description": "Preferred time window for follow-up contact.", "field_id": "preferred_contact_time", "field_type": "enum", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "canonical_project_name", "data_classification": "customer_intent", "description": "Project or development explicitly chosen by the buyer during the conversation.", "field_id": "selected_project_name", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": false}, {"canonical_value_type": "free_text_note", "data_classification": "customer_intent", "description": "Additional relevant buyer notes that materially affect matching or handoff and do not belong in another field.", "field_id": "extra_info", "field_type": "text", "multi_value": false, "required": false, "score_in_primary_benchmark": false}], "form_id": "real_estate_buyer_profile", "form_ref": "real_estate_buyer_profile@4", "form_version": "4", "locale": "pt-BR"}, "defaults": {"chunk_size_messages": null, "form_ref": "real_estate_buyer_profile@4", "framework": "current_house", "max_output_tokens": null, "mode": "chunk", "model_id": "gpt-5-mini", "provider": "openai", "reasoning_effort": null, "selection_profile": null, "temperature": null}, "execution_policy": {"allow_selection_changes": true, "configured_provider_model_map": {"gemini": ["gemini-2.5-flash", "gemini-2.5-pro"], "openai": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "openrouter": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"]}, "enabled_batch_modes": ["chunk", "message_by_message"], "enabled_frameworks": ["current_house", "langextract"], "enabled_memory_modes": ["turn"], "enabled_provider_model_map": {"gemini": ["gemini-2.5-flash", "gemini-2.5-pro"], "openai": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "openrouter": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"]}, "enabled_selection_profiles": ["turn_low_cost", "chunk_balanced", "openrouter_balanced", "openrouter_gemini_flash", "openrouter_gemini_flash_lite", "openrouter_claude_haiku", "openrouter_claude_sonnet", "openrouter_claude_fable_5", "openrouter_low_cost_turn", "openrouter_qwen_budget", "openrouter_qwen_quality", "openrouter_zai_budget", "openrouter_zai_quality", "openrouter_gpt56_luna_turn", "openrouter_gpt56_terra_chunk", "openrouter_gpt56_sol_chunk"], "locked_setup": null, "provider_status": [{"capabilities": {"estimate": false, "extract": false}, "credential_configured": true, "enabled": false, "enabled_models": [], "live_calls_enabled": false, "provider": "fixture", "registered": true, "registered_models": ["fixture-current-house"], "unavailable_reason": "not_allowlisted"}, {"capabilities": {"estimate": true, "extract": true}, "credential_configured": true, "enabled": true, "enabled_models": ["gemini-2.5-flash", "gemini-2.5-pro"], "live_calls_enabled": true, "provider": "gemini", "registered": true, "registered_models": ["gemini-2.5-flash", "gemini-2.5-pro"], "unavailable_reason": null}, {"capabilities": {"estimate": true, "extract": true}, "credential_configured": true, "enabled": true, "enabled_models": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "live_calls_enabled": true, "provider": "openai", "registered": true, "registered_models": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "unavailable_reason": null}, {"capabilities": {"estimate": true, "extract": true}, "credential_configured": true, "enabled": true, "enabled_models": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"], "live_calls_enabled": true, "provider": "openrouter", "registered": true, "registered_models": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol", "deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro"], "unavailable_reason": null}]}, "financial_guardrails": {"estimate_first": true, "implementation_budget_usd": 60.0, "live_flag_required": true, "max_request_cost_usd": 5.0}, "frameworks": ["current_house", "langextract"], "golden_set_available": true, "golden_set_count": 40, "golden_set_policy": {"include_below_min_messages": true, "non_golden_min_messages": 20, "ordered_first": true, "requires_source_conversation": true}, "golden_source_available_count": 29, "golden_source_unavailable_count": 11, "implementation_budget_usd": 60.0, "input_modes": ["messages", "conversation_id"], "input_modes_by_endpoint": {"extract": ["messages", "conversation_id"], "memory_estimate": ["messages", "conversation_id"], "memory_update": ["messages", "conversation_id"]}, "json_api": {"contract_path": "/api/v1/contract", "conversation_path_pattern": "/api/v1/conversations/{conversation_id}", "conversations_path": "/api/v1/conversations", "estimate_path": "/api/v1/estimate", "extract_path": "/api/v1/extract", "golden_crm_path_pattern": "/api/v1/golden-set/{conversation_id}", "golden_set_path": "/api/v1/golden-set", "health_path": "/api/v1/health", "latest_crm_path_pattern": "/api/v1/crms/{conversation_id}", "legacy_aliases": {"conversation_path_pattern": "/api/conversations/{conversation_id}", "conversations_path": "/api/conversations", "estimate_path": "/api/estimate", "extract_path": "/api/extract", "golden_crm_path_pattern": "/api/golden-set/{conversation_id}", "golden_set_path": "/api/golden-set", "latest_crm_path_pattern": "/api/crms/{conversation_id}", "memory_estimate_path": "/api/memory/estimate", "memory_update_path": "/api/memory/update"}, "memory_estimate_path": "/api/v1/memory/estimate", "memory_update_path": "/api/v1/memory/update", "options_path": "/api/v1/options", "selection_fields": ["selection_profile", "provider", "model_id", "framework", "mode", "form_ref", "temperature", "reasoning_effort", "max_output_tokens", "chunk_size_messages"]}, "methodology": {"active_form_ref": "real_estate_buyer_profile@4", "architecture_candidates": [{"input_scope": "fixed number of messages supplied by chunk_size_messages; when omitted, only the context-safety text budget splits calls", "mode": "chunk", "status": "primary"}, {"input_scope": "recent message window for one CRM memory refresh; a chatbot typically invokes it once per triggered message event", "mode": "turn", "status": "secondary"}, {"input_scope": "one prompt with the whole conversation", "mode": "full_conversation", "status": "planned_experiment"}, {"input_scope": "one extraction call per message followed by deterministic CRM merge; this is distinct from the stateful turn memory endpoint", "mode": "message_by_message", "status": "experimental"}], "cost_kind_definitions": {"billing_actual": "Cost reported for one or more concrete provider generations by a provider billing/usage API. OpenRouter is implemented through GET /api/v1/generation; this is not the consolidated account invoice.", "estimated": "Cost uses token estimates plus the local PRICE_TABLE. This is planning evidence only and must be marked as estimated.", "provider_usage": "Cost uses token counts returned by the provider API plus the local PRICE_TABLE. Token volume is more precise than an estimate, but the USD value is still not a billing ledger."}, "cost_methodology": {"architecture_normalization": {"chunk_calls": "ceil(messages / chunk_size_messages), with additional calls when the context-safety splitter bounds an oversized message. When chunk_size_messages is omitted, the conversation is grouped only by the context-safety text budget.", "comparison_unit": "1000 message events", "message_by_message_calls": "One call per message, with additional calls only when one individual message must be segmented for context safety.", "turn_calls": "1000 * turn_trigger_rate, because chatbot CRM memory is refreshed on each triggered message event.", "why_turn_uses_more_tokens": "Every turn call repeats the CRM instructions, 39-field schema, recent context window, and a generated CRM result."}, "billing_reconciliation_support": {"gemini": {"status": "pending_provider_specific_billing_export"}, "openai": {"status": "pending_provider_specific_account_export"}, "openrouter": {"command": "crm-extractor reconcile-openrouter-cost", "cost_kind": "billing_actual", "source": "GET https://openrouter.ai/api/v1/generation?id=<generation_id>", "status": "implemented"}}, "formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "limitations": ["Provider prices change; refresh current prices before paid pilots.", "Provider usage tokens do not include invoice adjustments, credits, minimum charges, or taxes.", "OpenRouter routed prices can differ from direct-provider prices for the same underlying model family.", "OpenRouter billing_actual is per generation, not an account invoice; OpenAI and Gemini account reconciliation remain pending."], "price_unit": "USD per 1 million input tokens and USD per 1 million output tokens.", "source_definitions": {"deterministic_fixture_no_provider_cost": {"confidence": "deterministic_zero_cost", "meaning": "Local fixture execution; no external provider call and zero provider cost.", "paid_run_action": "No price verification required.", "source": "fixture"}, "manual_estimate_verify_before_paid_run": {"confidence": "planning_only", "meaning": "Manual price entered in PRICE_TABLE for planning. Treat as a placeholder until someone verifies the provider's official price immediately before a paid run.", "paid_run_action": "Verify current provider pricing and update the table or runbook.", "source": "local PRICE_TABLE"}, "verified_official_provider_page": {"confidence": "official_catalog_snapshot", "last_verified_at": "2026-07-26", "meaning": "Direct-provider price copied from the provider's official model or pricing page. The date is recorded in last_verified_at.", "paid_run_action": "Recheck the official page immediately before a paid pilot.", "source": "official provider pricing page"}, "verified_openrouter_models_api": {"confidence": "catalog_snapshot", "last_verified_at": "2026-07-27", "meaning": "OpenRouter routed-model price copied from the public models API snapshot at https://openrouter.ai/api/v1/models.", "paid_run_action": "Refresh OpenRouter model availability and price before a paid pilot.", "source": "https://openrouter.ai/api/v1/models"}}, "token_sources": {"billing_actual": "OpenRouter reconciliation uses native prompt/completion tokens and total_cost returned for each generation ID.", "estimate_only": "Uses local token assumptions/counts from the input and configured output cap. It does not call providers.", "fallback_estimate": "If a live provider response has no usage metadata, the USD value remains estimated and cost_kind stays estimated.", "provider_usage": "Uses usage tokens returned by OpenAI, Gemini, or OpenRouter when their API response includes usage metadata."}, "where_prices_are_exposed": ["/api/v1/options providers[].model_details[].pricing", "/api/v1/estimate pricing", "/api/v1/extract metadata.pricing", "experiment_manifest.jsonl rows[].pricing", "experiment_decision_report pricing_provenance_summary", "reconcile-openrouter-cost sanitized billing_actual report"], "where_prices_live": "src/crm_extractor/providers/pricing.py::PRICE_TABLE"}, "data_dictionary_version": "real_estate_buyer_profile@4", "error_category_definitions": {"budget_exceeded": "The estimate or run exceeded the configured USD budget guardrail.", "incomplete_response": "The provider returned empty, truncated, or structurally incomplete content.", "invalid_json": "The model response could not be parsed as valid JSON.", "invalid_schema": "JSON was returned but did not satisfy the expected CRM/provider schema.", "live_guardrail": "A paid call was blocked because CRM_EXTRACTOR_LIVE=1 was not enabled.", "not_found": "A requested local/API resource was not found.", "provider_unavailable": "The provider was unavailable, rate-limited, or returned a service error.", "retry_exhausted": "The retry or failure-threshold policy stopped additional attempts.", "storage_unavailable": "The configured CRM store could not be reached or authenticated.", "timeout": "The provider or guarded matrix row exceeded its configured wall-clock limit.", "unknown": "The sanitized error did not match a stable category yet and requires triage.", "validation_error": "Input or generated CRM data failed local validation."}, "error_taxonomy_version": "model_error_taxonomy_v1", "experimental_modes": ["message_by_message"], "framework_prompt_versions": {"current_house": "current_house_chunk_v3_bounded_input", "langextract": "langextract_chunk_pack_v3_bounded_input"}, "latency_methodology": {"batch_total_metric": "CSV batch responses expose latency_breakdown_ms.total_ms around CSV parsing, estimate preflight, and all serial extraction calls. HTTP transfer, client rendering, and final ZIP serialization are outside that boundary. Per-conversation latency_ms remains the service runtime for that conversation.", "clock_source": "Python time.perf_counter() around each backend stage.", "frontend_metric": "The static frontend additionally measures frontend_roundtrip_ms around fetch/form uploads. This is displayed in the UI but is not part of backend latency reports unless a client persists it.", "interactive_turn_rule": "For a chatbot, turn latency is the observed wall-clock latency of one memory refresh request. Serial latency for 1000 messages is not user-perceived latency; capacity planning must separately model concurrency, queues, provider quotas, retries, and debounce policy.", "measurement_type": "observed_wall_clock_ms", "normalization_rule": "Average latency is computed only over completed rows for the same setup. Reports expose completion rate and multiply quality on completed rows by that rate for ranking/Pareto comparisons. Success/failure counts must remain beside latency.", "not_included": ["Queue wait time unless a future queue stage records it explicitly.", "Human annotation/review time.", "External dashboard rendering time.", "Provider billing reconciliation time."], "primary_runtime_metric": "metadata.latency_ms and latency_breakdown_ms.total_ms", "projection_rule": "Experiment reports project latency by multiplying observed average latency per completed extraction by the target conversation count. This is a normalized comparison, not a production SLA.", "runtime_total_metric": "latency_breakdown_ms.runtime_total_ms wraps the runtime service call around extraction and metadata assembly."}, "latency_schema_version": "latency_breakdown_v2", "latency_stage_definitions": {"chunking_ms": "Conversation chunk construction.", "estimate_ms": "Estimate preflight time for a request or CSV batch.", "extraction_ms": "Wall-clock time spent executing all conversation extractions in a CSV batch.", "frontend_roundtrip_ms": "Browser-observed request/response time measured by the frontend when available.", "input_load_ms": "CSV/request parsing and message loading before extraction when the caller records it.", "merge_ms": "CRM merge across chunks.", "parsing_ms": "Provider JSON parsing and field validation.", "prompt_build_ms": "Prompt rendering before provider calls.", "provider_call_ms": "Provider API/client time across all calls.", "runtime_total_ms": "Runtime service wrapper around extraction plus metadata assembly.", "service_total_ms": "Live service boundary including catalog work, extraction, and CRM store persistence.", "store_ms": "CRM store write/read operation when configured.", "total_ms": "End-to-end runtime time captured by this service surface.", "validation_ms": "Runtime CRM contract validation."}, "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "primary_mode": "chunk", "secondary_mode": "turn", "setup_id_compatibility": "setup_id_v3 adds turn_window to keep recent-window turn architectures distinct. Historical setup_id_v2 values remain valid evidence and are not rewritten.", "setup_id_parameters": ["temperature", "max_output_tokens", "reasoning_effort", "chunk_size_messages", "turn_window_messages"], "setup_id_version": "setup_id_v3", "status_definitions": {"ambiguous": "Useful signal exists but evidence is insufficient or contradictory.", "captured": "Field value is supported by customer evidence.", "missing": "No safely supported value is present."}}, "methodology_api": {"contract_path": "/api/v1/contract", "data_dictionary_version": "real_estate_buyer_profile@4", "methodology_path": "/api/v1/methodology", "setup_id_version": "setup_id_v3"}, "min_messages": 20, "model_ids": ["gemini-2.5-flash", "gemini-2.5-pro", "gpt-4o-mini", "gpt-4o", "gpt-5-mini", "openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"], "models": ["gemini-2.5-flash", "gemini-2.5-pro", "gpt-4o-mini", "gpt-4o", "gpt-5-mini", "openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"], "modes_supported": ["chunk", "message_by_message", "turn"], "parameter_constraints": {"chunk_size_messages": {"applies_to_modes": ["chunk"], "default": null, "maximum": 10000, "message_by_message_effective_value": 1, "minimum": 1}, "max_output_tokens": {"default": 4096, "maximum": 32768, "minimum": 1}, "reasoning_effort": {"allowed_values_by_model": true, "default": null}, "temperature": {"default": null, "maximum": 2, "minimum": 0}}, "provider_catalog": {"batch_modes_supported": ["chunk", "message_by_message"], "frameworks": ["current_house", "langextract"], "modes_supported": ["chunk", "message_by_message", "turn"], "provider_model_map": {"fixture": ["fixture-current-house"], "gemini": ["gemini-2.5-flash", "gemini-2.5-pro"], "openai": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "openrouter": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol", "deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro"]}, "providers": [{"default_model": "fixture-current-house", "model_details": [{"candidate_class": "deterministic_baseline", "cost_tier": "free", "is_default": true, "latency_tier": "local", "model_id": "fixture-current-house", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "deterministic_zero_cost", "input_usd_per_1m_tokens": 0.0, "input_usd_per_token": 0.0, "last_verified_at": "", "model_id": "fixture-current-house", "output_usd_per_1m_tokens": 0.0, "output_usd_per_token": 0.0, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "deterministic_fixture_no_provider_cost", "provider": "fixture", "source": "fixture", "source_conversion": "none", "source_description": "Local deterministic fixture provider. It does not call an external LLM provider, so the modeled provider cost is always zero.", "source_model_id": "fixture-current-house", "source_native_unit": "usd_per_1m_tokens", "source_url": "", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": false}, "quality_tier": "fixture", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/fixture/fixture-current-house/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["fixture-current-house"], "provider": "fixture"}, {"default_model": "gemini-2.5-flash", "model_details": [{"candidate_class": "low_cost_fast", "cost_tier": "low", "is_default": true, "latency_tier": "fast", "model_id": "gemini-2.5-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "thinking_budget_0", "reasoning_effort_supported": ["thinking_budget_0", "thinking_budget_1024", "thinking_budget_8192", "thinking_budget_24576", "thinking_budget_dynamic"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 0.3, "input_usd_per_token": 3e-07, "last_verified_at": "2026-07-26", "model_id": "gemini-2.5-flash", "output_usd_per_1m_tokens": 2.5, "output_usd_per_token": 2.5e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "gemini", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official Google Gemini model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gemini-2.5-flash", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://ai.google.dev/gemini-api/docs/pricing", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "thinking_budget_0", "setup_id": "current_house@current_house_chunk_v3_bounded_input/gemini/gemini-2.5-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=thinking_budget_0,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "quality_sensitive_chunk", "cost_tier": "high", "is_default": false, "latency_tier": "slower", "model_id": "gemini-2.5-pro", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "thinking_budget_128", "reasoning_effort_supported": ["thinking_budget_128", "thinking_budget_2048", "thinking_budget_8192", "thinking_budget_32768", "thinking_budget_dynamic"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 1.25, "input_usd_per_token": 1.25e-06, "last_verified_at": "2026-07-26", "model_id": "gemini-2.5-pro", "output_usd_per_1m_tokens": 10.0, "output_usd_per_token": 1e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "gemini", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official Google Gemini model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gemini-2.5-pro", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://ai.google.dev/gemini-api/docs/pricing", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "thinking_budget_128", "setup_id": "current_house@current_house_chunk_v3_bounded_input/gemini/gemini-2.5-pro/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=thinking_budget_128,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["gemini-2.5-flash", "gemini-2.5-pro"], "provider": "gemini"}, {"default_model": "gpt-4o-mini", "model_details": [{"candidate_class": "low_cost_fast", "cost_tier": "low", "is_default": true, "latency_tier": "fast", "model_id": "gpt-4o-mini", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 0.15, "input_usd_per_token": 1.5e-07, "last_verified_at": "2026-07-26", "model_id": "gpt-4o-mini", "output_usd_per_1m_tokens": 0.6, "output_usd_per_token": 6e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "openai", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official OpenAI model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gpt-4o-mini", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://developers.openai.com/api/docs/models/gpt-4o-mini", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openai/gpt-4o-mini/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "quality_sensitive_chunk", "cost_tier": "high", "is_default": false, "latency_tier": "medium", "model_id": "gpt-4o", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 2.5, "input_usd_per_token": 2.5e-06, "last_verified_at": "2026-07-26", "model_id": "gpt-4o", "output_usd_per_1m_tokens": 10.0, "output_usd_per_token": 1e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "openai", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official OpenAI model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gpt-4o", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://developers.openai.com/api/docs/models/gpt-4o", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openai/gpt-4o/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "balanced_chunk", "cost_tier": "medium", "is_default": false, "latency_tier": "medium", "model_id": "gpt-5-mini", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "low", "reasoning_effort_supported": ["minimal", "low", "medium", "high"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 0.25, "input_usd_per_token": 2.5e-07, "last_verified_at": "2026-07-26", "model_id": "gpt-5-mini", "output_usd_per_1m_tokens": 2.0, "output_usd_per_token": 2e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "openai", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official OpenAI model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gpt-5-mini", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://developers.openai.com/api/docs/models/gpt-5-mini", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced_high", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "low", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openai/gpt-5-mini/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=low,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "provider": "openai"}, {"default_model": "openai/gpt-4o-mini", "model_details": [{"candidate_class": "openrouter_low_cost_fast", "cost_tier": "low", "is_default": true, "latency_tier": "fast", "model_id": "openai/gpt-4o-mini", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.15, "input_usd_per_token": 1.5e-07, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-4o-mini", "output_usd_per_1m_tokens": 0.6, "output_usd_per_token": 6e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-4o-mini", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-4o-mini/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_budget_fast", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast", "model_id": "google/gemini-2.5-flash-lite", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.1, "input_usd_per_token": 1e-07, "last_verified_at": "2026-07-27", "model_id": "google/gemini-2.5-flash-lite", "output_usd_per_1m_tokens": 0.4, "output_usd_per_token": 4e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "google/gemini-2.5-flash-lite", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "budget_balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/google%2Fgemini-2.5-flash-lite/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_low_cost_fast", "cost_tier": "low", "is_default": false, "latency_tier": "fast", "model_id": "google/gemini-2.5-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.3, "input_usd_per_token": 3e-07, "last_verified_at": "2026-07-27", "model_id": "google/gemini-2.5-flash", "output_usd_per_1m_tokens": 2.5, "output_usd_per_token": 2.5e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "google/gemini-2.5-flash", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/google%2Fgemini-2.5-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_balanced_chunk", "cost_tier": "medium", "is_default": false, "latency_tier": "medium", "model_id": "anthropic/claude-3-haiku", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.25, "input_usd_per_token": 2.5e-07, "last_verified_at": "2026-07-27", "model_id": "anthropic/claude-3-haiku", "output_usd_per_1m_tokens": 1.25, "output_usd_per_token": 1.25e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "anthropic/claude-3-haiku", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/anthropic%2Fclaude-3-haiku/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_quality_chunk", "cost_tier": "high", "is_default": false, "latency_tier": "slower", "model_id": "anthropic/claude-sonnet-4.5", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 3.0, "input_usd_per_token": 3e-06, "last_verified_at": "2026-07-27", "model_id": "anthropic/claude-sonnet-4.5", "output_usd_per_1m_tokens": 15.0, "output_usd_per_token": 1.5e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "anthropic/claude-sonnet-4.5", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/anthropic%2Fclaude-sonnet-4.5/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_robust_chunk", "cost_tier": "very_high", "is_default": false, "latency_tier": "slow", "model_id": "anthropic/claude-fable-5", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 10.0, "input_usd_per_token": 1e-05, "last_verified_at": "2026-07-27", "model_id": "anthropic/claude-fable-5", "output_usd_per_1m_tokens": 50.0, "output_usd_per_token": 5e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "anthropic/claude-fable-5", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/anthropic%2Fclaude-fable-5/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_low_cost_fast", "cost_tier": "low", "is_default": false, "latency_tier": "fast", "model_id": "deepseek/deepseek-chat", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.2002, "input_usd_per_token": 2.002e-07, "last_verified_at": "2026-07-27", "model_id": "deepseek/deepseek-chat", "output_usd_per_1m_tokens": 0.8001, "output_usd_per_token": 8.001e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "deepseek/deepseek-chat", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/deepseek%2Fdeepseek-chat/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_budget_fast", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast", "model_id": "qwen/qwen3.5-flash-02-23", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "none", "reasoning_effort_supported": ["none", "minimal", "low", "medium", "high"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.065, "input_usd_per_token": 6.5e-08, "last_verified_at": "2026-07-27", "model_id": "qwen/qwen3.5-flash-02-23", "output_usd_per_1m_tokens": 0.26, "output_usd_per_token": 2.6e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "qwen/qwen3.5-flash-02-23", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_budget", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "none", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/qwen%2Fqwen3.5-flash-02-23/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=none,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_quality_chunk", "cost_tier": "low", "is_default": false, "latency_tier": "medium", "model_id": "qwen/qwen3-235b-a22b-2507", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.09, "input_usd_per_token": 9e-08, "last_verified_at": "2026-07-27", "model_id": "qwen/qwen3-235b-a22b-2507", "output_usd_per_1m_tokens": 0.55, "output_usd_per_token": 5.5e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "qwen/qwen3-235b-a22b-2507", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/qwen%2Fqwen3-235b-a22b-2507/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_budget_fast", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast", "model_id": "z-ai/glm-4.7-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "none", "reasoning_effort_supported": ["none", "minimal", "low", "medium", "high"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.06, "input_usd_per_token": 6e-08, "last_verified_at": "2026-07-27", "model_id": "z-ai/glm-4.7-flash", "output_usd_per_1m_tokens": 0.4, "output_usd_per_token": 4e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "z-ai/glm-4.7-flash", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_budget", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "none", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/z-ai%2Fglm-4.7-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=none,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_quality_chunk", "cost_tier": "medium", "is_default": false, "latency_tier": "medium", "model_id": "z-ai/glm-5.2", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["high", "xhigh"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.7574, "input_usd_per_token": 7.574e-07, "last_verified_at": "2026-07-27", "model_id": "z-ai/glm-5.2", "output_usd_per_1m_tokens": 2.3804, "output_usd_per_token": 2.3804e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "z-ai/glm-5.2", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/z-ai%2Fglm-5.2/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_cost_sensitive", "cost_tier": "medium", "is_default": false, "latency_tier": "medium_unmeasured", "model_id": "openai/gpt-5.6-luna", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "medium", "reasoning_effort_supported": ["none", "low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.5, "input_usd_per_token": 5e-07, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-5.6-luna", "output_usd_per_1m_tokens": 3.0, "output_usd_per_token": 3e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-5.6-luna", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "medium", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-5.6-luna/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=medium,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_balanced", "cost_tier": "high", "is_default": false, "latency_tier": "medium_unmeasured", "model_id": "openai/gpt-5.6-terra", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "medium", "reasoning_effort_supported": ["none", "low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 1.25, "input_usd_per_token": 1.25e-06, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-5.6-terra", "output_usd_per_1m_tokens": 7.5, "output_usd_per_token": 7.5e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-5.6-terra", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "medium", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-5.6-terra/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=medium,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_robust_chunk", "cost_tier": "very_high", "is_default": false, "latency_tier": "slow_unmeasured", "model_id": "openai/gpt-5.6-sol", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "medium", "reasoning_effort_supported": ["none", "low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 5.0, "input_usd_per_token": 5e-06, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-5.6-sol", "output_usd_per_1m_tokens": 30.0, "output_usd_per_token": 3e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-5.6-sol", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "medium", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-5.6-sol/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=medium,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_low_cost_reasoning", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast_unmeasured", "model_id": "deepseek/deepseek-v4-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["high", "xhigh"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.09, "input_usd_per_token": 9e-08, "last_verified_at": "2026-08-09", "model_id": "deepseek/deepseek-v4-flash", "output_usd_per_1m_tokens": 0.18, "output_usd_per_token": 1.8e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "deepseek/deepseek-v4-flash", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/deepseek%2Fdeepseek-v4-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_quality_reasoning", "cost_tier": "low", "is_default": false, "latency_tier": "medium_unmeasured", "model_id": "deepseek/deepseek-v4-pro", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["high", "xhigh"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.435, "input_usd_per_token": 4.35e-07, "last_verified_at": "2026-08-09", "model_id": "deepseek/deepseek-v4-pro", "output_usd_per_1m_tokens": 0.87, "output_usd_per_token": 8.7e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "deepseek/deepseek-v4-pro", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/deepseek%2Fdeepseek-v4-pro/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol", "deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro"], "provider": "openrouter"}], "selection_profiles": [{"framework": "current_house", "mode": "chunk", "model_id": "fixture-current-house", "profile": "fixture_smoke", "provider": "fixture", "purpose": "CI-safe deterministic smoke test.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "gpt-4o-mini", "profile": "turn_low_cost", "provider": "openai", "purpose": "Low-cost recent-window CRM memory refresh candidate.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "gpt-5-mini", "profile": "chunk_balanced", "provider": "openai", "purpose": "Balanced full-conversation extraction candidate.", "reasoning_effort": "low", "temperature": null}, {"framework": "current_house", "mode": "chunk", "model_id": "openai/gpt-4o-mini", "profile": "openrouter_balanced", "provider": "openrouter", "purpose": "OpenRouter baseline for provider-routing comparison.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "google/gemini-2.5-flash", "profile": "openrouter_gemini_flash", "provider": "openrouter", "purpose": "OpenRouter Gemini candidate for direct-vs-routed provider comparison.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "google/gemini-2.5-flash-lite", "profile": "openrouter_gemini_flash_lite", "provider": "openrouter", "purpose": "OpenRouter Google budget candidate for low-latency memory refresh.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "anthropic/claude-3-haiku", "profile": "openrouter_claude_haiku", "provider": "openrouter", "purpose": "OpenRouter Anthropic candidate for balanced extraction comparison.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "anthropic/claude-sonnet-4.5", "profile": "openrouter_claude_sonnet", "provider": "openrouter", "purpose": "OpenRouter Anthropic quality candidate for full-conversation extraction.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "anthropic/claude-fable-5", "profile": "openrouter_claude_fable_5", "provider": "openrouter", "purpose": "High-cost robust candidate; CRM quality and latency are not measured yet.", "reasoning_effort": "high", "temperature": null}, {"framework": "current_house", "mode": "turn", "model_id": "deepseek/deepseek-chat", "profile": "openrouter_low_cost_turn", "provider": "openrouter", "purpose": "Low-cost OpenRouter candidate for recent-window memory refresh.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "qwen/qwen3.5-flash-02-23", "profile": "openrouter_qwen_budget", "provider": "openrouter", "purpose": "Low-cost Qwen candidate routed through OpenRouter.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "qwen/qwen3-235b-a22b-2507", "profile": "openrouter_qwen_quality", "provider": "openrouter", "purpose": "Larger Qwen candidate routed through OpenRouter for quality comparison.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "z-ai/glm-4.7-flash", "profile": "openrouter_zai_budget", "provider": "openrouter", "purpose": "Low-cost Z.ai GLM candidate routed through OpenRouter.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "z-ai/glm-5.2", "profile": "openrouter_zai_quality", "provider": "openrouter", "purpose": "Higher-capability Z.ai GLM candidate routed through OpenRouter.", "reasoning_effort": "high", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "openai/gpt-5.6-luna", "profile": "openrouter_gpt56_luna_turn", "provider": "openrouter", "purpose": "Cost-sensitive GPT-5.6 candidate for chatbot CRM refresh.", "reasoning_effort": "medium", "temperature": null}, {"framework": "current_house", "mode": "chunk", "model_id": "openai/gpt-5.6-terra", "profile": "openrouter_gpt56_terra_chunk", "provider": "openrouter", "purpose": "Balanced GPT-5.6 candidate for full-conversation extraction.", "reasoning_effort": "medium", "temperature": null}, {"framework": "current_house", "mode": "chunk", "model_id": "openai/gpt-5.6-sol", "profile": "openrouter_gpt56_sol_chunk", "provider": "openrouter", "purpose": "Robust GPT-5.6 candidate; CRM quality and latency are not measured yet.", "reasoning_effort": "medium", "temperature": null}, {"framework": "current_house", "mode": "turn", "model_id": "deepseek/deepseek-v4-flash", "profile": "openrouter_deepseek_v4_flash_turn", "provider": "openrouter", "purpose": "Low-cost DeepSeek V4 candidate for frequent CRM memory refresh; CRM quality and latency are not measured yet.", "reasoning_effort": "high", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "deepseek/deepseek-v4-pro", "profile": "openrouter_deepseek_v4_pro_chunk", "provider": "openrouter", "purpose": "DeepSeek V4 quality candidate for full-conversation extraction; CRM quality and latency are not measured yet.", "reasoning_effort": "high", "temperature": 0}], "usage": "Controlled inventory of registered candidates. Submit only provider/model pairs listed in execution_policy.enabled_provider_model_map."}, "provider_model_map": {"gemini": ["gemini-2.5-flash", "gemini-2.5-pro"], "openai": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "openrouter": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"]}, "provider_options": ["gemini", "openai", "openrouter"], "providers": [{"default_model": "gemini-2.5-flash", "model_details": [{"candidate_class": "low_cost_fast", "cost_tier": "low", "is_default": true, "latency_tier": "fast", "model_id": "gemini-2.5-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "thinking_budget_0", "reasoning_effort_supported": ["thinking_budget_0", "thinking_budget_1024", "thinking_budget_8192", "thinking_budget_24576", "thinking_budget_dynamic"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 0.3, "input_usd_per_token": 3e-07, "last_verified_at": "2026-07-26", "model_id": "gemini-2.5-flash", "output_usd_per_1m_tokens": 2.5, "output_usd_per_token": 2.5e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "gemini", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official Google Gemini model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gemini-2.5-flash", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://ai.google.dev/gemini-api/docs/pricing", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "thinking_budget_0", "setup_id": "current_house@current_house_chunk_v3_bounded_input/gemini/gemini-2.5-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=thinking_budget_0,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "quality_sensitive_chunk", "cost_tier": "high", "is_default": false, "latency_tier": "slower", "model_id": "gemini-2.5-pro", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "thinking_budget_128", "reasoning_effort_supported": ["thinking_budget_128", "thinking_budget_2048", "thinking_budget_8192", "thinking_budget_32768", "thinking_budget_dynamic"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 1.25, "input_usd_per_token": 1.25e-06, "last_verified_at": "2026-07-26", "model_id": "gemini-2.5-pro", "output_usd_per_1m_tokens": 10.0, "output_usd_per_token": 1e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "gemini", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official Google Gemini model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gemini-2.5-pro", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://ai.google.dev/gemini-api/docs/pricing", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "thinking_budget_128", "setup_id": "current_house@current_house_chunk_v3_bounded_input/gemini/gemini-2.5-pro/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=thinking_budget_128,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["gemini-2.5-flash", "gemini-2.5-pro"], "provider": "gemini"}, {"default_model": "gpt-4o-mini", "model_details": [{"candidate_class": "low_cost_fast", "cost_tier": "low", "is_default": true, "latency_tier": "fast", "model_id": "gpt-4o-mini", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 0.15, "input_usd_per_token": 1.5e-07, "last_verified_at": "2026-07-26", "model_id": "gpt-4o-mini", "output_usd_per_1m_tokens": 0.6, "output_usd_per_token": 6e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "openai", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official OpenAI model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gpt-4o-mini", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://developers.openai.com/api/docs/models/gpt-4o-mini", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openai/gpt-4o-mini/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "quality_sensitive_chunk", "cost_tier": "high", "is_default": false, "latency_tier": "medium", "model_id": "gpt-4o", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 2.5, "input_usd_per_token": 2.5e-06, "last_verified_at": "2026-07-26", "model_id": "gpt-4o", "output_usd_per_1m_tokens": 10.0, "output_usd_per_token": 1e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "openai", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official OpenAI model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gpt-4o", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://developers.openai.com/api/docs/models/gpt-4o", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openai/gpt-4o/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "balanced_chunk", "cost_tier": "medium", "is_default": false, "latency_tier": "medium", "model_id": "gpt-5-mini", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "low", "reasoning_effort_supported": ["minimal", "low", "medium", "high"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": false, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "official_catalog_snapshot", "input_usd_per_1m_tokens": 0.25, "input_usd_per_token": 2.5e-07, "last_verified_at": "2026-07-26", "model_id": "gpt-5-mini", "output_usd_per_1m_tokens": 2.0, "output_usd_per_token": 2e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_official_provider_page", "provider": "openai", "source": "official_provider_pricing_page", "source_conversion": "none", "source_description": "Price transcribed from the official OpenAI model/pricing page. It is a dated catalog snapshot and must be refreshed before a paid pilot because provider prices can change.", "source_model_id": "gpt-5-mini", "source_native_unit": "usd_per_1m_tokens", "source_url": "https://developers.openai.com/api/docs/models/gpt-5-mini", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced_high", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "low", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openai/gpt-5-mini/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=low,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["gpt-4o-mini", "gpt-4o", "gpt-5-mini"], "provider": "openai"}, {"default_model": "openai/gpt-4o-mini", "model_details": [{"candidate_class": "openrouter_low_cost_fast", "cost_tier": "low", "is_default": true, "latency_tier": "fast", "model_id": "openai/gpt-4o-mini", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.15, "input_usd_per_token": 1.5e-07, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-4o-mini", "output_usd_per_1m_tokens": 0.6, "output_usd_per_token": 6e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-4o-mini", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-4o-mini/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_budget_fast", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast", "model_id": "google/gemini-2.5-flash-lite", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.1, "input_usd_per_token": 1e-07, "last_verified_at": "2026-07-27", "model_id": "google/gemini-2.5-flash-lite", "output_usd_per_1m_tokens": 0.4, "output_usd_per_token": 4e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "google/gemini-2.5-flash-lite", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "budget_balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/google%2Fgemini-2.5-flash-lite/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_low_cost_fast", "cost_tier": "low", "is_default": false, "latency_tier": "fast", "model_id": "google/gemini-2.5-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.3, "input_usd_per_token": 3e-07, "last_verified_at": "2026-07-27", "model_id": "google/gemini-2.5-flash", "output_usd_per_1m_tokens": 2.5, "output_usd_per_token": 2.5e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "google/gemini-2.5-flash", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/google%2Fgemini-2.5-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_balanced_chunk", "cost_tier": "medium", "is_default": false, "latency_tier": "medium", "model_id": "anthropic/claude-3-haiku", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.25, "input_usd_per_token": 2.5e-07, "last_verified_at": "2026-07-27", "model_id": "anthropic/claude-3-haiku", "output_usd_per_1m_tokens": 1.25, "output_usd_per_token": 1.25e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "anthropic/claude-3-haiku", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "balanced", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/anthropic%2Fclaude-3-haiku/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_quality_chunk", "cost_tier": "high", "is_default": false, "latency_tier": "slower", "model_id": "anthropic/claude-sonnet-4.5", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 3.0, "input_usd_per_token": 3e-06, "last_verified_at": "2026-07-27", "model_id": "anthropic/claude-sonnet-4.5", "output_usd_per_1m_tokens": 15.0, "output_usd_per_token": 1.5e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "anthropic/claude-sonnet-4.5", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/anthropic%2Fclaude-sonnet-4.5/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_robust_chunk", "cost_tier": "very_high", "is_default": false, "latency_tier": "slow", "model_id": "anthropic/claude-fable-5", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 10.0, "input_usd_per_token": 1e-05, "last_verified_at": "2026-07-27", "model_id": "anthropic/claude-fable-5", "output_usd_per_1m_tokens": 50.0, "output_usd_per_token": 5e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "anthropic/claude-fable-5", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/anthropic%2Fclaude-fable-5/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_low_cost_fast", "cost_tier": "low", "is_default": false, "latency_tier": "fast", "model_id": "deepseek/deepseek-chat", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.2002, "input_usd_per_token": 2.002e-07, "last_verified_at": "2026-07-27", "model_id": "deepseek/deepseek-chat", "output_usd_per_1m_tokens": 0.8001, "output_usd_per_token": 8.001e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "deepseek/deepseek-chat", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/deepseek%2Fdeepseek-chat/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_budget_fast", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast", "model_id": "qwen/qwen3.5-flash-02-23", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "none", "reasoning_effort_supported": ["none", "minimal", "low", "medium", "high"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.065, "input_usd_per_token": 6.5e-08, "last_verified_at": "2026-07-27", "model_id": "qwen/qwen3.5-flash-02-23", "output_usd_per_1m_tokens": 0.26, "output_usd_per_token": 2.6e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "qwen/qwen3.5-flash-02-23", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_budget", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "none", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/qwen%2Fqwen3.5-flash-02-23/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=none,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_quality_chunk", "cost_tier": "low", "is_default": false, "latency_tier": "medium", "model_id": "qwen/qwen3-235b-a22b-2507", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": false, "reasoning_effort_default": null, "reasoning_effort_supported": [], "reasoning_effort_user_configurable": false, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.09, "input_usd_per_token": 9e-08, "last_verified_at": "2026-07-27", "model_id": "qwen/qwen3-235b-a22b-2507", "output_usd_per_1m_tokens": 0.55, "output_usd_per_token": 5.5e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "qwen/qwen3-235b-a22b-2507", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": null, "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/qwen%2Fqwen3-235b-a22b-2507/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=default,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_budget_fast", "cost_tier": "very_low", "is_default": false, "latency_tier": "fast", "model_id": "z-ai/glm-4.7-flash", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "none", "reasoning_effort_supported": ["none", "minimal", "low", "medium", "high"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.06, "input_usd_per_token": 6e-08, "last_verified_at": "2026-07-27", "model_id": "z-ai/glm-4.7-flash", "output_usd_per_1m_tokens": 0.4, "output_usd_per_token": 4e-07, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "z-ai/glm-4.7-flash", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_budget", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "none", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/z-ai%2Fglm-4.7-flash/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=none,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_china_quality_chunk", "cost_tier": "medium", "is_default": false, "latency_tier": "medium", "model_id": "z-ai/glm-5.2", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "high", "reasoning_effort_supported": ["high", "xhigh"], "reasoning_effort_user_configurable": true, "temperature": true, "temperature_default": 0.0, "temperature_max": 2.0, "temperature_min": 0.0}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.7574, "input_usd_per_token": 7.574e-07, "last_verified_at": "2026-07-27", "model_id": "z-ai/glm-5.2", "output_usd_per_1m_tokens": 2.3804, "output_usd_per_token": 2.3804e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "z-ai/glm-5.2", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "experimental_high", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "high", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/z-ai%2Fglm-5.2/chunk/real_estate_buyer_profile@4/temp=0,max_out=4096,reasoning=high,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_cost_sensitive", "cost_tier": "medium", "is_default": false, "latency_tier": "medium_unmeasured", "model_id": "openai/gpt-5.6-luna", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "medium", "reasoning_effort_supported": ["none", "low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 0.5, "input_usd_per_token": 5e-07, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-5.6-luna", "output_usd_per_1m_tokens": 3.0, "output_usd_per_token": 3e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-5.6-luna", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "medium", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-5.6-luna/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=medium,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_balanced", "cost_tier": "high", "is_default": false, "latency_tier": "medium_unmeasured", "model_id": "openai/gpt-5.6-terra", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "medium", "reasoning_effort_supported": ["none", "low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 1.25, "input_usd_per_token": 1.25e-06, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-5.6-terra", "output_usd_per_1m_tokens": 7.5, "output_usd_per_token": 7.5e-06, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-5.6-terra", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk", "turn"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "medium", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-5.6-terra/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=medium,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}, {"candidate_class": "openrouter_frontier_robust_chunk", "cost_tier": "very_high", "is_default": false, "latency_tier": "slow_unmeasured", "model_id": "openai/gpt-5.6-sol", "parameter_support": {"max_output_tokens": true, "max_output_tokens_default": 4096, "max_output_tokens_max": 32768, "max_output_tokens_min": 1, "reasoning_effort": true, "reasoning_effort_default": "medium", "reasoning_effort_supported": ["none", "low", "medium", "high", "xhigh", "max"], "reasoning_effort_user_configurable": true, "temperature": false, "temperature_default": null, "temperature_max": null, "temperature_min": null}, "pricing": {"approximate": true, "billing_policy": "This is not provider billing truth. Actual spend requires future billing_actual reconciliation against provider invoices or account usage exports.", "calculation_formula": "cost_usd = input_tokens * input_usd_per_1m_tokens / 1_000_000 + output_tokens * output_usd_per_1m_tokens / 1_000_000", "confidence": "catalog_snapshot", "input_usd_per_1m_tokens": 5.0, "input_usd_per_token": 5e-06, "last_verified_at": "2026-07-27", "model_id": "openai/gpt-5.6-sol", "output_usd_per_1m_tokens": 30.0, "output_usd_per_token": 3e-05, "price_unit_description": "Both input and output prices are stored as USD per 1 million tokens. Runtime cost multiplies observed or estimated token counts by these two rates.", "pricing_status": "verified_openrouter_models_api", "provider": "openrouter", "source": "openrouter_models_api", "source_conversion": "OpenRouter API pricing.prompt and pricing.completion are USD per token; each value is multiplied by 1,000,000 for this table.", "source_description": "Price copied into this repository from the public OpenRouter models API snapshot. It is suitable for controlled estimates, but must still be refreshed before paid pilots because routed model availability and prices can change.", "source_model_id": "openai/gpt-5.6-sol", "source_native_unit": "usd_per_token", "source_url": "https://openrouter.ai/api/v1/models", "token_count_policy": "Estimate-only paths use local token assumptions/counts. Live extraction uses provider-returned usage tokens when the API returns them; otherwise the value remains an explicit estimate.", "unit": "usd_per_1m_tokens", "verification_required_before_paid_run": true}, "quality_tier": "frontier_unverified_for_crm", "recommended_modes": ["chunk"], "setup_preview": {"chunk_size_messages": null, "data_dictionary_version": "real_estate_buyer_profile@4", "error_taxonomy_version": "model_error_taxonomy_v1", "framework_version": "current_house_chunk_v3_bounded_input", "latency_schema_version": "latency_breakdown_v2", "methodology_version": "crm_extraction_methodology_v2", "output_contract_id": "buyer_profile_runtime_result_v1", "output_contract_version": "1", "prompt_version": "current_house_chunk_v3_bounded_input", "reasoning_effort": "medium", "setup_id": "current_house@current_house_chunk_v3_bounded_input/openrouter/openai%2Fgpt-5.6-sol/chunk/real_estate_buyer_profile@4/temp=default,max_out=4096,reasoning=medium,chunk_messages=default,turn_window=default", "setup_id_version": "setup_id_v3", "turn_window_messages": null}}], "models": ["openai/gpt-4o-mini", "google/gemini-2.5-flash-lite", "google/gemini-2.5-flash", "anthropic/claude-3-haiku", "anthropic/claude-sonnet-4.5", "anthropic/claude-fable-5", "deepseek/deepseek-chat", "qwen/qwen3.5-flash-02-23", "qwen/qwen3-235b-a22b-2507", "z-ai/glm-4.7-flash", "z-ai/glm-5.2", "openai/gpt-5.6-luna", "openai/gpt-5.6-terra", "openai/gpt-5.6-sol"], "provider": "openrouter"}], "public_origin": "https://crm-extractor-demo.abitai.com.br", "request_concurrency": {"caller_ordering_requirement": "one_in_flight_update_per_conversation", "cross_process_serialization": true, "different_conversations_parallel": true, "http_server": "thread_per_request", "lock_backend": "postgres_advisory", "same_conversation_serialized_in_process": true}, "selection_profiles": [{"framework": "current_house", "mode": "turn", "model_id": "gpt-4o-mini", "profile": "turn_low_cost", "provider": "openai", "purpose": "Low-cost recent-window CRM memory refresh candidate.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "gpt-5-mini", "profile": "chunk_balanced", "provider": "openai", "purpose": "Balanced full-conversation extraction candidate.", "reasoning_effort": "low", "temperature": null}, {"framework": "current_house", "mode": "chunk", "model_id": "openai/gpt-4o-mini", "profile": "openrouter_balanced", "provider": "openrouter", "purpose": "OpenRouter baseline for provider-routing comparison.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "google/gemini-2.5-flash", "profile": "openrouter_gemini_flash", "provider": "openrouter", "purpose": "OpenRouter Gemini candidate for direct-vs-routed provider comparison.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "google/gemini-2.5-flash-lite", "profile": "openrouter_gemini_flash_lite", "provider": "openrouter", "purpose": "OpenRouter Google budget candidate for low-latency memory refresh.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "anthropic/claude-3-haiku", "profile": "openrouter_claude_haiku", "provider": "openrouter", "purpose": "OpenRouter Anthropic candidate for balanced extraction comparison.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "anthropic/claude-sonnet-4.5", "profile": "openrouter_claude_sonnet", "provider": "openrouter", "purpose": "OpenRouter Anthropic quality candidate for full-conversation extraction.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "anthropic/claude-fable-5", "profile": "openrouter_claude_fable_5", "provider": "openrouter", "purpose": "High-cost robust candidate; CRM quality and latency are not measured yet.", "reasoning_effort": "high", "temperature": null}, {"framework": "current_house", "mode": "turn", "model_id": "deepseek/deepseek-chat", "profile": "openrouter_low_cost_turn", "provider": "openrouter", "purpose": "Low-cost OpenRouter candidate for recent-window memory refresh.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "qwen/qwen3.5-flash-02-23", "profile": "openrouter_qwen_budget", "provider": "openrouter", "purpose": "Low-cost Qwen candidate routed through OpenRouter.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "qwen/qwen3-235b-a22b-2507", "profile": "openrouter_qwen_quality", "provider": "openrouter", "purpose": "Larger Qwen candidate routed through OpenRouter for quality comparison.", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "z-ai/glm-4.7-flash", "profile": "openrouter_zai_budget", "provider": "openrouter", "purpose": "Low-cost Z.ai GLM candidate routed through OpenRouter.", "temperature": 0}, {"framework": "current_house", "mode": "chunk", "model_id": "z-ai/glm-5.2", "profile": "openrouter_zai_quality", "provider": "openrouter", "purpose": "Higher-capability Z.ai GLM candidate routed through OpenRouter.", "reasoning_effort": "high", "temperature": 0}, {"framework": "current_house", "mode": "turn", "model_id": "openai/gpt-5.6-luna", "profile": "openrouter_gpt56_luna_turn", "provider": "openrouter", "purpose": "Cost-sensitive GPT-5.6 candidate for chatbot CRM refresh.", "reasoning_effort": "medium", "temperature": null}, {"framework": "current_house", "mode": "chunk", "model_id": "openai/gpt-5.6-terra", "profile": "openrouter_gpt56_terra_chunk", "provider": "openrouter", "purpose": "Balanced GPT-5.6 candidate for full-conversation extraction.", "reasoning_effort": "medium", "temperature": null}, {"framework": "current_house", "mode": "chunk", "model_id": "openai/gpt-5.6-sol", "profile": "openrouter_gpt56_sol_chunk", "provider": "openrouter", "purpose": "Robust GPT-5.6 candidate; CRM quality and latency are not measured yet.", "reasoning_effort": "medium", "temperature": null}], "selection_summary": "current_house · openai · gpt-5-mini · chunk", "static_frontend": true, "turn_window_messages": 12}, "secondary_mode": "turn"}}