## 1. Project Overview & Quickstart (comet-ml/opik)

<h1 align="center" style="border-bottom: none">
    
        <a href="https://www.comet.com/site/products/opik/?from=llm&utm_source=opik&utm_medium=github&utm_content=header_img&utm_campaign=opik">
            
            
            
        </a>
        
        Opik: Open-Source LLM Observability, Evaluation & AI Agent Tracing
    
</h1>












[](https://www.comet.com/signup?from=llm&utm_source=opik&utm_medium=github&utm_content=readme_banner&utm_campaign=opik)

<a id="-what-is-opik"></a>
## 🚀 What is Opik?

Opik covers the full LLM application lifecycle, from the first trace in development to production monitoring, for teams building LLM apps and AI agents. Key offerings include:

- **AI Agent Tracing & Observability**: Deep tracing of LLM calls, conversation logging, and agent activity, with full trace trees for multi-step agents and tool calls.
- **LLM Evaluation**: Datasets, experiments, and LLM-as-a-judge metrics for hallucination detection, moderation, and RAG assessment.
- **Prompt & Agent Optimization**: The Opik Agent Optimizer SDK to improve prompts and agents.
- **Production-Ready Monitoring**: Scalable dashboards and online evaluation rules.
- **Opik Guardrails**: Features to help you implement safe and responsible AI practices.
- **CI/CD Evaluation**: A PyTest integration to test LLM pipelines on every commit.



Key capabilities include:

- **Development & Tracing:**
  - Track all LLM calls and traces with detailed context during development and in production ([Quickstart](https://www.comet.com/docs/opik/quickstart/?from=llm&utm_source=opik&utm_medium=github&utm_content=quickstart_link&utm_campaign=opik)).
  - Extensive 3rd-party integrations for easy observability: Seamlessly integrate with a growing list of frameworks, supporting many of the largest and most popular ones natively (including recent additions like **Google ADK**, **Autogen**, and **Flowise AI**). ([Integrations](https://www.comet.com/docs/opik/integrations/overview/?from=llm&utm_source=opik&utm_medium=github&utm_content=integrations_link&utm_campaign=opik))
  - Annotate traces and spans with feedback scores via the [Python SDK](https://www.comet.com/docs/opik/v1/tracing/annotate_traces/#annotating-traces-and-spans-using-the-sdk?from=llm&utm_source=opik&utm_medium=github&utm_content=sdk_link&utm_campaign=opik) or the [UI](https://www.comet.com/docs/opik/tracing/annotate_traces/#annotating-traces-through-the-ui?from=llm&utm_source=opik&utm_medium=github&utm_content=ui_link&utm_campaign=opik).
  - Experiment with prompts and models in the [Prompt Playground](https://www.comet.com/docs/opik/prompt_engineering/playground).

- **Evaluation & Testing**:
  - Automate your LLM application evaluation with [Datasets](https://www.comet.com/docs/opik/v1/evaluation/manage_datasets/?from=llm&utm_source=opik&utm_medium=github&utm_content=datasets_link&utm_campaign=opik) and [Experiments](https://www.comet.com/docs/opik/v1/evaluation/evaluate_your_llm/?from=llm&utm_source=opik&utm_medium=github&utm_content=eval_link&utm_campaign=opik).
  - Leverage powerful LLM-as-a-judge metrics for complex tasks like [hallucination detection](https://www.comet.com/docs/opik/evaluation/metrics/hallucination/?from=llm&utm_source=opik&utm_medium=github&utm_content=hallucination_link&utm_campaign=opik), [moderation](https://www.comet.com/docs/opik/evaluation/metrics/moderation/?from=llm&utm_source=opik&utm_medium=github&utm_content=moderation_link&utm_campaign=opik), and RAG assessment ([Answer Relevance](https://www.comet.com/docs/opik/evaluation/metrics/answer_relevance/?from=llm&utm_source=opik&utm_medium=github&utm_content=alex_link&utm_campaign=opik), [Context Precision](https://www.comet.com/docs/opik/evaluation/metrics/context_precision/?from=llm&utm_source=opik&utm_medium=github&utm_content=context_link&utm_campaign=opik)).
  - Integrate evaluations into your CI/CD pipeline with our [PyTest integration](https://www.comet.com/docs/opik/v1/testing/pytest_integration/?from=llm&utm_source=opik&utm_medium=github&utm_content=pytest_link&utm_campaign=opik).

- **Production Monitoring & Optimization**:
  - Log high volumes of production traces: Opik is designed for scale (40M+ traces/day).
  - Monitor feedback scores, trace counts, and token usage over time in the [Opik Dashboard](https://www.comet.com/docs/opik/v1/production/production_monitoring/?from=llm&utm_source=opik&utm_medium=github&utm_content=dashboard_link&utm_campaign=opik).
  - Utilize [Online Evaluation Rules](https://www.comet.com/docs/opik/v1/production/rules/?from=llm&utm_source=opik&utm_medium=github&utm_content=dashboard_link&utm_campaign=opik) with LLM-as-a-Judge metrics to identify production issues.
  - Leverage **Opik Agent Optimizer** and **Opik Guardrails** to continuously improve and secure your LLM applications in production.

**Who it's for:** ML engineers building LLM-powered agents, AI teams moving from prototype to production, and engineering teams that need open-source, self-hostable observability they can run in their own environment.

> **Why open source matters here:** Opik is Apache-2.0 licensed and free to self-host: the full platform, backend included, not just a client SDK. The repository includes the server backend, web application, tracing, datasets, experiments, evaluations, prompt management, online evaluation, and agent optimization components, all under Apache-2.0. You can run LLM observability inside your own infrastructure with no data leaving your environment and no Enterprise sales conversation required.

> [!TIP]
> If you are looking for features that Opik doesn't have today, please raise a new [Feature request](https://github.com/comet-ml/opik/issues/new/choose) 🚀



<a id="-quick-start"></a>
## ⚡ Quick Start

Install the Python SDK and configure it:

```bash
pip install opik
opik configure
```

Wrap any function with the `@track` decorator to start logging traces:

```python
from opik import track

@track
def my_function(input: str) -> str:
    return input
```

Every call to `my_function` is now logged to Opik, including nested calls, so this works for full agent and pipeline traces, not just single LLM calls. See the [Quickstart guide](https://www.comet.com/docs/opik/quickstart?from=llm&utm_source=opik&utm_medium=github&utm_content=quickstart_hero_link&utm_campaign=opik) for the TypeScript SDK and other setup options.



<a id="-how-opik-compares"></a>
## 📊 How Does Opik Compare?

Opik competes in the **LLM observability / AI agent evaluation** category alongside **LangSmith, Arize (Phoenix and Arize AX), Weights & Biases (Weave), Langfuse, and Braintrust**.

| Capability | Opik | LangSmith | Phoenix | Arize AX | Weights & Biases (Weave) | Langfuse | Braintrust |
|---|---|---|---|---|---|---|---|
| Open source | Yes, Apache-2.0 (full platform) | No | Source-available (Elastic License 2.0, not OSI-approved) | No | Open-source SDK/toolkit; self-managed platform requires a commercial license | MIT-licensed core platform; commercial enterprise modules | No |
| Self-hosted deployment | Yes | Enterprise only | Yes | Enterprise only | Enterprise only for Weave itself | Yes, core | Enterprise only |
| Free tier available (cloud or self-hosted) | Yes, both | Yes, cloud | Yes, self-hosted | Yes, cloud | Yes, cloud | Yes, both | Yes, cloud |
| Agent / multi-step tracing | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| LLM-as-a-judge evaluation | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Prompt management | Yes | Yes | Partly | Partly | Partly | Yes | Yes |
| Framework-agnostic | Yes | Partly, built around LangChain | Yes | Yes | Yes | Yes | Yes |

**When teams choose Opik:** Opik's full observability, evaluation, and optimization platform is Apache-2.0 licensed and free to self-host. Unlike closed platforms whose self-hosted deployment requires an Enterprise plan, Opik can be deployed without a commercial license, and it's framework-agnostic so it won't lock you into a single agent ecosystem. See the table above for where self-hosting and licensing differ across alternatives.



<a id="-frequently-asked-questions"></a>
## ❓ Frequently Asked Questions

#### Is Opik open source?
Opik is licensed under Apache 2.0. Its server, web application, and core observability and evaluation capabilities can be self-hosted without a commercial license.

#### Can I self-host Opik?
Yes. Opik can be deployed locally or in your own infrastructure using the documented self-hosting options.

#### Does Opik support AI agent tracing?
Yes. Opik captures multi-step traces containing LLM calls, tool executions, retrieval steps, and other agent activity.

#### Does Opik support LLM evaluation?
Yes. Opik supports datasets, experiments, code-based metrics, LLM-as-a-judge evaluation, and online evaluation.

#### Is Opik tied to a specific agent framework?
No. Opik is framework-agnostic and supports its SDK, OpenTelemetry, and framework-specific integrations.



<a id="%EF%B8%8F-opik-server-installation"></a>
## 🛠️ Opik Server Installation

Get your Opik server running in minutes. Choose the option that best suits your needs:

### Option 1: Comet.com Cloud (Easiest & Recommended)

Access Opik instantly without any setup. Ideal for quick starts and hassle-free maintenance.

👉 [Create your free Comet account](https://www.comet.com/signup?from=llm&utm_source=opik&utm_medium=github&utm_content=install_create_link&utm_campaign=opik)

### Option 2: Self-Host Opik for Full Control

Deploy Opik in your own environment. Choose between Docker for local setups or Kubernetes for scalability.

#### Self-Hosting with Docker Compose (for Local Development & Testing)

This is the simplest way to get a local Opik instance running. Note the new `./opik.sh` installation script:

On Linux or Mac Environment:

```bash
# Clone the Opik repository
git clone https://github.com/comet-ml/opik.git

# Navigate to the repository
cd opik

# Start the Opik platform
./opik.sh
```

On Windows Environment:

```powershell
# Clone the Opik repository
git clone https://github.com/comet-ml/opik.git

# Navigate to the repository
cd opik

# Start the Opik platform
powershell -ExecutionPolicy ByPass -c ".\\opik.ps1"
```

**Installation Script Options**

The `opik.sh` and `opik.ps1` scripts support the following options:

```bash
# Start full Opik suite (default behavior)
./opik.sh

# Start only infrastructure services (databases, caches etc.)
./opik.sh --infra

# Start infrastructure + backend services
./opik.sh --backend

# Enable guardrails with any profile
./opik.sh --guardrails # Guardrails with full Opik suite
./opik.sh --backend --guardrails # Guardrails with infrastructure + backend

# Build the containers from source before starting
./opik.sh --build

# Check that all containers are healthy
./opik.sh --verify

# Stop all containers
./opik.sh --stop

# Stop all containers and remove all Opik data volumes
# WARNING: ALL OPIK DATA WILL BE LOST
./opik.sh --clean

# Show all available options
./opik.sh --help
```

Use the `--help` or `--info` options to troubleshoot issues. Dockerfiles now ensure containers run as non-root users for enhanced security. Once all is up and running, you can now visit [localhost:5173](http://localhost:5173) on your browser! For detailed instructions, see the [Local Deployment Guide](https://www.comet.com/docs/opik/self-host/local_deployment?from=llm&utm_source=opik&utm_medium=github&utm_content=self_host_link&utm_campaign=opik).

#### Self-Hosting with Kubernetes & Helm (for Scalable Deployments)

For production or larger-scale self-hosted deployments, Opik can be installed on a Kubernetes cluster using our Helm chart. Click the badge for the full [Kubernetes Installation Guide using Helm](https://www.comet.com/docs/opik/self-host/kubernetes/#kubernetes-installation?from=llm&utm_source=opik&utm_medium=github&utm_content=kubernetes_link&utm_campaign=opik).

[](https://www.comet.com/docs/opik/self-host/kubernetes/#kubernetes-installation?from=llm&utm_source=opik&utm_medium=github&utm_content=kubernetes_link&utm_campaign=opik)

<a id="-opik-client-sdk"></a>
## 💻 Opik Client SDK

Opik provides a suite of client libraries and a REST API to interact with the Opik server. This includes SDKs for Python and TypeScript, plus first-party [OpenTelemetry](https://www.comet.com/docs/opik/tracing/opentelemetry/overview?from=llm&utm_source=opik&utm_medium=github&utm_content=otel_link&utm_campaign=opik) support: any language with an OpenTelemetry SDK — including [Java](https://www.comet.com/docs/opik/integrations/spring-ai?from=llm&utm_source=opik&utm_medium=github&utm_content=java_link&utm_campaign=opik), [Ruby](https://www.comet.com/docs/opik/integrations/opentelemetry-ruby-sdk?from=llm&utm_source=opik&utm_medium=github&utm_content=ruby_link&utm_campaign=opik), and .NET — can send traces to Opik. For detailed API and SDK references, see the [Opik Client Reference Documentation](https://www.comet.com/docs/opik/reference/overview?from=llm&utm_source=opik&utm_medium=github&utm_content=reference_link&utm_campaign=opik).

### Python SDK Quick Start

To get started with the Python SDK:

Install the package:

```bash
# install using pip
pip install opik

# or install with uv
uv pip install opik
```

Configure the python SDK by running the `opik configure` command, which will prompt you for your Opik server address (for self-hosted instances) or your API key and workspace (for Comet.com):

```bash
opik configure
```

> [!TIP]
> You can also call `opik.configure(use_local=True)` from your Python code to configure the SDK to run on a local self-hosted installation, or provide API key and workspace details directly for Comet.com. Refer to the [Python SDK documentation](https://www.comet.com/docs/opik/python-sdk-reference/?from=llm&utm_source=opik&utm_medium=github&utm_content=python_sdk_docs_link&utm_campaign=opik) for more configuration options.

You are now ready to start logging traces using the [Python SDK](https://www.comet.com/docs/opik/python-sdk-reference/?from=llm&utm_source=opik&utm_medium=github&utm_content=sdk_link2&utm_campaign=opik).

<a id="-logging-traces-with-integrations"></a>
### 📝 Logging Traces with Integrations

The easiest way to log traces is to use one of our direct integrations. Opik supports a wide array of frameworks, including recent additions like **Google ADK**, **Autogen**, **AG2**, and **Flowise AI**:

| Integration           | Description                                             | Documentation                                                                                                                                                                  |
| --------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ADK                   | Log traces for Google Agent Development Kit (ADK)       | [Documentation](https://www.comet.com/docs/opik/integrations/adk?utm_source=opik&utm_medium=github&utm_content=google_adk_link&utm_campaign=opik)                              |
| AG2                   | Log traces for AG2 LLM calls                            | [Documentation](https://www.comet.com/docs/opik/integrations/ag2?utm_source=opik&utm_medium=github&utm_content=ag2_link&utm_campaign=opik)                                     |
| Agent Spec            | Log traces for Agent Spec calls                         | [Documentation](https://www.comet.com/docs/opik/integrations/agentspec?utm_source=opik&utm_medium=github&utm_content=agentspec_link&utm_campaign=opik)                         |
| AIsuite               | Log traces for aisuite LLM calls                        | [Documentation](https://www.comet.com/docs/opik/integrations/aisuite?utm_source=opik&utm_medium=github&utm_content=aisuite_link&utm_campaign=opik)                             |
| Agno                  | Log traces for Agno agent orchestration framework calls | [Documentation](https://www.comet.com/docs/opik/integrations/agno?utm_source=opik&utm_medium=github&utm_content=agno_link&utm_campaign=opik)                                   |
| Anthropic             | Log traces for Anthropic LLM calls                      | [Documentation](https://www.comet.com/docs/opik/integrations/anthropic?utm_source=opik&utm_medium=github&utm_content=anthropic_link&utm_campaign=opik)                         |
| Autogen               | Log traces for Autogen agentic workflows                | [Documentation](https://www.comet.com/docs/opik/integrations/autogen?utm_source=opik&utm_medium=github&utm_content=autogen_link&utm_campaign=opik)                             |
| Bedrock               | Log traces for Amazon Bedrock LLM calls                 | [Documentation](https://www.comet.com/docs/opik/integrations/bedrock?utm_source=opik&utm_medium=github&utm_content=bedrock_link&utm_campaign=opik)                             |
| BeeAI (Python)        | Log traces for BeeAI Python agent framework calls       | [Documentation](https://www.comet.com/docs/opik/integrations/beeai?utm_source=opik&utm_medium=github&utm_content=beeai_link&utm_campaign=opik)                                 |
| BeeAI (TypeScript)    | Log traces for BeeAI TypeScript agent framework calls   | [Documentation](https://www.comet.com/docs/opik/integrations/beeai-typescript?utm_source=opik&utm_medium=github&utm_content=beeai_typescript_link&utm_campaign=opik)           |
| BytePlus              | Log traces for BytePlus LLM calls                       | [Documentation](https://www.comet.com/docs/opik/integrations/byteplus?utm_source=opik&utm_medium=github&utm_content=byteplus_link&utm_campaign=opik)                           |
| Claude Code           | Log traces for Claude Code sessions via the Opik plugin | [GitHub](https://github.com/comet-ml/opik-claude-code-plugin)                                                                                                                 |
| Cloudflare Workers AI | Log traces for Cloudflare Workers AI calls              | [Documentation](https://www.comet.com/docs/opik/integrations/cloudflare-workers-ai?utm_source=opik&utm_medium=github&utm_content=cloudflare_workers_ai_link&utm_campaign=opik) |
| Cohere                | Log traces for Cohere LLM calls                         | [Documentation](https://www.comet.com/docs/opik/integrations/cohere?utm_source=opik&utm_medium=github&utm_content=cohere_link&utm_campaign=opik)                               |
| CrewAI                | Log traces for CrewAI calls                             | [Documentation](https://www.comet.com/docs/opik/integrations/crewai?utm_source=opik&utm_medium=github&utm_content=crewai_link&utm_campaign=opik)                               |
| Cursor                | Log traces for Cursor conversations                     | [Documentation](https://www.comet.com/docs/opik/integrations/cursor?utm_source=opik&utm_medium=github&utm_content=cursor_link&utm_campaign=opik)                               |
| DeepSeek              | Log traces for DeepSeek LLM calls                       | [Documentation](https://www.comet.com/docs/opik/integrations/deepseek?utm_source=opik&utm_medium=github&utm_content=deepseek_link&utm_campaign=opik)                           |
| Dify                  | Log traces for Dify agent runs                          | [Documentation](https://www.comet.com/docs/opik/integrations/dify?utm_source=opik&utm_medium=github&utm_content=dify_link&utm_campaign=opik)                                   |
| DSPY                  | Log traces for DSPy runs                                | [Documentation](https://www.comet.com/docs/opik/integrations/dspy?utm_source=opik&utm_medium=github&utm_content=dspy_link&utm_campaign=opik)                                   |
| Fireworks AI          | Log traces for Fireworks AI LLM calls                   | [Documentation](https://www.comet.com/docs/opik/integrations/fireworks-ai?utm_source=opik&utm_medium=github&utm_content=fireworks_ai_link&utm_campaign=opik)                   |
| Flowise AI            | Log traces for Flowise AI visual LLM builder            | [Documentation](https://www.comet.com/docs/opik/integrations/flowise?utm_source=opik&utm_medium=github&utm_content=flowise_link&utm_campaign=opik)                             |
| Gemini (Python)       | Log traces for Google Gemini LLM calls                  | [Documentation](https://www.comet.com/docs/opik/integrations/gemini?utm_source=opik&utm_medium=github&utm_content=gemini_link&utm_campaign=opik)                               |
| Gemini (TypeScript)   | Log traces for Google Gemini TypeScript SDK calls       | [Documentation](https://www.comet.com/docs/opik/integrations/gemini-typescript?utm_source=opik&utm_medium=github&utm_content=gemini_typescript_link&utm_campaign=opik)         |
| Groq                  | Log traces for Groq LLM calls                           | [Documentation](https://www.comet.com/docs/opik/integrations/groq?utm_source=opik&utm_medium=github&utm_content=groq_link&utm_campaign=opik)                                   |
| Guardrails            | Log traces for Guardrails AI validations                | [Documentation](https://www.comet.com/docs/opik/integrations/guardrails-ai?utm_source=opik&utm_medium=github&utm_content=guardrails_link&utm_campaign=opik)                    |
| Haystack              | Log traces for Haystack calls                           | [Documentation](https://www.comet.com/docs/opik/integrations/haystack?utm_source=opik&utm_medium=github&utm_content=haystack_link&utm_campaign=opik)                           |
| Harbor                | Log traces for Harbor benchmark evaluation trials       | [Documentation](https://www.comet.com/docs/opik/integrations/harbor?utm_source=opik&utm_medium=github&utm_content=harbor_link&utm_campaign=opik)                               |
| Instructor            | Log traces for LLM calls made with Instructor           | [Documentation](https://www.comet.com/docs/opik/integrations/instructor?utm_source=opik&utm_medium=github&utm_content=instructor_link&utm_campaign=opik)                       |
| LangChain (Python)    | Log traces for LangChain LLM calls                      | [Documentation](https://www.comet.com/docs/opik/integrations/langchain?utm_source=opik&utm_medium=github&utm_content=langchain_link&utm_campaign=opik)                         |
| LangChain (JS/TS)     | Log traces for LangChain JavaScript/TypeScript calls    | [Documentation](https://www.comet.com/docs/opik/integrations/langchainjs?utm_source=opik&utm_medium=github&utm_content=langchainjs_link&utm_campaign=opik)                     |
| LangGraph             | Log traces for LangGraph executions                     | [Documentation](https://www.comet.com/docs/opik/integrations/langgraph?utm_source=opik&utm_medium=github&utm_content=langgraph_link&utm_campaign=opik)                         |
| Langflow              | Log traces for Langflow visual AI builder               | [Documentation](https://www.comet.com/docs/opik/integrations/langflow?utm_source=opik&utm_medium=github&utm_content=langflow_link&utm_campaign=opik)                           |
| LiteLLM               | Log traces for LiteLLM model calls                      | [Documentation](https://www.comet.com/docs/opik/integrations/litellm?utm_source=opik&utm_medium=github&utm_content=litellm_link&utm_campaign=opik)                             |
| LiveKit Agents        | Log traces for LiveKit Agents AI agent framework calls  | [Documentation](https://www.comet.com/docs/opik/integrations/livekit?utm_source=opik&utm_medium=github&utm_content=livekit_link&utm_campaign=opik)                             |
| LlamaIndex            | Log traces for LlamaIndex LLM calls                     | [Documentation](https://www.comet.com/docs/opik/integrations/llama_index?utm_source=opik&utm_medium=github&utm_content=llama_index_link&utm_campaign=opik)                     |
| Mastra                | Log traces for Mastra AI workflow framework calls       | [Documentation](https://www.comet.com/docs/opik/integrations/mastra?utm_source=opik&utm_medium=github&utm_content=mastra_link&utm_campaign=opik)                               |
| MCP Server (opik-mcp) | Drive Opik from Claude Code, Cursor, or VS Code via Model Context Protocol | [Documentation](https://www.comet.com/docs/opik/integrations/mcp-server?utm_source=opik&utm_medium=github&utm_content=mcp_server_link&utm_campaign=opik) |
| Microsoft Agent Framework (Python) | Log traces for Microsoft Agent Framework calls | [Documentation](https://www.comet.com/docs/opik/integrations/microsoft-agent-framework?utm_source=opik&utm_medium=github&utm_content=agent_framework_link&utm_campaign=opik)              |
| Microsoft Agent Framework (.NET) | Log traces for Microsoft Agent Framework .NET calls | [Documentation](https://www.comet.com/docs/opik/integrations/microsoft-agent-framework-dotnet?utm_source=opik&utm_medium=github&utm_content=agent_framework_dotnet_link&utm_campaign=opik) |
| Mistral AI            | Log traces for Mistral AI LLM calls                     | [Documentation](https://www.comet.com/docs/opik/integrations/mistral?utm_source=opik&utm_medium=github&utm_content=mistral_link&utm_campaign=opik)                             |
| n8n                   | Log traces for n8n workflow executions                  | [Documentation](https://www.comet.com/docs/opik/integrations/n8n?utm_source=opik&utm_medium=github&utm_content=n8n_link&utm_campaign=opik)                                     |
| Novita AI             | Log traces for Novita AI LLM calls                      | [Documentation](https://www.comet.com/docs/opik/integrations/novita-ai?utm_source=opik&utm_medium=github&utm_content=novita_ai_link&utm_campaign=opik)                         |
| Ollama                | Log traces for Ollama LLM calls                         | [Documentation](https://www.comet.com/docs/opik/integrations/ollama?utm_source=opik&utm_medium=github&utm_content=ollama_link&utm_campaign=opik)                               |
| OpenAI (Python)       | Log traces for OpenAI LLM calls                         | [Documentation](https://www.comet.com/docs/opik/integrations/openai?utm_source=opik&utm_medium=github&utm_content=openai_link&utm_campaign=opik)                               |
| OpenAI (JS/TS)        | Log traces for OpenAI JavaScript/TypeScript calls       | [Documentation](https://www.comet.com/docs/opik/integrations/openai-typescript?utm_source=opik&utm_medium=github&utm_content=openai_typescript_link&utm_campaign=opik)         |
| OpenAI Agents         | Log traces for OpenAI Agents SDK calls                  | [Documentation](https://www.comet.com/docs/opik/integrations/openai_agents?utm_source=opik&utm_medium=github&utm_content=openai_agents_link&utm_campaign=opik)                 |
| OpenClaw              | Log traces for OpenClaw agent runs                  | [Documentation](https://www.comet.com/docs/opik/integrations/openclaw?utm_source=opik&utm_medium=github&utm_content=openclaw_link&utm_campaign=opik) |
| OpenRouter            | Log traces for OpenRouter LLM calls                     | [Documentation](https://www.comet.com/docs/opik/integrations/openrouter?utm_source=opik&utm_medium=github&utm_content=openrouter_link&utm_campaign=opik)                       |
| OpenTelemetry         | Log traces for OpenTelemetry supported calls            | [Documentation](https://www.comet.com/docs/opik/tracing/opentelemetry/overview?utm_source=opik&utm_medium=github&utm_content=opentelemetry_link&utm_campaign=opik)             |
| OpenWebUI             | Log traces for OpenWebUI conversations                  | [Documentation](https://www.comet.com/docs/opik/integrations/openwebui?utm_source=opik&utm_medium=github&utm_content=openwebui_link&utm_campaign=opik)                         |
| Pipecat               | Log traces for Pipecat real-time voice agent calls      | [Documentation](https://www.comet.com/docs/opik/integrations/pipecat?utm_source=opik&utm_medium=github&utm_content=pipecat_link&utm_campaign=opik)                             |
| Predibase             | Log traces for Predibase LLM calls                      | [Documentation](https://www.comet.com/docs/opik/integrations/predibase?utm_source=opik&utm_medium=github&utm_content=predibase_link&utm_campaign=opik)                         |
| Pydantic AI           | Log traces for PydanticAI agent calls                   | [Documentation](https://www.comet.com/docs/opik/integrations/pydantic-ai?utm_source=opik&utm_medium=github&utm_content=pydantic_ai_link&utm_campaign=opik)                     |
| Ragas                 | Log traces for Ragas evaluations                        | [Documentation](https://www.comet.com/docs/opik/integrations/ragas?utm_source=opik&utm_medium=github&utm_content=ragas_link&utm_campaign=opik)                                 |
| Semantic Kernel       | Log traces for Microsoft Semantic Kernel calls          | [Documentation](https://www.comet.com/docs/opik/integrations/semantic-kernel?utm_source=opik&utm_medium=github&utm_content=semantic_kernel_link&utm_campaign=opik)             |
| Smolagents            | Log traces for Smolagents agents                        | [Documentation](https://www.comet.com/docs/opik/integrations/smolagents?utm_source=opik&utm_medium=github&utm_content=smolagents_link&utm_campaign=opik)                       |
| Spring AI             | Log traces for Spring AI framework calls                | [Documentation](https://www.comet.com/docs/opik/integrations/spring-ai?utm_source=opik&utm_medium=github&utm_content=spring_ai_link&utm_campaign=opik)                         |
| Strands Agents        | Log traces for Strands agents calls                     | [Documentation](https://www.comet.com/docs/opik/integrations/strands-agents?utm_source=opik&utm_medium=github&utm_content=strands_agents_link&utm_campaign=opik)               |
| Together AI           | Log traces for Together AI LLM calls                    | [Documentation](https://www.comet.com/docs/opik/integrations/together-ai?utm_source=opik&utm_medium=github&utm_content=together_ai_link&utm_campaign=opik)                     |
| Vercel AI SDK         | Log traces for Vercel AI SDK calls                      | [Documentation](https://www.comet.com/docs/opik/integrations/vercel-ai-sdk?utm_source=opik&utm_medium=github&utm_content=vercel_ai_sdk_link&utm_campaign=opik)                 |
| VoltAgent             | Log traces for VoltAgent agent framework calls          | [Documentation](https://www.comet.com/docs/opik/integrations/voltagent?utm_source=opik&utm_medium=github&utm_content=voltagent_link&utm_campaign=opik)                         |
| WatsonX               | Log traces for IBM watsonx LLM calls                    | [Documentation](https://www.comet.com/docs/opik/integrations/watsonx?utm_source=opik&utm_medium=github&utm_content=watsonx_link&utm_campaign=opik)                             |
| xAI Grok              | Log traces for xAI Grok LLM calls                       | [Documentation](https://www.comet.com/docs/opik/integrations/xai-grok?utm_source=opik&utm_medium=github&utm_content=xai_grok_link&utm_campaign=opik)                           |

> [!TIP]
> If the framework you are using is not listed above, feel free to [open an issue](https://github.com/comet-ml/opik/issues) or submit a PR with the integration.

If you are not using any of the frameworks above, you can also use the `track` function decorator to [log traces](https://www.comet.com/docs/opik/v1/tracing/log_traces/?from=llm&utm_source=opik&utm_medium=github&utm_content=traces_link&utm_campaign=opik):

```python
import opik

opik.configure(use_local=True) # Run locally

@opik.track
def my_llm_function(user_question: str) -> str:
    # Your LLM code here

    return "Hello"
```

> [!TIP]
> The track decorator can be used in conjunction with any of our integrations and can also be used to track nested function calls.

<a id="-llm-as-a-judge-metrics"></a>
### 🧑‍⚖️ LLM as a Judge metrics

The Python Opik SDK includes a number of LLM as a judge metrics to help you evaluate your LLM application. Learn more about it in the [metrics documentation](https://www.comet.com/docs/opik/evaluation/metrics/overview/?from=llm&utm_source=opik&utm_medium=github&utm_content=metrics_2_link&utm_campaign=opik).

To use them, simply import the relevant metric and use the `score` function:

```python
from opik.evaluation.metrics import Hallucination

metric = Hallucination()
score = metric.score(
    input="What is the capital of France?",
    output="Paris",
    context=["France is a country in Europe."]
)
print(score)
```

Opik also includes a number of pre-built heuristic metrics as well as the ability to create your own. Learn more about it in the [metrics documentation](https://www.comet.com/docs/opik/evaluation/metrics/overview?from=llm&utm_source=opik&utm_medium=github&utm_content=metrics_3_link&utm_campaign=opik).

<a id="-evaluating-your-llm-application"></a>
### 🔍 Evaluating your LLM Applications

Opik allows you to evaluate your LLM application during development through [Datasets](https://www.comet.com/docs/opik/v1/evaluation/manage_datasets/?from=llm&utm_source=opik&utm_medium=github&utm_content=datasets_2_link&utm_campaign=opik) and [Experiments](https://www.comet.com/docs/opik/v1/evaluation/evaluate_your_llm/?from=llm&utm_source=opik&utm_medium=github&utm_content=experiments_link&utm_campaign=opik). The Opik Dashboard offers enhanced charts for experiments and better handling of large traces. You can also run evaluations as part of your CI/CD pipeline using our [PyTest integration](https://www.comet.com/docs/opik/v1/testing/pytest_integration/?from=llm&utm_source=opik&utm_medium=github&utm_content=pytest_2_link&utm_campaign=opik).

<a id="-star-us-on-github"></a>
## ⭐ Star Us on GitHub

If you find Opik useful, please consider giving us a star! Your support helps us grow our community and continue improving the product.

[](https://github.com/comet-ml/opik)

<a id="-contributing"></a>
## 🤝 Contributing

There are many ways to contribute to Opik:

- Submit [bug reports](https://github.com/comet-ml/opik/issues) and [feature requests](https://github.com/comet-ml/opik/issues)
- Review the documentation and submit [Pull Requests](https://github.com/comet-ml/opik/pulls) to improve it
- Speaking or writing about Opik and [letting us know](https://chat.comet.com)
- Upvoting [popular feature requests](https://github.com/comet-ml/opik/issues?q=is%3Aissue+is%3Aopen+label%3A%22enhancement%22) to show your support

To learn more about how to contribute to Opik, please see our [contributing guidelines](CONTRIBUTING.md).

## 2. Official Technical Reference & Guides (comet-ml/comet-ml.github.io)

## File: README.md

# Comet.ml Open Source Repositories

This page lists the open source repositories from [Comet.ml](https://www.comet.ml/). Please feel free to make
comments, ask questions, or make pull requests.


* [comet-ml.github.io](https://github.com/comet-ml/comet-ml.github.io/) - JavaScript libraries for creating custom visualizations using [Comet.ml Panels](https://www.comet.ml/docs/user-interface/panels/)
* [cometr](https://github.com/comet-ml/cometr/) - Comet SDK for the R programming language
* [comet-examples](https://github.com/comet-ml/comet-examples/) - Examples of Machine Learning code using Comet.ml
* [comet-recipes](https://github.com/comet-ml/comet-recipes/) - A collection of cookiecutter recipes for integrating ML frameworks with Comet in Python and R
* [comet-java-sdk](https://github.com/comet-ml/comet-java-sdk/) - Comet Java SDK
* [comet-for-mlflow](https://github.com/comet-ml/comet-for-mlflow/) - Comet-For-MLFlow Extension
* [kangas](https://github.com/comet-ml/kangas/) - open source datagrid for mixed-media table views

---

## File: docs/math.md

## Functions

<dl>
<dt>[add(a, b)](#add)</dt>
<dd>Calculates the sum of two variables.
</dd>
<dt>[abs(a)](#abs)</dt>
<dd>Calculates the absolute value of a number.
</dd>
<dt>[sum(array)](#sum)</dt>
<dd>Calculates the sum of an array.
</dd>
<dt>[sort(x)](#sort)</dt>
<dd>Sorts an array of values.
</dd>
<dt>[scientificNotation(number)](#scientificNotation)</dt>
<dd>Returns a number in exponential format.
</dd>
<dt>[round(x, n)](#round)</dt>
<dd>Rounds a number to n decimal places.
</dd>
<dt>[min(x)](#min)</dt>
<dd>Finds the minimum of an array
</dd>
<dt>[max(x)](#max)</dt>
<dd>Finds the maximum of an array
</dd>
<dt>[range(start, stop, step)](#range)</dt>
<dd>Creates an array of values in given range
</dd>
<dt>[avg(x)](#avg)</dt>
<dd>Finds the average (mean) of an array
</dd>
<dt>[transpose(matrix)](#transpose)</dt>
<dd>Computes the transpose of a matrix
</dd>
<dt>[deviation(x)](#deviation)</dt>
<dd>Finds the deviation of an array
</dd>
<dt>[variance(x, bias)](#variance)</dt>
<dd>Calculates the variance of an array
</dd>
<dt>[standardDeviation(x, bias)](#standardDeviation)</dt>
<dd>Calculates the standard deviation of an array
</dd>
<dt>[standardize(x)](#standardize)</dt>
<dd>Calculates the standardize of an array
</dd>
<dt>[rank(x)](#rank)</dt>
<dd>Calculates the rank of an array
</dd>
<dt>[pearson(x, y)](#pearson)</dt>
<dd>Calculates the Pearson correlation coefficient for two variables.
</dd>
<dt>[spearman(x, y)](#spearman)</dt>
<dd>Calculates the Spearman correlation coefficient for two variables.
</dd>
<dt>[euclideanDistance(x, y)](#euclideanDistance)</dt>
<dd>Calculates the Euclidean distance of an array
</dd>
<dt>[manhattanDistance(x, y)](#manhattanDistance)</dt>
<dd>Calculates the Manhattan (city) distance of an array
</dd>
<dt>[pairwiseDistance(x, distanceMetric)](#pairwiseDistance)</dt>
<dd>Calculates the pairwise distance of an array
</dd>
<dt>[hierarchicalClustering(pairwiseDistances, linkage)](#hierarchicalClustering)</dt>
<dd>Computes a hierarchical clustering of a matrix
</dd>
</dl>

<a name="add"></a>

## add(a, b)
Calculates the sum of two variables.

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| a | `number` | number |
| b | `number` | number |

<a name="abs"></a>

## abs(a)
Calculates the absolute value of a number.

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| a | `number` | number |

<a name="sum"></a>

## sum(array)
Calculates the sum of an array.

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| array | `number` | Array of numbers. |

<a name="sort"></a>

## sort(x)
Sorts an array of values.

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |

<a name="scientificNotation"></a>

## scientificNotation(number)
Returns a number in exponential format.

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| number | `number` | the number to format |

**Example**  
```js
> scientificNotation(0.00002)
"2.0000e-5"
```
<a name="round"></a>

## round(x, n)
Rounds a number to n decimal places.

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Number to round. |
| n | `number` | Number of decimal places. |

<a name="min"></a>

## min(x)
Finds the minimum of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |

<a name="max"></a>

## max(x)
Finds the maximum of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |

<a name="range"></a>

## range(start, stop, step)
Creates an array of values in given range

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| start | `number` | Start value. |
| stop | `number` | Stop value. |
| step | `number` | Step value. |

<a name="avg"></a>

## avg(x)
Finds the average (mean) of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |

<a name="transpose"></a>

## transpose(matrix)
Computes the transpose of a matrix

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| matrix | `Array` | the matrix to transpose |

<a name="deviation"></a>

## deviation(x)
Finds the deviation of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |

<a name="variance"></a>

## variance(x, bias)
Calculates the variance of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |
| bias | `boolean` | If true, the biased sample variance is used. |

<a name="standardDeviation"></a>

## standardDeviation(x, bias)
Calculates the standard deviation of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |
| bias | `boolean` | If true, the biased sample variance is used. |

<a name="standardize"></a>

## standardize(x)
Calculates the standardize of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |

<a name="rank"></a>

## rank(x)
Calculates the rank of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |

<a name="pearson"></a>

## pearson(x, y)
Calculates the Pearson correlation coefficient for two variables.

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |
| y | `number` | Array of numbers. |

<a name="spearman"></a>

## spearman(x, y)
Calculates the Spearman correlation coefficient for two variables.

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |
| y | `number` | Array of numbers. |

<a name="euclideanDistance"></a>

## euclideanDistance(x, y)
Calculates the Euclidean distance of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |
| y | `number` | Array of numbers. |

<a name="manhattanDistance"></a>

## manhattanDistance(x, y)
Calculates the Manhattan (city) distance of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of numbers. |
| y | `number` | Array of numbers. |

<a name="pairwiseDistance"></a>

## pairwiseDistance(x, distanceMetric)
Calculates the pairwise distance of an array

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| x | `number` | Array of array of numbers. |
| distanceMetric | `function` | Distance metric function |

<a name="hierarchicalClustering"></a>

## hierarchicalClustering(pairwiseDistances, linkage)
Computes a hierarchical clustering of a matrix

**Kind**: global function  

| Param | Type | Description |
| --- | --- | --- |
| pairwiseDistances | `number` | Pairwise distance matrix. |
| linkage | `string` | Linkage criterion. Inspired by Heather Arthur's clusterfck: https://github.com/harthur/clusterfck |

---

## File: docs/table.md

<a name="Table"></a>

## Table
**Kind**: global class  

* [Table](#Table)
    * [new Table(data, keys, headers, id, className)](#new_Table_new)
    * [.generate(headers, id, className)](#Table+generate)
    * [.appendTo(id)](#Table+appendTo)
    * [.title(text)](#Table+title) ⇒ `string`

<a name="new_Table_new"></a>

### new Table(data, keys, headers, id, className)
Creates an HTML table element from a list of dictionaries.


| Param | Type | Default | Description |
| --- | --- | --- | --- |
| data | `Array.&lt;Object&gt;` |  | list of JSON objects (can include HTML elements) |
| keys | `Array.&lt;string&gt;` |  | (optional) - array of titles to show, in order |
| headers | `Array.&lt;string&gt;` |  | (optional) - dictionary of header replacements |
| id | `string` | `&quot;data-table&quot;` | (optional) - id for HTML table element |
| className | `string` | `&quot;data-table&quot;` | (optional) - class for HTML table element |

**Example**  
```js
> table = Table([{"column_one": 1}], ["column_one"], {"column_one": "New Name"},
                "new-id", "new-class");
> table.appendTo("parent-id")
```
<a name="Table+generate"></a>

### table.generate(headers, id, className)
Generates an HTML table element and saves it in this.table

**Kind**: instance method of [`Table`](#Table)  

| Param | Type | Default | Description |
| --- | --- | --- | --- |
| headers | `Array.&lt;string&gt;` |  | dictionary of header replacements |
| id | `string` | `&quot;data-table&quot;` | id for HTML table element |
| className | `string` | `&quot;data-table&quot;` | class for HTML table element |

<a name="Table+appendTo"></a>

### table.appendTo(id)
Appends the table onto the element with id.

**Kind**: instance method of [`Table`](#Table)  

| Param | Type | Description |
| --- | --- | --- |
| id | `string` | id of parent container |

**Example**  
```js
> table = Table([{"column_one": 1}]);
> table.appendTo("parent-id")
```
<a name="Table+title"></a>

### table.title(text) ⇒ `string`
Utility funtion to give title case of headers

**Kind**: instance method of [`Table`](#Table)  

| Param | Type | Description |
| --- | --- | --- |
| text | `string` | heading of column |

**Example**  
```js
> table = Table([{"column_one": 1}]);
> table.title("column one")
"Column One"
```

---

## File: docs/utils.md

## Classes

<dl>
<dt>[Histogram](#Histogram)</dt>
<dd></dd>
</dl>

## Functions

<dl>
<dt>[makeLink(text, url)](#makeLink) ⇒ `Object`</dt>
<dd>Returns a span element with link to item.
</dd>
<dt>[copy(obj)](#copy) ⇒ `Object`</dt>
<dd>Returns a deepcopy of an object
</dd>
<dt>[identity(obj)](#identity) ⇒ `Object`</dt>
<dd>A function that returns what it is given
</dd>
<dt>[compare(field, reverse, func)](#compare) ⇒ `function`</dt>
<dd>Creates a comparison function used in sorting
</dd>
<dt>[capitalize(text)](#capitalize) ⇒ `string`</dt>
<dd>Returns a string with first letter capitalized
</dd>
<dt>[title(text)](#title) ⇒ `string`</dt>
<dd>Returns a string with first letter of every word capitalized
</dd>
<dt>[format(date, mask, utc)](#format) ⇒ `string`</dt>
<dd>Formats a Date object as a string.
Date Format 1.2.3
(c) 2007-2009 Steven Levithan &lt;stevenlevithan.com&gt;
MIT license
Includes enhancements by Scott Trenda &lt;scott.trenda.net&gt;
and Kris Kowal &lt;cixar.com/~kris.kowal/&gt;
Accepts a date, a mask, or a date and a mask.
Returns a formatted version of the given date.
The date defaults to the current date/time.
The mask defaults to dateFormat.masks.default.
</dd>
</dl>

<a name="Histogram"></a>

## Histogram
**Kind**: global class  

* [Histogram](#Histogram)
    * [new Histogram(hist)](#new_Histogram_new)
    * [.getMinMax()](#Histogram+getMinMax)
    * [.createValues(start, stop, step, offset)](#Histogram+createValues)
    * [.getBinIndex(value)](#Histogram+getBinIndex)
    * [.binarySearch(value, low, high)](#Histogram+binarySearch)
    * [.getCounts(min_value, max_value, span_value)](#Histogram+getCounts)

<a name="new_Histogram_new"></a>

### new Histogram(hist)
Create a histogram. Data is stored in exponentially
distributed buckets.


| Param | Type | Description |
| --- | --- | --- |
| hist | `JSON` | A histogram in JSON format |

<a name="Histogram+getMinMax"></a>

### histogram.getMinMax()
Get min and max values for defaults.

**Kind**: instance method of [`Histogram`](#Histogram)  
<a name="Histogram+createValues"></a>

### histogram.createValues(start, stop, step, offset)
Create the values for each bucket.

**Kind**: instance method of [`Histogram`](#Histogram)  

| Param | Type | Description |
| --- | --- | --- |
| start | `number` | the starting range |
| stop | `number` | the stoping range |
| step | `number` | the step to increment, in percent |
| offset | `number` | the offset, usually zero |

<a name="Histogram+getBinIndex"></a>

### histogram.getBinIndex(value)
Get the bucket index.

**Kind**: instance method of [`Histogram`](#Histogram)  

| Param | Type | Description |
| --- | --- | --- |
| value | `number` | get the bucket index of value |

<a name="Histogram+binarySearch"></a>

### histogram.binarySearch(value, low, high)
Find the value's bucket using binary search.

**Kind**: instance method of [`Histogram`](#Histogram)  

| Param | Type | Description |
| --- | --- | --- |
| value | `number` | the value to lookup |
| low | `number` | the lowest value |
| high | `number` | the highest value |

<a name="Histogram+getCounts"></a>

### histogram.getCounts(min_value, max_value, span_value)
Compute the counts for each span.

**Kind**: instance method of [`Histogram`](#Histogram)  

| Param | Type | Description |
| --- | --- | --- |
| min_value | `number` | the starting value |
| max_value | `number` | the stoping value |
| span_value | `number` | the step to increment, in value |

<a name="makeLink"></a>

## makeLink(text, url) ⇒ `Object`
Returns a span element with link to item.

**Kind**: global function  
**Returns**: `Object` - a span node with link as contents  

| Param | Type | Description |
| --- | --- | --- |
| text | `string` | the text for the URL |
| url | `string` | the address for the URL |

**Example**  
```js
> makeLink("The Text", "https://company.com/")
<a href="https://company.com/">The Text
```
<a name="copy"></a>

## copy(obj) ⇒ `Object`
Returns a deepcopy of an object

**Kind**: global function  
**Returns**: `Object` - a copy of the obj  

| Param | Type | Description |
| --- | --- | --- |
| obj | `Object` | an object to copy |

**Example**  
```js
> copy({"key": "value"})
{"key": "value"}
```
<a name="identity"></a>

## identity(obj) ⇒ `Object`
A function that returns what it is given

**Kind**: global function  
**Returns**: `Object` - the object or value  

| Param | Type | Description |
| --- | --- | --- |
| obj | `Object` | an object or value |

**Example**  
```js
> identity(42)
42
```
<a name="compare"></a>

## compare(field, reverse, func) ⇒ `function`
Creates a comparison function used in sorting

**Kind**: global function  
**Returns**: `function` - the sorting comparison function  

| Param | Type | Default | Description |
| --- | --- | --- | --- |
| field | `string` |  | the name of an attribute of an object |
| reverse | `Object` | `false` | if true, reverse the sort order |
| func | `function` |  | a function to apply to the field before sorting |

**Example**  
```js
> [
   {"field1": 23, ...},
   {"field1": 6, ...},
  ].sort(compare("field1"))

[{"field1": 6, ...}, {"field1": 23, ...}]
```
<a name="capitalize"></a>

## capitalize(text) ⇒ `string`
Returns a string with first letter capitalized

**Kind**: global function  
**Returns**: `string` - capitalized string  

| Param | Type | Description |
| --- | --- | --- |
| text | `string` | the text to capitalize |

**Example**  
```js
> capitalized("some text");
"Some text"
```
<a name="title"></a>

## title(text) ⇒ `string`
Returns a string with first letter of every word capitalized

**Kind**: global function  
**Returns**: `string` - capitalized word string  

| Param | Type | Description |
| --- | --- | --- |
| text | `string` | the text of words to capitalize |

**Example**  
```js
> capitalized("some text");
"Some Text"
```
<a name="format"></a>

## format(date, mask, utc) ⇒ `string`
Formats a Date object as a string.

Date Format 1.2.3
(c) 2007-2009 Steven Levithan <stevenlevithan.com>
MIT license

Includes enhancements by Scott Trenda <scott.trenda.net>
and Kris Kowal <cixar.com/~kris.kowal/>

Accepts a date, a mask, or a date and a mask.
Returns a formatted version of the given date.
The date defaults to the current date/time.
The mask defaults to dateFormat.masks.default.

**Kind**: global function  
**Returns**: `string` - the data as a string format  

| Param | Type | Description |
| --- | --- | --- |
| date | `Date` | instance |
| mask | `string` |  |
| utc | `string` |  |

**Example**  
```js
> new Date().format("HH:MM:ss")
"23:30:56"
```