Ylevä arkisto

Kehote

news-bias v1 gpt-5.6-luna 11.8.2026 Kokeile artikkeliin →

JSON-skeema

{
    "type": "object",
    "additionalProperties": false,
    "required": [
        "signals",
        "summary"
    ],
    "properties": {
        "signals": {
            "type": "object",
            "description": "Exactly one nullable field for each textual bias mechanism. A null value means that the mechanism did not clearly exceed the reporting threshold.",
            "additionalProperties": false,
            "required": [
                "language",
                "prominence",
                "perspective_balance",
                "source_treatment",
                "framing"
            ],
            "properties": {
                "language": {
                    "description": "A signal based specifically on evaluative wording in the article's own voice, or null.",
                    "anyOf": [
                        {
                            "$ref": "#/$defs/signal"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "prominence": {
                    "description": "A signal based specifically on disproportionate visibility, placement or repetition, or null.",
                    "anyOf": [
                        {
                            "$ref": "#/$defs/signal"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "perspective_balance": {
                    "description": "A signal based specifically on asymmetric treatment of opposing perspectives' arguments or reasoning, or null.",
                    "anyOf": [
                        {
                            "$ref": "#/$defs/signal"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "source_treatment": {
                    "description": "A signal based specifically on asymmetric journalistic treatment of sources or their claims, or null.",
                    "anyOf": [
                        {
                            "$ref": "#/$defs/signal"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "framing": {
                    "description": "A distinct interpretive frame formed by at least two reinforcing textual choices, or null.",
                    "anyOf": [
                        {
                            "$ref": "#/$defs/signal"
                        },
                        {
                            "type": "null"
                        }
                    ]
                }
            }
        },
        "summary": {
            "type": "string",
            "description": "Finnish summary of at most two short sentences containing only conclusions supported by non-null signal fields, or an explicit no-signal result when every signal field is null.",
            "maxLength": 500
        }
    },
    "$defs": {
        "signal": {
            "type": "object",
            "additionalProperties": false,
            "required": [
                "score",
                "target",
                "stance",
                "evidence",
                "reasoning"
            ],
            "properties": {
                "score": {
                    "type": "integer",
                    "description": "Mechanism strength: 1 mild but explicit, 2 clear and material, 3 strong or systematic and dominant.",
                    "minimum": 1,
                    "maximum": 3
                },
                "target": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "description": "The shortest unambiguous target name from the article, or null when no clear target exists."
                },
                "stance": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "description": "Direction toward the target. Must be null when target is null.",
                    "enum": [
                        "positive",
                        "negative",
                        null
                    ]
                },
                "evidence": {
                    "type": "array",
                    "description": "One to three strongest exact quotations, each tied to the input part in which it appears.",
                    "minItems": 1,
                    "maxItems": 3,
                    "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                            "part",
                            "quote"
                        ],
                        "properties": {
                            "part": {
                                "type": "string",
                                "description": "The input section containing the exact quote.",
                                "enum": [
                                    "title",
                                    "lead",
                                    "body"
                                ]
                            },
                            "quote": {
                                "type": "string",
                                "description": "One contiguous exact substring of the named input part, preserving all Markdown syntax, punctuation, spelling and inflection exactly.",
                                "minLength": 1
                            }
                        }
                    }
                },
                "reasoning": {
                    "type": "string",
                    "description": "Concise Finnish explanation of the concrete mechanism, why this field is more precise than adjacent fields, and why the score threshold is met.",
                    "minLength": 1,
                    "maxLength": 700
                }
            }
        }
    }
}