{"$type":"com.atproto.lexicon.schema","defs":{"effort":{"description":"The model's reasoning effort.","knownValues":["none","low","medium","high","max"],"type":"string"},"encryptedContent":{"description":"A sealed plainContent, or the sealed fields of the enclosing record. All user content is sealed, metadata stays in the clear.","properties":{"blobs":{"description":"Encrypted blobs the ciphertext refers to.","items":{"type":"blob"},"maxLength":100,"type":"array"},"ciphertext":{"maxLength":1000000,"type":"bytes"},"keyId":{"maxLength":128,"type":"string"},"nonce":{"maxLength":64,"type":"bytes"},"scheme":{"maxLength":128,"type":"string"}},"required":["scheme","keyId","nonce","ciphertext"],"type":"object"},"extractedText":{"description":"Cache for text pulled from a file.","properties":{"method":{"knownValues":["text","ocr"],"type":"string"},"text":{"accept":["text/plain"],"maxSize":20000000,"type":"blob"}},"required":["text","method"],"type":"object"},"filePart":{"description":"An attached file. If the app can extract text, it will be stored in 'extracted' for the model.","properties":{"extracted":{"ref":"#extractedText","type":"ref"},"file":{"accept":["*/*"],"maxSize":50000000,"type":"blob"},"name":{"maxLength":1024,"type":"string"}},"required":["file"],"type":"object"},"generationRequest":{"properties":{"attempt":{"default":0,"description":"The reply is written as '{messageKey}.r{attempt}'. Increase by 1 to ask for a regeneration.","maximum":1000,"minimum":0,"type":"integer"},"effort":{"ref":"#effort","type":"ref"},"model":{"description":"Model used in generating the response. If empty falls back to previous response model, then the user's default.","ref":"#modelRef","type":"ref"},"tools":{"description":"The tools the assistant may use for this reply, by name, such as 'web_search' or 'mcp_<server>_<tool>'. Leave it out to use the tools the user has switched on in their settings.","items":{"maxLength":128,"type":"string"},"maxLength":64,"type":"array"}},"type":"object"},"imagePart":{"description":"An attached image.","properties":{"alt":{"maxGraphemes":1000,"maxLength":10000,"type":"string"},"image":{"accept":["image/png","image/jpeg","image/webp","image/gif"],"maxSize":20000000,"type":"blob"}},"required":["image"],"type":"object"},"modelRef":{"description":"The model that wrote a reply, or that a request asks for.","properties":{"id":{"maxLength":256,"type":"string"},"provider":{"knownValues":["anthropic","openai","google","openrouter","cocore"],"maxLength":128,"type":"string"}},"required":["provider","id"],"type":"object"},"plainContent":{"description":"The pieces of a message, in order: text, attachments, the assistant's reasoning, and tool calls with their results.","properties":{"parts":{"items":{"refs":["#textPart","#reasoningPart","#imagePart","#filePart","#toolCallPart","#toolResultPart","#toolApprovalPart","#sourcePart"],"type":"union"},"maxLength":1000,"type":"array"}},"required":["parts"],"type":"object"},"providerData":{"description":"JSON-encoded provider options for this part, such as reasoning signatures. Sent back unchanged when continuing with the same provider.","maxLength":100000,"type":"string"},"reasoningPart":{"description":"The model's thinking or reasoning text.","properties":{"providerData":{"ref":"#providerData","type":"ref"},"text":{"maxLength":500000,"type":"string"}},"type":"object"},"sourcePart":{"description":"URL source cited by the assistant.","properties":{"title":{"maxGraphemes":300,"maxLength":3000,"type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"},"textPart":{"description":"Text written by the user or the assistant.","properties":{"providerData":{"ref":"#providerData","type":"ref"},"text":{"maxLength":500000,"type":"string"}},"required":["text"],"type":"object"},"toolApprovalPart":{"description":"The user's approval state for a tool call that's waiting in the reply this message is responding to.","properties":{"approved":{"type":"boolean"},"callId":{"maxLength":256,"type":"string"},"reason":{"maxLength":3000,"type":"string"}},"required":["callId","approved"],"type":"object"},"toolCallPart":{"description":"The assistant asked to run a tool. If the message has no result for this call it means the tool never ran.","properties":{"approval":{"description":"'pending' means the assistant stopped here and is waiting for user approval. When answering, write a user message with a toolApprovalPart for each waiting call. The reply to that message repeats each call, marked 'approved' or 'denied' and followed by its result, and replaces the waiting copy. Any waiting call the answer does not mention is treated as denied.","knownValues":["pending","approved","denied"],"type":"string"},"callId":{"maxLength":256,"type":"string"},"input":{"description":"JSON-encoded arguments.","maxLength":200000,"type":"string"},"providerData":{"ref":"#providerData","type":"ref"},"source":{"description":"The tools source, such as the URL of an MCP server. Empty for the app's built-in tools.","maxLength":1024,"type":"string"},"tool":{"description":"The app's name for the tool, such as 'web_search' or 'mcp_<server>_<tool>'.","maxLength":128,"type":"string"}},"required":["callId","tool","input"],"type":"object"},"toolResultPart":{"description":"What a tool returned. It belongs to the call with the same callId in the same message.","properties":{"callId":{"maxLength":256,"type":"string"},"isError":{"default":false,"type":"boolean"},"output":{"description":"Tool output as text or JSON-encoded data.","maxLength":500000,"type":"string"},"outputBlob":{"accept":["*/*"],"description":"Used when the output is too long for the output record. Output will contain a summary in that case.","maxSize":50000000,"type":"blob"}},"required":["callId","output"],"type":"object"},"usage":{"description":"Token counts for the reply.","properties":{"inputTokens":{"minimum":0,"type":"integer"},"outputTokens":{"minimum":0,"type":"integer"},"reasoningTokens":{"minimum":0,"type":"integer"}},"type":"object"}},"id":"chat.gel.assistant.defs","lexicon":1}