@vidiemme/copilot-proxy 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/proxy/handler.js +1 -0
- package/dist/proxy/handler.js.map +1 -1
- package/dist/usage/collector.d.ts +11 -1
- package/dist/usage/collector.js +39 -2
- package/dist/usage/collector.js.map +1 -1
- package/dist/usage/copilotUsage.d.ts +25 -0
- package/dist/usage/copilotUsage.js +59 -0
- package/dist/usage/copilotUsage.js.map +1 -0
- package/dist/usage/types.d.ts +2 -0
- package/dist/usage/types.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -122,8 +122,10 @@ incollare segreti nei comandi, nella cronologia della shell o nei file versionat
|
|
|
122
122
|
2. Il proxy determina progetto e developer e inoltra la richiesta all'upstream,
|
|
123
123
|
per default `https://api.githubcopilot.com`.
|
|
124
124
|
3. La risposta viene inoltrata al client mentre un parser estrae l'usage.
|
|
125
|
-
4. I contatori normalizzati vengono accodati e inviati al collector in batch
|
|
126
|
-
|
|
125
|
+
4. I contatori normalizzati vengono accodati e inviati al collector in batch,
|
|
126
|
+
insieme all'addebito che GitHub dichiara in `copilot_usage.total_nano_aiu`.
|
|
127
|
+
Il proxy non calcola prezzi: il collector usa l'addebito quando c'e', altrimenti
|
|
128
|
+
applica il listino, e si occupa di deduplicazione e persistenza.
|
|
127
129
|
|
|
128
130
|
Il token Copilot e la conversazione vanno all'upstream, **non al collector**.
|
|
129
131
|
Il proxy non effettua login o rinnovo delle credenziali Copilot: se ne occupa
|
package/dist/proxy/handler.js
CHANGED
|
@@ -121,6 +121,7 @@ export function createProxyHandler(config, forwarder, detector) {
|
|
|
121
121
|
cacheWriteTokens: parsed.cacheWriteTokens,
|
|
122
122
|
outputTokens: parsed.outputTokens,
|
|
123
123
|
},
|
|
124
|
+
billedNanoAiu: parsed.billedNanoAiu ?? null,
|
|
124
125
|
streamed: streaming,
|
|
125
126
|
durationMs: Date.now() - startedAt,
|
|
126
127
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/proxy/handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/proxy/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIvD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC;IAC3B,cAAc,EAAE,CAAC;IACjB,WAAW,EAAE,CAAC;IACd,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;CAC7B,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,cAAc,CAAC,CAAC;AAEpF,SAAS,UAAU,CACjB,OAAkC,EAClC,aAAiC,EACjC,WAAmB;IAEnB,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,KAAK,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAoB,EACpB,SAAyB,EACzB,QAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAEjD,OAAO,KAAK,UAAU,YAAY,CAAC,OAAuB,EAAE,KAAmB;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE/E,MAAM,WAAW,GAAG,kBAAkB,CACpC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAC/C,MAAM,CACP,CAAC;QAEF,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAsB,CAAC;QAC5F,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEhD,wEAAwE;QACxE,8DAA8D;QAC9D,yCAAyC;QACzC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,WAAW,CAAC;QAC/C,IAAI,UAA0C,CAAC;QAC/C,IAAI,aAAa,KAAK,UAAU,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;YACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAC9B,OAAO,EACP,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,CACtE,CAAC;YACF,IAAI,QAAQ,EAAE,CAAC;gBACb,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;gBACjC,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC1C,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,QAAQ,GACpF,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAC1B,EAAE,CAAC;QAEH,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE;YACpD,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,YAAY,EAAE,QAAQ,CAAC,IAAI;SAC5B,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEpF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,yEAAyE;QACzE,0EAA0E;QAC1E,4BAA4B;QAC5B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa;gBAAE,UAAU,CAAC,KAAK,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,gBAA2D,CAAC;QAChE,IAAI,CAAC;YACH,gBAAgB,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE;gBAChD,MAAM,EAAE,OAAO,CAAC,MAAgB;gBAChC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC9C,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACpD,UAAU;gBACV,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,4BAA4B,CAAC,CAAC;YAC3E,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrE,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;QACrE,MAAM,SAAS,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;QAEhD,MAAM,SAAS,GACb,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC;YAClC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAwB;YACvD,UAAU,EAAE,CAAC;QAEf,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAEhB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAClC,oEAAoE;YACpE,kDAAkD;YAClD,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,SAAS,CAAC,OAAO,CAAC;gBAChB,SAAS;gBACT,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;gBAC7C,WAAW,EAAE,WAAW,CAAC,WAAW;gBACpC,eAAe,EAAE,WAAW,CAAC,eAAe;gBAC5C,SAAS;gBACT,aAAa;gBACb,UAAU,EAAE,UAAU,IAAI,IAAI;gBAC9B,UAAU,EAAE,WAAW,CAAC,UAAU;gBAClC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;gBAClC,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI;gBAC1C,KAAK,EAAE;oBACL,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;oBAC3C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;oBACzC,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC;gBACD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;gBAC3C,QAAQ,EAAE,SAAS;gBACnB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACnC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACxC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QAEtC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC,CAAC;QACH,uEAAuE;QACvE,wCAAwC;QACxC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzB,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type CopilotBilling } from './copilotUsage.js';
|
|
2
|
+
import { type ParsedUsage } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Unisce l'`usage` del protocollo con l'addebito GitHub.
|
|
5
|
+
*
|
|
6
|
+
* Quando GitHub elenca i token addebitati, quei contatori prevalgono: sono gli
|
|
7
|
+
* stessi su cui ha calcolato l'importo, e sono gli unici che distinguono le
|
|
8
|
+
* scritture in cache su `/chat/completions`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function withBilling(parsed: ParsedUsage | undefined, billing: CopilotBilling | undefined): ParsedUsage | undefined;
|
|
2
11
|
/**
|
|
3
12
|
* Raccoglitore di usage indipendente dal dialetto upstream.
|
|
4
13
|
*
|
|
@@ -12,6 +21,7 @@ export declare class UsageCollector {
|
|
|
12
21
|
private readonly streaming;
|
|
13
22
|
private readonly anthropic;
|
|
14
23
|
private readonly openai;
|
|
24
|
+
private billing;
|
|
15
25
|
private readonly sse;
|
|
16
26
|
private nonStreamChunks;
|
|
17
27
|
private nonStreamBytes;
|
package/dist/usage/collector.js
CHANGED
|
@@ -1,6 +1,29 @@
|
|
|
1
|
+
import { findCopilotUsage } from './copilotUsage.js';
|
|
1
2
|
import { AnthropicUsageAccumulator, parseAnthropicResponse } from './parseAnthropic.js';
|
|
2
3
|
import { OpenAIUsageAccumulator, parseOpenAIResponse } from './parseOpenAI.js';
|
|
3
4
|
import { SseParser } from './sse.js';
|
|
5
|
+
import { EMPTY_USAGE, isUsageEmpty } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Unisce l'`usage` del protocollo con l'addebito GitHub.
|
|
8
|
+
*
|
|
9
|
+
* Quando GitHub elenca i token addebitati, quei contatori prevalgono: sono gli
|
|
10
|
+
* stessi su cui ha calcolato l'importo, e sono gli unici che distinguono le
|
|
11
|
+
* scritture in cache su `/chat/completions`.
|
|
12
|
+
*/
|
|
13
|
+
export function withBilling(parsed, billing) {
|
|
14
|
+
if (!billing)
|
|
15
|
+
return parsed;
|
|
16
|
+
const counters = billing.tokens && !isUsageEmpty(billing.tokens) ? billing.tokens : (parsed ?? EMPTY_USAGE);
|
|
17
|
+
const model = parsed?.model ?? billing.model;
|
|
18
|
+
return {
|
|
19
|
+
inputTokens: counters.inputTokens,
|
|
20
|
+
cachedInputTokens: counters.cachedInputTokens,
|
|
21
|
+
cacheWriteTokens: counters.cacheWriteTokens,
|
|
22
|
+
outputTokens: counters.outputTokens,
|
|
23
|
+
...(model ? { model } : {}),
|
|
24
|
+
billedNanoAiu: billing.totalNanoAiu,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
4
27
|
/**
|
|
5
28
|
* Raccoglitore di usage indipendente dal dialetto upstream.
|
|
6
29
|
*
|
|
@@ -14,6 +37,7 @@ export class UsageCollector {
|
|
|
14
37
|
streaming;
|
|
15
38
|
anthropic = new AnthropicUsageAccumulator();
|
|
16
39
|
openai = new OpenAIUsageAccumulator();
|
|
40
|
+
billing;
|
|
17
41
|
sse;
|
|
18
42
|
nonStreamChunks = [];
|
|
19
43
|
nonStreamBytes = 0;
|
|
@@ -24,6 +48,8 @@ export class UsageCollector {
|
|
|
24
48
|
this.sse = new SseParser((payload) => {
|
|
25
49
|
this.anthropic.handleEvent(payload);
|
|
26
50
|
this.openai.handleEvent(payload);
|
|
51
|
+
// L'importo e' cumulativo per la richiesta: vale l'ultimo riportato.
|
|
52
|
+
this.billing = findCopilotUsage(payload) ?? this.billing;
|
|
27
53
|
});
|
|
28
54
|
}
|
|
29
55
|
push(chunk) {
|
|
@@ -39,7 +65,7 @@ export class UsageCollector {
|
|
|
39
65
|
finish() {
|
|
40
66
|
if (this.streaming) {
|
|
41
67
|
this.sse.end();
|
|
42
|
-
return this.anthropic.result() ?? this.openai.result();
|
|
68
|
+
return withBilling(this.anthropic.result() ?? this.openai.result(), this.billing);
|
|
43
69
|
}
|
|
44
70
|
if (this.nonStreamChunks.length === 0)
|
|
45
71
|
return undefined;
|
|
@@ -53,9 +79,20 @@ export class UsageCollector {
|
|
|
53
79
|
finally {
|
|
54
80
|
this.nonStreamChunks = [];
|
|
55
81
|
}
|
|
56
|
-
return
|
|
82
|
+
return withBilling(parseNonStreaming(body), findCopilotUsage(body));
|
|
57
83
|
}
|
|
58
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Il parser Anthropic accetta qualsiasi `usage` e su un corpo OpenAI darebbe
|
|
87
|
+
* zero token: il dialetto si riconosce dal tipo del messaggio o dai campi di
|
|
88
|
+
* cache propri di Anthropic.
|
|
89
|
+
*/
|
|
90
|
+
function parseNonStreaming(body) {
|
|
91
|
+
const root = typeof body === 'object' && body !== null ? body : undefined;
|
|
92
|
+
const usage = typeof root?.usage === 'object' && root.usage !== null ? root.usage : {};
|
|
93
|
+
const anthropic = root?.type === 'message' || 'cache_read_input_tokens' in usage || 'cache_creation_input_tokens' in usage;
|
|
94
|
+
return anthropic ? parseAnthropicResponse(body) : parseOpenAIResponse(body);
|
|
95
|
+
}
|
|
59
96
|
/** Euristica: la risposta e' uno stream SSE? */
|
|
60
97
|
export function isStreamingResponse(contentType) {
|
|
61
98
|
return (contentType ?? '').toLowerCase().includes('text/event-stream');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/usage/collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/usage/collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type TokenUsage } from './types.js';
|
|
2
|
+
/** Addebito che GitHub allega a ogni risposta, nel blocco `copilot_usage`. */
|
|
3
|
+
export interface CopilotBilling {
|
|
4
|
+
/** `total_nano_aiu`: 1e9 nano-AIU = 1 AI credit. */
|
|
5
|
+
totalNanoAiu: number;
|
|
6
|
+
/** Contatori dalle righe `token_details`, presenti se GitHub le ha elencate. */
|
|
7
|
+
tokens?: TokenUsage;
|
|
8
|
+
/** Modello su cui GitHub ha addebitato i token. */
|
|
9
|
+
model?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Legge il blocco `copilot_usage` di una risposta GitHub Copilot.
|
|
13
|
+
*
|
|
14
|
+
* Le righe di `token_details` usano la stessa convenzione dei nostri contatori
|
|
15
|
+
* (input senza cache, letture, scritture, output). Sono anche l'unico posto
|
|
16
|
+
* in cui `/chat/completions` riporta le scritture in cache dei modelli
|
|
17
|
+
* Anthropic: l'`usage` standard le conta dentro `prompt_tokens`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function readCopilotUsage(value: unknown): CopilotBilling | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Cerca `copilot_usage` in un payload: al primo livello in tutti i dialetti
|
|
22
|
+
* (risposta intera, chunk o evento SSE), e per prudenza anche dentro
|
|
23
|
+
* `response` / `message`, dove i due protocolli annidano il resto.
|
|
24
|
+
*/
|
|
25
|
+
export declare function findCopilotUsage(payload: unknown): CopilotBilling | undefined;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { coerceTokenCount } from './types.js';
|
|
2
|
+
function asObject(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : undefined;
|
|
4
|
+
}
|
|
5
|
+
const TOKEN_FIELDS = {
|
|
6
|
+
input: 'inputTokens',
|
|
7
|
+
cache_read: 'cachedInputTokens',
|
|
8
|
+
cache_write: 'cacheWriteTokens',
|
|
9
|
+
output: 'outputTokens',
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Legge il blocco `copilot_usage` di una risposta GitHub Copilot.
|
|
13
|
+
*
|
|
14
|
+
* Le righe di `token_details` usano la stessa convenzione dei nostri contatori
|
|
15
|
+
* (input senza cache, letture, scritture, output). Sono anche l'unico posto
|
|
16
|
+
* in cui `/chat/completions` riporta le scritture in cache dei modelli
|
|
17
|
+
* Anthropic: l'`usage` standard le conta dentro `prompt_tokens`.
|
|
18
|
+
*/
|
|
19
|
+
export function readCopilotUsage(value) {
|
|
20
|
+
const block = asObject(value);
|
|
21
|
+
if (!block)
|
|
22
|
+
return undefined;
|
|
23
|
+
const nano = block.total_nano_aiu;
|
|
24
|
+
if (typeof nano !== 'number' || !Number.isFinite(nano) || nano < 0)
|
|
25
|
+
return undefined;
|
|
26
|
+
const billing = { totalNanoAiu: Math.round(nano) };
|
|
27
|
+
if (!Array.isArray(block.token_details))
|
|
28
|
+
return billing;
|
|
29
|
+
const tokens = { inputTokens: 0, cachedInputTokens: 0, cacheWriteTokens: 0, outputTokens: 0 };
|
|
30
|
+
let recognized = false;
|
|
31
|
+
for (const item of block.token_details) {
|
|
32
|
+
const detail = asObject(item);
|
|
33
|
+
const field = typeof detail?.token_type === 'string' ? TOKEN_FIELDS[detail.token_type] : undefined;
|
|
34
|
+
if (!detail || !field)
|
|
35
|
+
continue;
|
|
36
|
+
recognized = true;
|
|
37
|
+
tokens[field] += coerceTokenCount(detail.token_count);
|
|
38
|
+
if (!billing.model && typeof detail.model === 'string' && detail.model.length > 0) {
|
|
39
|
+
billing.model = detail.model;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (recognized)
|
|
43
|
+
billing.tokens = tokens;
|
|
44
|
+
return billing;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Cerca `copilot_usage` in un payload: al primo livello in tutti i dialetti
|
|
48
|
+
* (risposta intera, chunk o evento SSE), e per prudenza anche dentro
|
|
49
|
+
* `response` / `message`, dove i due protocolli annidano il resto.
|
|
50
|
+
*/
|
|
51
|
+
export function findCopilotUsage(payload) {
|
|
52
|
+
const root = asObject(payload);
|
|
53
|
+
if (!root)
|
|
54
|
+
return undefined;
|
|
55
|
+
return (readCopilotUsage(root.copilot_usage) ??
|
|
56
|
+
readCopilotUsage(asObject(root.response)?.copilot_usage) ??
|
|
57
|
+
readCopilotUsage(asObject(root.message)?.copilot_usage));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=copilotUsage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilotUsage.js","sourceRoot":"","sources":["../../src/usage/copilotUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,YAAY,CAAC;AAI/D,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5G,CAAC;AAYD,MAAM,YAAY,GAAqC;IACrD,KAAK,EAAE,aAAa;IACpB,UAAU,EAAE,mBAAmB;IAC/B,WAAW,EAAE,kBAAkB;IAC/B,MAAM,EAAE,cAAc;CACvB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC;IAClC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAErF,MAAM,OAAO,GAAmB,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;QAAE,OAAO,OAAO,CAAC;IAExD,MAAM,MAAM,GAAe,EAAE,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC1G,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,OAAO,MAAM,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnG,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK;YAAE,SAAS;QAChC,UAAU,GAAG,IAAI,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClF,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,IAAI,UAAU;QAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IACxC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,CACL,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;QACpC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;QACxD,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CACxD,CAAC;AACJ,CAAC"}
|
package/dist/usage/types.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export { totalInputTokens };
|
|
|
16
16
|
export interface ParsedUsage extends TokenUsage {
|
|
17
17
|
/** Id modello dichiarato dalla risposta upstream, se presente. */
|
|
18
18
|
model?: string;
|
|
19
|
+
/** Addebito GitHub della richiesta (`copilot_usage.total_nano_aiu`), se riportato. */
|
|
20
|
+
billedNanoAiu?: number;
|
|
19
21
|
}
|
|
20
22
|
export declare const EMPTY_USAGE: TokenUsage;
|
|
21
23
|
export declare function isUsageEmpty(usage: TokenUsage): boolean;
|
package/dist/usage/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/usage/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,kCAAkC,CAAC;AAgBxF,OAAO,EAAE,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/usage/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,kCAAkC,CAAC;AAgBxF,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAS5B,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,WAAW,EAAE,CAAC;IACd,iBAAiB,EAAE,CAAC;IACpB,gBAAgB,EAAE,CAAC;IACnB,YAAY,EAAE,CAAC;CAChB,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,OAAO,CACL,KAAK,CAAC,WAAW,KAAK,CAAC;QACvB,KAAK,CAAC,iBAAiB,KAAK,CAAC;QAC7B,KAAK,CAAC,gBAAgB,KAAK,CAAC;QAC5B,KAAK,CAAC,YAAY,KAAK,CAAC,CACzB,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,KAAc;IAC3B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vidiemme/copilot-proxy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Proxy locale: misura il consumo di token di GitHub Copilot e lo attribuisce al progetto",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"prepublishOnly": "npm run build"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@vidiemme/copilot-usage-contract": "^0.1.
|
|
41
|
+
"@vidiemme/copilot-usage-contract": "^0.1.3",
|
|
42
42
|
"fastify": "^5.12.7",
|
|
43
43
|
"jsonc-parser": "^3.3.1",
|
|
44
44
|
"undici": "^8.12.3",
|