Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added API docs and Delete endpoint #109

Merged
merged 3 commits into from
Jan 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
152 changes: 152 additions & 0 deletions API.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
# Bolna API Documentation

## Endpoints

### Get Agent
Retrieves an agent's information by agent id.

**Endpoint:** `GET /agent/{agent_id}`

**Parameters:**
- `agent_id` (path) - string, required: Unique identifier of the agent

### Create Agent
Creates a new agent with specified configuration.

**Endpoint:** `POST /agent`

**Request Body:**
```json
{
{
"agent_config": {
"agent_name": "Alfred",
"agent_type": "other",
"agent_welcome_message": "How are you doing Bruce?",
"tasks": [
{
"task_type": "conversation",
"toolchain": {
"execution": "parallel",
"pipelines": [
[
"transcriber",
"llm",
"synthesizer"
]
]
},
"tools_config": {
"input": {
"format": "wav",
"provider": "twilio"
},
"llm_agent": {
"agent_type": "simple_llm_agent",
"agent_flow_type": "streaming",
"routes": null,
"llm_config": {
"agent_flow_type": "streaming",
"provider": "openai",
"request_json": true,
"model": "gpt-4o-mini"
}
},
"output": {
"format": "wav",
"provider": "twilio"
},
"synthesizer": {
"audio_format": "wav",
"provider": "elevenlabs",
"stream": true,
"provider_config": {
"voice": "George",
"model": "eleven_turbo_v2_5",
"voice_id": "JBFqnCBsd6RMkjVDRZzb"
},
"buffer_size": 100.0
},
"transcriber": {
"encoding": "linear16",
"language": "en",
"provider": "deepgram",
"stream": true
}
},
"task_config": {
"hangup_after_silence": 30.0
}
}
]
},
"agent_prompts": {
"task_1": {
"system_prompt": "Why Do We Fall, Sir? So That We Can Learn To Pick Ourselves Up."
}
}
}



}
```

**Response:**
```json
200 OK
{
"agent_id": "uuid-string",
"state": "created"
}
```

### Edit Agent
Updates an existing agent's configuration.

**Endpoint:** `PUT /agent/{agent_id}`

**Parameters:**
- `agent_id` (path) - string, required: Unique identifier of the agent

**Request Body:**
Same as Create Agent endpoint


### Delete Agent
Deletes an agent from the system.

**Endpoint:** `DELETE /agent/{agent_id}`

**Parameters:**
- `agent_id` (path) - string, required: Unique identifier of the agent

**Response:**
```json
200 OK
{
"agent_id": "string",
"state": "deleted"
}
```


### Get All Agents
Retrieves all agents from the system.

**Endpoint:** `GET /all`

**Response:**
```json
200 OK
{
"agents": [
{
"agent_id": "string",
"data": {
// Agent configuration object
}
}
]
}
```
16 changes: 16 additions & 0 deletions local_setup/quickstart_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,22 @@ async def edit_agent(agent_id: str, agent_data: CreateAgentPayload = Body(...)):
logger.error(f"Error updating agent {agent_id}: {e}", exc_info=True)
raise HTTPException(status_code=500, detail="Internal server error")

@app.delete("/agent/{agent_id}")
async def delete_agent(agent_id: str):
"""Deletes an agent by ID."""
try:
agent_exists = await redis_client.exists(agent_id)
if not agent_exists:
raise HTTPException(status_code=404, detail="Agent not found")

await redis_client.delete(agent_id)
return {"agent_id": agent_id, "state": "deleted"}

except Exception as e:
logger.error(f"Error deleting agent {agent_id}: {e}", exc_info=True)
raise HTTPException(status_code=500, detail="Internal server error")


@app.get("/all")
async def get_all_agents():
"""Fetches all agents stored in Redis."""
Expand Down