com um clique
com um clique
Require relevant tests and documentation updates for any code or config change, and report what was run.
Create or update evaluation scenarios for the tests/evaluation framework, including session-based scenarios and A/B comparisons
Guide azd-based deployments, including where azure.yaml and azd hook scripts live, the current deployment flow, troubleshooting docs, and regional/model availability checks for Azure OpenAI
Add a new React component with Material UI
Add a handler for a new WebSocket message type
Add a new tool to the agent toolstore registry
| name | add-endpoint |
| description | Add a new FastAPI endpoint to the API |
Add endpoints to apps/artagent/backend/api/v1/endpoints/.
"""
Endpoint Module
===============
Brief description of endpoints in this module.
"""
from __future__ import annotations
from fastapi import APIRouter, HTTPException, Request
from pydantic import BaseModel, Field
from utils.ml_logging import get_logger
logger = get_logger(__name__)
router = APIRouter()
# ═══════════════════════════════════════════════════════════════════════════════
# SCHEMAS
# ═══════════════════════════════════════════════════════════════════════════════
class MyRequest(BaseModel):
"""Request model for the endpoint."""
field1: str = Field(..., description="Required field")
field2: int | None = Field(None, description="Optional field")
class MyResponse(BaseModel):
"""Response model for the endpoint."""
success: bool
data: str
# ═══════════════════════════════════════════════════════════════════════════════
# ENDPOINTS
# ═══════════════════════════════════════════════════════════════════════════════
@router.get("/resource", response_model=MyResponse, tags=["Category"])
async def get_resource(request: Request) -> MyResponse:
"""
Get a resource.
Returns the resource data.
"""
return MyResponse(success=True, data="result")
@router.post("/resource", response_model=MyResponse, tags=["Category"])
async def create_resource(request: Request, body: MyRequest) -> MyResponse:
"""
Create a new resource.
Args:
body: The resource data to create.
"""
logger.info("Creating resource: %s", body.field1)
return MyResponse(success=True, data=body.field1)
api/v1/endpoints/ or edit existingtags=["Category"] for OpenAPI groupingapi/v1/__init__.pyIn apps/artagent/backend/api/v1/__init__.py:
from apps.artagent.backend.api.v1.endpoints import my_module
api_router.include_router(
my_module.router,
prefix="/my-resource",
tags=["MyResource"],
)
@router.get("/resource")
async def get_resource(request: Request):
redis = request.app.state.redis_client
# Use redis...
@router.get("/resource/{resource_id}")
async def get_resource(resource_id: str) -> MyResponse:
...
@router.get("/resources")
async def list_resources(
limit: int = 10,
offset: int = 0,
) -> list[MyResponse]:
...
@router.get("/resource/{id}")
async def get_resource(id: str) -> MyResponse:
resource = await fetch_resource(id)
if not resource:
raise HTTPException(status_code=404, detail="Resource not found")
return resource
Use consistent tags:
Health - Health/readiness endpointsCalls - Call managementAgents - Agent operationsVoice - Voice/speech operationsSessions - Session managementFor reusable schemas, add to api/v1/schemas/:
# api/v1/schemas/my_schemas.py
from pydantic import BaseModel
class SharedSchema(BaseModel):
field: str
For models with timestamps/IDs, extend base:
from apps.artagent.backend.api.v1.models.base import BaseModel
class MyModel(BaseModel):
field: str
# Automatically gets id, created_at, updated_at