Skip to content
Open
Changes from all commits
Commits
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
16 changes: 11 additions & 5 deletions apps/ccusage/src/data-loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -519,17 +519,23 @@ function extractUniqueModels<T>(

/**
* Create a unique identifier for deduplication using message ID and request ID
* Some API proxies may not include requestId, so we fall back to using only messageId
*/
export function createUniqueHash(data: UsageData): string | null {
const messageId = data.message.id;
const requestId = data.requestId;

if (messageId == null || requestId == null) {
if (messageId == null) {
return null;
}

// Create a hash using simple concatenation
return `${messageId}:${requestId}`;
// Create a hash using message ID and request ID if available
// Fall back to message ID only for API proxies that don't include request ID
if (requestId != null) {
return `${messageId}:${requestId}`;
}

return messageId;
}

/**
Expand Down Expand Up @@ -4254,7 +4260,7 @@ if (import.meta.vitest != null) {
expect(hash).toBeNull();
});

it('should return null when request id is missing', () => {
it('should return message id only when request id is missing', () => {
const data = {
timestamp: createISOTimestamp('2025-01-10T10:00:00Z'),
message: {
Expand All @@ -4267,7 +4273,7 @@ if (import.meta.vitest != null) {
};

const hash = createUniqueHash(data);
expect(hash).toBeNull();
expect(hash).toBe('msg_123');
});
});

Expand Down