@castlemilk/omega 0.6.10 → 0.6.12
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/dist/cli.js +1748 -61
- package/dist/server/dist/app.d.ts.map +1 -1
- package/dist/server/dist/app.js +2 -0
- package/dist/server/dist/app.js.map +1 -1
- package/dist/server/dist/lib/run-task.js +2 -2
- package/dist/server/dist/lib/run-task.js.map +1 -1
- package/dist/server/dist/routes/metrics.d.ts.map +1 -1
- package/dist/server/dist/routes/metrics.js +76 -2
- package/dist/server/dist/routes/metrics.js.map +1 -1
- package/dist/server/dist/routes/prompt-versions.d.ts +4 -0
- package/dist/server/dist/routes/prompt-versions.d.ts.map +1 -0
- package/dist/server/dist/routes/prompt-versions.js +40 -0
- package/dist/server/dist/routes/prompt-versions.js.map +1 -0
- package/dist/server/dist/routes/tasks.js.map +1 -1
- package/dist/server/node_modules/@grpc/proto-loader/build/bin/proto-loader-gen-types.js +0 -0
- package/dist/server/node_modules/@omega/agent/dist/executor.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/agent/dist/executor.js +52 -10
- package/dist/server/node_modules/@omega/agent/dist/executor.js.map +1 -1
- package/dist/server/node_modules/@omega/agent/dist/index.d.ts +1 -0
- package/dist/server/node_modules/@omega/agent/dist/index.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/agent/dist/index.js +1 -0
- package/dist/server/node_modules/@omega/agent/dist/index.js.map +1 -1
- package/dist/server/node_modules/@omega/agent/dist/planner.d.ts +6 -1
- package/dist/server/node_modules/@omega/agent/dist/planner.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/agent/dist/planner.js +24 -5
- package/dist/server/node_modules/@omega/agent/dist/planner.js.map +1 -1
- package/dist/server/node_modules/@omega/agent/dist/prompt-context.d.ts +10 -0
- package/dist/server/node_modules/@omega/agent/dist/prompt-context.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/prompt-context.js +138 -0
- package/dist/server/node_modules/@omega/agent/dist/prompt-context.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/prompt-versioning.d.ts +22 -0
- package/dist/server/node_modules/@omega/agent/dist/prompt-versioning.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/prompt-versioning.js +53 -0
- package/dist/server/node_modules/@omega/agent/dist/prompt-versioning.js.map +1 -0
- package/dist/server/node_modules/@omega/agent/dist/prompts.d.ts +4 -2
- package/dist/server/node_modules/@omega/agent/dist/prompts.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/agent/dist/prompts.js +31 -2
- package/dist/server/node_modules/@omega/agent/dist/prompts.js.map +1 -1
- package/dist/server/node_modules/@omega/agent/package.json +4 -0
- package/dist/server/node_modules/@omega/core/dist/provider.d.ts +12 -2
- package/dist/server/node_modules/@omega/core/dist/provider.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/db/dist/index.d.ts +1 -0
- package/dist/server/node_modules/@omega/db/dist/index.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/db/dist/index.js +1 -0
- package/dist/server/node_modules/@omega/db/dist/index.js.map +1 -1
- package/dist/server/node_modules/@omega/db/dist/prompt-versions.d.ts +19 -0
- package/dist/server/node_modules/@omega/db/dist/prompt-versions.d.ts.map +1 -0
- package/dist/server/node_modules/@omega/db/dist/prompt-versions.js +32 -0
- package/dist/server/node_modules/@omega/db/dist/prompt-versions.js.map +1 -0
- package/dist/server/node_modules/@omega/db/generated/client/edge.js +19 -4
- package/dist/server/node_modules/@omega/db/generated/client/index-browser.js +16 -1
- package/dist/server/node_modules/@omega/db/generated/client/index.d.ts +1511 -93
- package/dist/server/node_modules/@omega/db/generated/client/index.js +19 -4
- package/dist/server/node_modules/@omega/db/generated/client/libquery_engine-darwin-arm64.dylib.node +0 -0
- package/dist/server/node_modules/@omega/db/generated/client/package.json +1 -1
- package/dist/server/node_modules/@omega/db/generated/client/schema.prisma +14 -0
- package/dist/server/node_modules/@omega/db/generated/client/wasm.js +19 -4
- package/dist/server/node_modules/@omega/db/prisma/migrations/20260703010000_add_agent_run_usage/migration.sql +4 -0
- package/dist/server/node_modules/@omega/db/prisma/migrations/20260703020000_add_prompt_versions/migration.sql +16 -0
- package/dist/server/node_modules/@omega/providers/dist/anthropic.d.ts +2 -2
- package/dist/server/node_modules/@omega/providers/dist/anthropic.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/providers/dist/anthropic.js +16 -1
- package/dist/server/node_modules/@omega/providers/dist/anthropic.js.map +1 -1
- package/dist/server/node_modules/@omega/providers/dist/gemini.d.ts +2 -2
- package/dist/server/node_modules/@omega/providers/dist/gemini.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/providers/dist/gemini.js +14 -1
- package/dist/server/node_modules/@omega/providers/dist/gemini.js.map +1 -1
- package/dist/server/node_modules/@omega/providers/dist/kimi.d.ts +3 -3
- package/dist/server/node_modules/@omega/providers/dist/kimi.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/providers/dist/ollama.d.ts +2 -2
- package/dist/server/node_modules/@omega/providers/dist/ollama.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/providers/dist/ollama.js +13 -1
- package/dist/server/node_modules/@omega/providers/dist/ollama.js.map +1 -1
- package/dist/server/node_modules/@omega/providers/dist/openai.d.ts +3 -3
- package/dist/server/node_modules/@omega/providers/dist/openai.d.ts.map +1 -1
- package/dist/server/node_modules/@omega/providers/dist/openai.js +24 -3
- package/dist/server/node_modules/@omega/providers/dist/openai.js.map +1 -1
- package/dist/server/node_modules/@omega/providers/dist/providers.test.js +13 -9
- package/dist/server/node_modules/@omega/providers/dist/providers.test.js.map +1 -1
- package/dist/server/node_modules/mime/cli.js +0 -0
- package/dist/server/node_modules/mime/src/build.js +0 -0
- package/dist/server/node_modules/wrap-ansi/index.js +0 -0
- package/dist/server/pglite-data/base/5/1247 +0 -0
- package/dist/server/pglite-data/base/5/1249 +0 -0
- package/dist/server/pglite-data/base/5/1249_fsm +0 -0
- package/dist/server/pglite-data/base/5/1259 +0 -0
- package/dist/server/pglite-data/base/5/1259_fsm +0 -0
- package/dist/server/pglite-data/base/5/1259_vm +0 -0
- package/dist/server/pglite-data/base/5/16384 +0 -0
- package/dist/server/pglite-data/base/5/16392 +0 -0
- package/dist/server/pglite-data/base/5/16394 +0 -0
- package/dist/server/pglite-data/base/5/16404 +0 -0
- package/dist/server/pglite-data/base/5/16406 +0 -0
- package/dist/server/pglite-data/base/5/16406_fsm +0 -0
- package/dist/server/pglite-data/base/5/16421 +0 -0
- package/dist/server/pglite-data/base/5/16423 +0 -0
- package/dist/server/pglite-data/base/5/16437 +0 -0
- package/dist/server/pglite-data/base/5/16439 +0 -0
- package/dist/server/pglite-data/base/5/16439_fsm +0 -0
- package/dist/server/pglite-data/base/5/16449 +0 -0
- package/dist/server/pglite-data/base/5/16451 +0 -0
- package/dist/server/pglite-data/base/5/16462 +0 -0
- package/dist/server/pglite-data/base/5/16464 +0 -0
- package/dist/server/pglite-data/base/5/16478 +0 -0
- package/dist/server/pglite-data/base/5/16480 +0 -0
- package/dist/server/pglite-data/base/5/16510 +0 -0
- package/dist/server/pglite-data/base/5/16511 +0 -0
- package/dist/server/pglite-data/base/5/16512 +0 -0
- package/dist/server/pglite-data/base/5/16513 +0 -0
- package/dist/server/pglite-data/base/5/16514 +0 -0
- package/dist/server/pglite-data/base/5/24576 +0 -0
- package/dist/server/pglite-data/base/5/24576_fsm +0 -0
- package/dist/server/pglite-data/base/5/24589 +0 -0
- package/dist/server/pglite-data/base/5/24591 +0 -0
- package/dist/server/pglite-data/base/5/24592 +0 -0
- package/dist/server/pglite-data/base/5/2579 +0 -0
- package/dist/server/pglite-data/base/5/2604 +0 -0
- package/dist/server/pglite-data/base/5/2604_fsm +0 -0
- package/dist/server/pglite-data/base/5/2606 +0 -0
- package/dist/server/pglite-data/base/5/2608 +0 -0
- package/dist/server/pglite-data/base/5/2608_fsm +0 -0
- package/dist/server/pglite-data/base/5/2610 +0 -0
- package/dist/server/pglite-data/base/5/2620 +0 -0
- package/dist/server/pglite-data/base/5/2656 +0 -0
- package/dist/server/pglite-data/base/5/2657 +0 -0
- package/dist/server/pglite-data/base/5/2658 +0 -0
- package/dist/server/pglite-data/base/5/2659 +0 -0
- package/dist/server/pglite-data/base/5/2662 +0 -0
- package/dist/server/pglite-data/base/5/2663 +0 -0
- package/dist/server/pglite-data/base/5/2664 +0 -0
- package/dist/server/pglite-data/base/5/2665 +0 -0
- package/dist/server/pglite-data/base/5/2666 +0 -0
- package/dist/server/pglite-data/base/5/2667 +0 -0
- package/dist/server/pglite-data/base/5/2673 +0 -0
- package/dist/server/pglite-data/base/5/2674 +0 -0
- package/dist/server/pglite-data/base/5/2678 +0 -0
- package/dist/server/pglite-data/base/5/2679 +0 -0
- package/dist/server/pglite-data/base/5/2699 +0 -0
- package/dist/server/pglite-data/base/5/2701 +0 -0
- package/dist/server/pglite-data/base/5/2702 +0 -0
- package/dist/server/pglite-data/base/5/2703 +0 -0
- package/dist/server/pglite-data/base/5/2704 +0 -0
- package/dist/server/pglite-data/base/5/32768 +0 -0
- package/dist/server/pglite-data/base/5/32779 +0 -0
- package/dist/server/pglite-data/base/5/32780 +0 -0
- package/dist/server/pglite-data/base/5/32781 +0 -0
- package/dist/server/pglite-data/base/5/32783 +0 -0
- package/dist/server/pglite-data/base/5/3455 +0 -0
- package/dist/server/pglite-data/base/5/pg_internal.init +0 -0
- package/dist/server/pglite-data/global/pg_control +0 -0
- package/dist/server/pglite-data/global/pg_internal.init +0 -0
- package/dist/server/pglite-data/pg_wal/000000010000000000000001 +0 -0
- package/dist/server/pglite-data/pg_xact/0000 +0 -0
- package/dist/server/pglite-data/postmaster.pid +1 -1
- package/dist/server/src/app.ts +2 -0
- package/dist/server/src/lib/run-task.ts +2 -2
- package/dist/server/src/routes/metrics.ts +81 -2
- package/dist/server/src/routes/prompt-versions.ts +46 -0
- package/dist/server/src/routes/tasks.ts +2 -2
- package/dist/web/dist/assets/index-BVjHH_u_.js +40 -0
- package/dist/web/dist/assets/index-BkzWwMOJ.js +40 -0
- package/dist/web/dist/assets/index-D4rY_mY0.css +1 -0
- package/dist/web/dist/assets/index-DHQbiQAM.css +1 -0
- package/dist/web/dist/index.html +2 -2
- package/package.json +14 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI3F,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;gBAEpB,MAAM,EAAE,cAAc;IAIlC,OAAO,KAAK,OAAO,GAElB;IAEK,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAO/B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAkC1E"}
|
|
@@ -32,7 +32,19 @@ export class OllamaProvider {
|
|
|
32
32
|
throw new Error(`Ollama request failed: ${res.status.toString()} ${res.statusText}`);
|
|
33
33
|
}
|
|
34
34
|
const data = (await res.json());
|
|
35
|
-
|
|
35
|
+
const usage = data.prompt_eval_count !== undefined || data.eval_count !== undefined
|
|
36
|
+
? {
|
|
37
|
+
promptTokens: data.prompt_eval_count,
|
|
38
|
+
completionTokens: data.eval_count,
|
|
39
|
+
totalTokens: data.prompt_eval_count !== undefined && data.eval_count !== undefined
|
|
40
|
+
? data.prompt_eval_count + data.eval_count
|
|
41
|
+
: undefined,
|
|
42
|
+
}
|
|
43
|
+
: undefined;
|
|
44
|
+
return {
|
|
45
|
+
content: data.message?.content ?? '',
|
|
46
|
+
usage,
|
|
47
|
+
};
|
|
36
48
|
}
|
|
37
49
|
}
|
|
38
50
|
//# sourceMappingURL=ollama.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAElD,MAAM,OAAO,cAAc;IAChB,MAAM,CAAiB;IAEhC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAoC,CAAC;QACnE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,IAAkB;QAC3C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY;gBAC9C,QAAQ,EAAE;oBACR,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;iBAClC;gBACD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;aACzF,CAAC;SACH,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAElD,MAAM,OAAO,cAAc;IAChB,MAAM,CAAiB;IAEhC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAoC,CAAC;QACnE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,IAAkB;QAC3C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY;gBAC9C,QAAQ,EAAE;oBACR,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;iBAClC;gBACD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;aACzF,CAAC;SACH,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwF,CAAC;QACvH,MAAM,KAAK,GACT,IAAI,CAAC,iBAAiB,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YACnE,CAAC,CAAC;gBACE,YAAY,EAAE,IAAI,CAAC,iBAAiB;gBACpC,gBAAgB,EAAE,IAAI,CAAC,UAAU;gBACjC,WAAW,EACT,IAAI,CAAC,iBAAiB,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;oBACnE,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU;oBAC1C,CAAC,CAAC,SAAS;aAChB;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;YACpC,KAAK;SACN,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { Provider, ProviderConfig, SendOptions, ToolDefinition } from '@omega/core';
|
|
1
|
+
import type { Provider, ProviderConfig, SendOptions, ToolDefinition, ProviderResponse } from '@omega/core';
|
|
2
2
|
export declare class OpenAIProvider implements Provider {
|
|
3
3
|
readonly config: ProviderConfig;
|
|
4
4
|
constructor(config: ProviderConfig);
|
|
5
5
|
protected get baseUrl(): string;
|
|
6
6
|
protected readonly supportsTemperature: boolean;
|
|
7
7
|
listModels(): Promise<string[]>;
|
|
8
|
-
send(prompt: string, opts?: SendOptions): Promise<
|
|
9
|
-
sendWithTools(prompt: string, tools: ToolDefinition[], opts?: SendOptions): Promise<
|
|
8
|
+
send(prompt: string, opts?: SendOptions): Promise<ProviderResponse>;
|
|
9
|
+
sendWithTools(prompt: string, tools: ToolDefinition[], opts?: SendOptions): Promise<ProviderResponse>;
|
|
10
10
|
protected authHeaders(): Record<string, string>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAS,MAAM,aAAa,CAAC;AA+BlH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;gBAEpB,MAAM,EAAE,cAAc;IAIlC,SAAS,KAAK,OAAO,IAAI,MAAM,CAE9B;IAED,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAQ;IAEjD,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAS/B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6BnE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyD3G,SAAS,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGhD"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
const DEFAULT_BASE_URL = 'https://api.openai.com/v1';
|
|
2
|
+
function toUsage(data) {
|
|
3
|
+
if (!data.usage)
|
|
4
|
+
return undefined;
|
|
5
|
+
return {
|
|
6
|
+
promptTokens: data.usage.prompt_tokens,
|
|
7
|
+
completionTokens: data.usage.completion_tokens,
|
|
8
|
+
totalTokens: data.usage.total_tokens,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
2
11
|
export class OpenAIProvider {
|
|
3
12
|
config;
|
|
4
13
|
constructor(config) {
|
|
@@ -39,7 +48,11 @@ export class OpenAIProvider {
|
|
|
39
48
|
throw new Error(`OpenAI request failed: ${res.status.toString()} ${res.statusText}`);
|
|
40
49
|
}
|
|
41
50
|
const data = (await res.json());
|
|
42
|
-
return
|
|
51
|
+
return {
|
|
52
|
+
content: data.choices?.[0]?.message?.content ?? '',
|
|
53
|
+
usage: toUsage(data),
|
|
54
|
+
model: data.model,
|
|
55
|
+
};
|
|
43
56
|
}
|
|
44
57
|
async sendWithTools(prompt, tools, opts) {
|
|
45
58
|
const res = await fetch(`${this.baseUrl}/chat/completions`, {
|
|
@@ -86,9 +99,17 @@ export class OpenAIProvider {
|
|
|
86
99
|
})(),
|
|
87
100
|
}))
|
|
88
101
|
.filter((tc) => tc.id && tc.name);
|
|
89
|
-
return
|
|
102
|
+
return {
|
|
103
|
+
content: JSON.stringify({ tool_calls: normalized }),
|
|
104
|
+
usage: toUsage(data),
|
|
105
|
+
model: data.model,
|
|
106
|
+
};
|
|
90
107
|
}
|
|
91
|
-
return
|
|
108
|
+
return {
|
|
109
|
+
content: message?.content ?? '',
|
|
110
|
+
usage: toUsage(data),
|
|
111
|
+
model: data.model,
|
|
112
|
+
};
|
|
92
113
|
}
|
|
93
114
|
authHeaders() {
|
|
94
115
|
return this.config.apiKey ? { Authorization: `Bearer ${this.config.apiKey}` } : {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,10 +25,11 @@ describe('createProvider', () => {
|
|
|
25
25
|
enabled: true,
|
|
26
26
|
};
|
|
27
27
|
it('creates an OpenAI provider and sends a chat request', async () => {
|
|
28
|
-
fetchSpy.mockResolvedValue(jsonResponse({ choices: [{ message: { content: 'Hello' } }] }));
|
|
28
|
+
fetchSpy.mockResolvedValue(jsonResponse({ choices: [{ message: { content: 'Hello' } }], usage: { prompt_tokens: 10, completion_tokens: 5, total_tokens: 15 } }));
|
|
29
29
|
const provider = createProvider(openaiConfig);
|
|
30
30
|
const result = await provider.send('hi');
|
|
31
|
-
expect(result).toBe('Hello');
|
|
31
|
+
expect(result.content).toBe('Hello');
|
|
32
|
+
expect(result.usage).toEqual({ promptTokens: 10, completionTokens: 5, totalTokens: 15 });
|
|
32
33
|
expect(fetchSpy).toHaveBeenCalledWith('https://api.openai.com/v1/chat/completions', expect.objectContaining({
|
|
33
34
|
method: 'POST',
|
|
34
35
|
headers: expect.objectContaining({ Authorization: 'Bearer sk-test' }),
|
|
@@ -55,10 +56,11 @@ describe('createProvider', () => {
|
|
|
55
56
|
enabled: true,
|
|
56
57
|
};
|
|
57
58
|
it('creates an Anthropic provider and sends a message', async () => {
|
|
58
|
-
fetchSpy.mockResolvedValue(jsonResponse({ content: [{ type: 'text', text: 'Hi there' }] }));
|
|
59
|
+
fetchSpy.mockResolvedValue(jsonResponse({ content: [{ type: 'text', text: 'Hi there' }], usage: { input_tokens: 8, output_tokens: 2 } }));
|
|
59
60
|
const provider = createProvider(anthropicConfig);
|
|
60
61
|
const result = await provider.send('hello', { system: 'You are helpful', temperature: 0.5 });
|
|
61
|
-
expect(result).toBe('Hi there');
|
|
62
|
+
expect(result.content).toBe('Hi there');
|
|
63
|
+
expect(result.usage).toEqual({ promptTokens: 8, completionTokens: 2, totalTokens: 10 });
|
|
62
64
|
expect(fetchSpy).toHaveBeenCalledWith('https://api.anthropic.com/v1/messages', expect.objectContaining({
|
|
63
65
|
method: 'POST',
|
|
64
66
|
headers: expect.objectContaining({
|
|
@@ -80,10 +82,11 @@ describe('createProvider', () => {
|
|
|
80
82
|
enabled: true,
|
|
81
83
|
};
|
|
82
84
|
it('creates an Ollama provider and sends a chat request', async () => {
|
|
83
|
-
fetchSpy.mockResolvedValue(jsonResponse({ message: { content: 'Howdy' } }));
|
|
85
|
+
fetchSpy.mockResolvedValue(jsonResponse({ message: { content: 'Howdy' }, prompt_eval_count: 12, eval_count: 3 }));
|
|
84
86
|
const provider = createProvider(ollamaConfig);
|
|
85
87
|
const result = await provider.send('hey');
|
|
86
|
-
expect(result).toBe('Howdy');
|
|
88
|
+
expect(result.content).toBe('Howdy');
|
|
89
|
+
expect(result.usage).toEqual({ promptTokens: 12, completionTokens: 3, totalTokens: 15 });
|
|
87
90
|
expect(fetchSpy).toHaveBeenCalledWith('http://localhost:11434/api/chat', expect.objectContaining({
|
|
88
91
|
method: 'POST',
|
|
89
92
|
body: expect.stringContaining('"stream":false'),
|
|
@@ -104,10 +107,11 @@ describe('createProvider', () => {
|
|
|
104
107
|
enabled: true,
|
|
105
108
|
};
|
|
106
109
|
it('creates a Gemini provider and generates content', async () => {
|
|
107
|
-
fetchSpy.mockResolvedValue(jsonResponse({ candidates: [{ content: { parts: [{ text: 'Greetings' }] } }] }));
|
|
110
|
+
fetchSpy.mockResolvedValue(jsonResponse({ candidates: [{ content: { parts: [{ text: 'Greetings' }] } }], usageMetadata: { promptTokenCount: 6, candidatesTokenCount: 1, totalTokenCount: 7 } }));
|
|
108
111
|
const provider = createProvider(geminiConfig);
|
|
109
112
|
const result = await provider.send('hello', { system: 'Be polite', temperature: 0.7 });
|
|
110
|
-
expect(result).toBe('Greetings');
|
|
113
|
+
expect(result.content).toBe('Greetings');
|
|
114
|
+
expect(result.usage).toEqual({ promptTokens: 6, completionTokens: 1, totalTokens: 7 });
|
|
111
115
|
expect(fetchSpy).toHaveBeenCalledWith(expect.stringContaining('/models/gemini-1.5-flash:generateContent'), expect.objectContaining({ method: 'POST' }));
|
|
112
116
|
const url = fetchSpy.mock.calls[0][0];
|
|
113
117
|
expect(url).toContain('key=gemini-key');
|
|
@@ -135,7 +139,7 @@ describe('createProvider', () => {
|
|
|
135
139
|
enabled: true,
|
|
136
140
|
};
|
|
137
141
|
const result = await createProvider(genericConfig).send('hi');
|
|
138
|
-
expect(result).toBe('Generic');
|
|
142
|
+
expect(result.content).toBe('Generic');
|
|
139
143
|
expect(fetchSpy).toHaveBeenCalledWith('http://localhost:8080/v1/chat/completions', expect.objectContaining({
|
|
140
144
|
headers: expect.objectContaining({ Authorization: 'Bearer generic-key' }),
|
|
141
145
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.test.js","sourceRoot":"","sources":["../src/providers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,SAAS,YAAY,CAAC,IAAa,EAAE,MAAM,GAAG,GAAG;IAC/C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,QAAkC,CAAC;IAEvC,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACnB,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAmB;QACnC,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,QAAQ;QACtB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"providers.test.js","sourceRoot":"","sources":["../src/providers.test.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/server/src/app.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { taskRoutes } from './routes/tasks.js';
|
|
|
6
6
|
import { providerRoutes } from './routes/providers.js';
|
|
7
7
|
import { routerRoutes } from './routes/router.js';
|
|
8
8
|
import { metricsRoutes } from './routes/metrics.js';
|
|
9
|
+
import { promptVersionRoutes } from './routes/prompt-versions.js';
|
|
9
10
|
|
|
10
11
|
export const app: express.Express = express();
|
|
11
12
|
|
|
@@ -17,6 +18,7 @@ app.use('/tasks', taskRoutes(prisma));
|
|
|
17
18
|
app.use('/providers', providerRoutes(prisma));
|
|
18
19
|
app.use('/router', routerRoutes(prisma));
|
|
19
20
|
app.use('/metrics', metricsRoutes(prisma));
|
|
21
|
+
app.use('/prompt-versions', promptVersionRoutes(prisma));
|
|
20
22
|
|
|
21
23
|
app.use((err: unknown, _req: express.Request, res: express.Response, _next: express.NextFunction) => {
|
|
22
24
|
console.error(err);
|
|
@@ -80,12 +80,12 @@ export async function runTask(prisma: PrismaClient, taskId: string) {
|
|
|
80
80
|
const prompt = [task.title, task.description].filter(Boolean).join('\n\n');
|
|
81
81
|
|
|
82
82
|
try {
|
|
83
|
-
const
|
|
83
|
+
const response = await provider.send(prompt, { model: modelName });
|
|
84
84
|
const updated = await prisma.task.update({
|
|
85
85
|
where: { id: taskId },
|
|
86
86
|
data: {
|
|
87
87
|
status: 'done',
|
|
88
|
-
result,
|
|
88
|
+
result: response.content,
|
|
89
89
|
provider: providerName,
|
|
90
90
|
model: modelName,
|
|
91
91
|
error: null,
|
|
@@ -9,6 +9,27 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
9
9
|
const root = path.resolve(__filename, '..', '..', '..', '..');
|
|
10
10
|
const reportsDir = path.join(root, '.omega', 'reports');
|
|
11
11
|
|
|
12
|
+
async function listReports(pattern: RegExp): Promise<{ file: string; modifiedAt: string }[]> {
|
|
13
|
+
try {
|
|
14
|
+
const files = await fs.readdir(reportsDir);
|
|
15
|
+
const matches = files.filter((f) => pattern.test(f)).sort().reverse();
|
|
16
|
+
const results: { file: string; modifiedAt: string }[] = [];
|
|
17
|
+
for (const file of matches) {
|
|
18
|
+
const stat = await fs.stat(path.join(reportsDir, file));
|
|
19
|
+
results.push({ file, modifiedAt: stat.mtime.toISOString() });
|
|
20
|
+
}
|
|
21
|
+
return results;
|
|
22
|
+
} catch {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async function readReport(file: string): Promise<unknown> {
|
|
28
|
+
const raw = await fs.readFile(path.join(reportsDir, file), 'utf-8');
|
|
29
|
+
if (file.endsWith('.json')) return JSON.parse(raw) as unknown;
|
|
30
|
+
return raw;
|
|
31
|
+
}
|
|
32
|
+
|
|
12
33
|
async function latestReport(pattern: RegExp): Promise<{ file: string; data: unknown } | undefined> {
|
|
13
34
|
try {
|
|
14
35
|
const files = await fs.readdir(reportsDir);
|
|
@@ -18,8 +39,7 @@ async function latestReport(pattern: RegExp): Promise<{ file: string; data: unkn
|
|
|
18
39
|
.reverse();
|
|
19
40
|
const latest = matches[0];
|
|
20
41
|
if (!latest) return undefined;
|
|
21
|
-
const
|
|
22
|
-
const data = latest.endsWith('.json') ? (JSON.parse(raw) as unknown) : raw;
|
|
42
|
+
const data = await readReport(latest);
|
|
23
43
|
return { file: latest, data };
|
|
24
44
|
} catch {
|
|
25
45
|
return undefined;
|
|
@@ -78,6 +98,8 @@ export function metricsRoutes(prisma: PrismaClient): Router {
|
|
|
78
98
|
)
|
|
79
99
|
: 0;
|
|
80
100
|
|
|
101
|
+
const totalTokens = agentRuns.reduce((sum, r) => sum + (r.totalTokens ?? 0), 0);
|
|
102
|
+
|
|
81
103
|
const recentRuns = agentRuns.map((r) => ({
|
|
82
104
|
id: r.id,
|
|
83
105
|
taskId: r.taskId,
|
|
@@ -88,11 +110,15 @@ export function metricsRoutes(prisma: PrismaClient): Router {
|
|
|
88
110
|
validationSummary: r.validationSummary,
|
|
89
111
|
publishedVersion: r.publishedVersion,
|
|
90
112
|
durationMs: durationMs(r.createdAt, r.updatedAt),
|
|
113
|
+
promptTokens: r.promptTokens,
|
|
114
|
+
completionTokens: r.completionTokens,
|
|
115
|
+
totalTokens: r.totalTokens,
|
|
91
116
|
createdAt: r.createdAt,
|
|
92
117
|
}));
|
|
93
118
|
|
|
94
119
|
const e2eReport = await latestReport(/^e2e-raw-/);
|
|
95
120
|
const benchmarkReport = await latestReport(/^benchmark-/);
|
|
121
|
+
const abReport = await latestReport(/^ab-/);
|
|
96
122
|
|
|
97
123
|
res.json({
|
|
98
124
|
taskCounts,
|
|
@@ -100,13 +126,66 @@ export function metricsRoutes(prisma: PrismaClient): Router {
|
|
|
100
126
|
providerUsage,
|
|
101
127
|
modelUsage,
|
|
102
128
|
avgDurationMs,
|
|
129
|
+
totalTokens,
|
|
103
130
|
recentRuns,
|
|
104
131
|
latestReports: {
|
|
105
132
|
e2e: e2eReport,
|
|
106
133
|
benchmark: benchmarkReport,
|
|
134
|
+
ab: abReport,
|
|
107
135
|
},
|
|
108
136
|
});
|
|
109
137
|
}));
|
|
110
138
|
|
|
139
|
+
r.get('/reports', asyncHandler(async (_req, res) => {
|
|
140
|
+
const e2e = await listReports(/^e2e-raw-/);
|
|
141
|
+
const benchmark = await listReports(/^benchmark-/);
|
|
142
|
+
res.json({ e2e, benchmark });
|
|
143
|
+
}));
|
|
144
|
+
|
|
145
|
+
r.get('/reports/benchmark', asyncHandler(async (_req, res) => {
|
|
146
|
+
const reports = await listReports(/^benchmark-/);
|
|
147
|
+
res.json(reports);
|
|
148
|
+
}));
|
|
149
|
+
|
|
150
|
+
r.get('/reports/benchmark/:file', asyncHandler(async (req, res) => {
|
|
151
|
+
const file = path.basename(req.params.file);
|
|
152
|
+
if (!file.startsWith('benchmark-')) {
|
|
153
|
+
res.status(400).json({ error: 'Invalid benchmark report filename' });
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
const data = await readReport(file);
|
|
158
|
+
res.json(data);
|
|
159
|
+
} catch {
|
|
160
|
+
res.status(404).json({ error: 'Report not found' });
|
|
161
|
+
}
|
|
162
|
+
}));
|
|
163
|
+
|
|
164
|
+
r.get('/reports/ab', asyncHandler(async (_req, res) => {
|
|
165
|
+
const reports = await listReports(/^ab-/);
|
|
166
|
+
res.json(reports);
|
|
167
|
+
}));
|
|
168
|
+
|
|
169
|
+
r.get('/reports/ab/:file', asyncHandler(async (req, res) => {
|
|
170
|
+
const file = path.basename(req.params.file);
|
|
171
|
+
if (!file.startsWith('ab-')) {
|
|
172
|
+
res.status(400).json({ error: 'Invalid A/B report filename' });
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const data = await readReport(file);
|
|
177
|
+
res.json(data);
|
|
178
|
+
} catch {
|
|
179
|
+
res.status(404).json({ error: 'Report not found' });
|
|
180
|
+
}
|
|
181
|
+
}));
|
|
182
|
+
|
|
183
|
+
r.get('/reports/latest', asyncHandler(async (_req, res) => {
|
|
184
|
+
const e2eReport = await latestReport(/^e2e-raw-/);
|
|
185
|
+
const benchmarkReport = await latestReport(/^benchmark-/);
|
|
186
|
+
const abReport = await latestReport(/^ab-/);
|
|
187
|
+
res.json({ e2e: e2eReport, benchmark: benchmarkReport, ab: abReport });
|
|
188
|
+
}));
|
|
189
|
+
|
|
111
190
|
return r;
|
|
112
191
|
}
|