Skip to main content

FastAPI-style framework for building type-safe Cognite Functions with automatic OpenAPI schema generation and MCP integration

Project description

Cognite Typed Functions

Enterprise-grade framework for building type-safe, composable Cognite Functions with automatic validation, built-in introspection, and AI integration.

Why Cognite Typed Functions?

Standard Cognite Functions require a simple handle(client, data) function, which becomes unwieldy for complex APIs. This framework provides composable architecture, automatic validation, and built-in introspection.

Standard Cognite Function:

def handle(client, data):
    try:
        asset_no = int(data["assetNo"])  # Manual validation
        include_tax = data.get("includeTax", "false").lower() == "true"  # Manual parsing
        # Handle routing manually based on data
        if data.get("action") == "get_item":
            # Implementation here
        elif data.get("action") == "create_item":
            # Different implementation
    except Exception as e:
        return {"error": str(e)}  # Basic error handling

With Typed Functions:

@app.get("/items/{item_id}")
def get_item(client: CogniteClient, item_id: int, include_tax: bool = False) -> ItemResponse:
    """Retrieve an item by ID"""
    # Type validation and coercion handled automatically
    # Clear function signature with proper types
    # Automatic error handling and response formatting

Key Features

Installation

Requirements:

  • Python 3.10 or higher
  • uv (recommended) or pip
# Install the package
pip install cognite-typed-functions

# Optional: Install with CLI support for dev server
pip install cognite-typed-functions[cli]

# Optional: Install with tracing support
pip install cognite-typed-functions[tracing]

Quick Start

from cognite.client import CogniteClient
from pydantic import BaseModel
from cognite_typed_functions import FunctionApp, create_function_service

# Create your app
app = FunctionApp(title="My API", version="1.0.0")

# Define your models
class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None

class ItemResponse(BaseModel):
    id: int
    item: Item
    total_price: float

# Define your endpoints
@app.get("/items/{item_id}")
def get_item(
    client: CogniteClient,
    item_id: int,
    include_tax: bool = False
) -> ItemResponse:
    """Retrieve an item by ID"""
    item = Item(
        name=f"Item {item_id}",
        price=100.0,
        tax=10.0 if include_tax else None
    )
    total = item.price + (item.tax or 0)
    return ItemResponse(id=item_id, item=item, total_price=total)

@app.post("/items/")
def create_item(client: CogniteClient, item: Item) -> ItemResponse:
    """Create a new item"""
    new_id = 12345  # Your creation logic here
    total = item.price + (item.tax or 0)
    return ItemResponse(id=new_id, item=item, total_price=total)

# Export the handler for Cognite Functions
handle = create_function_service(app)

Test Locally

Install with CLI support and run the development server:

pip install cognite-typed-functions[cli]
ctf serve examples/

Visit http://localhost:8000/docs for interactive API documentation.

See the Local Development Server guide for detailed setup instructions.

Documentation

Note: Documentation is currently served locally only. We're working on deploying to GitHub Pages for easier access. Until then, you can browse the documentation files directly in this repository or build them locally with mkdocs serve.

Browse the documentation:

Getting Started

Core Features

Development Tools

Advanced Topics

Reference

For the best experience, build and serve the docs locally with mkdocs serve to get the full MkDocs experience with navigation, search, and auto-generated API docs.

Examples

The framework includes a complete example in examples/handler.py demonstrating:

  • Type-safe routing with decorator syntax
  • MCP integration for AI tool exposure
  • Built-in introspection endpoints
  • Async handler support
  • Composable app architecture

Contributing

We welcome contributions! Please see our Contributing Guide for:

  • Development setup
  • Code style guidelines
  • Testing guidelines
  • Documentation guidelines
  • Pull request process

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Acknowledgments

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cognite_typed_functions-0.3.2.post12.dev0.tar.gz (294.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file cognite_typed_functions-0.3.2.post12.dev0.tar.gz.

File metadata

File hashes

Hashes for cognite_typed_functions-0.3.2.post12.dev0.tar.gz
Algorithm Hash digest
SHA256 d9abcbc321ef4dd0d8b1d11df29c9c4b79ad892627f80641f552d00d3a5ce1ef
MD5 ddd22d1a8b1b13dd8967dcd570754b53
BLAKE2b-256 0c9312ae869b45accf220dd3b5c7ec93bfe368a6a6d0472cb014b449942bf2d5

See more details on using hashes here.

File details

Details for the file cognite_typed_functions-0.3.2.post12.dev0-py3-none-any.whl.

File metadata

File hashes

Hashes for cognite_typed_functions-0.3.2.post12.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 9e7940d51b74fbee41b443d1254758c7579d7f038f42d04a7865a1c8ec99fe1b
MD5 1f6b1e59b74b98c6cea8a1ee8af5d810
BLAKE2b-256 2b67a6d1f6d325cf8e78c11c74f9a1a3ce171ea3da71e54735df3d9a5dd23b46

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page