{"record":{"id":"0bec3093e26f5f44","repo":"xtekky/gpt4free","slug":"await-response-json-data","errorCode":null,"errorMessage":"(await response.json()), data","messagePattern":"\\(await response\\.json\\(\\)\\), data","errorType":"exception","errorClass":"RuntimeError","httpStatus":422,"severity":"error","filePath":"g4f/Provider/needs_auth/OpenaiChat.py","lineNumber":704,"sourceCode":"                if proofofwork is not None:\n                    headers[\"openai-sentinel-proof-token\"] = proofofwork\n                if (\n                    need_turnstile\n                    and getattr(auth_result, \"turnstile_token\", None) is not None\n                ):\n                    headers[\n                        \"openai-sentinel-turnstile-token\"\n                    ] = auth_result.turnstile_token\n                async with session.post(\n                    backend_anon_url if cls._api_key is None else backend_url,\n                    json=data,\n                    headers=headers,\n                ) as response:\n                    cls._update_request_args(auth_result, session)\n                    if response.status in (401, 403, 429, 500):\n                        raise MissingAuthError(\"Access token is not valid\")\n                    elif response.status == 422:\n                        raise RuntimeError((await response.json()), data)\n                    await raise_for_status(response)\n                    buffer = \"\"\n                    matches = []\n                    async for line in response.iter_lines():\n                        pattern = re.compile(r\"file-service://[\\w-]+\")\n                        for match in pattern.finditer(line.decode(errors=\"ignore\")):\n                            if match.group(0) in matches:\n                                continue\n                            matches.append(match.group(0))\n                            generated_image = await cls.get_generated_image(\n                                session, auth_result, match.group(0), prompt\n                            )\n                            if generated_image is not None:\n                                yield generated_image\n                        async for chunk in cls.iter_messages_line(\n                            session,\n                            auth_result,\n                            line,","sourceCodeStart":686,"sourceCodeEnd":722,"githubUrl":"https://github.com/xtekky/gpt4free/blob/973504e1770928ed5fb82f43da528f441ad9ddc3/g4f/Provider/needs_auth/OpenaiChat.py#L686-L722","documentation":"When the conversation POST returns HTTP 422, OpenaiChat raises RuntimeError with a tuple of (parsed JSON body, request data). 422 means the request payload failed validation — the JSON error body names which field, and the second tuple element is the exact data dict that was sent, enabling direct comparison.","triggerScenarios":"POSTing the constructed data dict (model, messages, conversation_id, parent_message_id, features, etc.) where the backend rejects a field — e.g. unknown model slug, malformed message references, stale conversation/parent IDs, or schema changes after an OpenAI deploy.","commonSituations":"Reusing a conversation_id/parent_message_id from an expired session; model name not accepted by the backend; g4f version lagging a payload-schema change; features flags the backend no longer accepts.","solutions":["Inspect both tuple members: response JSON states the invalid field, data shows what was sent","Start a new conversation (drop cached conversation_id/parent_message_id) and retry","Update g4f so the payload builder matches the current backend schema","Verify the model slug against OpenaiChat.get_models()"],"exampleFix":"// before\nresp = await client.chat.completions.create(model='...', messages=msgs)  # 422 tuple error\n\n// after\n# inspect then reset conversation state\nexcept RuntimeError as e:\n    body, payload = e.args\n    logging.error('422 detail: %s sent: %s', body, payload)\nresp = await client.chat.completions.create(model=..., messages=msgs)  # fresh conversation","handlingStrategy":"try-catch","validationCode":"models = await OpenaiChat.get_models()\nassert model in models, f'model {model} rejected by backend (422 risk)'","typeGuard":null,"tryCatchPattern":"try:\n    resp = await client.chat.completions.create(model=model, messages=msgs)\nexcept RuntimeError as e:\n    if isinstance(e.args, tuple) and len(e.args) == 2:\n        body, payload = e.args  # 422: (server detail, sent data)\n        logging.error('422 on field per %s; sent %s', body, payload)\n        resp = await client.chat.completions.create(model=model, messages=msgs)  # fresh conversation\n    else:\n        raise","preventionTips":["Never reuse conversation_id/parent_message_id across sessions","Validate model slugs against get_models() before requests","Update g4f after OpenAI backend schema changes"],"tags":["openai-chat","validation","http-422","payload"],"backgroundTag":null,"analyzedSha":"973504e1770928ed5fb82f43da528f441ad9ddc3","analyzedAt":"2026-08-14T23:45:32.408Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}