Server Skills for LlamaFarm
Framework-specific patterns and code review checklists for the LlamaFarm Server component.
Overview
| Property |
Value |
| Path |
server/ |
| Python |
3.12+ |
| Framework |
FastAPI 0.116+ |
| Task Queue |
Celery 5.5+ |
| Validation |
Pydantic 2.x, pydantic-settings |
| Logging |
structlog with FastAPIStructLogger |
Links to Shared Skills
This skill extends the shared Python skills. See:
- Python Patterns - Dataclasses, comprehensions, imports
- Async Patterns - async/await, asyncio, concurrency
- Typing Patterns - Type hints, generics, Pydantic
- Testing Patterns - Pytest, fixtures, mocking
- Error Handling - Exceptions, logging, context managers
- Security Patterns - Path traversal, injection, secrets
Server-Specific Checklists
| Topic |
File |
Key Points |
| FastAPI |
fastapi.md |
Routes, dependencies, middleware, exception handlers |
| Celery |
celery.md |
Task patterns, error handling, retries, signatures |
| Pydantic |
pydantic.md |
Pydantic v2 models, validation, serialization |
| Performance |
performance.md |
Async patterns, caching, connection pooling |
Architecture Overview
server/
├── main.py # Uvicorn entry point, MCP mount
├── api/
│ ├── main.py # FastAPI app factory, middleware setup
│ ├── errors.py # Custom exceptions + exception handlers
│ ├── middleware/ # ASGI middleware (structlog, errors)
│ └── routers/ # API route modules
│ ├── projects/ # Project CRUD endpoints
│ ├── datasets/ # Dataset management
│ ├── rag/ # RAG query endpoints
│ └── ...
├── core/
│ ├── settings.py # pydantic-settings configuration
│ ├── logging.py # structlog setup, FastAPIStructLogger
│ └── celery/ # Celery app configuration
│ ├── celery.py # Celery app instance
│ └── rag_client.py # RAG task signatures and helpers
├── services/ # Business logic layer
│ ├── project_service.py # Project CRUD operations
│ ├── dataset_service.py # Dataset management
│ └── ...
├── agents/ # AI agent implementations
└── tests/ # Pytest test suite
Quick Reference
Settings Pattern (pydantic-settings)
from pydantic_settings import BaseSettings
class Settings(BaseSettings, env_file=".env"):
HOST: str = "0.0.0.0"
PORT: int = 14345
LOG_LEVEL: str = "INFO"
settings = Settings() # Module-level singleton
Structured Logging
from core.logging import FastAPIStructLogger
logger = FastAPIStructLogger(__name__)
logger.info("Operation completed", extra={"count": 10, "duration_ms": 150})
logger.bind(namespace=namespace, project=project_id) # Add context
Custom Exceptions
# Define exception hierarchy
class NotFoundError(Exception): ...
class ProjectNotFoundError(NotFoundError):
def __init__(self, namespace: str, project_id: str):
self.namespace = namespace
self.project_id = project_id
super().__init__(f"Project {namespace}/{project_id} not found")
# Register handler in api/errors.py
async def _handle_project_not_found(request: Request, exc: Exception) -> Response:
payload = ErrorResponse(error="ProjectNotFound", message=str(exc))
return JSONResponse(status_code=404, content=payload.model_dump())
def register_exception_handlers(app: FastAPI) -> None:
app.add_exception_handler(ProjectNotFoundError, _handle_project_not_found)
Service Layer Pattern
class ProjectService:
@classmethod
def get_project(cls, namespace: str, project_id: str) -> Project:
project_dir = cls.get_project_dir(namespace, project_id)
if not os.path.isdir(project_dir):
raise ProjectNotFoundError(namespace, project_id)
# ... load and validate
Review Checklist Summary
FastAPI Routes (High priority)
- Proper async/sync function choice
- Response model defined with
response_model=
- OpenAPI metadata (operation_id, tags, summary)
- HTTPException with proper status codes
Celery Tasks (High priority)
- Use signatures for cross-service calls
- Implement proper timeout and polling
- Handle task failures gracefully
- Store group metadata for parallel tasks
Pydantic Models (Medium priority)
- Use Pydantic v2 patterns (model_config, Field)
- Proper validation with field constraints
- Serialization with model_dump()
Performance (Medium priority)
- Avoid blocking calls in async functions
- Use proper connection pooling for external services
- Implement caching where appropriate
See individual topic files for detailed checklists with grep patterns.
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: server-skills3description: Server-specific best practices for FastAPI, Celery, and Pydantic. Extends python-skills with framework-specific patterns. Use when this capability is needed.4---56# Server Skills for LlamaFarm78Framework-specific patterns and code review checklists for the LlamaFarm Server component.910## Overview1112| Property | Value |13|----------|-------|14| Path | `server/` |15| Python | 3.12+ |16| Framework | FastAPI 0.116+ |17| Task Queue | Celery 5.5+ |18| Validation | Pydantic 2.x, pydantic-settings |19| Logging | structlog with FastAPIStructLogger |2021## Links to Shared Skills2223This skill extends the shared Python skills. See:2425- [Python Patterns](../python-skills/patterns.md) - Dataclasses, comprehensions, imports26- [Async Patterns](../python-skills/async.md) - async/await, asyncio, concurrency27- [Typing Patterns](../python-skills/typing.md) - Type hints, generics, Pydantic28- [Testing Patterns](../python-skills/testing.md) - Pytest, fixtures, mocking29- [Error Handling](../python-skills/error-handling.md) - Exceptions, logging, context managers30- [Security Patterns](../python-skills/security.md) - Path traversal, injection, secrets3132## Server-Specific Checklists3334| Topic | File | Key Points |35|-------|------|------------|36| FastAPI | [fastapi.md](fastapi.md) | Routes, dependencies, middleware, exception handlers |37| Celery | [celery.md](celery.md) | Task patterns, error handling, retries, signatures |38| Pydantic | [pydantic.md](pydantic.md) | Pydantic v2 models, validation, serialization |39| Performance | [performance.md](performance.md) | Async patterns, caching, connection pooling |4041## Architecture Overview4243```44server/45├── main.py # Uvicorn entry point, MCP mount46├── api/47│ ├── main.py # FastAPI app factory, middleware setup48│ ├── errors.py # Custom exceptions + exception handlers49│ ├── middleware/ # ASGI middleware (structlog, errors)50│ └── routers/ # API route modules51│ ├── projects/ # Project CRUD endpoints52│ ├── datasets/ # Dataset management53│ ├── rag/ # RAG query endpoints54│ └── ...55├── core/56│ ├── settings.py # pydantic-settings configuration57│ ├── logging.py # structlog setup, FastAPIStructLogger58│ └── celery/ # Celery app configuration59│ ├── celery.py # Celery app instance60│ └── rag_client.py # RAG task signatures and helpers61├── services/ # Business logic layer62│ ├── project_service.py # Project CRUD operations63│ ├── dataset_service.py # Dataset management64│ └── ...65├── agents/ # AI agent implementations66└── tests/ # Pytest test suite67```6869## Quick Reference7071### Settings Pattern (pydantic-settings)7273```python74from pydantic_settings import BaseSettings7576class Settings(BaseSettings, env_file=".env"):77 HOST: str = "0.0.0.0"78 PORT: int = 1434579 LOG_LEVEL: str = "INFO"8081settings = Settings() # Module-level singleton82```8384### Structured Logging8586```python87from core.logging import FastAPIStructLogger8889logger = FastAPIStructLogger(__name__)90logger.info("Operation completed", extra={"count": 10, "duration_ms": 150})91logger.bind(namespace=namespace, project=project_id) # Add context92```9394### Custom Exceptions9596```python97# Define exception hierarchy98class NotFoundError(Exception): ...99class ProjectNotFoundError(NotFoundError):100 def __init__(self, namespace: str, project_id: str):101 self.namespace = namespace102 self.project_id = project_id103 super().__init__(f"Project {namespace}/{project_id} not found")104105# Register handler in api/errors.py106async def _handle_project_not_found(request: Request, exc: Exception) -> Response:107 payload = ErrorResponse(error="ProjectNotFound", message=str(exc))108 return JSONResponse(status_code=404, content=payload.model_dump())109110def register_exception_handlers(app: FastAPI) -> None:111 app.add_exception_handler(ProjectNotFoundError, _handle_project_not_found)112```113114### Service Layer Pattern115116```python117class ProjectService:118 @classmethod119 def get_project(cls, namespace: str, project_id: str) -> Project:120 project_dir = cls.get_project_dir(namespace, project_id)121 if not os.path.isdir(project_dir):122 raise ProjectNotFoundError(namespace, project_id)123 # ... load and validate124```125126## Review Checklist Summary1271281. **FastAPI Routes** (High priority)129 - Proper async/sync function choice130 - Response model defined with `response_model=`131 - OpenAPI metadata (operation_id, tags, summary)132 - HTTPException with proper status codes1331342. **Celery Tasks** (High priority)135 - Use signatures for cross-service calls136 - Implement proper timeout and polling137 - Handle task failures gracefully138 - Store group metadata for parallel tasks1391403. **Pydantic Models** (Medium priority)141 - Use Pydantic v2 patterns (model_config, Field)142 - Proper validation with field constraints143 - Serialization with model_dump()1441454. **Performance** (Medium priority)146 - Avoid blocking calls in async functions147 - Use proper connection pooling for external services148 - Implement caching where appropriate149150See individual topic files for detailed checklists with grep patterns.151152---153> Converted and distributed by [TomeVault](https://tomevault.io/claim/llama-farm) — claim your Tome and manage your conversions.154<!-- tomevault:4.0:skill_md:2026-04-11 -->