Skip to content

Commit 279e3ac

Browse files
committed
feat(gateway): add tracking logs api support
1 parent c7345aa commit 279e3ac

9 files changed

Lines changed: 290 additions & 98 deletions

File tree

gateway/internal/api/v1/chatcompletions.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,10 @@ func (s *V1Handler) GetChatCompletions(
6060
ingesterdata["provider"] = provider.GetName()
6161
ingesterdata["model"] = data.Model
6262
ingesterdata["latency"] = latency
63-
ingesterdata["usage"] = map[string]interface{}{
64-
"total_tokens": data.Usage.TotalTokens,
65-
"prompt_tokens": data.Usage.PromptTokens,
66-
"completion_tokens": data.Usage.CompletionTokens,
67-
}
63+
ingesterdata["total_tokens"] = *data.Usage.TotalTokens
64+
ingesterdata["prompt_tokens"] = *data.Usage.PromptTokens
65+
ingesterdata["completion_tokens"] = *data.Usage.CompletionTokens
66+
6867
go s.ingester.Ingest(ingesterdata, "analytics")
6968

7069
response := connect.NewResponse(data)

gateway/internal/api/v1/logs.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package v1
2+
3+
import (
4+
"context"
5+
6+
"connectrpc.com/connect"
7+
"github.com/missingstudio/studio/common/errors"
8+
llmv1 "github.com/missingstudio/studio/protos/pkg/llm"
9+
"google.golang.org/protobuf/types/known/emptypb"
10+
"google.golang.org/protobuf/types/known/structpb"
11+
)
12+
13+
func (s *V1Handler) ListTrackingLogs(ctx context.Context, req *connect.Request[emptypb.Empty]) (*connect.Response[llmv1.LogResponse], error) {
14+
response, err := s.ingester.Get("select * from analytics")
15+
if err != nil {
16+
return nil, errors.New(err)
17+
}
18+
19+
logs := []*structpb.Struct{}
20+
for _, log := range response {
21+
point := map[string]interface{}{
22+
"latency": log["latency"],
23+
"model": log["model"],
24+
"provider": log["provider"],
25+
"total_tokens": log["total_tokens"],
26+
"prompt_tokens": log["prompt_tokens"],
27+
"completion_tokens": log["completion_tokens"],
28+
}
29+
pointdata, _ := structpb.NewStruct(point)
30+
logs = append(logs, pointdata)
31+
}
32+
33+
return connect.NewResponse(&llmv1.LogResponse{
34+
Logs: logs,
35+
}), nil
36+
}

gateway/internal/httpserver/server.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,10 @@ func newCORS() *cors.Cors {
8484
ExposedHeaders: []string{
8585
// Content-Type is in the default safelist.
8686
"Accept",
87+
"Authorization",
8788
"Accept-Encoding",
8889
"Accept-Post",
90+
"Content-Type",
8991
"Connect-Accept-Encoding",
9092
"Connect-Content-Encoding",
9193
"Content-Encoding",

gateway/pkg/utils/headers.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,5 @@ func ValidateHeaders(data interface{}) error {
9595
}
9696

9797
func CopyHeaders[T any](resp *http.Response, newResponse *connect.Response[T]) *connect.Response[T] {
98-
for key, values := range resp.Header {
99-
for _, value := range values {
100-
newResponse.Header().Set(key, value)
101-
}
102-
}
103-
10498
return newResponse
10599
}

protos/pkg/llm/llmv1connect/service.connect.go

Lines changed: 51 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)