ChatDOC
  1. Questions
ChatDOC
  • Documents
    • Upload Document
      POST
    • Upload Document
      POST
    • Get Document
      GET
    • Delete Document
      DELETE
    • Download Document
      GET
  • Collections
    • Create Collection
      POST
    • Clone Document To Collection
      POST
  • Questions
    • Get Suggested Questions
      GET
    • Ask Question
      POST
    • Get Question
      GET
    • Ask Question With Multiple Documents
      POST
  • Users
    • Get Quota
      GET
  1. Questions

Ask Question

Develop Env
https://dev.your-api-server.com
Develop Env
https://dev.your-api-server.com
POST
/questions
Chat with the document, response in server-sent events mode by default, you can change it through stream parameter.
Consume one question quota whether it's upon single document or collection.
Response:
if document is pdf/doc/docx format, structure is as follows:
{
    "data": {
        "answer": "answer to the question",
        "id": question_id,
        "source_info": [
            {
                # key: page number
                # value: rects
                '0': [[38.1063, 557.8058, 553.9003, 584.0043]]
            },
            {'1': [[38.0, 152.3994, 523.6151, 178.6392]], 'upload_id': 'xxxx'},
            {'0': [[38.0, 758.0623, 537.0082, 784.0]], 'upload_id': 'xxxx'},
            ...
        ]
    }
}
if document is md/epub/txt/website format, structure is as follows:
{
    "data": {
        "answer": "answer to the question",
        "id": question_id,
        "source_info": [
            {
            # key: element data-index
            # value: element xpath
            198: [{xpath: "/html/body/div/div[199]"}]
            },
            {
            "material": "", # selected text with HTML tags
            "indexes": [
                3,
                4,
                5,
                6
            ],
            "focusNode": "div[1]/p[5]/text()[1]",
            "upload_id": "903d971d-8250-47cc-a649-4b6ca35032dc",
            "anchorNode": "div[1]/p[2]/text()[1]",
            "focusOffset": "225",
            "anchorOffset": "2"
        }
            ...
        ]
    }
}
answer: chunks of answer, may be Markdown format to support rich text, for example: Tables. For detailed_citation answer, the span tag chunk may be as follows:
autobiography captured the pre-Nazi Europe[<span data-index="0">1</span>]
The tag attr data-index is the index of the source in source_info array, which is used to highlight the source of the previous answer sentences in your PDF viewer. The highlighting method is same as source_info, and just use slice of source_info array as parameter.
id: id of the question, you can use it to GET /questions/{question_id} later.
Please note: you should store id in your database, because we don't have a GET /questions/list API to list all questions for now.
source_info: only responses in the last chunk of server-sent events mode, may be an empty list. So if the last chunk doesn't contain source_info attr, it means error occurred. Page number may not be ordered, you can use this information to highlight the source of specific upload_id document of the answer in your PDF viewer, by
calling drawSources method of our DOCViewerSDK, and converting source_info to Source parameter.
Request Request Example
Shell
JavaScript
Java
Swift
curl --location --request POST 'https://dev.your-api-server.com/questions' \
--header 'Content-Type: application/json' \
--data-raw '{
    "upload_id": "stringstringstringstringstringstring",
    "question": "string",
    "stream": true,
    "selected_meta": {
        "material": "string",
        "upload_id": "stringstringstringstringstringstring",
        "rects": [
            {
                "pageNumber": 1,
                "outline": [
                    1,
                    1,
                    1,
                    1
                ]
            }
        ]
    },
    "history": [],
    "search_entire_doc": true,
    "detailed_citation": false,
    "language": "string",
    "model_type": "gpt-3.5-turbo"
}'
Response Response Example
200 - Example 1
null

Request

Body Params application/json
upload_id
string 
Upload Id
required
document id or collection id, created by POST /documents/upload or POST /collections APIs accordingly.
>= 36 characters<= 36 characters
question
string 
Question
required
question to ask
>= 1 characters<= 3000 characters
stream
boolean 
Stream
optional
If set, partial message deltas will be sent, like in ChatGPT of OpenAI. Tokens will be sent as data-only server-sent events as they become available.
Default:
true
selected_meta
Selected Meta
optional
When use Ask About Selected Text, this field is acquired from EVENT_TYPES.CHAT_ICON_CLICKED of our DOCViewerSDK, and then filled with the document upload_id, when ask upon a collection, it's the sub document id of collection.
Any of
material
string 
Material
required
upload_id
string 
Upload Id
required
>= 36 characters<= 36 characters
rects
array[object (PDFViewerRect) {2}] 
Rects
required
>= 1 items
history
array[object (ChatMessage) {2}] 
History
optional
chat history, used for Threaded Chat, this parameter simulates OpenAI' API. history is question and answer pairs, which is a list of ChatMessage objects. The max input tokens of history, selected_meta.material and question is 8000, which is a little less than OpenAI's limit of Embedding models. Sample parameter is as follows:
[
{"role": "user", "content": "Who..."},
{"role": "assistant", "content": "The..."},
{"role": "user", "content": "Where..."}
{"role": "assistant", "content": "The..."},
]
role
enum<string> 
required
An enumeration.
Allowed values:
assistantuser
content
string 
Content
required
search_entire_doc
boolean 
Search Entire Doc
optional
if true: limit responses to current file's information, else: responses go freely with knowledge of our AI
Default:
true
detailed_citation
boolean 
Detailed Citation
optional
Whether to show the source at the end of each sentence or not. Requires enabling the search_entire_doc setting.
Default:
false
language
string 
Language
optional
preferred language of answer to the question, if not provided, we will try to detect the language automatically, which is flexible and also works well. You'd better use ISO language name, such as English, Chinese. But we can't promise, when AI can't answer your question well, it generally answers in English.
model_type
enum<string> 
optional
Supported LLM enumeration.
Allowed values:
gpt-3.5-turbogpt-4gpt-4o
Default:
gpt-3.5-turbo
Examples

Responses

🟢200Successful Response
application/json
Body
No schema defined
🟠422Validation Error
Modified at 2024-07-26 06:57:23
Previous
Get Suggested Questions
Next
Get Question
Built with