@danypops/jittor 0.18.1 → 0.19.2
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/package.json +9 -4
- package/src/daemon.ts +16 -0
- package/src/index.ts +135 -1
- package/src/vehicle/operation-types.ts +48 -0
- package/src/vehicle/registration.ts +1 -2
- package/src/vehicle/service.ts +2 -40
package/package.json
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danypops/jittor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.2",
|
|
4
4
|
"description": "Just-in-Time Token Optimization Router for Pi -- token and context observability with optimization policies",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.ts",
|
|
7
7
|
"types": "./src/index.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./src/index.ts",
|
|
10
|
+
"./package.json": "./package.json"
|
|
11
|
+
},
|
|
12
|
+
"sideEffects": false,
|
|
8
13
|
"keywords": ["llm-router", "token-budget"],
|
|
9
14
|
"bin": {
|
|
10
15
|
"jittor": "src/cli.ts"
|
|
@@ -27,9 +32,9 @@
|
|
|
27
32
|
}
|
|
28
33
|
},
|
|
29
34
|
"dependencies": {
|
|
30
|
-
"@danypops/vehicle-core": "^0.
|
|
31
|
-
"@danypops/vehicle-server": "^0.
|
|
32
|
-
"@danypops/vehicle-client": "^0.
|
|
35
|
+
"@danypops/vehicle-core": "^0.17.1",
|
|
36
|
+
"@danypops/vehicle-server": "^0.25.1",
|
|
37
|
+
"@danypops/vehicle-client": "^0.10.1",
|
|
33
38
|
"google-auth-library": "^10.9.0",
|
|
34
39
|
"gpt-tokenizer": "^3.4.0"
|
|
35
40
|
},
|
package/src/daemon.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { type RunningDaemon, startDaemon as startDaemonKit } from "@danypops/vehicle-server/daemon";
|
|
3
|
+
import { openVehicleMetricsStore } from "@danypops/vehicle-server/metrics";
|
|
4
|
+
import { createVehicleMetricsMiddleware } from "@danypops/vehicle-server/metrics-middleware";
|
|
5
|
+
import { registerVehicleMetricsOperations } from "@danypops/vehicle-server/metrics-operations";
|
|
3
6
|
import { ArtificialAnalysisDirectSource } from "./artificial-analysis/benchmark-source.ts";
|
|
4
7
|
import { CodexTelemetrySource } from "./codex/source.ts";
|
|
5
8
|
import { MAINTENANCE_INTERVAL_MS, TELEMETRY_POLL_INTERVAL_MS } from "./constants.ts";
|
|
@@ -117,6 +120,18 @@ export async function startDaemon(
|
|
|
117
120
|
});
|
|
118
121
|
const service = new JittorService(metrics, router, benchmarks, modelRanker, sessionIdentity, undefined, catalog, usageImporter, exporter);
|
|
119
122
|
|
|
123
|
+
// Records how often each real operation is invoked (server-side, every caller) plus, via
|
|
124
|
+
// vehicle_usage.recordClientEvent, client-observed Vehicle Shell meta-tool calls -- see
|
|
125
|
+
// @danypops/vehicle-server's own metrics README section. Wired directly onto the same registry
|
|
126
|
+
// every real jittor operation is already registered on, so it's discoverable through the exact
|
|
127
|
+
// same tools_list/tools_man path as any other operation. operationPrefix: "vehicle_usage", NOT
|
|
128
|
+
// the default "metrics" -- jittor's own domain already owns a real, extensive metrics.*
|
|
129
|
+
// namespace (metrics.query/metrics.record/metrics.usage_series/...), a completely different
|
|
130
|
+
// concept (LLM usage/cost observations) from this module's tool/operation usage metrics.
|
|
131
|
+
const vehicleMetrics = openVehicleMetricsStore(paths.metrics);
|
|
132
|
+
service.vehicleRegistry.useExecutionMiddleware(createVehicleMetricsMiddleware(vehicleMetrics, "jittor"));
|
|
133
|
+
registerVehicleMetricsOperations(service.vehicleRegistry, vehicleMetrics, "jittor", { operationPrefix: "vehicle_usage" });
|
|
134
|
+
|
|
120
135
|
const daemon = await startDaemonKit({
|
|
121
136
|
daemonLabel: "Jittor",
|
|
122
137
|
handlePath: paths.handle,
|
|
@@ -155,6 +170,7 @@ export async function startDaemon(
|
|
|
155
170
|
onShutdown: async () => {
|
|
156
171
|
await exporter.shutdown();
|
|
157
172
|
service.close();
|
|
173
|
+
vehicleMetrics.close();
|
|
158
174
|
},
|
|
159
175
|
});
|
|
160
176
|
|
package/src/index.ts
CHANGED
|
@@ -6,7 +6,141 @@ export {
|
|
|
6
6
|
parseAnthropicRateLimitHeaders,
|
|
7
7
|
} from "./anthropic/rate-limits.ts";
|
|
8
8
|
export { parseCodexRateLimitHeaders } from "./codex/telemetry.ts";
|
|
9
|
-
export
|
|
9
|
+
export {
|
|
10
|
+
BENCHMARK_DEFAULT_QUERY_LIMIT,
|
|
11
|
+
BENCHMARK_IDENTITY_MAX_CHARACTERS,
|
|
12
|
+
BENCHMARK_MAX_MODELS_PER_SOURCE,
|
|
13
|
+
BENCHMARK_MAX_OBSERVATIONS_PER_SNAPSHOT,
|
|
14
|
+
BENCHMARK_MAX_QUERY_LIMIT,
|
|
15
|
+
BENCHMARK_MAX_TEXT_CHARACTERS,
|
|
16
|
+
BENCHMARK_REFRESH_INTERVAL_MS,
|
|
17
|
+
BENCHMARK_SOURCE_MAX_RESPONSE_BYTES,
|
|
18
|
+
BENCHMARK_SOURCE_MAX_TOTAL_RESPONSE_BYTES,
|
|
19
|
+
BENCHMARK_STORE_QUERY_LIMIT,
|
|
20
|
+
BENCHMARK_TUI_MAX_CANDIDATES,
|
|
21
|
+
BENCHMARK_TUI_MAX_PROVENANCE_PER_CANDIDATE,
|
|
22
|
+
CACHE_ECONOMICS_LOSS_CORRELATION_WINDOW_MS,
|
|
23
|
+
CACHE_ECONOMICS_MAX_MISSED_OPPORTUNITIES,
|
|
24
|
+
CACHE_ECONOMICS_MAX_MODEL_GROUPS,
|
|
25
|
+
CACHE_ECONOMICS_MAX_STABLE_PREFIX_POINTS,
|
|
26
|
+
CACHE_ECONOMICS_MAX_TASK_GROUPS,
|
|
27
|
+
CACHE_ECONOMICS_QUERY_LIMIT,
|
|
28
|
+
CATALOG_LONG_CONTEXT_THRESHOLD_TOKENS,
|
|
29
|
+
CATALOG_PRICE_TOKEN_UNIT,
|
|
30
|
+
CLI_AVAILABLE_ROUTES_MAX,
|
|
31
|
+
CLI_METRICS_HUMAN_MAX_ROWS,
|
|
32
|
+
CODEX_ERROR_MESSAGE_LIMIT,
|
|
33
|
+
CODEX_RECOVERY_ATTEMPT_WINDOW_MS,
|
|
34
|
+
CODEX_RECOVERY_BASE_DELAY_MS,
|
|
35
|
+
CODEX_RECOVERY_JITTER_RATIO,
|
|
36
|
+
CODEX_RECOVERY_MAX_ATTEMPTS,
|
|
37
|
+
CODEX_RECOVERY_MAX_DELAY_MS,
|
|
38
|
+
CODEX_RETRY_AFTER_MAX_MS,
|
|
39
|
+
COMPACTION_DURATION_ESTIMATE_MAX_SAMPLES,
|
|
40
|
+
COMPACTION_DURATION_ESTIMATE_MIN_SAMPLES,
|
|
41
|
+
CONTEXT_ASSESSMENT_DEFAULT_WINDOW_MS,
|
|
42
|
+
CONTEXT_ASSESSMENT_QUERY_LIMIT,
|
|
43
|
+
CONTEXT_DEFAULT_RESERVE_TOKENS,
|
|
44
|
+
CONTEXT_ESTIMATE_CHARACTERS_PER_TOKEN,
|
|
45
|
+
CONTEXT_EVENT_DEDUP_LIMIT,
|
|
46
|
+
CONTEXT_HUB_CONFIDENCE_TIERS,
|
|
47
|
+
CONTEXT_HUB_CONTRIBUTION_CHANNEL,
|
|
48
|
+
CONTEXT_HUB_CONTRIBUTION_DEDUP_LIMIT,
|
|
49
|
+
CONTEXT_HUB_CONTRIBUTION_MAX_AGE_MS,
|
|
50
|
+
CONTEXT_HUB_CONTRIBUTION_SCHEMA,
|
|
51
|
+
CONTEXT_HUB_ITEM_LABEL_MAX_CHARACTERS,
|
|
52
|
+
CONTEXT_HUB_MAX_ITEM_DEPTH,
|
|
53
|
+
CONTEXT_HUB_MAX_ITEMS_PER_SEGMENT,
|
|
54
|
+
CONTEXT_HUB_PRODUCER_NAME_MAX_CHARACTERS,
|
|
55
|
+
CONTEXT_HUB_SEGMENT_KEY_MAX_CHARACTERS,
|
|
56
|
+
CONTEXT_HUB_SEGMENT_LABEL_MAX_CHARACTERS,
|
|
57
|
+
CONTEXT_OBSERVATION_MAX_AGE_MS,
|
|
58
|
+
CONTEXT_OBSERVATION_MAX_CHARACTERS,
|
|
59
|
+
CONTEXT_TREE_MAX_NODES,
|
|
60
|
+
DATABASE_FILENAME,
|
|
61
|
+
DEFAULT_QUERY_LIMIT,
|
|
62
|
+
FOOTER_BAR_MAX_WIDTH,
|
|
63
|
+
FOOTER_BAR_MIN_WIDTH,
|
|
64
|
+
FOOTER_COMPACTION_BLINK_HALF_PERIOD_MS,
|
|
65
|
+
FOOTER_COMPACTION_RENDER_INTERVAL_MS,
|
|
66
|
+
FOOTER_CONTEXT_ACCENT_FRACTION,
|
|
67
|
+
FOOTER_CONTEXT_ERROR_FRACTION,
|
|
68
|
+
FOOTER_CONTEXT_WARNING_FRACTION,
|
|
69
|
+
FOOTER_WIDE_TERMINAL_WIDTH,
|
|
70
|
+
GOOGLE_ADC_TOKEN_REFRESH_SKEW_MS,
|
|
71
|
+
GOOGLE_VERTEX_BUDGET_CONFIDENCE,
|
|
72
|
+
GOOGLE_VERTEX_BUDGET_DISPLAY_NAME_MAX_CHARACTERS,
|
|
73
|
+
GOOGLE_VERTEX_BUDGET_MAX_MESSAGES_PER_PULL,
|
|
74
|
+
HANDLE_FILENAME,
|
|
75
|
+
HUMAN_STATUS_MAX_SOURCES,
|
|
76
|
+
HUMAN_TEXT_FIELD_MAX_CHARACTERS,
|
|
77
|
+
JITTOR_EXTENSION_SETTINGS_FILENAME,
|
|
78
|
+
JITTOR_STATE_DIRECTORY,
|
|
79
|
+
MAINTENANCE_INTERVAL_MS,
|
|
80
|
+
MAX_DYNAMIC_ROUTES,
|
|
81
|
+
MAX_QUERY_LIMIT,
|
|
82
|
+
MAX_USAGE_BUCKETS,
|
|
83
|
+
METRIC_ATTRIBUTES_MAX_DEPTH,
|
|
84
|
+
METRIC_ATTRIBUTES_MAX_SERIALIZED_CHARACTERS,
|
|
85
|
+
METRIC_BATCH_MAX_OBSERVATIONS,
|
|
86
|
+
METRIC_IDENTITY_MAX_CHARACTERS,
|
|
87
|
+
MILLISECONDS_PER_DAY,
|
|
88
|
+
MILLISECONDS_PER_HOUR,
|
|
89
|
+
MILLISECONDS_PER_MINUTE,
|
|
90
|
+
MILLISECONDS_PER_SECOND,
|
|
91
|
+
MODEL_AGGREGATE_MAX_GROUPS,
|
|
92
|
+
MODEL_AGGREGATE_MAX_ROWS,
|
|
93
|
+
MODEL_CATALOG_DEFAULT_QUERY_LIMIT,
|
|
94
|
+
MODEL_CATALOG_FRESHNESS_MS,
|
|
95
|
+
MODEL_CATALOG_MAX_ENTRIES,
|
|
96
|
+
MODEL_CATALOG_MAX_QUERY_LIMIT,
|
|
97
|
+
MODEL_CATALOG_MAX_RESPONSE_BYTES,
|
|
98
|
+
MODEL_CATALOG_REQUEST_TIMEOUT_MS,
|
|
99
|
+
MODEL_CATALOG_STORE_QUERY_LIMIT,
|
|
100
|
+
MODEL_OBSERVATION_FRESH_MS,
|
|
101
|
+
MODEL_OBSERVATION_IDENTITY_MAX_CHARACTERS,
|
|
102
|
+
MODEL_RANKING_DEFAULT_CONTEXT_WEIGHT,
|
|
103
|
+
MODEL_RANKING_DEFAULT_COST_WEIGHT,
|
|
104
|
+
MODEL_RANKING_DEFAULT_LATENCY_WEIGHT,
|
|
105
|
+
MODEL_RANKING_DEFAULT_QUALITY_WEIGHT,
|
|
106
|
+
MODEL_RANKING_DEFAULT_RELIABILITY_WEIGHT,
|
|
107
|
+
MODEL_RANKING_MAX_SOURCES,
|
|
108
|
+
OTLP_EXPORT_BATCH_SIZE,
|
|
109
|
+
OTLP_EXPORT_INTERVAL_MS,
|
|
110
|
+
OTLP_EXPORT_MAX_QUEUE_SIZE,
|
|
111
|
+
OTLP_EXPORT_MAX_RETRIES,
|
|
112
|
+
OTLP_EXPORT_TIMEOUT_MS,
|
|
113
|
+
PAPYRUS_CONTEXT_INJECTION_CHANNEL,
|
|
114
|
+
PAPYRUS_CONTEXT_INJECTION_SCHEMA,
|
|
115
|
+
PAPYRUS_TASK_FOCUS_CHANNEL,
|
|
116
|
+
PAPYRUS_TASK_FOCUS_SCHEMA,
|
|
117
|
+
PI_USAGE_IMPORT_MAX_DURATION_MS,
|
|
118
|
+
PI_USAGE_IMPORT_MAX_ENTRIES,
|
|
119
|
+
PI_USAGE_IMPORT_MAX_FILE_BYTES,
|
|
120
|
+
PI_USAGE_IMPORT_MAX_FILES,
|
|
121
|
+
PI_USAGE_IMPORT_MAX_RECORDS,
|
|
122
|
+
PI_USAGE_IMPORT_MAX_TOTAL_BYTES,
|
|
123
|
+
PRUNE_MIN_AGE_MS,
|
|
124
|
+
ROUTER_MAX_SESSION_SCOPES,
|
|
125
|
+
ROUTER_SESSION_ID_MAX_CHARACTERS,
|
|
126
|
+
SERVICE_MAX_BODY_BYTES,
|
|
127
|
+
SERVICE_MAX_RESPONSE_BYTES,
|
|
128
|
+
SESSION_IDENTITY_MAX_ROWS,
|
|
129
|
+
SQLITE_BUSY_TIMEOUT_MS,
|
|
130
|
+
SYSTEMD_UNIT_NAME,
|
|
131
|
+
TASK_COST_QUERY_LIMIT,
|
|
132
|
+
TASK_FOCUS_EVENT_MAX_AGE_MS,
|
|
133
|
+
TASK_FOCUS_ID_MAX_LENGTH,
|
|
134
|
+
TELEMETRY_POLL_INTERVAL_MS,
|
|
135
|
+
TELEMETRY_STALE_AFTER_MS,
|
|
136
|
+
TOKEN_FILENAME,
|
|
137
|
+
USAGE_AGGREGATE_MAX_ROWS,
|
|
138
|
+
USAGE_CHART_HEIGHT,
|
|
139
|
+
USAGE_MAX_DISTINCT_SCOPES,
|
|
140
|
+
USAGE_PER_SCOPE_QUERY_LIMIT,
|
|
141
|
+
USAGE_RENDER_MAX_SERIES,
|
|
142
|
+
USAGE_Y_AXIS_WIDTH,
|
|
143
|
+
} from "./constants.ts";
|
|
10
144
|
export {
|
|
11
145
|
classifyGoogleVertexFailure,
|
|
12
146
|
type GoogleVertexFailure,
|
|
@@ -1,3 +1,51 @@
|
|
|
1
1
|
/** One capability module's contribution to the operation dispatch table: a bounded set of operation names, each backed by a handler that only needs the collaborators its own factory was given. */
|
|
2
2
|
export type OperationHandler = (input: Record<string, unknown>) => unknown | Promise<unknown>;
|
|
3
3
|
export type OperationHandlerMap = Partial<Record<string, OperationHandler>>;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The full, exhaustive operation surface -- shared by service.ts (dispatch/typed execute) and
|
|
7
|
+
* registration.ts (Vehicle projection) so neither module needs to import the other for this type.
|
|
8
|
+
* Living here (not in either module) is what breaks the service.ts<->registration.ts circular
|
|
9
|
+
* dependency: previously registration.ts `import type`-ed OperationName back from service.ts,
|
|
10
|
+
* while service.ts value-imported registerJittorVehicleOperations from registration.ts.
|
|
11
|
+
*/
|
|
12
|
+
export const EXPECTED_OPERATION_NAMES = [
|
|
13
|
+
"metrics.record",
|
|
14
|
+
"metrics.record_batch",
|
|
15
|
+
"metrics.query",
|
|
16
|
+
"metrics.distinct_scopes",
|
|
17
|
+
"metrics.usage_series",
|
|
18
|
+
"metrics.cost_by_task",
|
|
19
|
+
"metrics.prune",
|
|
20
|
+
"benchmark.refresh",
|
|
21
|
+
"benchmark.status",
|
|
22
|
+
"benchmark.query",
|
|
23
|
+
"catalog.refresh",
|
|
24
|
+
"catalog.status",
|
|
25
|
+
"catalog.query",
|
|
26
|
+
"usage.import",
|
|
27
|
+
"usage.import_status",
|
|
28
|
+
"usage.import_cancel",
|
|
29
|
+
"export.status",
|
|
30
|
+
"export.flush",
|
|
31
|
+
"session.register",
|
|
32
|
+
"session.release",
|
|
33
|
+
"models.rank",
|
|
34
|
+
"context.assess",
|
|
35
|
+
"context.delta",
|
|
36
|
+
"context.snapshot",
|
|
37
|
+
"compaction.estimate",
|
|
38
|
+
"service.checkpoint",
|
|
39
|
+
"telemetry.poll",
|
|
40
|
+
"router.status",
|
|
41
|
+
"router.decide",
|
|
42
|
+
"router.pause",
|
|
43
|
+
"router.resume",
|
|
44
|
+
"router.override",
|
|
45
|
+
"router.clear_override",
|
|
46
|
+
"router.current_route",
|
|
47
|
+
"router.available_routes",
|
|
48
|
+
"cache.economics",
|
|
49
|
+
] as const;
|
|
50
|
+
|
|
51
|
+
export type OperationName = (typeof EXPECTED_OPERATION_NAMES)[number];
|
|
@@ -26,8 +26,7 @@ import type { VehicleEffect, VehicleIdempotency } from "@danypops/vehicle-core";
|
|
|
26
26
|
import { bindVehicleOperation, defineErrorMapping, defineVehicleOperation, passthroughVehicleSchema } from "@danypops/vehicle-core";
|
|
27
27
|
import type { VehicleRegistry } from "@danypops/vehicle-server";
|
|
28
28
|
import { InvalidSessionSecretError } from "../sessions/identity.ts";
|
|
29
|
-
import type { OperationHandlerMap } from "./operation-types.ts";
|
|
30
|
-
import type { OperationName } from "./service.ts";
|
|
29
|
+
import type { OperationHandlerMap, OperationName } from "./operation-types.ts";
|
|
31
30
|
|
|
32
31
|
/** Preserves the legacy route's 403 for invalid session credentials; every other rejection remains validation. */
|
|
33
32
|
const withJittorErrorParity = defineErrorMapping([
|
package/src/vehicle/service.ts
CHANGED
|
@@ -34,52 +34,14 @@ import { contextOperations } from "./context-operations.ts";
|
|
|
34
34
|
import { exportOperations } from "./export-operations.ts";
|
|
35
35
|
import { metricsOperations } from "./metric-operations.ts";
|
|
36
36
|
import { modelRankingOperations } from "./model-ranking-operations.ts";
|
|
37
|
-
import type
|
|
37
|
+
import { EXPECTED_OPERATION_NAMES, type OperationHandlerMap, type OperationName } from "./operation-types.ts";
|
|
38
38
|
import { registerJittorVehicleOperations } from "./registration.ts";
|
|
39
39
|
import { routerOperations } from "./routing-operations.ts";
|
|
40
40
|
import { sessionIdentityOperations } from "./session-operations.ts";
|
|
41
41
|
import { usageImportOperations } from "./usage-import-operations.ts";
|
|
42
42
|
|
|
43
|
-
export
|
|
44
|
-
"metrics.record",
|
|
45
|
-
"metrics.record_batch",
|
|
46
|
-
"metrics.query",
|
|
47
|
-
"metrics.distinct_scopes",
|
|
48
|
-
"metrics.usage_series",
|
|
49
|
-
"metrics.cost_by_task",
|
|
50
|
-
"metrics.prune",
|
|
51
|
-
"benchmark.refresh",
|
|
52
|
-
"benchmark.status",
|
|
53
|
-
"benchmark.query",
|
|
54
|
-
"catalog.refresh",
|
|
55
|
-
"catalog.status",
|
|
56
|
-
"catalog.query",
|
|
57
|
-
"usage.import",
|
|
58
|
-
"usage.import_status",
|
|
59
|
-
"usage.import_cancel",
|
|
60
|
-
"export.status",
|
|
61
|
-
"export.flush",
|
|
62
|
-
"session.register",
|
|
63
|
-
"session.release",
|
|
64
|
-
"models.rank",
|
|
65
|
-
"context.assess",
|
|
66
|
-
"context.delta",
|
|
67
|
-
"context.snapshot",
|
|
68
|
-
"compaction.estimate",
|
|
69
|
-
"service.checkpoint",
|
|
70
|
-
"telemetry.poll",
|
|
71
|
-
"router.status",
|
|
72
|
-
"router.decide",
|
|
73
|
-
"router.pause",
|
|
74
|
-
"router.resume",
|
|
75
|
-
"router.override",
|
|
76
|
-
"router.clear_override",
|
|
77
|
-
"router.current_route",
|
|
78
|
-
"router.available_routes",
|
|
79
|
-
"cache.economics",
|
|
80
|
-
] as const;
|
|
43
|
+
export { EXPECTED_OPERATION_NAMES, type OperationName };
|
|
81
44
|
|
|
82
|
-
export type OperationName = (typeof EXPECTED_OPERATION_NAMES)[number];
|
|
83
45
|
interface RouterScopeInput {
|
|
84
46
|
session_id?: string;
|
|
85
47
|
session_secret?: string;
|