API / docs /API_REFERENCE.md
Rox-Turbo's picture
Upload 4 files
46ec487 verified
# API Reference
Technical reference for Rox AI API endpoints.
## Base URL
```
https://Rox-Turbo-API.hf.space
```
---
## Endpoints
### POST /chat - Rox Core
### POST /turbo - Rox 2.1 Turbo
### POST /coder - Rox 3.5 Coder
### POST /turbo45 - Rox 4.5 Turbo
### POST /ultra - Rox 5 Ultra
### POST /dyno - Rox 6 Dyno
### POST /coder7 - Rox 7 Coder
### POST /vision - Rox Vision Max
### POST /hf/generate - HuggingFace Compatible
All endpoints use the same request/response format.
#### Request
**URL**: `/chat`
**Method**: `POST`
**Content-Type**: `application/json`
**Body Parameters**:
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `messages` | Array<Message> | Yes | - | Array of conversation messages |
| `temperature` | Float | No | 0.7 | Controls randomness (0.0 - 2.0) |
| `top_p` | Float | No | 0.95 | Nucleus sampling parameter (0.0 - 1.0) |
| `max_tokens` | Integer | No | 8192 | Maximum tokens in response |
| `stream` | Boolean | No | false | Enable streaming responses |
**Message Object**:
```typescript
{
role: "user" | "assistant",
content: string
}
```
**Example Request**:
```json
{
"messages": [
{
"role": "user",
"content": "What is artificial intelligence?"
}
],
"temperature": 0.7,
"top_p": 0.95,
"max_tokens": 8192,
"stream": false
}
```
#### Response
**Standard Response** (200 OK):
```json
{
"content": "Artificial intelligence (AI) refers to..."
}
```
**Streaming Response** (200 OK):
When `stream: true` is set, the response is sent as Server-Sent Events:
```
data: {"content": "Artificial"}
data: {"content": " intelligence"}
data: {"content": " (AI)"}
data: {"content": " refers"}
data: {"content": " to"}
data: {"content": "..."}
data: [DONE]
```
Each line starts with `data: ` followed by a JSON object containing a `content` field with the next token. The stream ends with `data: [DONE]`.
**Response Fields**:
| Field | Type | Description |
|-------|------|-------------|
| `content` | String | The generated response from Rox Core |
**Error Responses**:
**500 Internal Server Error**:
```json
{
"detail": "Internal server error while calling Rox Core."
}
```
**502 Bad Gateway**:
```json
{
"detail": "Bad response from upstream model provider."
}
```
**422 Unprocessable Entity**:
```json
{
"detail": [
{
"loc": ["body", "messages"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
```
#### Example Usage
**Standard Request (cURL)**:
```bash
curl -X POST https://Rox-Turbo-API.hf.space/chat \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "Hello!"}
],
"temperature": 0.7,
"max_tokens": 8192
}'
```
**Streaming Request (cURL)**:
```bash
curl -X POST https://Rox-Turbo-API.hf.space/chat \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "Hello!"}
],
"stream": true
}'
```
**Standard Request (JavaScript)**:
```javascript
const response = await fetch('https://Rox-Turbo-API.hf.space/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
messages: [{ role: 'user', content: 'Hello!' }],
temperature: 0.7,
max_tokens: 8192
})
});
const data = await response.json();
console.log(data.content);
```
**Streaming Request (JavaScript)**:
```javascript
const response = await fetch('https://Rox-Turbo-API.hf.space/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
messages: [{ role: 'user', content: 'Hello!' }],
stream: true
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value, { stream: true });
const lines = chunk.split('\n');
for (const line of lines) {
if (line.startsWith('data: ')) {
const data = line.slice(6).trim();
if (data === '[DONE]') break;
try {
const parsed = JSON.parse(data);
if (parsed.content) {
process.stdout.write(parsed.content);
}
} catch (e) {}
}
}
}
```
**Standard Request (Python)**:
```python
import requests
response = requests.post('https://Rox-Turbo-API.hf.space/chat', json={
'messages': [{'role': 'user', 'content': 'Hello!'}],
'temperature': 0.7,
'max_tokens': 8192
})
print(response.json()['content'])
```
**Streaming Request (Python)**:
```python
import requests
import json
response = requests.post(
'https://Rox-Turbo-API.hf.space/chat',
json={
'messages': [{'role': 'user', 'content': 'Hello!'}],
'stream': True
},
stream=True
)
for line in response.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith('data: '):
data = line[6:]
if data == '[DONE]':
break
try:
parsed = json.loads(data)
if 'content' in parsed:
print(parsed['content'], end='', flush=True)
except json.JSONDecodeError:
pass
```
---
### POST /hf/generate
Hugging Face compatible text generation endpoint for single-turn interactions.
#### Request
**URL**: `/hf/generate`
**Method**: `POST`
**Content-Type**: `application/json`
**Body Parameters**:
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `inputs` | String | Yes | - | The input text/prompt |
| `parameters` | Object | No | {} | Generation parameters |
**Parameters Object**:
| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `temperature` | Float | No | 1.0 | Controls randomness (0.0 - 2.0) |
| `top_p` | Float | No | 0.95 | Nucleus sampling (0.0 - 1.0) |
| `max_new_tokens` | Integer | No | 8192 | Maximum tokens to generate |
**Example Request**:
```json
{
"inputs": "Write a haiku about technology",
"parameters": {
"temperature": 0.7,
"top_p": 0.95,
"max_new_tokens": 256
}
}
```
#### Response
**Success Response** (200 OK):
```json
[
{
"generated_text": "Silicon dreams awake\nCircuits pulse with electric life\nFuture in our hands"
}
]
```
**Response Format**:
Returns an array with a single object containing the generated text.
| Field | Type | Description |
|-------|------|-------------|
| `generated_text` | String | The generated response |
**Error Responses**:
Same as `/chat` endpoint (500, 502, 422).
#### Example Usage
**cURL**:
```bash
curl -X POST https://Rox-Turbo-API.hf.space/hf/generate \
-H "Content-Type: application/json" \
-d '{
"inputs": "Explain quantum computing",
"parameters": {
"temperature": 0.7,
"max_new_tokens": 256
}
}'
```
**JavaScript**:
```javascript
const response = await fetch('https://Rox-Turbo-API.hf.space/hf/generate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
inputs: 'Explain quantum computing',
parameters: {
temperature: 0.7,
max_new_tokens: 256
}
})
});
const data = await response.json();
console.log(data[0].generated_text);
```
**Python**:
```python
import requests
response = requests.post('https://Rox-Turbo-API.hf.space/hf/generate', json={
'inputs': 'Explain quantum computing',
'parameters': {
'temperature': 0.7,
'max_new_tokens': 256
}
})
print(response.json()[0]['generated_text'])
```
---
## Parameters
### temperature
Controls output randomness.
- **Range**: 0.0 to 2.0
- **Default**: 1.0
- **Lower** (0.1-0.5): Focused, deterministic
- **Medium** (0.6-1.0): Balanced
- **Higher** (1.1-2.0): Creative, varied
Examples:
- `0.3`: Math problems, factual questions, code generation
- `0.7`: General conversation, explanations
- `1.2`: Creative writing, brainstorming, storytelling
**Example**:
```json
{
"messages": [{"role": "user", "content": "What is 2+2?"}],
"temperature": 0.2
}
```
### top_p
Nucleus sampling parameter.
- **Range**: 0.0 to 1.0
- **Default**: 0.95 (/hf/generate), 1.0 (/chat)
- **Lower**: More focused
- **Higher**: More diverse
Example:
```json
{
"messages": [{"role": "user", "content": "Tell me a story"}],
"top_p": 0.9
}
```
### max_tokens / max_new_tokens
Maximum tokens in response.
- **Range**: 1 to 32768
- **Default**: 8192
Token estimation:
- ~1 token ≈ 4 characters
- ~1 token ≈ 0.75 words
Example:
```json
{
"messages": [{"role": "user", "content": "Brief summary of AI"}],
"max_tokens": 150
}
```
### stream
Enable streaming responses for real-time token delivery.
- **Type**: Boolean
- **Default**: false
- **Values**: true or false
When enabled, responses are sent as Server-Sent Events instead of a single JSON response. This allows you to display tokens as they are generated rather than waiting for the complete response.
Benefits of streaming:
- Lower perceived latency
- Better user experience for long responses
- Ability to cancel generation early
- Real-time feedback
Example:
```json
{
"messages": [{"role": "user", "content": "Write a story"}],
"stream": true
}
```
Response format when streaming is enabled:
```
data: {"content": "Once"}
data: {"content": " upon"}
data: {"content": " a"}
data: {"content": " time"}
data: [DONE]
```
---
## Error Handling
### Status Codes
| Code | Meaning | Description |
|------|---------|-------------|
| 200 | OK | Request successful |
| 422 | Unprocessable Entity | Invalid request format |
| 500 | Internal Server Error | Server-side error |
| 502 | Bad Gateway | Upstream model error |
### Error Response Format
```json
{
"detail": "Error message here"
}
```
### Common Errors
Missing field:
```json
{
"detail": [
{
"loc": ["body", "messages"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
```
Invalid type:
```json
{
"detail": [
{
"loc": ["body", "temperature"],
"msg": "value is not a valid float",
"type": "type_error.float"
}
]
}
```
Example error handler:
```javascript
async function safeRequest(endpoint, body) {
try {
const response = await fetch(endpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.detail || `HTTP ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('API Error:', error);
throw error;
}
}
```
---
## Rate Limiting
No enforced rate limits. Implement client-side limiting as needed.
---
## Client Wrapper Example
```javascript
class RoxAI {
constructor(baseURL = 'https://Rox-Turbo-API.hf.space') {
this.baseURL = baseURL;
}
async chat(messages, options = {}) {
const response = await fetch(`${this.baseURL}/chat`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
messages,
temperature: options.temperature || 0.7,
top_p: options.top_p || 0.95,
max_tokens: options.max_tokens || 8192,
stream: false
})
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const data = await response.json();
return data.content;
}
async chatStream(messages, onToken, options = {}) {
const response = await fetch(`${this.baseURL}/chat`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
messages,
temperature: options.temperature || 0.7,
top_p: options.top_p || 0.95,
max_tokens: options.max_tokens || 8192,
stream: true
})
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
let fullContent = '';
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value, { stream: true });
const lines = chunk.split('\n');
for (const line of lines) {
if (line.startsWith('data: ')) {
const data = line.slice(6).trim();
if (data === '[DONE]') break;
try {
const parsed = JSON.parse(data);
if (parsed.content) {
fullContent += parsed.content;
onToken(parsed.content);
}
} catch (e) {}
}
}
}
return fullContent;
}
async generate(text, options = {}) {
const response = await fetch(`${this.baseURL}/hf/generate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
inputs: text,
parameters: options
})
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const data = await response.json();
return data[0].generated_text;
}
}
// Standard usage
const rox = new RoxAI();
const response = await rox.chat([
{ role: 'user', content: 'Hello!' }
]);
console.log(response);
// Streaming usage
await rox.chatStream(
[{ role: 'user', content: 'Tell me a story' }],
(token) => process.stdout.write(token)
);
```
---
---
Built by Mohammad Faiz