# Chat API Documentation ## Overview This API provides chat functionality compatible with OpenAI V1 Chat Completions API, supporting streaming responses for interactive conversations with AI assistants. ## API Details - **URL**: `/api/kernel2/chat` - **Method**: POST - **Description**: Chat interface - Streaming response (compatible with OpenAI V1 API) - **Access**: Available through local endpoint at `localhost:8002` ## Request Parameters The request body is compatible with OpenAI Chat Completions API, using JSON format: ```json { "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Hello, who are you?"}, {"role": "assistant", "content": "I am a helpful assistant."}, {"role": "user", "content": "What can you do for me?"} ], "metadata": { "enable_l0_retrieval": true, "role_id": "uuid-string" }, "stream": true, "model": "gpt-3.5-turbo", "temperature": 0.1, "max_tokens": 2000 } ``` ### Parameter Description | Parameter | Type | Required | Description | |------|------|------|------| | messages | Array | Yes | Standard OpenAI message list containing conversation history | | metadata | Object | No | Additional parameters for request processing | | metadata.enable_l0_retrieval | Boolean | No | Whether to enable basic knowledge retrieval | | metadata.role_id | String | No | System customized role UUID | | stream | Boolean | No | Whether to return streaming response (default: true) | | model | String | No | Model identifier (default: configured model) | | temperature | Float | No | Controls randomness (default: 0.1) | | max_tokens | Integer | No | Maximum number of tokens to generate (default: 2000) | ## Response Format The response format is compatible with OpenAI Chat Completions API, using Server-Sent Events (SSE) format for streaming responses: ```json { "id": "chatcmpl-123", "object": "chat.completion.chunk", "created": 1677652288, "model": "gpt-3.5-turbo", "system_fingerprint": "fp_44709d6fcb", "choices": [ { "index": 0, "delta": {"content": "Hello"}, "finish_reason": null } ] } ``` ### Format of Each Chunk in Streaming Response | Field | Type | Description | |------|------|------| | id | String | Unique identifier for the response | | object | String | Fixed as "chat.completion.chunk" | | created | Integer | Timestamp | | model | String | Model identifier | | system_fingerprint | String | System fingerprint | | choices | Array | List of generated results | | choices[0].index | Integer | Result index, usually 0 | | choices[0].delta | Object | Incremental content of the current chunk | | choices[0].delta.content | String | Incremental text content | | choices[0].finish_reason | String | Reason for completion, null or "stop" | ## Usage Examples ### cURL Request Example ```bash curl -X POST \ 'http://localhost:8002/api/kernel2/chat' \ -H 'Content-Type: application/json' \ -H 'Accept: text/event-stream' \ -d '{ "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Tell me about artificial intelligence."} ], "stream": true }' ``` ### Python Request Example ```python import json import http.client url = "localhost:8002" path = "/api/kernel2/chat" headers = { "Content-Type": "application/json", "Accept": "text/event-stream" } data = { "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Tell me about artificial intelligence."} ], "stream": True } conn = http.client.HTTPConnection(url) conn.request("POST", path, body=json.dumps(data), headers=headers) response = conn.getresponse() for line in response: if line: decoded_line = line.decode('utf-8').strip() if decoded_line == 'data: [DONE]': break if decoded_line.startswith('data: '): try: json_str = decoded_line[6:] chunk = json.loads(json_str) content = chunk['choices'][0]['delta'].get('content', '') if content: print(content, end='', flush=True) except json.JSONDecodeError: pass conn.close() ``` ## Error Handling When an error occurs, the API will return standard HTTP error status codes and error details in JSON format: ```json { "success": false, "message": "Error message", "code": 400 } ``` | Error Code | Description | |------|------| | 400 | Bad Request | | 401 | Unauthorized | | 404 | Not Found | | 500 | Internal Server Error |