Ad contentum transili
Exitus structi

Exitus structi

Pete responsionem ut JSON: quodvis objectum JSON, aut JSON quod schema a te missum sequitur. Utere eo cum programma, non persona, responsionem legit.

POST https://api.shannon-ai.com/v1/chat/completions

import json
from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.shannon-ai.com/v1")

response = client.chat.completions.create(
    model="Kimi-K3-3BIT-REAP",
    messages=[
        {"role": "user", "content": "Extract the person: John Doe, 30 years old, engineer."}
    ],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "person",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "age": {"type": "integer"},
                    "occupation": {"type": "string"},
                },
                "required": ["name", "age", "occupation"],
            },
        },
    },
)

# The JSON arrives as text in message.content: parse it, then check it.
try:
    person = json.loads(response.choices[0].message.content)
except json.JSONDecodeError:
    person = None  # ask again, or report the failure

print(person)

JSON est textus responsionis, in choices[0].message.content:

200 JSON
{
  "id": "chatcmpl-0c4e7a1b9d2f4e6a8b3c5d7e9f1a2b3c",
  "object": "chat.completion",
  "created": 1791590400,
  "model": "Kimi-K3-3BIT-REAP",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "{\"name\":\"John Doe\",\"age\":30,\"occupation\":\"engineer\"}",
        "reasoning_content": null
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 96,
    "completion_tokens": 19,
    "total_tokens": 115,
    "prompt_tokens_details": {"cached_tokens": 0},
    "completion_tokens_details": {"reasoning_tokens": 0}
  }
}

Modi response_format

response_format est campus /v1/chat/completions. Sine eo responsio est textus ordinarius.

Modus Valor Quid accipias
Objectum JSON {"type": "json_object"} Responsio est JSON sine forma praescripta. Dic in prompt quas claves velis.
JSON schema {"type": "json_schema", "json_schema": {"name": "…", "schema": {…}}} Responsio schema quod mittis sequitur: claves, typos et campos necessarios eius.
Strict "strict": true Campus json_schema, non tertius modus. Est true nisi false mittis.
Campus Genus Default Descriptio Applicatur a
type string json_object vel json_schema. Necessarium intra response_format. text accipitur et responsionem textus ordinariam dat. Omne modellum quod modum accipit
json_schema.schema object JSON Schema quod responsio sequitur. Mitte id quotiens type est json_schema. Omne modellum quod modum accipit
json_schema.name string Titulus schematis, ut in forma OpenAI. Modelli open-weight hosted
json_schema.strict boolean true Num responsio schema exacte sequi debeat. Modelli Shannon omne schema ut strict applicant. Modelli open-weight hosted

Modus objecti JSON schema non requirit. Nomina claves in prompt:

Corpus petitionis
{
  "model": "shannon-3",
  "messages": [
    {
      "role": "user",
      "content": "Name the capital of France. Answer as JSON with the keys city and country."
    }
  ],
  "response_format": {"type": "json_object"}
}

Sustentatio per modellum

Modellum json_object json_schema
Omne modellum Shannon (shannon-*) Ita Ita
Modelli open-weight hosted, praeter ea quae infra nominantur Ita Ita
Laguna-S-2.1-W4A16-AUTOROUND-REAP — —
inkling-W4A16-AUTOROUND-REAP Ita —

GET /v1/models idem per id nuntiat: capabilities.json_schema in omni modello, et capabilities.response_format in modellis open-weight hosted. Modella et pretia

Verba clavis schematis sustenta

Quid modellum de schemate tuo accipiat a modello et ab endpoint pendet:

Modelli /v1/chat/completions /v1/responses
Modelli Shannon Pars verborum clavis infra, ut strict applicata. Schema ut mittis, ut strict applicatum.
Modelli open-weight hosted Schema ut mittis. strict est true nisi eum mittis. Schema ut mittis. strict est true nisi eum mittis.

Pars verborum clavis modellorum Shannon in /v1/chat/completions:

Verbum clavis Quomodo legatur
Verba clavis lecta type, format, title, description, nullable, enum, items, properties, required, minItems, maxItems, minimum, maximum, minLength, maxLength, pattern, anyOf, default
$ref Resolvitur ex $defs vel definitions in summo gradu schematis. Verba clavis iuxta $ref scripta, ut description, servantur. Referentia sine definitione congruenti ut {"type": "object"} legitur.
allOf Membra in unum schema miscentur. Ubi duo membra idem verbum clavis ponunt, posterius valet.
oneOf Legitur ut anyOf.
Schemata quae ad se ipsa referunt Ad 24 gradus expansa. Gradus profundior ut {"type": "object"} legitur.
Extra partem Omne aliud verbum clavis, exempli gratia additionalProperties, const, multipleOf, uniqueItems, exclusiveMinimum, exclusiveMaximum, patternProperties, prefixItems, minProperties, maxProperties, not et if / then / else. Hae non sunt pars schematis quod modellum accipit.

In /v1/responses: text.format

/v1/responses eandem petitionem ut text.format scribit. Schema directe in format sedet, iuxta name et strict, non sub clave json_schema. Pro modo objecti JSON mitte {"format": {"type": "json_object"}}.

Corpus petitionis
{
  "model": "Kimi-K3-3BIT-REAP",
  "input": "Extract the person: John Doe, 30 years old, engineer.",
  "text": {
    "format": {
      "type": "json_schema",
      "name": "person",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "name": {"type": "string"},
          "age": {"type": "integer"},
          "occupation": {"type": "string"}
        },
        "required": ["name", "age", "occupation"]
      }
    }
  }
}

JSON est text partis output_text elementi message:

200 JSON
{
  "output": [
    {
      "id": "msg_7e1d3c5b9a2f4d6e8c0b1a3f5e7d9c2b",
      "type": "message",
      "role": "assistant",
      "status": "completed",
      "content": [
        {
          "type": "output_text",
          "text": "{\"name\":\"John Doe\",\"age\":30,\"occupation\":\"engineer\"}",
          "annotations": []
        }
      ]
    }
  ]
}

Sustentatio per modellum et errores eadem sunt ac in /v1/chat/completions. API Responses

In /v1/messages: tool ut schema

Forma Messages campum output structurati non habet. Pro JSON ex eisdem modellis, voca /v1/chat/completions vel /v1/responses cum eadem clave.

Ut in /v1/messages maneas, describe objectum ut tool: pone schema tuum in input_schema et nomina tool in tool_choice. input blocki tool_use tunc est objectum tuum, iam analysatum. tool_choice nominatum a modellis open-weight hosted applicatur.

Corpus petitionis
{
  "model": "Kimi-K3-3BIT-REAP",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": "Extract the person: John Doe, 30 years old, engineer."
    }
  ],
  "tools": [
    {
      "name": "record_person",
      "description": "Record the extracted person.",
      "input_schema": {
        "type": "object",
        "properties": {
          "name": {"type": "string"},
          "age": {"type": "integer"},
          "occupation": {"type": "string"}
        },
        "required": ["name", "age", "occupation"]
      }
    }
  ],
  "tool_choice": {"type": "tool", "name": "record_person"}
}
200 JSON
{
  "stop_reason": "tool_use",
  "content": [
    {
      "type": "tool_use",
      "id": "toolu_4b8d2f6a1c3e4a5b9d7f0e2c4a6b8d1f",
      "name": "record_person",
      "input": {"name": "John Doe", "age": 30, "occupation": "engineer"}
    }
  ]
}

Verifica stop_reason esse tool_use antequam block legis. Vocatio functionum

Quomodo JSON adveniat

  • JSON est string. Responsio nullum objectum analysatum iuxta se habet: curre parser JSON tuum in message.content.
  • Cum stream: true JSON in partibus delta.content advenit. Iunge eas et analyse postquam stream finivit; pars per se JSON validum non est.
  • Modellum open-weight hosted petitioni response_format sine textu ratiocinationis respondet: reasoning_content est null.

Inspice quod accipis

Schema dirigit quomodo modellum scribat. API responsionem finitam cum schemate tuo non comparat, itaque codex tuus inspectionem ultimam facit:

  • Analyse intra tractatorem erroris, ut exemplum in summo facit.
  • Valida objectum analysatum cum eodem schemate in codice tuo, exempli gratia cum bibliotheca JSON Schema, Pydantic vel Zod.
  • Responsio longa ante JSON completum finire potest. Responsio non streamed finish_reason tantum ut stop vel tool_calls nuntiat, itaque error analysis est signum. Pete iterum, aut pete objectum minus.

Errores

Status Genus Nuntius Quando
400 invalid_request_error <id> does not accept response_format Modellum neutrum modum accipit.
400 invalid_request_error <id> does not accept response_format json_schema; use json_object Modellum json_object accipit et json_schema misisti.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … response_format type non habet, aut non est objectum JSON.

Duae responsiones 400 mittuntur antequam quicquam de saldo tuo trahitur. Tractatio errorum