Spaces:
Sleeping
Sleeping
| # Chat Completion API | |
| ## API Overview | |
| This API is used to create chat completions, process provided messages, and generate responses. The API supports streaming responses and is compatible with OpenAI format. | |
| ## Prerequisites | |
| Before using this API, you need to: | |
| 1. **Register**: Execute the register operation to create your instance | |
| 2. **Status Check**: Wait until your instance status becomes "online" | |
| 3. **Get Instance ID**: Obtain your unique `{instance_id}` from the registration response | |
| 4. **API Access**: Use the instance ID to construct the API endpoint: `https://app.secondme.io/api/chat/{instance_id}` | |
| ## API Endpoints | |
| ``` | |
| POST /api/chat/{instance_id} | |
| POST /api/chat/{instance_id}/chat/completions | |
| ``` | |
| ## Path Parameters | |
| | Parameter | Type | Required | Description | | |
| |------|------|------|------| | |
| | `instance_id` | string | Yes | Unique identifier for the model instance, obtained during registration | | |
| ## Request Body | |
| | Field | Type | Required | Default | Description | | |
| |------|------|------|------|------| | |
| | `messages` | array | Yes | - | List of messages in the conversation | | |
| | `metadata` | object | No | null | Additional metadata for the request | | |
| | `temperature` | float | No | 0.7 | Controls randomness of the response, value between 0 and 1 | | |
| | `max_tokens` | integer | No | 2000 | Maximum number of tokens to generate | | |
| | `stream` | boolean | No | true | Whether to stream the response | | |
| ### messages Field | |
| Each message should contain the following fields: | |
| | Field | Type | Required | Description | | |
| |------|------|------|------| | |
| | `role` | string | Yes | Role of the message sender. Can be 'system', 'user', or 'assistant' | | |
| | `content` | string | Yes | Content of the message | | |
| ### metadata Field | |
| | Field | Type | Required | Description | | |
| |------|------|------|------| | |
| | `enable_l0_retrieval` | boolean | No | Whether to enable L0 level retrieval | | |
| | `role_id` | string | No | Role ID to use for this chat | | |
| ## Response | |
| - Server-Sent Events (SSE) stream in OpenAI-compatible format | |
| - Each event contains a fragment of the generated response | |
| - The last event is marked as `[DONE]` | |
| ### Response Format Example | |
| ``` | |
| data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"lpm-registry-model","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]} | |
| data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"lpm-registry-model","system_fingerprint":null,"choices":[{"index":0,"delta":{"content":" world!"},"finish_reason":null}]} | |
| data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"lpm-registry-model","system_fingerprint":null,"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]} | |
| data: [DONE] | |
| ``` | |
| ## Request Examples | |
| ### cURL | |
| ```bash | |
| curl -X POST "https://app.secondme.io/api/chat/{instance_id}" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "messages": [ | |
| {"role": "system", "content": "You are a helpful assistant."}, | |
| {"role": "user", "content": "Hello, please introduce yourself."} | |
| ], | |
| "metadata": { | |
| "enable_l0_retrieval": false, | |
| "role_id": "default_role" | |
| }, | |
| "temperature": 0.7, | |
| "max_tokens": 2000, | |
| "stream": true | |
| }' | |
| ``` | |
| ### Python | |
| ```python | |
| import http.client | |
| import json | |
| url = "app.secondme.io" | |
| path = "/api/chat/{instance_id}" | |
| headers = {"Content-Type": "application/json"} | |
| data = { | |
| "messages": [ | |
| {"role": "system", "content": "You are a helpful assistant."}, | |
| {"role": "user", "content": "Hello, please introduce yourself."} | |
| ], | |
| "metadata": { | |
| "enable_l0_retrieval": False, | |
| "role_id": "default_role" | |
| }, | |
| "temperature": 0.7, | |
| "max_tokens": 2000, | |
| "stream": True | |
| } | |
| # Prepare the connection | |
| conn = http.client.HTTPSConnection(url) | |
| # Send the POST request | |
| conn.request("POST", path, body=json.dumps(data), headers=headers) | |
| # Get the response | |
| response = conn.getresponse() | |
| # Read the body line by line | |
| 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 | |
| # Close the connection when done | |
| conn.close() | |
| ``` | |
| ## Error Codes | |
| | Status Code | Description | | |
| |------|------| | |
| | 404 | Instance not found | | |
| | 422 | Invalid request parameters | | |
| | 503 | Instance not connected or unavailable | | |
| ## Notes | |
| 1. Before using this API, ensure that the instance is registered and connected to the server (status: "online") | |
| 2. The instance ID is unique and required for all API calls | |
| 3. For streaming responses, the client should be able to handle data in SSE format | |
| 4. Roles in the message list should follow the conversation order, typically starting with 'system' or 'user' | |