Skip to content

feat: implement tool calling support for workflow API #21

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 21 commits into from
Aug 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
3663aa4
fix: correct tool calling span attributes to match Python implementation
nirga Aug 8, 2025
4d8bfcf
fix: cleanup sample app configuration and remove duplicate tool calli…
nirga Aug 9, 2025
b58867c
chore: remove duplicate tool-calling-sample directory
nirga Aug 9, 2025
1f11793
fix: address CodeRabbit review comments
nirga Aug 9, 2025
21d07fe
feat: add HTTP mocking for CI-friendly testing + CodeRabbit fixes
nirga Aug 9, 2025
c006c09
refactor: simplify testing to use VCR recording only
nirga Aug 9, 2025
b3ae33b
chore: remove unused stdouttrace dependency
nirga Aug 9, 2025
929e4e9
fix: correct malformed root go.mod that was breaking CI tests
nirga Aug 9, 2025
61aac6e
feat: Merge main branch with tool calling implementation
nirga Aug 9, 2025
cbb7441
feat: Remove legacy APIs, use only new workflow-based API
nirga Aug 9, 2025
597a48d
feat: complete tool calling implementation with prompt registry integ…
nirga Aug 9, 2025
9d4aa6e
chore: remove unnecessary test files and dependencies
nirga Aug 9, 2025
b565278
chore: remove obsolete testing documentation
nirga Aug 9, 2025
fddb6dd
fix: resolve CI build failures and cleanup legacy code
nirga Aug 9, 2025
6426159
fix: resolve CI test discovery issues with Go workspace
nirga Aug 9, 2025
d61145b
test: add simple test to debug CI test discovery
nirga Aug 9, 2025
78c610c
fix: change CI trigger from pull_request_target to pull_request
nirga Aug 9, 2025
84be527
fix: resolve CI Go version compatibility and update matrix
nirga Aug 9, 2025
0276b21
fix: update CI matrix to include Go 1.24
nirga Aug 9, 2025
00842b0
chore: final cleanup - fix Go version consistency and remove obsolete…
nirga Aug 9, 2025
7952b5a
feat: improve URL construction and remove redundant JSON serialization
nirga Aug 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: CI
on:
pull_request_target:
pull_request:
types: [opened, synchronize]
push:
branches:
Expand All @@ -11,17 +11,18 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: ["1.18", "1.19", "1.20", "1.21"]
go-version: ["1.22", "1.23", "1.24"]

steps:
- uses: actions/checkout@v4
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
Comment on lines 19 to 21
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Upgrade actions/setup-go to v5 (actionlint warning).

actionlint flags v4 as too old on current runners. Upgrade to v5.

-      - name: Setup Go ${{ matrix.go-version }}
-        uses: actions/setup-go@v4
+      - name: Setup Go ${{ matrix.go-version }}
+        uses: actions/setup-go@v5
         with:
           go-version: ${{ matrix.go-version }}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
🧰 Tools
🪛 actionlint (1.7.7)

19-19: the runner of "actions/setup-go@v4" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🤖 Prompt for AI Agents
In .github/workflows/ci.yml around lines 19 to 21, the setup-go action is using
version v4, which actionlint flags as outdated. Update the version from v4 to v5
by changing the uses line to actions/setup-go@v5 to comply with current runner
standards and remove the warning.

cache: false
- name: Install dependencies
run: find . -name go.mod -execdir go get . \;
run: GOWORK=off find . -name go.mod -execdir go get . \;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Replace go get with go mod download/verify to avoid mutating go.mod in CI.

go get . can modify go.mod/go.sum and is discouraged for installation in recent Go. Use download/verify instead.

-        run: GOWORK=off find . -name go.mod -execdir go get . \;
+        run: GOWORK=off find . -name go.mod -execdir sh -c 'go mod download && go mod verify' \;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
run: GOWORK=off find . -name go.mod -execdir go get . \;
run: GOWORK=off find . -name go.mod -execdir sh -c 'go mod download && go mod verify' \;
🤖 Prompt for AI Agents
In .github/workflows/ci.yml at line 24, replace the command using 'go get .'
with 'go mod download' or 'go mod verify' to avoid modifying go.mod or go.sum
files during CI runs. This change prevents unintended mutations of module files
by ensuring dependencies are only downloaded or verified without altering the
module definitions.

- name: Build
run: find . -name go.mod -execdir go build . \;
run: GOWORK=off find . -name go.mod -execdir go build . \;
- name: Test
run: find . -name go.mod -execdir go test ./... \;
run: GOWORK=off find . -name go.mod -execdir go test ./... \;
7 changes: 7 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module github.com/traceloop/go-openllmetry

go 1.23

replace github.com/traceloop/go-openllmetry/traceloop-sdk => ./traceloop-sdk

replace github.com/traceloop/go-openllmetry/semconv-ai => ./semconv-ai
4 changes: 2 additions & 2 deletions go.work
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
go 1.21
go 1.23

use (
sample-app
semconv-ai
traceloop-sdk
sample-app
)
24 changes: 21 additions & 3 deletions go.work.sum
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0=
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg=
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
Expand All @@ -13,36 +17,50 @@ github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEM
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g=
github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ=
github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk=
44 changes: 44 additions & 0 deletions sample-app/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Sample Apps

This directory contains sample applications demonstrating the Traceloop Go OpenLLMetry SDK.

## OpenAI SDKs

This sample app includes two different OpenAI Go SDKs for demonstration purposes:

- **Sashabaranov SDK** (`github.com/sashabaranov/go-openai`) - Used in `main.go` and workflow examples
- **Official OpenAI SDK** (`github.com/openai/openai-go`) - Used in `tool_calling.go`

## Regular Sample

Run the regular sample that demonstrates basic prompt logging:

```bash
go run .
```

## Tool Calling Sample

Run the tool calling sample that demonstrates tool calling with the OpenAI Go SDK:

```bash
go run . tool-calling
```

### Environment Variables

Set the following environment variables:

```bash
export OPENAI_API_KEY="your-openai-api-key"
export TRACELOOP_API_KEY="your-traceloop-api-key"
export TRACELOOP_BASE_URL="https://api.traceloop.com" # Optional
```

### Tool Calling Features

The tool calling sample demonstrates:
- Request tools logging with function definitions
- Response tool calls logging with execution results
- Multi-turn conversations with tool execution
- Complete traceability of tool calling interactions
58 changes: 56 additions & 2 deletions sample-app/go.mod
Original file line number Diff line number Diff line change
@@ -1,5 +1,59 @@
module github.com/traceloop/go-openllmetry/sample-app

go 1.21
go 1.23

require github.com/sashabaranov/go-openai v1.18.1
require (
github.com/joho/godotenv v1.5.1
github.com/openai/openai-go v0.1.0-alpha.35
github.com/sashabaranov/go-openai v1.18.1
github.com/traceloop/go-openllmetry/traceloop-sdk v0.0.0-00010101000000-000000000000
)

require (
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-git/go-billy/v5 v5.5.0 // indirect
github.com/go-git/go-git/v5 v5.11.0 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/jinzhu/copier v0.4.0 // indirect
github.com/kluctl/go-embed-python v0.0.0-3.11.6-20231002-1 // indirect
github.com/kluctl/go-jinja2 v0.0.0-20240108142937-8839259d2537 // indirect
github.com/rogpeppe/go-internal v1.13.1 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/tidwall/gjson v1.14.4 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.1 // indirect
github.com/tidwall/sjson v1.2.5 // indirect
github.com/traceloop/go-openllmetry/semconv-ai v0.0.0-20250405130248-6b2b4b41102b // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/otel v1.37.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.22.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0 // indirect
go.opentelemetry.io/otel/metric v1.37.0 // indirect
go.opentelemetry.io/otel/sdk v1.37.0 // indirect
go.opentelemetry.io/otel/trace v1.37.0 // indirect
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
golang.org/x/net v0.27.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.16.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 // indirect
google.golang.org/grpc v1.60.1 // indirect
google.golang.org/protobuf v1.32.0 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
)

replace github.com/traceloop/go-openllmetry/traceloop-sdk => ../traceloop-sdk

replace github.com/traceloop/go-openllmetry/semconv-ai => ../semconv-ai
Comment on lines +57 to +59
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Prefer a go.work workspace over committing replace directives.

Local replaces are fine for development, but a go.work at the repo root is cleaner for multi-module repos and avoids leaking local paths in committed go.mod files.

Check if a workspace file exists:

If adopting go.work, you can remove these replace lines and add the modules via:

  • go work init ./traceloop-sdk ./semconv-ai ./sample-app

🏁 Script executed:

#!/bin/bash
fd -a go.work

Length of output: 73


To confirm that the workspace already includes the local modules (so we can safely drop those replace lines), let’s inspect the contents of your go.work:


🏁 Script executed:

#!/bin/bash
echo "=== go.work ==="
cat go.work

Length of output: 112


Remove redundant replace directives in sample-app/go.mod

Since your go.work already includes sample-app, semconv-ai, and traceloop-sdk, you can drop the local replace lines to avoid leaking file paths into committed go.mod files.

• File: sample-app/go.mod
Lines: 57–59
Diff:

- replace github.com/traceloop/go-openllmetry/traceloop-sdk => ../traceloop-sdk
- replace github.com/traceloop/go-openllmetry/semconv-ai => ../semconv-ai
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
replace github.com/traceloop/go-openllmetry/traceloop-sdk => ../traceloop-sdk
replace github.com/traceloop/go-openllmetry/semconv-ai => ../semconv-ai
🤖 Prompt for AI Agents
In sample-app/go.mod at lines 57 to 59, remove the local replace directives for
github.com/traceloop/go-openllmetry/traceloop-sdk and
github.com/traceloop/go-openllmetry/semconv-ai because these modules are already
included in the go.work file. Deleting these replace lines will prevent leaking
local file paths into the committed go.mod file.

Loading
Loading