> ## Documentation Index
> Fetch the complete documentation index at: https://www.traceloop.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# What is OpenLLMetry?

<Frame>
  <img className="block dark:hidden" src="https://mintcdn.com/enrolla/UIxmLWs2sJDl37WW/img/trace/trace-light.png?fit=max&auto=format&n=UIxmLWs2sJDl37WW&q=85&s=2733424bcb797188846417e2516e50fe" width="3014" height="1798" data-path="img/trace/trace-light.png" />

  <img className="hidden dark:block" src="https://mintcdn.com/enrolla/UIxmLWs2sJDl37WW/img/trace/trace-dark.png?fit=max&auto=format&n=UIxmLWs2sJDl37WW&q=85&s=740795f397c532c9080a91ea521a3a7e" width="3024" height="1806" data-path="img/trace/trace-dark.png" />
</Frame>

OpenLLMetry is an open source project that allows you to easily start monitoring and debugging the execution of your LLM app.
Tracing is done in a non-intrusive way, built on top of OpenTelemetry.
You can choose to export the traces to Traceloop, or to your existing observability stack.

<Tip>
  You can use OpenLLMetry whether you use a [supported LLM framework](/openllmetry/tracing/supported#frameworks), or
  directly interact with a foundation model API.
</Tip>

<CodeGroup>
  ```python Python theme={null}
  import os

  from openai import OpenAI
  from traceloop.sdk import Traceloop
  from traceloop.sdk.decorators import workflow

  Traceloop.init(app_name="joke_generation_service")

  @workflow(name="joke_creation")
  def create_joke():
    client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
    completion = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": "Tell me a joke about opentelemetry"}],
    )

    return completion.choices[0].message.content
  ```

  ```js Typescript theme={null}
  import * as traceloop from "@traceloop/node-server-sdk";
  import OpenAI from "openai";

  traceloop.initialize({ appName: "joke_generation_service" })
  const openai = new OpenAI();

  class MyLLM {
    @traceloop.workflow("joke_creation")
    async create_joke() {
        completion = await openai.chat.completions.create({
            model: "gpt-3.5-turbo",
            messages: [{"role": "user", "content": "Tell me a joke about opentelemetry"}],
        })

        return completion.choices[0].message.content
  }
  ```
</CodeGroup>

## Getting Started

Select from the following guides to learn more about how to use OpenLLMetry:

<CardGroup>
  <Card title="Start with Python" icon="python" href="/openllmetry/getting-started-python">
    Set up Traceloop Python SDK in your project
  </Card>

  <Card title="Start with Javascript / Typescript" icon="node" href="/openllmetry/getting-started-ts">
    Set up Traceloop Javascript SDK in your project
  </Card>

  <Card title="Start with Go" icon="golang" href="/openllmetry/getting-started-go">
    Set up Traceloop Go SDK in your project
  </Card>

  <Card title="Workflows, Tasks, Agents and Tools" icon="code" href="/openllmetry/tracing/annotations">
    Learn how to annotate your code to enrich your traces
  </Card>

  <Card title="Integrations" icon="bars-staggered" href="/openllmetry/integrations/introduction">
    Learn how to connect to your existing observability stack
  </Card>

  <Card title="Privacy" icon="shield" href="/openllmetry/privacy/traces">
    How we secure your data
  </Card>
</CardGroup>
