1
0
mirror of https://github.com/coalaura/whiskr.git synced 2025-09-09 01:09:54 +00:00

statistics

This commit is contained in:
Laura
2025-08-11 15:43:00 +02:00
parent c10b657742
commit 8a790df2af
12 changed files with 347 additions and 11 deletions

View File

@@ -2,10 +2,44 @@ package main
import (
"context"
"encoding/json"
"errors"
"fmt"
"net/http"
"github.com/revrost/go-openrouter"
)
type Generation struct {
ID string `json:"id"`
TotalCost float64 `json:"total_cost"`
CreatedAt string `json:"created_at"`
Model string `json:"model"`
Origin string `json:"origin"`
Usage float64 `json:"usage"`
IsBYOK bool `json:"is_byok"`
UpstreamID *string `json:"upstream_id"`
CacheDiscount *float64 `json:"cache_discount"`
UpstreamInferenceCost *float64 `json:"upstream_inference_cost"`
AppID *int `json:"app_id"`
Streamed *bool `json:"streamed"`
Cancelled *bool `json:"cancelled"`
ProviderName *string `json:"provider_name"`
Latency *int `json:"latency"`
ModerationLatency *int `json:"moderation_latency"`
GenerationTime *int `json:"generation_time"`
FinishReason *string `json:"finish_reason"`
NativeFinishReason *string `json:"native_finish_reason"`
TokensPrompt *int `json:"tokens_prompt"`
TokensCompletion *int `json:"tokens_completion"`
NativeTokensPrompt *int `json:"native_tokens_prompt"`
NativeTokensCompletion *int `json:"native_tokens_completion"`
NativeTokensReasoning *int `json:"native_tokens_reasoning"`
NumMediaPrompt *int `json:"num_media_prompt"`
NumMediaCompletion *int `json:"num_media_completion"`
NumSearchResults *int `json:"num_search_results"`
}
func OpenRouterClient() *openrouter.Client {
return openrouter.NewClient(OpenRouterToken)
}
@@ -20,3 +54,34 @@ func OpenRouterStartStream(ctx context.Context, request openrouter.ChatCompletio
return stream, nil
}
func OpenRouterGetGeneration(ctx context.Context, id string) (*Generation, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("https://openrouter.ai/api/v1/generation?id=%s", id), nil)
if err != nil {
return nil, err
}
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", OpenRouterToken))
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return nil, errors.New(resp.Status)
}
var response struct {
Data Generation `json:"data"`
}
err = json.NewDecoder(resp.Body).Decode(&response)
if err != nil {
return nil, err
}
return &response.Data, nil
}