Skip to main content

Projects

A project is a named group of Agent Observability data. Use one project for each application, or one for each test setup, so that the data of one stays apart from the others.

What a project holds​

DataHow it belongs to a project
DatasetsCreated in the project
ExperimentsCreated in the project
TracesThe trace carries the project name in the oodle.project attribute
Experiment rows and their scoresThrough their experiment

These items are shared by all projects of the instance: prompts, evaluators and their templates, LLM connections, and webhooks. To make an evaluator score only one project, see Evaluators and projects.

The default project​

Each instance has a built-in project with the name default:

  • A trace without an oodle.project attribute belongs to the default project. Traffic that you sent before you used projects is in it.
  • An API call that does not name a project uses the default project.
  • You cannot rename or delete the default project, and you cannot create another project with the name default.

Create a project​

Send POST projects to the Oodle API. Create is idempotent by name: when a project with that name exists, Oodle returns it (status 200) and does not make a second one. A new project returns status 201.

curl -X POST \
"https://<API_DOMAIN>/v1/api/instance/<OODLE_INSTANCE>/langfuse/api/public/projects" \
-H "X-API-KEY: $OODLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "support-agent-evals", "description": "CI evals of the support agent"}'

The reply holds the project id. Pass it as the projectId query parameter to the dataset and experiment routes. On the URL path, use default for the default project.

Method and pathPurpose
GET projectsList the projects. The default project is first, with isDefault: true
POST projectsCreate a project. Body: name, optional description
GET projects/{projectId}Get one project
PATCH projects/{projectId}Change the description
DELETE projects/{projectId}Delete the project and its data

The paths are under /v1/api/instance/<OODLE_INSTANCE>/langfuse/api/public/.

A project name does not change after you create it, because traces carry the name.

The Braintrust SDK also creates projects. For example, braintrust.init(project="support-agent-evals") makes the project when it does not exist. See Migrate from Braintrust.

Send traces to a project​

A trace belongs to a project when its spans carry the project name in the oodle.project resource or span attribute. Set it in one of these ways.

Set the attribute on the OpenTelemetry resource. This works for all SDKs and for an OpenTelemetry Collector, because the attribute is part of the data:

export OTEL_RESOURCE_ATTRIBUTES="oodle.project=support-agent-evals"

Or in code (Python):

from opentelemetry.sdk.resources import Resource

resource = Resource.create({
"service.name": "support-agent",
"oodle.project": "support-agent-evals",
})

The Langfuse SDK sends its spans through the OpenTelemetry tracer provider of your application, so the two ways above also apply to it. See the Langfuse integration.

A span or resource that already sets oodle.project keeps its value. The header does not replace it.

Experiment traces​

The traces of an experiment row also carry the experiment id in oodle.experiment.id. Set it with the X-Oodle-Experiment-Id header, or as a resource attribute. The Braintrust SDK and the Experiments API set both attributes for you.

Projects in the Agent Observability views​

The project switcher at the top of the Datasets and Experiments pages selects the project that they show. The default project is selected first. The selection is in the page URL as project=<project name>, so a link that you share opens the same project, for example /genai/experiments?project=support-agent-evals.

The traces, sessions and Agent Graph pages show the default project only, so the traces of experiments in other projects stay out of them. Open an experiment row to see its trace.

The Projects page (/genai/projects) lists the projects. An Editor or an Admin can create a project there, change its description and delete it.

The Experiments page (/genai/experiments) lists the experiments of the selected project with the average of each score and a score trend. Open an experiment to see its summary against its base experiment and its rows, each with a link to its trace. Select two to five experiments and click Compare to see the rows side by side.

Evaluators and projects​

Evaluators are shared by all projects. A live evaluator scores the spans that its filters match, so it scores traces of every project unless a filter limits it.

To score one project only, add a filter on the resource::oodle.project label to the evaluator, with the project name as the value. To keep an evaluator on the default project only, filter on the value default or on an empty value.

In an experiment, the evaluators that you select score the rows of that experiment, whatever their filters.

Delete a project​

curl -X DELETE \
"https://<API_DOMAIN>/v1/api/instance/<OODLE_INSTANCE>/langfuse/api/public/projects/<PROJECT_ID>" \
-H "X-API-KEY: $OODLE_API_KEY"

Deleting a project also deletes its datasets, experiments, experiment rows and the scores of those rows. You cannot undo a delete. The traces of the project stay in the trace store until their retention ends.


Support

If you need assistance or have any questions, please reach out to us through: