// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.10
// 	protoc        (unknown)
// source: tars/insights/v1/request_logs.proto

package insightsv1

import (
	_ "github.com/tetrateio/agentrouter-go/genapi/api/tars/auth/v1"
	_ "github.com/tetrateio/agentrouter-go/genapi/api/tars/cli/v1"
	_ "github.com/tetrateio/agentrouter-go/genapi/api/tars/docs/v1"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	structpb "google.golang.org/protobuf/types/known/structpb"
	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// ListCustomerRequestLogsRequest carries the (customer_id, project_id)
// tenancy scope the caller is querying against, plus the same filter
// and pagination knobs QueryRequestLogsRequest exposes. The user_id
// filter is forced to the authenticated caller server-side.
type ListCustomerRequestLogsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Tenancy scope. Defaults to the caller's session customer_id /
	// project_id when empty.
	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
	// Project within the customer to scope the query to.
	ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
	// Optional filters. Mirror QueryRequestLogsRequest minus user_id
	// (forced to caller).
	// Restrict to logs produced by this API key (UUID).
	ApiKeyId string `protobuf:"bytes,3,opt,name=api_key_id,json=apiKeyId,proto3" json:"api_key_id,omitempty"`
	// Restrict to a single model name (e.g. "claude-3-opus", "gpt-4").
	ModelName string `protobuf:"bytes,4,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
	// Restrict by logical status (e.g. "success", "error", "timeout").
	Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
	// Restrict by HTTP status code returned to the client.
	StatusCode int32 `protobuf:"varint,6,opt,name=status_code,json=statusCode,proto3" json:"status_code,omitempty"`
	// Start of the time range (inclusive).
	StartTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// End of the time range (exclusive).
	EndTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
	// Only include requests at least this many milliseconds long.
	MinDurationMs int32 `protobuf:"varint,9,opt,name=min_duration_ms,json=minDurationMs,proto3" json:"min_duration_ms,omitempty"`
	// Only include requests at most this many milliseconds long.
	MaxDurationMs int32 `protobuf:"varint,10,opt,name=max_duration_ms,json=maxDurationMs,proto3" json:"max_duration_ms,omitempty"`
	// Pagination.
	// Maximum logs per page (server applies a default and cap).
	PageSize int32 `protobuf:"varint,11,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
	// Opaque token from a prior response's next_page_token to fetch the next page.
	PageToken string `protobuf:"bytes,12,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
	// Ordering. Valid order_by: timestamp, duration_ms, input_tokens,
	// output_tokens. Valid order_direction: asc, desc.
	OrderBy string `protobuf:"bytes,13,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
	// Sort direction for order_by: "asc" or "desc".
	OrderDirection string `protobuf:"bytes,14,opt,name=order_direction,json=orderDirection,proto3" json:"order_direction,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *ListCustomerRequestLogsRequest) Reset() {
	*x = ListCustomerRequestLogsRequest{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListCustomerRequestLogsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListCustomerRequestLogsRequest) ProtoMessage() {}

func (x *ListCustomerRequestLogsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListCustomerRequestLogsRequest.ProtoReflect.Descriptor instead.
func (*ListCustomerRequestLogsRequest) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{0}
}

func (x *ListCustomerRequestLogsRequest) GetCustomerId() string {
	if x != nil {
		return x.CustomerId
	}
	return ""
}

func (x *ListCustomerRequestLogsRequest) GetProjectId() string {
	if x != nil {
		return x.ProjectId
	}
	return ""
}

func (x *ListCustomerRequestLogsRequest) GetApiKeyId() string {
	if x != nil {
		return x.ApiKeyId
	}
	return ""
}

func (x *ListCustomerRequestLogsRequest) GetModelName() string {
	if x != nil {
		return x.ModelName
	}
	return ""
}

func (x *ListCustomerRequestLogsRequest) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *ListCustomerRequestLogsRequest) GetStatusCode() int32 {
	if x != nil {
		return x.StatusCode
	}
	return 0
}

func (x *ListCustomerRequestLogsRequest) GetStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *ListCustomerRequestLogsRequest) GetEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.EndTime
	}
	return nil
}

func (x *ListCustomerRequestLogsRequest) GetMinDurationMs() int32 {
	if x != nil {
		return x.MinDurationMs
	}
	return 0
}

func (x *ListCustomerRequestLogsRequest) GetMaxDurationMs() int32 {
	if x != nil {
		return x.MaxDurationMs
	}
	return 0
}

func (x *ListCustomerRequestLogsRequest) GetPageSize() int32 {
	if x != nil {
		return x.PageSize
	}
	return 0
}

func (x *ListCustomerRequestLogsRequest) GetPageToken() string {
	if x != nil {
		return x.PageToken
	}
	return ""
}

func (x *ListCustomerRequestLogsRequest) GetOrderBy() string {
	if x != nil {
		return x.OrderBy
	}
	return ""
}

func (x *ListCustomerRequestLogsRequest) GetOrderDirection() string {
	if x != nil {
		return x.OrderDirection
	}
	return ""
}

type ListCustomerRequestLogsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Request logs for the caller on this page, newest first by default.
	Logs []*RequestLog `protobuf:"bytes,1,rep,name=logs,proto3" json:"logs,omitempty"`
	// Token to pass back as page_token for the next page; empty when exhausted.
	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
	// Total number of matching logs across all pages (may be approximate).
	TotalCount    int64 `protobuf:"varint,3,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListCustomerRequestLogsResponse) Reset() {
	*x = ListCustomerRequestLogsResponse{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListCustomerRequestLogsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListCustomerRequestLogsResponse) ProtoMessage() {}

func (x *ListCustomerRequestLogsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListCustomerRequestLogsResponse.ProtoReflect.Descriptor instead.
func (*ListCustomerRequestLogsResponse) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{1}
}

func (x *ListCustomerRequestLogsResponse) GetLogs() []*RequestLog {
	if x != nil {
		return x.Logs
	}
	return nil
}

func (x *ListCustomerRequestLogsResponse) GetNextPageToken() string {
	if x != nil {
		return x.NextPageToken
	}
	return ""
}

func (x *ListCustomerRequestLogsResponse) GetTotalCount() int64 {
	if x != nil {
		return x.TotalCount
	}
	return 0
}

type GetCustomerRequestLogRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Defaults to the caller's session customer_id / project_id when empty.
	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
	ProjectId  string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
	// Identifier of the request log to fetch; must be owned by the caller.
	RequestId     string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetCustomerRequestLogRequest) Reset() {
	*x = GetCustomerRequestLogRequest{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetCustomerRequestLogRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetCustomerRequestLogRequest) ProtoMessage() {}

func (x *GetCustomerRequestLogRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetCustomerRequestLogRequest.ProtoReflect.Descriptor instead.
func (*GetCustomerRequestLogRequest) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{2}
}

func (x *GetCustomerRequestLogRequest) GetCustomerId() string {
	if x != nil {
		return x.CustomerId
	}
	return ""
}

func (x *GetCustomerRequestLogRequest) GetProjectId() string {
	if x != nil {
		return x.ProjectId
	}
	return ""
}

func (x *GetCustomerRequestLogRequest) GetRequestId() string {
	if x != nil {
		return x.RequestId
	}
	return ""
}

type GetCustomerRequestLogStatsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Defaults to the caller's session customer_id / project_id when empty.
	CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
	ProjectId  string `protobuf:"bytes,2,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"`
	// Optional filter restricting stats to a single model name.
	ModelName string `protobuf:"bytes,3,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
	// Start of the aggregation time range (inclusive).
	StartTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// End of the aggregation time range (exclusive).
	EndTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
	// Dimension to group by: "model", "user", "api_key", "status", "hour", "day".
	GroupBy string `protobuf:"bytes,6,opt,name=group_by,json=groupBy,proto3" json:"group_by,omitempty"`
	// Metric to compute: "count", "tokens", "cost", "latency", "errors".
	Metric        string `protobuf:"bytes,7,opt,name=metric,proto3" json:"metric,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetCustomerRequestLogStatsRequest) Reset() {
	*x = GetCustomerRequestLogStatsRequest{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetCustomerRequestLogStatsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetCustomerRequestLogStatsRequest) ProtoMessage() {}

func (x *GetCustomerRequestLogStatsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetCustomerRequestLogStatsRequest.ProtoReflect.Descriptor instead.
func (*GetCustomerRequestLogStatsRequest) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{3}
}

func (x *GetCustomerRequestLogStatsRequest) GetCustomerId() string {
	if x != nil {
		return x.CustomerId
	}
	return ""
}

func (x *GetCustomerRequestLogStatsRequest) GetProjectId() string {
	if x != nil {
		return x.ProjectId
	}
	return ""
}

func (x *GetCustomerRequestLogStatsRequest) GetModelName() string {
	if x != nil {
		return x.ModelName
	}
	return ""
}

func (x *GetCustomerRequestLogStatsRequest) GetStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *GetCustomerRequestLogStatsRequest) GetEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.EndTime
	}
	return nil
}

func (x *GetCustomerRequestLogStatsRequest) GetGroupBy() string {
	if x != nil {
		return x.GroupBy
	}
	return ""
}

func (x *GetCustomerRequestLogStatsRequest) GetMetric() string {
	if x != nil {
		return x.Metric
	}
	return ""
}

// QueryRequestLogsRequest defines filters for querying request logs.
type QueryRequestLogsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Filter by user ID
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Filter by API key ID
	ApiKeyId string `protobuf:"bytes,2,opt,name=api_key_id,json=apiKeyId,proto3" json:"api_key_id,omitempty"`
	// Filter by model name (e.g., "claude-3-opus", "gpt-4")
	ModelName string `protobuf:"bytes,3,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
	// Filter by status (e.g., "success", "error", "timeout")
	Status string `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"`
	// Filter by HTTP status code
	StatusCode int32 `protobuf:"varint,5,opt,name=status_code,json=statusCode,proto3" json:"status_code,omitempty"`
	// Start of time range (inclusive)
	StartTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// End of time range (exclusive)
	EndTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
	// Minimum duration in milliseconds
	MinDurationMs int32 `protobuf:"varint,8,opt,name=min_duration_ms,json=minDurationMs,proto3" json:"min_duration_ms,omitempty"`
	// Maximum duration in milliseconds
	MaxDurationMs int32 `protobuf:"varint,9,opt,name=max_duration_ms,json=maxDurationMs,proto3" json:"max_duration_ms,omitempty"`
	// Page size (default: 50, max: 1000)
	PageSize int32 `protobuf:"varint,10,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
	// Page token for pagination
	PageToken string `protobuf:"bytes,11,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
	// Order by field (default: "timestamp")
	// Valid values: "timestamp", "duration_ms", "input_tokens", "output_tokens"
	OrderBy string `protobuf:"bytes,12,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
	// Order direction: "asc" or "desc" (default: "desc")
	OrderDirection string `protobuf:"bytes,13,opt,name=order_direction,json=orderDirection,proto3" json:"order_direction,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *QueryRequestLogsRequest) Reset() {
	*x = QueryRequestLogsRequest{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *QueryRequestLogsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*QueryRequestLogsRequest) ProtoMessage() {}

func (x *QueryRequestLogsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use QueryRequestLogsRequest.ProtoReflect.Descriptor instead.
func (*QueryRequestLogsRequest) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{4}
}

func (x *QueryRequestLogsRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *QueryRequestLogsRequest) GetApiKeyId() string {
	if x != nil {
		return x.ApiKeyId
	}
	return ""
}

func (x *QueryRequestLogsRequest) GetModelName() string {
	if x != nil {
		return x.ModelName
	}
	return ""
}

func (x *QueryRequestLogsRequest) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *QueryRequestLogsRequest) GetStatusCode() int32 {
	if x != nil {
		return x.StatusCode
	}
	return 0
}

func (x *QueryRequestLogsRequest) GetStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *QueryRequestLogsRequest) GetEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.EndTime
	}
	return nil
}

func (x *QueryRequestLogsRequest) GetMinDurationMs() int32 {
	if x != nil {
		return x.MinDurationMs
	}
	return 0
}

func (x *QueryRequestLogsRequest) GetMaxDurationMs() int32 {
	if x != nil {
		return x.MaxDurationMs
	}
	return 0
}

func (x *QueryRequestLogsRequest) GetPageSize() int32 {
	if x != nil {
		return x.PageSize
	}
	return 0
}

func (x *QueryRequestLogsRequest) GetPageToken() string {
	if x != nil {
		return x.PageToken
	}
	return ""
}

func (x *QueryRequestLogsRequest) GetOrderBy() string {
	if x != nil {
		return x.OrderBy
	}
	return ""
}

func (x *QueryRequestLogsRequest) GetOrderDirection() string {
	if x != nil {
		return x.OrderDirection
	}
	return ""
}

// QueryRequestLogsResponse contains the query results and pagination info.
type QueryRequestLogsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// List of request logs matching the query
	Logs []*RequestLog `protobuf:"bytes,1,rep,name=logs,proto3" json:"logs,omitempty"`
	// Token for retrieving the next page (empty if no more pages)
	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
	// Total count of matching logs (may be approximate for large datasets)
	TotalCount    int64 `protobuf:"varint,3,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *QueryRequestLogsResponse) Reset() {
	*x = QueryRequestLogsResponse{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *QueryRequestLogsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*QueryRequestLogsResponse) ProtoMessage() {}

func (x *QueryRequestLogsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use QueryRequestLogsResponse.ProtoReflect.Descriptor instead.
func (*QueryRequestLogsResponse) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{5}
}

func (x *QueryRequestLogsResponse) GetLogs() []*RequestLog {
	if x != nil {
		return x.Logs
	}
	return nil
}

func (x *QueryRequestLogsResponse) GetNextPageToken() string {
	if x != nil {
		return x.NextPageToken
	}
	return ""
}

func (x *QueryRequestLogsResponse) GetTotalCount() int64 {
	if x != nil {
		return x.TotalCount
	}
	return 0
}

// GetRequestLogRequest retrieves a single log by request ID.
type GetRequestLogRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Request identifier
	RequestId     string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetRequestLogRequest) Reset() {
	*x = GetRequestLogRequest{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetRequestLogRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetRequestLogRequest) ProtoMessage() {}

func (x *GetRequestLogRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetRequestLogRequest.ProtoReflect.Descriptor instead.
func (*GetRequestLogRequest) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{6}
}

func (x *GetRequestLogRequest) GetRequestId() string {
	if x != nil {
		return x.RequestId
	}
	return ""
}

// RequestLog represents a single LLM request/response log entry.
type RequestLog struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Unique log identifier
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Timestamp when the request was received
	Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	// User ID who made the request
	UserId string `protobuf:"bytes,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// API key information
	// UUID of the API key that authenticated the request.
	ApiKeyId string `protobuf:"bytes,4,opt,name=api_key_id,json=apiKeyId,proto3" json:"api_key_id,omitempty"`
	// Leading visible characters of the key (e.g. "sk-..."), for display.
	ApiKeyPrefix string `protobuf:"bytes,5,opt,name=api_key_prefix,json=apiKeyPrefix,proto3" json:"api_key_prefix,omitempty"`
	// Hash of the API key used to look it up without storing the secret.
	ApiKeyHash string `protobuf:"bytes,6,opt,name=api_key_hash,json=apiKeyHash,proto3" json:"api_key_hash,omitempty"`
	// On-chain/account address the API key is bound to.
	ApiKeyAddress string `protobuf:"bytes,7,opt,name=api_key_address,json=apiKeyAddress,proto3" json:"api_key_address,omitempty"`
	// Human-readable label assigned to the API key.
	ApiKeyName string `protobuf:"bytes,8,opt,name=api_key_name,json=apiKeyName,proto3" json:"api_key_name,omitempty"`
	// Model name used for the request
	ModelName string `protobuf:"bytes,9,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
	// Token usage
	// Number of prompt/input tokens consumed by the request.
	InputTokens int32 `protobuf:"varint,10,opt,name=input_tokens,json=inputTokens,proto3" json:"input_tokens,omitempty"`
	// Number of completion/output tokens generated in the response.
	OutputTokens int32 `protobuf:"varint,11,opt,name=output_tokens,json=outputTokens,proto3" json:"output_tokens,omitempty"`
	// Cost information (in microdollars and decimal)
	// Input-token cost in microdollars (1e-6 USD), after fee.
	InputTokensCostMicrodollar int64  `protobuf:"varint,12,opt,name=input_tokens_cost_microdollar,json=inputTokensCostMicrodollar,proto3" json:"input_tokens_cost_microdollar,omitempty"`
	InputTokensCost            string `protobuf:"bytes,13,opt,name=input_tokens_cost,json=inputTokensCost,proto3" json:"input_tokens_cost,omitempty"` // Decimal string (precision: 18, scale: 10)
	// Input-token cost before the platform fee/markup is applied. Decimal string.
	InputTokensCostBeforeFee string `protobuf:"bytes,14,opt,name=input_tokens_cost_before_fee,json=inputTokensCostBeforeFee,proto3" json:"input_tokens_cost_before_fee,omitempty"`
	// Output-token cost in microdollars (1e-6 USD), after fee.
	OutputTokensCostMicrodollar int64  `protobuf:"varint,15,opt,name=output_tokens_cost_microdollar,json=outputTokensCostMicrodollar,proto3" json:"output_tokens_cost_microdollar,omitempty"`
	OutputTokensCost            string `protobuf:"bytes,16,opt,name=output_tokens_cost,json=outputTokensCost,proto3" json:"output_tokens_cost,omitempty"` // Decimal string (precision: 18, scale: 10)
	// Output-token cost before the platform fee/markup is applied. Decimal string.
	OutputTokensCostBeforeFee string `protobuf:"bytes,17,opt,name=output_tokens_cost_before_fee,json=outputTokensCostBeforeFee,proto3" json:"output_tokens_cost_before_fee,omitempty"`
	// Request/Response status
	// Logical outcome of the request (e.g. "success", "error", "timeout").
	Status string `protobuf:"bytes,18,opt,name=status,proto3" json:"status,omitempty"`
	// HTTP status code returned to the client.
	StatusCode int32 `protobuf:"varint,19,opt,name=status_code,json=statusCode,proto3" json:"status_code,omitempty"`
	// Request metadata
	// Captured request headers as a JSON object.
	RequestHeaders *structpb.Struct `protobuf:"bytes,20,opt,name=request_headers,json=requestHeaders,proto3" json:"request_headers,omitempty"`
	// Captured request payload as a JSON object.
	RequestBody *structpb.Struct `protobuf:"bytes,21,opt,name=request_body,json=requestBody,proto3" json:"request_body,omitempty"`
	// Response metadata
	// Captured response headers as a JSON object.
	ResponseHeaders *structpb.Struct `protobuf:"bytes,22,opt,name=response_headers,json=responseHeaders,proto3" json:"response_headers,omitempty"`
	ResponseBody    string           `protobuf:"bytes,23,opt,name=response_body,json=responseBody,proto3" json:"response_body,omitempty"`            // Text response body
	ResponseBodyRaw []byte           `protobuf:"bytes,24,opt,name=response_body_raw,json=responseBodyRaw,proto3" json:"response_body_raw,omitempty"` // Raw response body (for binary data)
	// LLM parameters used
	LlmParameters *structpb.Struct `protobuf:"bytes,25,opt,name=llm_parameters,json=llmParameters,proto3" json:"llm_parameters,omitempty"`
	// Timing information
	UpstreamDurationMs int32 `protobuf:"varint,26,opt,name=upstream_duration_ms,json=upstreamDurationMs,proto3" json:"upstream_duration_ms,omitempty"` // Duration of upstream LLM call
	DurationMs         int32 `protobuf:"varint,27,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"`                           // Total request duration
	// Request identifier
	RequestId string `protobuf:"bytes,28,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
	// Record creation timestamp
	CreatedAt *timestamppb.Timestamp `protobuf:"bytes,29,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
	// Object storage information (for Parquet-based storage)
	StorageLocation  string `protobuf:"bytes,30,opt,name=storage_location,json=storageLocation,proto3" json:"storage_location,omitempty"`       // GCS path to Parquet file
	StorageRowIndex  int32  `protobuf:"varint,31,opt,name=storage_row_index,json=storageRowIndex,proto3" json:"storage_row_index,omitempty"`    // Row index within Parquet file
	StorageBatchId   string `protobuf:"bytes,32,opt,name=storage_batch_id,json=storageBatchId,proto3" json:"storage_batch_id,omitempty"`        // Batch UUID for grouping
	UseObjectStorage bool   `protobuf:"varint,33,opt,name=use_object_storage,json=useObjectStorage,proto3" json:"use_object_storage,omitempty"` // true = GCS, false = DB
	// Cache token breakdown.
	// Input tokens served from the prompt cache (cache reads), billed at the cached rate.
	CachedInputTokens     int32  `protobuf:"varint,34,opt,name=cached_input_tokens,json=cachedInputTokens,proto3" json:"cached_input_tokens,omitempty"`
	CachedInputTokensCost string `protobuf:"bytes,35,opt,name=cached_input_tokens_cost,json=cachedInputTokensCost,proto3" json:"cached_input_tokens_cost,omitempty"` // Decimal string (precision: 18, scale: 10)
	// Cached-input cost before the platform fee/markup is applied. Decimal string.
	CachedInputTokensCostBeforeFee string `protobuf:"bytes,36,opt,name=cached_input_tokens_cost_before_fee,json=cachedInputTokensCostBeforeFee,proto3" json:"cached_input_tokens_cost_before_fee,omitempty"`
	// Input tokens written to the prompt cache (cache-creation writes).
	CacheCreationInputTokens     int32  `protobuf:"varint,37,opt,name=cache_creation_input_tokens,json=cacheCreationInputTokens,proto3" json:"cache_creation_input_tokens,omitempty"`
	CacheCreationInputTokensCost string `protobuf:"bytes,38,opt,name=cache_creation_input_tokens_cost,json=cacheCreationInputTokensCost,proto3" json:"cache_creation_input_tokens_cost,omitempty"` // Decimal string (precision: 18, scale: 10)
	// Cache-creation cost before the platform fee/markup is applied. Decimal string.
	CacheCreationInputTokensCostBeforeFee string `protobuf:"bytes,39,opt,name=cache_creation_input_tokens_cost_before_fee,json=cacheCreationInputTokensCostBeforeFee,proto3" json:"cache_creation_input_tokens_cost_before_fee,omitempty"`
	unknownFields                         protoimpl.UnknownFields
	sizeCache                             protoimpl.SizeCache
}

func (x *RequestLog) Reset() {
	*x = RequestLog{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RequestLog) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RequestLog) ProtoMessage() {}

func (x *RequestLog) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RequestLog.ProtoReflect.Descriptor instead.
func (*RequestLog) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{7}
}

func (x *RequestLog) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *RequestLog) GetTimestamp() *timestamppb.Timestamp {
	if x != nil {
		return x.Timestamp
	}
	return nil
}

func (x *RequestLog) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *RequestLog) GetApiKeyId() string {
	if x != nil {
		return x.ApiKeyId
	}
	return ""
}

func (x *RequestLog) GetApiKeyPrefix() string {
	if x != nil {
		return x.ApiKeyPrefix
	}
	return ""
}

func (x *RequestLog) GetApiKeyHash() string {
	if x != nil {
		return x.ApiKeyHash
	}
	return ""
}

func (x *RequestLog) GetApiKeyAddress() string {
	if x != nil {
		return x.ApiKeyAddress
	}
	return ""
}

func (x *RequestLog) GetApiKeyName() string {
	if x != nil {
		return x.ApiKeyName
	}
	return ""
}

func (x *RequestLog) GetModelName() string {
	if x != nil {
		return x.ModelName
	}
	return ""
}

func (x *RequestLog) GetInputTokens() int32 {
	if x != nil {
		return x.InputTokens
	}
	return 0
}

func (x *RequestLog) GetOutputTokens() int32 {
	if x != nil {
		return x.OutputTokens
	}
	return 0
}

func (x *RequestLog) GetInputTokensCostMicrodollar() int64 {
	if x != nil {
		return x.InputTokensCostMicrodollar
	}
	return 0
}

func (x *RequestLog) GetInputTokensCost() string {
	if x != nil {
		return x.InputTokensCost
	}
	return ""
}

func (x *RequestLog) GetInputTokensCostBeforeFee() string {
	if x != nil {
		return x.InputTokensCostBeforeFee
	}
	return ""
}

func (x *RequestLog) GetOutputTokensCostMicrodollar() int64 {
	if x != nil {
		return x.OutputTokensCostMicrodollar
	}
	return 0
}

func (x *RequestLog) GetOutputTokensCost() string {
	if x != nil {
		return x.OutputTokensCost
	}
	return ""
}

func (x *RequestLog) GetOutputTokensCostBeforeFee() string {
	if x != nil {
		return x.OutputTokensCostBeforeFee
	}
	return ""
}

func (x *RequestLog) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *RequestLog) GetStatusCode() int32 {
	if x != nil {
		return x.StatusCode
	}
	return 0
}

func (x *RequestLog) GetRequestHeaders() *structpb.Struct {
	if x != nil {
		return x.RequestHeaders
	}
	return nil
}

func (x *RequestLog) GetRequestBody() *structpb.Struct {
	if x != nil {
		return x.RequestBody
	}
	return nil
}

func (x *RequestLog) GetResponseHeaders() *structpb.Struct {
	if x != nil {
		return x.ResponseHeaders
	}
	return nil
}

func (x *RequestLog) GetResponseBody() string {
	if x != nil {
		return x.ResponseBody
	}
	return ""
}

func (x *RequestLog) GetResponseBodyRaw() []byte {
	if x != nil {
		return x.ResponseBodyRaw
	}
	return nil
}

func (x *RequestLog) GetLlmParameters() *structpb.Struct {
	if x != nil {
		return x.LlmParameters
	}
	return nil
}

func (x *RequestLog) GetUpstreamDurationMs() int32 {
	if x != nil {
		return x.UpstreamDurationMs
	}
	return 0
}

func (x *RequestLog) GetDurationMs() int32 {
	if x != nil {
		return x.DurationMs
	}
	return 0
}

func (x *RequestLog) GetRequestId() string {
	if x != nil {
		return x.RequestId
	}
	return ""
}

func (x *RequestLog) GetCreatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.CreatedAt
	}
	return nil
}

func (x *RequestLog) GetStorageLocation() string {
	if x != nil {
		return x.StorageLocation
	}
	return ""
}

func (x *RequestLog) GetStorageRowIndex() int32 {
	if x != nil {
		return x.StorageRowIndex
	}
	return 0
}

func (x *RequestLog) GetStorageBatchId() string {
	if x != nil {
		return x.StorageBatchId
	}
	return ""
}

func (x *RequestLog) GetUseObjectStorage() bool {
	if x != nil {
		return x.UseObjectStorage
	}
	return false
}

func (x *RequestLog) GetCachedInputTokens() int32 {
	if x != nil {
		return x.CachedInputTokens
	}
	return 0
}

func (x *RequestLog) GetCachedInputTokensCost() string {
	if x != nil {
		return x.CachedInputTokensCost
	}
	return ""
}

func (x *RequestLog) GetCachedInputTokensCostBeforeFee() string {
	if x != nil {
		return x.CachedInputTokensCostBeforeFee
	}
	return ""
}

func (x *RequestLog) GetCacheCreationInputTokens() int32 {
	if x != nil {
		return x.CacheCreationInputTokens
	}
	return 0
}

func (x *RequestLog) GetCacheCreationInputTokensCost() string {
	if x != nil {
		return x.CacheCreationInputTokensCost
	}
	return ""
}

func (x *RequestLog) GetCacheCreationInputTokensCostBeforeFee() string {
	if x != nil {
		return x.CacheCreationInputTokensCostBeforeFee
	}
	return ""
}

// GetRequestLogStatsRequest defines aggregation parameters for log statistics.
type GetRequestLogStatsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Filter by user ID
	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	// Filter by model name
	ModelName string `protobuf:"bytes,2,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
	// Start of time range (inclusive)
	StartTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// End of time range (exclusive)
	EndTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
	// Group by dimension
	// Valid values: "model", "user", "api_key", "status", "hour", "day"
	GroupBy string `protobuf:"bytes,5,opt,name=group_by,json=groupBy,proto3" json:"group_by,omitempty"`
	// Metric to calculate
	// Valid values: "count", "tokens", "cost", "latency", "errors"
	Metric        string `protobuf:"bytes,6,opt,name=metric,proto3" json:"metric,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetRequestLogStatsRequest) Reset() {
	*x = GetRequestLogStatsRequest{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetRequestLogStatsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetRequestLogStatsRequest) ProtoMessage() {}

func (x *GetRequestLogStatsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetRequestLogStatsRequest.ProtoReflect.Descriptor instead.
func (*GetRequestLogStatsRequest) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{8}
}

func (x *GetRequestLogStatsRequest) GetUserId() string {
	if x != nil {
		return x.UserId
	}
	return ""
}

func (x *GetRequestLogStatsRequest) GetModelName() string {
	if x != nil {
		return x.ModelName
	}
	return ""
}

func (x *GetRequestLogStatsRequest) GetStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *GetRequestLogStatsRequest) GetEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.EndTime
	}
	return nil
}

func (x *GetRequestLogStatsRequest) GetGroupBy() string {
	if x != nil {
		return x.GroupBy
	}
	return ""
}

func (x *GetRequestLogStatsRequest) GetMetric() string {
	if x != nil {
		return x.Metric
	}
	return ""
}

// RequestLogStatsResponse contains aggregated statistics.
type RequestLogStatsResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Statistics grouped by the requested dimension
	Stats []*StatEntry `protobuf:"bytes,1,rep,name=stats,proto3" json:"stats,omitempty"`
	// Total counts across all groups
	// Total number of requests across all groups.
	TotalCount int64 `protobuf:"varint,2,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"`
	// Sum of input tokens across all groups.
	TotalInputTokens int64 `protobuf:"varint,3,opt,name=total_input_tokens,json=totalInputTokens,proto3" json:"total_input_tokens,omitempty"`
	// Sum of output tokens across all groups.
	TotalOutputTokens int64  `protobuf:"varint,4,opt,name=total_output_tokens,json=totalOutputTokens,proto3" json:"total_output_tokens,omitempty"`
	TotalCost         string `protobuf:"bytes,5,opt,name=total_cost,json=totalCost,proto3" json:"total_cost,omitempty"` // Decimal string
	// Mean request duration in milliseconds across all groups.
	AvgDurationMs float64 `protobuf:"fixed64,6,opt,name=avg_duration_ms,json=avgDurationMs,proto3" json:"avg_duration_ms,omitempty"`
	// Total number of error requests across all groups.
	ErrorCount    int64 `protobuf:"varint,7,opt,name=error_count,json=errorCount,proto3" json:"error_count,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RequestLogStatsResponse) Reset() {
	*x = RequestLogStatsResponse{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RequestLogStatsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RequestLogStatsResponse) ProtoMessage() {}

func (x *RequestLogStatsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RequestLogStatsResponse.ProtoReflect.Descriptor instead.
func (*RequestLogStatsResponse) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{9}
}

func (x *RequestLogStatsResponse) GetStats() []*StatEntry {
	if x != nil {
		return x.Stats
	}
	return nil
}

func (x *RequestLogStatsResponse) GetTotalCount() int64 {
	if x != nil {
		return x.TotalCount
	}
	return 0
}

func (x *RequestLogStatsResponse) GetTotalInputTokens() int64 {
	if x != nil {
		return x.TotalInputTokens
	}
	return 0
}

func (x *RequestLogStatsResponse) GetTotalOutputTokens() int64 {
	if x != nil {
		return x.TotalOutputTokens
	}
	return 0
}

func (x *RequestLogStatsResponse) GetTotalCost() string {
	if x != nil {
		return x.TotalCost
	}
	return ""
}

func (x *RequestLogStatsResponse) GetAvgDurationMs() float64 {
	if x != nil {
		return x.AvgDurationMs
	}
	return 0
}

func (x *RequestLogStatsResponse) GetErrorCount() int64 {
	if x != nil {
		return x.ErrorCount
	}
	return 0
}

// StatEntry represents statistics for a single group.
type StatEntry struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Group key (model name, user id, date, etc.)
	Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	// Request counts
	// Number of requests in this group.
	Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
	// Number of error requests in this group.
	ErrorCount int64 `protobuf:"varint,3,opt,name=error_count,json=errorCount,proto3" json:"error_count,omitempty"`
	// Token usage
	// Input tokens summed over this group.
	InputTokens int64 `protobuf:"varint,4,opt,name=input_tokens,json=inputTokens,proto3" json:"input_tokens,omitempty"`
	// Output tokens summed over this group.
	OutputTokens int64 `protobuf:"varint,5,opt,name=output_tokens,json=outputTokens,proto3" json:"output_tokens,omitempty"`
	// Input plus output tokens for this group.
	TotalTokens int64 `protobuf:"varint,6,opt,name=total_tokens,json=totalTokens,proto3" json:"total_tokens,omitempty"`
	// Cost information
	Cost string `protobuf:"bytes,7,opt,name=cost,proto3" json:"cost,omitempty"` // Decimal string
	// Group cost in microdollars (1e-6 USD).
	CostMicrodollar int64 `protobuf:"varint,8,opt,name=cost_microdollar,json=costMicrodollar,proto3" json:"cost_microdollar,omitempty"`
	// Latency metrics
	// Mean request duration in milliseconds for this group.
	AvgDurationMs int64 `protobuf:"varint,9,opt,name=avg_duration_ms,json=avgDurationMs,proto3" json:"avg_duration_ms,omitempty"`
	// Minimum request duration in milliseconds for this group.
	MinDurationMs int64 `protobuf:"varint,10,opt,name=min_duration_ms,json=minDurationMs,proto3" json:"min_duration_ms,omitempty"`
	// Maximum request duration in milliseconds for this group.
	MaxDurationMs int64 `protobuf:"varint,11,opt,name=max_duration_ms,json=maxDurationMs,proto3" json:"max_duration_ms,omitempty"`
	// Median (p50) request duration in milliseconds for this group.
	P50DurationMs int64 `protobuf:"varint,12,opt,name=p50_duration_ms,json=p50DurationMs,proto3" json:"p50_duration_ms,omitempty"`
	// 95th-percentile request duration in milliseconds for this group.
	P95DurationMs int64 `protobuf:"varint,13,opt,name=p95_duration_ms,json=p95DurationMs,proto3" json:"p95_duration_ms,omitempty"`
	// 99th-percentile request duration in milliseconds for this group.
	P99DurationMs int64 `protobuf:"varint,14,opt,name=p99_duration_ms,json=p99DurationMs,proto3" json:"p99_duration_ms,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *StatEntry) Reset() {
	*x = StatEntry{}
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *StatEntry) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*StatEntry) ProtoMessage() {}

func (x *StatEntry) ProtoReflect() protoreflect.Message {
	mi := &file_tars_insights_v1_request_logs_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use StatEntry.ProtoReflect.Descriptor instead.
func (*StatEntry) Descriptor() ([]byte, []int) {
	return file_tars_insights_v1_request_logs_proto_rawDescGZIP(), []int{10}
}

func (x *StatEntry) GetKey() string {
	if x != nil {
		return x.Key
	}
	return ""
}

func (x *StatEntry) GetCount() int64 {
	if x != nil {
		return x.Count
	}
	return 0
}

func (x *StatEntry) GetErrorCount() int64 {
	if x != nil {
		return x.ErrorCount
	}
	return 0
}

func (x *StatEntry) GetInputTokens() int64 {
	if x != nil {
		return x.InputTokens
	}
	return 0
}

func (x *StatEntry) GetOutputTokens() int64 {
	if x != nil {
		return x.OutputTokens
	}
	return 0
}

func (x *StatEntry) GetTotalTokens() int64 {
	if x != nil {
		return x.TotalTokens
	}
	return 0
}

func (x *StatEntry) GetCost() string {
	if x != nil {
		return x.Cost
	}
	return ""
}

func (x *StatEntry) GetCostMicrodollar() int64 {
	if x != nil {
		return x.CostMicrodollar
	}
	return 0
}

func (x *StatEntry) GetAvgDurationMs() int64 {
	if x != nil {
		return x.AvgDurationMs
	}
	return 0
}

func (x *StatEntry) GetMinDurationMs() int64 {
	if x != nil {
		return x.MinDurationMs
	}
	return 0
}

func (x *StatEntry) GetMaxDurationMs() int64 {
	if x != nil {
		return x.MaxDurationMs
	}
	return 0
}

func (x *StatEntry) GetP50DurationMs() int64 {
	if x != nil {
		return x.P50DurationMs
	}
	return 0
}

func (x *StatEntry) GetP95DurationMs() int64 {
	if x != nil {
		return x.P95DurationMs
	}
	return 0
}

func (x *StatEntry) GetP99DurationMs() int64 {
	if x != nil {
		return x.P99DurationMs
	}
	return 0
}

var File_tars_insights_v1_request_logs_proto protoreflect.FileDescriptor

const file_tars_insights_v1_request_logs_proto_rawDesc = "" +
	"\n" +
	"#tars/insights/v1/request_logs.proto\x12\x10tars.insights.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1ftars/auth/v1/auth_options.proto\x1a\x15tars/cli/v1/cli.proto\x1a\x17tars/docs/v1/docs.proto\"\x98\x04\n" +
	"\x1eListCustomerRequestLogsRequest\x12\x1f\n" +
	"\vcustomer_id\x18\x01 \x01(\tR\n" +
	"customerId\x12\x1d\n" +
	"\n" +
	"project_id\x18\x02 \x01(\tR\tprojectId\x12\x1c\n" +
	"\n" +
	"api_key_id\x18\x03 \x01(\tR\bapiKeyId\x12\x1d\n" +
	"\n" +
	"model_name\x18\x04 \x01(\tR\tmodelName\x12\x16\n" +
	"\x06status\x18\x05 \x01(\tR\x06status\x12\x1f\n" +
	"\vstatus_code\x18\x06 \x01(\x05R\n" +
	"statusCode\x129\n" +
	"\n" +
	"start_time\x18\a \x01(\v2\x1a.google.protobuf.TimestampR\tstartTime\x125\n" +
	"\bend_time\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\aendTime\x12&\n" +
	"\x0fmin_duration_ms\x18\t \x01(\x05R\rminDurationMs\x12&\n" +
	"\x0fmax_duration_ms\x18\n" +
	" \x01(\x05R\rmaxDurationMs\x12\x1b\n" +
	"\tpage_size\x18\v \x01(\x05R\bpageSize\x12\x1d\n" +
	"\n" +
	"page_token\x18\f \x01(\tR\tpageToken\x12\x19\n" +
	"\border_by\x18\r \x01(\tR\aorderBy\x12'\n" +
	"\x0forder_direction\x18\x0e \x01(\tR\x0eorderDirection\"\x9c\x01\n" +
	"\x1fListCustomerRequestLogsResponse\x120\n" +
	"\x04logs\x18\x01 \x03(\v2\x1c.tars.insights.v1.RequestLogR\x04logs\x12&\n" +
	"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1f\n" +
	"\vtotal_count\x18\x03 \x01(\x03R\n" +
	"totalCount\"\x82\x01\n" +
	"\x1cGetCustomerRequestLogRequest\x12\x1f\n" +
	"\vcustomer_id\x18\x01 \x01(\tR\n" +
	"customerId\x12\x1d\n" +
	"\n" +
	"project_id\x18\x02 \x01(\tR\tprojectId\x12\"\n" +
	"\n" +
	"request_id\x18\x03 \x01(\tB\x03\xe0A\x02R\trequestId\"\xa7\x02\n" +
	"!GetCustomerRequestLogStatsRequest\x12\x1f\n" +
	"\vcustomer_id\x18\x01 \x01(\tR\n" +
	"customerId\x12\x1d\n" +
	"\n" +
	"project_id\x18\x02 \x01(\tR\tprojectId\x12\x1d\n" +
	"\n" +
	"model_name\x18\x03 \x01(\tR\tmodelName\x129\n" +
	"\n" +
	"start_time\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\tstartTime\x125\n" +
	"\bend_time\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\aendTime\x12\x19\n" +
	"\bgroup_by\x18\x06 \x01(\tR\agroupBy\x12\x16\n" +
	"\x06metric\x18\a \x01(\tR\x06metric\"\xea\x03\n" +
	"\x17QueryRequestLogsRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12\x1c\n" +
	"\n" +
	"api_key_id\x18\x02 \x01(\tR\bapiKeyId\x12\x1d\n" +
	"\n" +
	"model_name\x18\x03 \x01(\tR\tmodelName\x12\x16\n" +
	"\x06status\x18\x04 \x01(\tR\x06status\x12\x1f\n" +
	"\vstatus_code\x18\x05 \x01(\x05R\n" +
	"statusCode\x129\n" +
	"\n" +
	"start_time\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampR\tstartTime\x125\n" +
	"\bend_time\x18\a \x01(\v2\x1a.google.protobuf.TimestampR\aendTime\x12&\n" +
	"\x0fmin_duration_ms\x18\b \x01(\x05R\rminDurationMs\x12&\n" +
	"\x0fmax_duration_ms\x18\t \x01(\x05R\rmaxDurationMs\x12\x1b\n" +
	"\tpage_size\x18\n" +
	" \x01(\x05R\bpageSize\x12\x1d\n" +
	"\n" +
	"page_token\x18\v \x01(\tR\tpageToken\x12\x19\n" +
	"\border_by\x18\f \x01(\tR\aorderBy\x12'\n" +
	"\x0forder_direction\x18\r \x01(\tR\x0eorderDirection\"\x95\x01\n" +
	"\x18QueryRequestLogsResponse\x120\n" +
	"\x04logs\x18\x01 \x03(\v2\x1c.tars.insights.v1.RequestLogR\x04logs\x12&\n" +
	"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1f\n" +
	"\vtotal_count\x18\x03 \x01(\x03R\n" +
	"totalCount\"5\n" +
	"\x14GetRequestLogRequest\x12\x1d\n" +
	"\n" +
	"request_id\x18\x01 \x01(\tR\trequestId\"\xeb\x0e\n" +
	"\n" +
	"RequestLog\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\tR\x02id\x128\n" +
	"\ttimestamp\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\ttimestamp\x12\x17\n" +
	"\auser_id\x18\x03 \x01(\tR\x06userId\x12\x1c\n" +
	"\n" +
	"api_key_id\x18\x04 \x01(\tR\bapiKeyId\x12$\n" +
	"\x0eapi_key_prefix\x18\x05 \x01(\tR\fapiKeyPrefix\x12 \n" +
	"\fapi_key_hash\x18\x06 \x01(\tR\n" +
	"apiKeyHash\x12&\n" +
	"\x0fapi_key_address\x18\a \x01(\tR\rapiKeyAddress\x12 \n" +
	"\fapi_key_name\x18\b \x01(\tR\n" +
	"apiKeyName\x12\x1d\n" +
	"\n" +
	"model_name\x18\t \x01(\tR\tmodelName\x12!\n" +
	"\finput_tokens\x18\n" +
	" \x01(\x05R\vinputTokens\x12#\n" +
	"\routput_tokens\x18\v \x01(\x05R\foutputTokens\x12A\n" +
	"\x1dinput_tokens_cost_microdollar\x18\f \x01(\x03R\x1ainputTokensCostMicrodollar\x12*\n" +
	"\x11input_tokens_cost\x18\r \x01(\tR\x0finputTokensCost\x12>\n" +
	"\x1cinput_tokens_cost_before_fee\x18\x0e \x01(\tR\x18inputTokensCostBeforeFee\x12C\n" +
	"\x1eoutput_tokens_cost_microdollar\x18\x0f \x01(\x03R\x1boutputTokensCostMicrodollar\x12,\n" +
	"\x12output_tokens_cost\x18\x10 \x01(\tR\x10outputTokensCost\x12@\n" +
	"\x1doutput_tokens_cost_before_fee\x18\x11 \x01(\tR\x19outputTokensCostBeforeFee\x12\x16\n" +
	"\x06status\x18\x12 \x01(\tR\x06status\x12\x1f\n" +
	"\vstatus_code\x18\x13 \x01(\x05R\n" +
	"statusCode\x12@\n" +
	"\x0frequest_headers\x18\x14 \x01(\v2\x17.google.protobuf.StructR\x0erequestHeaders\x12:\n" +
	"\frequest_body\x18\x15 \x01(\v2\x17.google.protobuf.StructR\vrequestBody\x12B\n" +
	"\x10response_headers\x18\x16 \x01(\v2\x17.google.protobuf.StructR\x0fresponseHeaders\x12#\n" +
	"\rresponse_body\x18\x17 \x01(\tR\fresponseBody\x12*\n" +
	"\x11response_body_raw\x18\x18 \x01(\fR\x0fresponseBodyRaw\x12>\n" +
	"\x0ellm_parameters\x18\x19 \x01(\v2\x17.google.protobuf.StructR\rllmParameters\x120\n" +
	"\x14upstream_duration_ms\x18\x1a \x01(\x05R\x12upstreamDurationMs\x12\x1f\n" +
	"\vduration_ms\x18\x1b \x01(\x05R\n" +
	"durationMs\x12\x1d\n" +
	"\n" +
	"request_id\x18\x1c \x01(\tR\trequestId\x129\n" +
	"\n" +
	"created_at\x18\x1d \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x12)\n" +
	"\x10storage_location\x18\x1e \x01(\tR\x0fstorageLocation\x12*\n" +
	"\x11storage_row_index\x18\x1f \x01(\x05R\x0fstorageRowIndex\x12(\n" +
	"\x10storage_batch_id\x18  \x01(\tR\x0estorageBatchId\x12,\n" +
	"\x12use_object_storage\x18! \x01(\bR\x10useObjectStorage\x12.\n" +
	"\x13cached_input_tokens\x18\" \x01(\x05R\x11cachedInputTokens\x127\n" +
	"\x18cached_input_tokens_cost\x18# \x01(\tR\x15cachedInputTokensCost\x12K\n" +
	"#cached_input_tokens_cost_before_fee\x18$ \x01(\tR\x1ecachedInputTokensCostBeforeFee\x12=\n" +
	"\x1bcache_creation_input_tokens\x18% \x01(\x05R\x18cacheCreationInputTokens\x12F\n" +
	" cache_creation_input_tokens_cost\x18& \x01(\tR\x1ccacheCreationInputTokensCost\x12Z\n" +
	"+cache_creation_input_tokens_cost_before_fee\x18' \x01(\tR%cacheCreationInputTokensCostBeforeFee\"\xf8\x01\n" +
	"\x19GetRequestLogStatsRequest\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\tR\x06userId\x12\x1d\n" +
	"\n" +
	"model_name\x18\x02 \x01(\tR\tmodelName\x129\n" +
	"\n" +
	"start_time\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\tstartTime\x125\n" +
	"\bend_time\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\aendTime\x12\x19\n" +
	"\bgroup_by\x18\x05 \x01(\tR\agroupBy\x12\x16\n" +
	"\x06metric\x18\x06 \x01(\tR\x06metric\"\xb3\x02\n" +
	"\x17RequestLogStatsResponse\x121\n" +
	"\x05stats\x18\x01 \x03(\v2\x1b.tars.insights.v1.StatEntryR\x05stats\x12\x1f\n" +
	"\vtotal_count\x18\x02 \x01(\x03R\n" +
	"totalCount\x12,\n" +
	"\x12total_input_tokens\x18\x03 \x01(\x03R\x10totalInputTokens\x12.\n" +
	"\x13total_output_tokens\x18\x04 \x01(\x03R\x11totalOutputTokens\x12\x1d\n" +
	"\n" +
	"total_cost\x18\x05 \x01(\tR\ttotalCost\x12&\n" +
	"\x0favg_duration_ms\x18\x06 \x01(\x01R\ravgDurationMs\x12\x1f\n" +
	"\verror_count\x18\a \x01(\x03R\n" +
	"errorCount\"\xee\x03\n" +
	"\tStatEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05count\x18\x02 \x01(\x03R\x05count\x12\x1f\n" +
	"\verror_count\x18\x03 \x01(\x03R\n" +
	"errorCount\x12!\n" +
	"\finput_tokens\x18\x04 \x01(\x03R\vinputTokens\x12#\n" +
	"\routput_tokens\x18\x05 \x01(\x03R\foutputTokens\x12!\n" +
	"\ftotal_tokens\x18\x06 \x01(\x03R\vtotalTokens\x12\x12\n" +
	"\x04cost\x18\a \x01(\tR\x04cost\x12)\n" +
	"\x10cost_microdollar\x18\b \x01(\x03R\x0fcostMicrodollar\x12&\n" +
	"\x0favg_duration_ms\x18\t \x01(\x03R\ravgDurationMs\x12&\n" +
	"\x0fmin_duration_ms\x18\n" +
	" \x01(\x03R\rminDurationMs\x12&\n" +
	"\x0fmax_duration_ms\x18\v \x01(\x03R\rmaxDurationMs\x12&\n" +
	"\x0fp50_duration_ms\x18\f \x01(\x03R\rp50DurationMs\x12&\n" +
	"\x0fp95_duration_ms\x18\r \x01(\x03R\rp95DurationMs\x12&\n" +
	"\x0fp99_duration_ms\x18\x0e \x01(\x03R\rp99DurationMs2\x8f\a\n" +
	"\x1aCustomerRequestLogsService\x12\xac\x02\n" +
	"\x17ListCustomerRequestLogs\x120.tars.insights.v1.ListCustomerRequestLogsRequest\x1a1.tars.insights.v1.ListCustomerRequestLogsResponse\"\xab\x01\x8a\xb5\x18\x04\n" +
	"\x02\x03\x01\x92\xb5\x18\x16:\binsights:\x04logs:\x04list\xa2\xb5\x18,List request logs scoped to the calling user\xaa\xb5\x18\fRequest Logs\x82\xd3\xe4\x93\x02@\x12>/v1/customers/{customer_id}/projects/{project_id}/request-logs\x90\x02\x01\x12\x8b\x02\n" +
	"\x15GetCustomerRequestLog\x12..tars.insights.v1.GetCustomerRequestLogRequest\x1a\x1c.tars.insights.v1.RequestLog\"\xa3\x01\x8a\xb5\x18\x04\n" +
	"\x02\x03\x01\x92\xb5\x18\x15:\binsights:\x04logs:\x03get\xa2\xb5\x18\x18Get a single request log\xaa\xb5\x18\fRequest Logs\x82\xd3\xe4\x93\x02M\x12K/v1/customers/{customer_id}/projects/{project_id}/request-logs/{request_id}\x90\x02\x01\x12\xb3\x02\n" +
	"\x1aGetCustomerRequestLogStats\x123.tars.insights.v1.GetCustomerRequestLogStatsRequest\x1a).tars.insights.v1.RequestLogStatsResponse\"\xb4\x01\x8a\xb5\x18\x04\n" +
	"\x02\x03\x01\x92\xb5\x18\x17:\binsights:\x04logs:\x05stats\xa2\xb5\x18.Aggregate stats over the caller's request logs\xaa\xb5\x18\fRequest Logs\x82\xd3\xe4\x93\x02F\x12D/v1/customers/{customer_id}/projects/{project_id}/request-logs/stats\x90\x02\x012\x8b\x04\n" +
	"\x12RequestLogsService\x12\xa4\x01\n" +
	"\x10QueryRequestLogs\x12).tars.insights.v1.QueryRequestLogsRequest\x1a*.tars.insights.v1.QueryRequestLogsResponse\"9\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x01\x12\x05admin\xaa\xb5\x18\fRequest Logs\x82\xd3\xe4\x93\x02\x12\x12\x10/v1/request-logs\x90\x02\x01\x12\x9d\x01\n" +
	"\rGetRequestLog\x12&.tars.insights.v1.GetRequestLogRequest\x1a\x1c.tars.insights.v1.RequestLog\"F\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x01\x12\x05admin\xaa\xb5\x18\fRequest Logs\x82\xd3\xe4\x93\x02\x1f\x12\x1d/v1/request-logs/{request_id}\x90\x02\x01\x12\xad\x01\n" +
	"\x12GetRequestLogStats\x12+.tars.insights.v1.GetRequestLogStatsRequest\x1a).tars.insights.v1.RequestLogStatsResponse\"?\x8a\xb5\x18\n" +
	"\n" +
	"\x01\x01\x12\x05admin\xaa\xb5\x18\fRequest Logs\x82\xd3\xe4\x93\x02\x18\x12\x16/v1/request-logs/stats\x90\x02\x01B\xc7\x01\n" +
	"\x14com.tars.insights.v1B\x10RequestLogsProtoP\x01Z;github.com/tetrateio/fraser/api/tars/insights/v1;insightsv1\xa2\x02\x03TIX\xaa\x02\x10Tars.Insights.V1\xca\x02\x10Tars\\Insights\\V1\xe2\x02\x1cTars\\Insights\\V1\\GPBMetadata\xea\x02\x12Tars::Insights::V1b\x06proto3"

var (
	file_tars_insights_v1_request_logs_proto_rawDescOnce sync.Once
	file_tars_insights_v1_request_logs_proto_rawDescData []byte
)

func file_tars_insights_v1_request_logs_proto_rawDescGZIP() []byte {
	file_tars_insights_v1_request_logs_proto_rawDescOnce.Do(func() {
		file_tars_insights_v1_request_logs_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_tars_insights_v1_request_logs_proto_rawDesc), len(file_tars_insights_v1_request_logs_proto_rawDesc)))
	})
	return file_tars_insights_v1_request_logs_proto_rawDescData
}

var file_tars_insights_v1_request_logs_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
var file_tars_insights_v1_request_logs_proto_goTypes = []any{
	(*ListCustomerRequestLogsRequest)(nil),    // 0: tars.insights.v1.ListCustomerRequestLogsRequest
	(*ListCustomerRequestLogsResponse)(nil),   // 1: tars.insights.v1.ListCustomerRequestLogsResponse
	(*GetCustomerRequestLogRequest)(nil),      // 2: tars.insights.v1.GetCustomerRequestLogRequest
	(*GetCustomerRequestLogStatsRequest)(nil), // 3: tars.insights.v1.GetCustomerRequestLogStatsRequest
	(*QueryRequestLogsRequest)(nil),           // 4: tars.insights.v1.QueryRequestLogsRequest
	(*QueryRequestLogsResponse)(nil),          // 5: tars.insights.v1.QueryRequestLogsResponse
	(*GetRequestLogRequest)(nil),              // 6: tars.insights.v1.GetRequestLogRequest
	(*RequestLog)(nil),                        // 7: tars.insights.v1.RequestLog
	(*GetRequestLogStatsRequest)(nil),         // 8: tars.insights.v1.GetRequestLogStatsRequest
	(*RequestLogStatsResponse)(nil),           // 9: tars.insights.v1.RequestLogStatsResponse
	(*StatEntry)(nil),                         // 10: tars.insights.v1.StatEntry
	(*timestamppb.Timestamp)(nil),             // 11: google.protobuf.Timestamp
	(*structpb.Struct)(nil),                   // 12: google.protobuf.Struct
}
var file_tars_insights_v1_request_logs_proto_depIdxs = []int32{
	11, // 0: tars.insights.v1.ListCustomerRequestLogsRequest.start_time:type_name -> google.protobuf.Timestamp
	11, // 1: tars.insights.v1.ListCustomerRequestLogsRequest.end_time:type_name -> google.protobuf.Timestamp
	7,  // 2: tars.insights.v1.ListCustomerRequestLogsResponse.logs:type_name -> tars.insights.v1.RequestLog
	11, // 3: tars.insights.v1.GetCustomerRequestLogStatsRequest.start_time:type_name -> google.protobuf.Timestamp
	11, // 4: tars.insights.v1.GetCustomerRequestLogStatsRequest.end_time:type_name -> google.protobuf.Timestamp
	11, // 5: tars.insights.v1.QueryRequestLogsRequest.start_time:type_name -> google.protobuf.Timestamp
	11, // 6: tars.insights.v1.QueryRequestLogsRequest.end_time:type_name -> google.protobuf.Timestamp
	7,  // 7: tars.insights.v1.QueryRequestLogsResponse.logs:type_name -> tars.insights.v1.RequestLog
	11, // 8: tars.insights.v1.RequestLog.timestamp:type_name -> google.protobuf.Timestamp
	12, // 9: tars.insights.v1.RequestLog.request_headers:type_name -> google.protobuf.Struct
	12, // 10: tars.insights.v1.RequestLog.request_body:type_name -> google.protobuf.Struct
	12, // 11: tars.insights.v1.RequestLog.response_headers:type_name -> google.protobuf.Struct
	12, // 12: tars.insights.v1.RequestLog.llm_parameters:type_name -> google.protobuf.Struct
	11, // 13: tars.insights.v1.RequestLog.created_at:type_name -> google.protobuf.Timestamp
	11, // 14: tars.insights.v1.GetRequestLogStatsRequest.start_time:type_name -> google.protobuf.Timestamp
	11, // 15: tars.insights.v1.GetRequestLogStatsRequest.end_time:type_name -> google.protobuf.Timestamp
	10, // 16: tars.insights.v1.RequestLogStatsResponse.stats:type_name -> tars.insights.v1.StatEntry
	0,  // 17: tars.insights.v1.CustomerRequestLogsService.ListCustomerRequestLogs:input_type -> tars.insights.v1.ListCustomerRequestLogsRequest
	2,  // 18: tars.insights.v1.CustomerRequestLogsService.GetCustomerRequestLog:input_type -> tars.insights.v1.GetCustomerRequestLogRequest
	3,  // 19: tars.insights.v1.CustomerRequestLogsService.GetCustomerRequestLogStats:input_type -> tars.insights.v1.GetCustomerRequestLogStatsRequest
	4,  // 20: tars.insights.v1.RequestLogsService.QueryRequestLogs:input_type -> tars.insights.v1.QueryRequestLogsRequest
	6,  // 21: tars.insights.v1.RequestLogsService.GetRequestLog:input_type -> tars.insights.v1.GetRequestLogRequest
	8,  // 22: tars.insights.v1.RequestLogsService.GetRequestLogStats:input_type -> tars.insights.v1.GetRequestLogStatsRequest
	1,  // 23: tars.insights.v1.CustomerRequestLogsService.ListCustomerRequestLogs:output_type -> tars.insights.v1.ListCustomerRequestLogsResponse
	7,  // 24: tars.insights.v1.CustomerRequestLogsService.GetCustomerRequestLog:output_type -> tars.insights.v1.RequestLog
	9,  // 25: tars.insights.v1.CustomerRequestLogsService.GetCustomerRequestLogStats:output_type -> tars.insights.v1.RequestLogStatsResponse
	5,  // 26: tars.insights.v1.RequestLogsService.QueryRequestLogs:output_type -> tars.insights.v1.QueryRequestLogsResponse
	7,  // 27: tars.insights.v1.RequestLogsService.GetRequestLog:output_type -> tars.insights.v1.RequestLog
	9,  // 28: tars.insights.v1.RequestLogsService.GetRequestLogStats:output_type -> tars.insights.v1.RequestLogStatsResponse
	23, // [23:29] is the sub-list for method output_type
	17, // [17:23] is the sub-list for method input_type
	17, // [17:17] is the sub-list for extension type_name
	17, // [17:17] is the sub-list for extension extendee
	0,  // [0:17] is the sub-list for field type_name
}

func init() { file_tars_insights_v1_request_logs_proto_init() }
func file_tars_insights_v1_request_logs_proto_init() {
	if File_tars_insights_v1_request_logs_proto != nil {
		return
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_tars_insights_v1_request_logs_proto_rawDesc), len(file_tars_insights_v1_request_logs_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   11,
			NumExtensions: 0,
			NumServices:   2,
		},
		GoTypes:           file_tars_insights_v1_request_logs_proto_goTypes,
		DependencyIndexes: file_tars_insights_v1_request_logs_proto_depIdxs,
		MessageInfos:      file_tars_insights_v1_request_logs_proto_msgTypes,
	}.Build()
	File_tars_insights_v1_request_logs_proto = out.File
	file_tars_insights_v1_request_logs_proto_goTypes = nil
	file_tars_insights_v1_request_logs_proto_depIdxs = nil
}
