agentfootprint 9.28.0 → 9.29.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 +3 -2
- package/dist/adapters/hosting/googleAgentEngine.js +17 -3
- package/dist/adapters/hosting/googleAgentEngine.js.map +1 -1
- package/dist/adapters/llm/GeminiProvider.js +193 -36
- package/dist/adapters/llm/GeminiProvider.js.map +1 -1
- package/dist/adapters/llm/OpenAIProvider.js +66 -2
- package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/adapters/llm/googleGenAI.js +155 -8
- package/dist/adapters/llm/googleGenAI.js.map +1 -1
- package/dist/adapters/memory/memoryBank.js +24 -0
- package/dist/adapters/memory/memoryBank.js.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/artifacts/gcsArtifacts.js +21 -5
- package/dist/artifacts/gcsArtifacts.js.map +1 -1
- package/dist/embedders/index.js +8 -6
- package/dist/embedders/index.js.map +1 -1
- package/dist/esm/adapters/hosting/googleAgentEngine.d.ts +17 -3
- package/dist/esm/adapters/hosting/googleAgentEngine.js +17 -3
- package/dist/esm/adapters/hosting/googleAgentEngine.js.map +1 -1
- package/dist/esm/adapters/llm/GeminiProvider.d.ts +91 -15
- package/dist/esm/adapters/llm/GeminiProvider.js +194 -37
- package/dist/esm/adapters/llm/GeminiProvider.js.map +1 -1
- package/dist/esm/adapters/llm/OpenAIProvider.d.ts +34 -2
- package/dist/esm/adapters/llm/OpenAIProvider.js +66 -2
- package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/llm/googleGenAI.d.ts +105 -4
- package/dist/esm/adapters/llm/googleGenAI.js +152 -7
- package/dist/esm/adapters/llm/googleGenAI.js.map +1 -1
- package/dist/esm/adapters/memory/memoryBank.d.ts +24 -0
- package/dist/esm/adapters/memory/memoryBank.js +24 -0
- package/dist/esm/adapters/memory/memoryBank.js.map +1 -1
- package/dist/esm/adapters/types.d.ts +27 -0
- package/dist/esm/adapters/types.js.map +1 -1
- package/dist/esm/artifacts/gcsArtifacts.d.ts +21 -5
- package/dist/esm/artifacts/gcsArtifacts.js +21 -5
- package/dist/esm/artifacts/gcsArtifacts.js.map +1 -1
- package/dist/esm/core/agent/types.d.ts +1 -0
- package/dist/esm/embedders/index.js +9 -7
- package/dist/esm/embedders/index.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +22 -0
- package/dist/esm/providers.js.map +1 -1
- package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js +5 -1
- package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +44 -3
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/providers.js.map +1 -1
- package/dist/recorders/observability/AgentThinkingTraceRecorder.js +5 -1
- package/dist/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
- package/dist/recorders/observability/commentary/commentaryTemplates.js +44 -3
- package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/types/adapters/hosting/googleAgentEngine.d.ts +17 -3
- package/dist/types/adapters/hosting/googleAgentEngine.d.ts.map +1 -1
- package/dist/types/adapters/llm/GeminiProvider.d.ts +91 -15
- package/dist/types/adapters/llm/GeminiProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/OpenAIProvider.d.ts +34 -2
- package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/googleGenAI.d.ts +105 -4
- package/dist/types/adapters/llm/googleGenAI.d.ts.map +1 -1
- package/dist/types/adapters/memory/memoryBank.d.ts +24 -0
- package/dist/types/adapters/memory/memoryBank.d.ts.map +1 -1
- package/dist/types/adapters/types.d.ts +27 -0
- package/dist/types/adapters/types.d.ts.map +1 -1
- package/dist/types/artifacts/gcsArtifacts.d.ts +21 -5
- package/dist/types/artifacts/gcsArtifacts.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +1 -0
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/embedders/index.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +22 -0
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/providers.d.ts.map +1 -1
- package/dist/types/recorders/observability/AgentThinkingTraceRecorder.d.ts.map +1 -1
- package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -103,7 +103,7 @@ const result = await agent.run({ message: 'Weather in Paris?' });
|
|
|
103
103
|
console.log(result); // → "I checked: it is 72°F and sunny."
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
For production, import a real provider from `agentfootprint/providers` and swap it in — `anthropic(...)` / `openai(...)` / `bedrock(...)` / `ollama(...)`. Only the import line changes; the agent code stays the same. (The vendor-SDK providers live on the `agentfootprint/providers` subpath so the main `agentfootprint` barrel stays free of optional peer-dep requires; `mock`, `browserAnthropic`, and `browserOpenai` are on the main barrel.)
|
|
106
|
+
For production, import a real provider from `agentfootprint/providers` and swap it in — `anthropic(...)` / `openai(...)` / `bedrock(...)` / `gemini(...)` / `ollama(...)`. Only the import line changes; the agent code stays the same. (The vendor-SDK providers live on the `agentfootprint/providers` subpath so the main `agentfootprint` barrel stays free of optional peer-dep requires; `mock`, `browserAnthropic`, and `browserOpenai` are on the main barrel.)
|
|
107
107
|
|
|
108
108
|
### Run against a local model — the free rung between the mock and the bill
|
|
109
109
|
|
|
@@ -860,13 +860,14 @@ The flowchart, recorders, and tests don't change between dev and prod.
|
|
|
860
860
|
- 1 reliability gate — `.reliability({ preCheck, postDecide, providers, circuitBreaker, fallback })`
|
|
861
861
|
- 1 tool dispatch primitive — `ToolProvider` (sync OR async) — `staticTools` · `gatedTools` · `skillScopedTools` · or a custom `ToolProvider` that discovers over hubs / MCP / per-tenant catalogs
|
|
862
862
|
|
|
863
|
-
**LLM providers** (
|
|
863
|
+
**LLM providers** (8)
|
|
864
864
|
|
|
865
865
|
| Factory | Use for |
|
|
866
866
|
|---|---|
|
|
867
867
|
| `anthropic` | Claude (Sonnet, Opus, Haiku) via `@anthropic-ai/sdk` |
|
|
868
868
|
| `openai` | GPT-4o, GPT-4-turbo via `openai` SDK |
|
|
869
869
|
| `bedrock` | Claude / Titan / Mistral via AWS Bedrock runtime |
|
|
870
|
+
| `gemini` | Gemini via `@google/genai` — two doors, **Vertex** (project + ADC) or the Gemini API (one key). Not every door/model pair works: read the [door/model matrix](https://footprintjs.github.io/agentfootprint/docs/infrastructure/google-cloud/#the-doormodel-matrix) first |
|
|
870
871
|
| `ollama` | Local models, over Ollama's native API — no SDK, no key, real token counts, refusals that name `ollama serve` / `ollama pull` · `openai({ baseURL })` reaches llama.cpp, vLLM, and any other OpenAI-compatible endpoint |
|
|
871
872
|
| `browserAnthropic` | Browser-side Claude calls (no proxy server) |
|
|
872
873
|
| `browserOpenai` | Browser-side OpenAI calls (no proxy server) |
|
|
@@ -35,9 +35,23 @@
|
|
|
35
35
|
* 3. **`Session.userId` is required and immutable.** Our port's
|
|
36
36
|
* `persist(sessionId, envelope)` carries no user, so one has to be
|
|
37
37
|
* resolved — see {@link AgentEngineSessionsOptions.userId}. Immutable
|
|
38
|
-
* means the first write decides forever, which is
|
|
39
|
-
*
|
|
40
|
-
*
|
|
38
|
+
* means the first write decides forever, which is the same ownership rule
|
|
39
|
+
* this library enforces in its own stores.
|
|
40
|
+
*
|
|
41
|
+
* **It is metadata, not authorization, and a field trial proved it.** Two
|
|
42
|
+
* sessions were created under `alice` and `bob`; the project's ordinary ADC
|
|
43
|
+
* principal then read BOTH by name, presenting neither end-user identity
|
|
44
|
+
* (FINDINGS "Native Agent Runtime Sessions"). `userId` is what a listing
|
|
45
|
+
* filters on and what a first write pins — it is not a check the service
|
|
46
|
+
* performs on a read. So the sentence "here the service enforces it for us"
|
|
47
|
+
* would be false: anyone who can call the API with your project's
|
|
48
|
+
* credentials and can guess a session id can read that conversation.
|
|
49
|
+
*
|
|
50
|
+
* Where the check belongs is above this port, and this library already has
|
|
51
|
+
* it: `envelopeOwner` records who a conversation belongs to, and the
|
|
52
|
+
* host/gateway is what must compare that to the authenticated caller
|
|
53
|
+
* before handing a session id down here. This adapter is a STORE. Nothing
|
|
54
|
+
* that only stores can tell an impostor from an owner.
|
|
41
55
|
* 4. **`ttl` is input-only with a 24-hour floor**, and `expireTime` always
|
|
42
56
|
* comes back. Sliding expiry is free; an hour-long TTL is not available at
|
|
43
57
|
* any price.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"googleAgentEngine.js","sourceRoot":"","sources":["../../../src/adapters/hosting/googleAgentEngine.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"googleAgentEngine.js","sourceRoot":"","sources":["../../../src/adapters/hosting/googleAgentEngine.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;;;AAEH,2DAA6F;AAC7F,uDAAkE;AAOlE,2DAciC;AAEjC,MAAM,OAAO,GAAG,qBAAqB,CAAC;AAEtC;;;;;;;;GAQG;AACU,QAAA,iBAAiB,GAAG,yBAAyB,CAAC;AAgD3D,6DAA6D;AAChD,QAAA,eAAe,GAAG,0BAA0B,CAAC;AA0B1D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,mBAAmB,CAAC,OAAmC;IACrE,MAAM,KAAK,GAAgB,IAAA,6BAAa,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAyB,IAAA,qCAAqB,EAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAgB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAClF,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,4CAA4B,CAAC;IACtF,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,IAAI,GAAG,CAAC,IAAY,EAAQ,EAAE;QAClC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,IAAI,KAAK,CACb,iBAAiB,OAAO,eAAe,KAAK,CAAC,MAAM,6BAA6B,IAAI,IAAI;YACtF,sFAAsF;YACtF,mFAAmF,CACtF,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC3C,GAAG,KAAK,CAAC,MAAM,aAAa,IAAA,8BAAc,EAAC,SAAS,CAAC,EAAE,CAAC;IAE1D,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QAEpB,KAAK,CAAC,OAAO,CAAC,SAAiB;YAC7B,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC1B,IAAI,OAAkC,CAAC;YACvC,IAAI,CAAC;gBACH,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;YACpE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,qEAAqE;gBACrE,uEAAuE;gBACvE,eAAe;gBACf,IAAI,IAAA,0BAAU,EAAC,GAAG,CAAC;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,IAAA,gCAAgB,EAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAE5C,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;YACnC,sEAAsE;YACtE,mEAAmE;YACnE,qDAAqD;YACrD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,yBAAiB,CAAC,CAAC;YACxC,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC3C,yEAAyE;YACzE,yDAAyD;YACzD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAClD,MAAM,IAAI,mCAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACvD,CAAC;YACD,wEAAwE;YACxE,uEAAuE;YACvE,OAAO,IAAA,2BAAa,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,QAA4B;YAC3D,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC1B,uEAAuE;YACvE,+CAA+C;YAC/C,MAAM,OAAO,GAAG,IAAA,2BAAa,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAkB;gBAC1B,YAAY,EAAE,EAAE,CAAC,yBAAiB,CAAC,EAAE,OAA6C,EAAE;gBACpF,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;aACvD,CAAC;YAEF,gEAAgE;YAChE,EAAE;YACF,uEAAuE;YACvE,sEAAsE;YACtE,wEAAwE;YACxE,uEAAuE;YACvE,sCAAsC;YACtC,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,KAAK,CAAC;oBACnB,IAAI;oBACJ,qEAAqE;oBACrE,mEAAmE;oBACnE,mEAAmE;oBACnE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC;oBACzB,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,IAAA,0BAAU,EAAC,GAAG,CAAC;oBAAE,MAAM,IAAA,gCAAgB,EAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,IAAI,OAAO,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS,EAAE,IAAA,8BAAc,EAAC,SAAS,CAAC;oBACpC,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE;iBACjC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,qEAAqE;gBACrE,mEAAmE;gBACnE,iEAAiE;gBACjE,IAAI,CAAC,IAAA,+BAAe,EAAC,GAAG,CAAC;oBAAE,MAAM,IAAA,gCAAgB,EAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAC;gBACnF,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/E,CAAC;gBAAC,OAAO,QAAQ,EAAE,CAAC;oBAClB,MAAM,IAAA,gCAAgB,EAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBAC9D,CAAC;gBACD,OAAO;YACT,CAAC;YACD,oEAAoE;YACpE,sEAAsE;YACtE,gCAAgC;YAChC,MAAM,IAAA,8BAAc,EAClB,OAAO,EACP,QAAQ,CAAC,UAAU,EACnB,OAAO,EAAE,IAAI,EACb,qBAAqB,SAAS,GAAG,EACjC,kBAAkB,CACnB,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,WAAgC;YAC/D,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,GAAG,CACL,MAAM,QAAQ,CAAC,IAAI,CAAC;oBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,kEAAkE;oBAClE,0DAA0D;oBAC1D,MAAM,EAAE,WAAW,gBAAgB,CAAC,MAAM,CAAC,EAAE;oBAC7C,OAAO,EAAE,kBAAkB;oBAC3B,QAAQ,EAAE,KAAK;oBACf,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;iBAC5E,CAAC,CACH,EAAE,IAAI,CAAC;YACV,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAA,gCAAgB,EAAC,OAAO,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACvD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,yBAAiB,CAAC,CAAC;gBACzD,oEAAoE;gBACpE,qEAAqE;gBACrE,sEAAsE;gBACtE,4DAA4D;gBAC5D,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpF,OAAO;oBACL,SAAS;oBACT,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;oBAC3D,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC;oBAC1B,YAAY,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,gCAAkB,EAAC,QAAQ,CAAC,CAAC,MAAM;iBAC/E,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,IAAI,EAAE,aAAa,CAAC;YACnC,OAAO;gBACL,QAAQ,EAAE,SAAS;gBACnB,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aAC/D,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,SAAiB;YAC7B,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;gBACxE,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;gBAC/B,uEAAuE;gBACvE,sEAAsE;gBACtE,oEAAoE;gBACpE,0DAA0D;gBAC1D,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,uBAAe;oBAC9E,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,IAAA,0BAAU,EAAC,GAAG,CAAC;oBAAE,OAAO,SAAS,CAAC;gBACtC,MAAM,IAAA,gCAAgB,EAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,SAAiB;YAC5B,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACzB,IAAI,OAAO,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,8CAA8C;gBAC9C,IAAI,IAAA,0BAAU,EAAC,GAAG,CAAC;oBAAE,OAAO;gBAC5B,MAAM,IAAA,gCAAgB,EAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,IAAA,8BAAc,EAClB,OAAO,EACP,QAAQ,CAAC,UAAU,EACnB,OAAO,EAAE,IAAI,EACb,qBAAqB,SAAS,GAAG,EACjC,kBAAkB,CACnB,CAAC;QACJ,CAAC;QAED,KAAK;YACH,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AA1MD,kDA0MC;AAED,wEAAwE;AAExE,kFAAkF;AAClF,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CACrB,MAA4C;IAE5C,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC3D,MAAM,IAAI,SAAS,CACjB,GAAG,OAAO,oCAAoC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe;oBACnF,IAAI,SAAS,qEAAqE;oBAClF,wEAAwE;oBACxE,2CAA2C;oBAC3C,aAAa,uBAAe,oDAAoD;oBAChF,WAAW,CACd,CAAC;YACJ,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,SAAS,CACjB,GAAG,OAAO,yEAAyE;gBACjF,oFAAoF;gBACpF,gDAAgD,CACnD,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;IACtB,CAAC;IACD,sEAAsE;IACtE,gEAAgE;IAChE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAA,2BAAa,EAAC,QAAQ,CAAC,IAAI,uBAAe,CAAC;AAC9E,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,IAAmB;IAClC,MAAM,MAAM,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,6EAA6E;AAC7E,SAAS,WAAW,CAAC,IAA+B;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,2EAA2E;AAC3E,SAAS,QAAQ,CAAC,KAAgC;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,6EAA6E;AAC7E,SAAS,QAAQ,CAAC,MAAe;IAC/B,MAAM,MAAM,GAAI,MAA2C,EAAE,MAAM,CAAC;IACpE,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
|
|
@@ -27,18 +27,72 @@
|
|
|
27
27
|
* the first call, which reads like a network problem rather than a missing
|
|
28
28
|
* setting.
|
|
29
29
|
*
|
|
30
|
+
* ─── Status, per door, because the doors differ ─────────────────────
|
|
31
|
+
*
|
|
32
|
+
* • **Vertex: field-validated.** An independent trial ran this adapter,
|
|
33
|
+
* unchanged since 9.13.0, against a live project through Application Default
|
|
34
|
+
* Credentials: a two-call tool loop on `gemini-2.5-flash` returning the
|
|
35
|
+
* expected answer with real token counts, and a stream delivering 10 content
|
|
36
|
+
* chunks that reconstructed exactly (FINDINGS "Part 1 — native Gemini on
|
|
37
|
+
* Vertex through ADC", "Part 2C"). `geminiEmbedder` passed on the same door.
|
|
38
|
+
* • **Gemini API (AI Studio): NOT field-validated, and not for want of
|
|
39
|
+
* trying.** The trial's key-door calls never reached a model: the old
|
|
40
|
+
* default model answered 404 for a new account, and a current model answered
|
|
41
|
+
* 429 for AI Studio prepayment, which is billing SEPARATE from the Google
|
|
42
|
+
* Cloud account's credit. What that door does with a funded key is
|
|
43
|
+
* untested here, which is why it has no default model.
|
|
44
|
+
* • **Tool calling on a 3.x model** now round-trips thought signatures (below).
|
|
45
|
+
* That fix is built from the trial's captured 400, not from a live green run
|
|
46
|
+
* — nothing in this repository has yet completed a 3.x tool loop.
|
|
47
|
+
*
|
|
30
48
|
* ─── Why native, and not `openai({ baseURL })` ──────────────────────
|
|
31
49
|
*
|
|
32
50
|
* Google publishes an OpenAI-compatible endpoint, and it does work — for about
|
|
33
|
-
* an hour. It authenticates with an OAuth access token that expires
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* `
|
|
51
|
+
* an hour. It authenticates with an OAuth access token that expires (9.29.0
|
|
52
|
+
* gives `openai({ apiKey })` a callback form so a long-running process can
|
|
53
|
+
* refresh one, which is a mitigation and not a fix); its
|
|
54
|
+
* `tools.function.parameters` is **OpenAPI**, not JSON Schema, so `$ref` /
|
|
55
|
+
* `oneOf` / `additionalProperties` diverge silently; unsupported parameters are
|
|
56
|
+
* ignored rather than refused; and its documented response carries no cached-
|
|
57
|
+
* or reasoning-token counts. This adapter exists because every one of those is
|
|
58
|
+
* answerable on the native SDK: ADC refreshes itself, tools go over as JSON
|
|
59
|
+
* Schema untranslated (`parametersJsonSchema`), a forced single tool is
|
|
60
|
+
* expressible, and `usageMetadata` reports cached and thinking tokens as
|
|
61
|
+
* separate numbers.
|
|
62
|
+
*
|
|
63
|
+
* A field trial measured both halves of that: the native path completed a call
|
|
64
|
+
* after a forced credential expiry, while the compatible path returned HTTP 401
|
|
65
|
+
* on an expired token (FINDINGS "Part 2B").
|
|
66
|
+
*
|
|
67
|
+
* ─── Thought signatures: the round trip a tool loop cannot skip ─────
|
|
68
|
+
*
|
|
69
|
+
* A current Gemini model does not merely PREFER its thought signature back —
|
|
70
|
+
* it refuses the turn without it. An independent field trial on live GCP ran
|
|
71
|
+
* `gemini-3.1-flash-lite` on Vertex through one ordinary tool loop: the first
|
|
72
|
+
* call asked for the function, the tool ran, and the second call came back
|
|
73
|
+
*
|
|
74
|
+
* 400 INVALID_ARGUMENT — "Function call is missing a thought_signature in
|
|
75
|
+
* functionCall parts. This is required for tools to work correctly …"
|
|
76
|
+
*
|
|
77
|
+
* (FINDINGS "Failure 4"). The cost of that shape is what makes it worth this
|
|
78
|
+
* paragraph: the failure lands AFTER the tool has already executed, so a
|
|
79
|
+
* side-effecting tool has run and the answer is unreachable.
|
|
80
|
+
*
|
|
81
|
+
* So the signature is CARRIED, not dropped. `Part.thoughtSignature` (a base64
|
|
82
|
+
* string on the installed @google/genai 2.16.0 `Part`) is read off the same
|
|
83
|
+
* part as the `functionCall` it belongs to, parked on the port's neutral
|
|
84
|
+
* `toolCalls[].providerMeta`, and written back onto the reconstructed
|
|
85
|
+
* `functionCall` part on the next request — byte for byte, because a signature
|
|
86
|
+
* is checked and not read. This is the same round trip the Anthropic adapter
|
|
87
|
+
* does with signed thinking blocks, one field along: there the carrier is
|
|
88
|
+
* `LLMMessage.thinkingBlocks[].signature`, here it is the tool call itself,
|
|
89
|
+
* because that is where Google puts it.
|
|
90
|
+
*
|
|
91
|
+
* What that does NOT cover, said plainly: a signature attached to a TEXT part
|
|
92
|
+
* of an answer with no function call. The port's assistant turn is a string,
|
|
93
|
+
* and a string has nowhere to keep one. The trial's failure was the functionCall
|
|
94
|
+
* shape; that shape is fixed here, and the other one is named rather than
|
|
95
|
+
* quietly half-handled.
|
|
42
96
|
*
|
|
43
97
|
* ─── Limitations (stated, not discovered) ───────────────────────────
|
|
44
98
|
*
|
|
@@ -48,12 +102,12 @@
|
|
|
48
102
|
* • **Thought summaries are not requested.** `usage.thinking` is reported
|
|
49
103
|
* honestly from `thoughtsTokenCount`, and `req.thinking.budget` is threaded
|
|
50
104
|
* to `thinkingConfig.thinkingBudget` — but `includeThoughts` is deliberately
|
|
51
|
-
* left unset, so no `rawThinking` is produced
|
|
52
|
-
* `
|
|
53
|
-
*
|
|
54
|
-
* round-
|
|
55
|
-
*
|
|
56
|
-
*
|
|
105
|
+
* left unset, so no `rawThinking` is produced and there is no Gemini
|
|
106
|
+
* `ThinkingHandler` in this release to normalize thought TEXT. Asking for
|
|
107
|
+
* content nothing can carry would be a leak, not a feature. Signature
|
|
108
|
+
* round-tripping (above) is a separate thing and does not need one.
|
|
109
|
+
* `thinkingConfig.thinkingLevel` has no field on `LLMRequest` and is
|
|
110
|
+
* likewise not sent.
|
|
57
111
|
* • `responseJsonSchema` (native structured output) is NOT exposed; use
|
|
58
112
|
* `.outputSchema(...)`, which goes over as a forced tool — a shape this
|
|
59
113
|
* adapter DOES carry.
|
|
@@ -75,8 +129,22 @@ const googleGenAI_js_1 = require("./googleGenAI.js");
|
|
|
75
129
|
* the recording and the request.
|
|
76
130
|
*/
|
|
77
131
|
const CARRIES_IN_MESSAGES = Object.freeze(['user', 'assistant']);
|
|
78
|
-
/**
|
|
79
|
-
|
|
132
|
+
/**
|
|
133
|
+
* The model asked for when the request says only `'gemini'` — **on Vertex**.
|
|
134
|
+
*
|
|
135
|
+
* Field-proven rather than assumed: an independent trial on live GCP completed
|
|
136
|
+
* a real Vertex tool round trip on `gemini-2.5-flash` through Application
|
|
137
|
+
* Default Credentials, two LLM calls and one tool execution (FINDINGS "Part 1 —
|
|
138
|
+
* native Gemini on Vertex through ADC"). Google lists the model's retirement
|
|
139
|
+
* for **October 16, 2026**, so this is a default with an expiry date, not a
|
|
140
|
+
* recommendation — name a current model in `defaultModel` when you have one.
|
|
141
|
+
*
|
|
142
|
+
* There is deliberately NO sibling constant for the key door. See
|
|
143
|
+
* {@link GeminiProviderOptions.defaultModel}.
|
|
144
|
+
*/
|
|
145
|
+
const DEFAULT_VERTEX_MODEL = 'gemini-2.5-flash';
|
|
146
|
+
/** The request-side shorthand that asks for whatever the door's default is. */
|
|
147
|
+
const MODEL_SHORTHAND = 'gemini';
|
|
80
148
|
/**
|
|
81
149
|
* Prefix on a tool-call id THIS ADAPTER invented.
|
|
82
150
|
*
|
|
@@ -115,16 +183,24 @@ const SYNTHETIC_ID_PREFIX = 'gemini-call-';
|
|
|
115
183
|
* and when `@google/genai` is not installed.
|
|
116
184
|
*/
|
|
117
185
|
function gemini(options = {}) {
|
|
118
|
-
|
|
119
|
-
|
|
186
|
+
// Eager, so a missing `@google/genai` and an unanswerable door are still
|
|
187
|
+
// refused where the consumer typed `gemini(...)`. Under a callback key
|
|
188
|
+
// there is nothing to build yet — see the resolver.
|
|
189
|
+
const connect = (0, googleGenAI_js_1.createGoogleGenAIClientResolver)(options, 'gemini', options._client, true);
|
|
190
|
+
// A double talks to nobody, so its door comes from the options alone and
|
|
191
|
+
// never from the ambient environment of whoever is running the tests.
|
|
192
|
+
const door = (0, googleGenAI_js_1.resolveGoogleDoor)(options, options._client === undefined);
|
|
193
|
+
const defaultModel = options.defaultModel ?? (door === 'vertex' ? DEFAULT_VERTEX_MODEL : undefined);
|
|
120
194
|
const defaultMaxTokens = options.defaultMaxTokens;
|
|
121
195
|
// Ids are invented per PROVIDER INSTANCE, in call order — the same shape
|
|
122
196
|
// `ollama()` uses, and for the same reason: the wire omits them.
|
|
123
197
|
let toolCallSeq = 0;
|
|
124
198
|
const nextToolCallId = () => `${SYNTHETIC_ID_PREFIX}${++toolCallSeq}`;
|
|
125
199
|
// The ONE secret this adapter holds, so the ONE string its errors promise
|
|
126
|
-
// never to print — see `wrapError`.
|
|
127
|
-
|
|
200
|
+
// never to print — see `wrapError`. Under a callback key the secret CHANGES,
|
|
201
|
+
// so the string to redact is the one the failing call actually used, not the
|
|
202
|
+
// one the options were built with.
|
|
203
|
+
const wrap = (err, apiKey) => wrapError(err, apiKey);
|
|
128
204
|
const provider = {
|
|
129
205
|
name: 'gemini',
|
|
130
206
|
carriesInMessages: CARRIES_IN_MESSAGES,
|
|
@@ -135,29 +211,40 @@ function gemini(options = {}) {
|
|
|
135
211
|
// is no endpoint whose behaviour we would be promising on its behalf.
|
|
136
212
|
carriesForcedToolChoice: true,
|
|
137
213
|
async complete(req) {
|
|
138
|
-
const params = buildParams(req, defaultModel, defaultMaxTokens);
|
|
214
|
+
const params = buildParams(req, resolveModel(req.model, defaultModel, door), defaultMaxTokens);
|
|
215
|
+
// Resolved BEFORE the try so a lease failure carries no key to redact
|
|
216
|
+
// that we would have had to guess at; the resolver's own refusals never
|
|
217
|
+
// quote the credential.
|
|
218
|
+
const lease = await connect();
|
|
139
219
|
try {
|
|
140
|
-
const response = await client.models.generateContent(params);
|
|
220
|
+
const response = await lease.client.models.generateContent(params);
|
|
141
221
|
return fromGeminiResponse(response, nextToolCallId);
|
|
142
222
|
}
|
|
143
223
|
catch (err) {
|
|
144
|
-
throw wrap(err);
|
|
224
|
+
throw wrap(err, lease.apiKey);
|
|
145
225
|
}
|
|
146
226
|
},
|
|
147
227
|
async *stream(req) {
|
|
148
|
-
const params = buildParams(req, defaultModel, defaultMaxTokens);
|
|
228
|
+
const params = buildParams(req, resolveModel(req.model, defaultModel, door), defaultMaxTokens);
|
|
229
|
+
// One lease for the whole stream. A key that rotates mid-stream cannot
|
|
230
|
+
// be applied to a socket that is already open — see the refresh boundary
|
|
231
|
+
// in googleGenAI.ts.
|
|
232
|
+
const lease = await connect();
|
|
149
233
|
let stream;
|
|
150
234
|
try {
|
|
151
235
|
// Two awaits, one call: `generateContentStream` answers with a PROMISE
|
|
152
236
|
// of an async generator, so `for await` over the return value directly
|
|
153
237
|
// iterates a promise and yields nothing.
|
|
154
|
-
stream = await client.models.generateContentStream(params);
|
|
238
|
+
stream = await lease.client.models.generateContentStream(params);
|
|
155
239
|
}
|
|
156
240
|
catch (err) {
|
|
157
|
-
throw wrap(err);
|
|
241
|
+
throw wrap(err, lease.apiKey);
|
|
158
242
|
}
|
|
159
243
|
const textParts = [];
|
|
160
|
-
|
|
244
|
+
// The PART, not just its `functionCall`: the thought signature is the
|
|
245
|
+
// part's field, and a call collected without it is a call that cannot
|
|
246
|
+
// go back (see the file header's Failure-4 note).
|
|
247
|
+
const functionParts = [];
|
|
161
248
|
let usage;
|
|
162
249
|
let finishReason;
|
|
163
250
|
let responseId;
|
|
@@ -179,7 +266,7 @@ function gemini(options = {}) {
|
|
|
179
266
|
finishReason = candidate.finishReason;
|
|
180
267
|
for (const part of candidate?.content?.parts ?? []) {
|
|
181
268
|
if (part.functionCall)
|
|
182
|
-
|
|
269
|
+
functionParts.push(part);
|
|
183
270
|
// A thought-summary part is not visible content and is never
|
|
184
271
|
// streamed as one. Nothing asks for them today (see the file
|
|
185
272
|
// header); the guard is here so that a model that volunteers one
|
|
@@ -193,7 +280,7 @@ function gemini(options = {}) {
|
|
|
193
280
|
}
|
|
194
281
|
}
|
|
195
282
|
}
|
|
196
|
-
const toolCalls =
|
|
283
|
+
const toolCalls = functionParts.map((part) => toLLMToolCall(part, nextToolCallId));
|
|
197
284
|
const response = {
|
|
198
285
|
content: textParts.join(''),
|
|
199
286
|
toolCalls,
|
|
@@ -210,13 +297,41 @@ function gemini(options = {}) {
|
|
|
210
297
|
yield { tokenIndex, content: '', done: true, response };
|
|
211
298
|
}
|
|
212
299
|
catch (err) {
|
|
213
|
-
throw wrap(err);
|
|
300
|
+
throw wrap(err, lease.apiKey);
|
|
214
301
|
}
|
|
215
302
|
},
|
|
216
303
|
};
|
|
217
304
|
return provider;
|
|
218
305
|
}
|
|
219
306
|
exports.gemini = gemini;
|
|
307
|
+
/**
|
|
308
|
+
* The model this request is for — and the ONE refusal the doors do not share.
|
|
309
|
+
*
|
|
310
|
+
* A request naming a model wins, always. The shorthand `'gemini'` resolves to
|
|
311
|
+
* the door's default, and the Gemini API door HAS no default (see
|
|
312
|
+
* {@link GeminiProviderOptions.defaultModel}): the one this package used to
|
|
313
|
+
* send was measured returning HTTP 404 on that door for a new account.
|
|
314
|
+
*
|
|
315
|
+
* Refused here rather than at construction because a consumer who always names
|
|
316
|
+
* a model never needs a default, and a factory that refused them at the call
|
|
317
|
+
* site they typed would be charging everyone for a setting only some use.
|
|
318
|
+
*/
|
|
319
|
+
function resolveModel(requested, defaultModel, door) {
|
|
320
|
+
if (requested !== MODEL_SHORTHAND)
|
|
321
|
+
return requested;
|
|
322
|
+
if (defaultModel !== undefined)
|
|
323
|
+
return defaultModel;
|
|
324
|
+
throw new Error(`gemini: model 'gemini' is a shorthand for this door's default model, and the ` +
|
|
325
|
+
`${door === 'vertex' ? 'Vertex' : 'Gemini API (AI Studio)'} door has no default.\n` +
|
|
326
|
+
" A live field trial called that door with this package's old default, " +
|
|
327
|
+
"'gemini-2.5-flash', and Google answered 404: \"This model models/gemini-2.5-flash is no " +
|
|
328
|
+
'longer available to new users." Sending it anyway would fail on YOUR first call, after ' +
|
|
329
|
+
'the request was built and paid for in latency.\n' +
|
|
330
|
+
" Fix: gemini({ apiKey, defaultModel: 'the-model-your-key-can-use' })\n" +
|
|
331
|
+
" Or: name the model per call — Agent.create({ model: 'gemini-3.1-flash-lite' }).\n" +
|
|
332
|
+
' On VERTEX the shorthand still resolves — to gemini-2.5-flash, which the same trial ran ' +
|
|
333
|
+
'end to end (Google retires it 2026-10-16).');
|
|
334
|
+
}
|
|
220
335
|
/**
|
|
221
336
|
* Class form for consumers who prefer `new GeminiProvider(...)` over the
|
|
222
337
|
* `gemini(...)` factory. Identical behavior; trivial wrapper.
|
|
@@ -242,7 +357,7 @@ class GeminiProvider {
|
|
|
242
357
|
}
|
|
243
358
|
exports.GeminiProvider = GeminiProvider;
|
|
244
359
|
// ─── Internals ──────────────────────────────────────────────────────
|
|
245
|
-
function buildParams(req,
|
|
360
|
+
function buildParams(req, model, defaultMaxTokens) {
|
|
246
361
|
const config = {};
|
|
247
362
|
// The system prompt is a top-level field, not a turn — see
|
|
248
363
|
// CARRIES_IN_MESSAGES.
|
|
@@ -276,7 +391,7 @@ function buildParams(req, defaultModel, defaultMaxTokens) {
|
|
|
276
391
|
};
|
|
277
392
|
}
|
|
278
393
|
return {
|
|
279
|
-
model
|
|
394
|
+
model,
|
|
280
395
|
contents: toGeminiContents(req.messages),
|
|
281
396
|
...(Object.keys(config).length > 0 && { config }),
|
|
282
397
|
};
|
|
@@ -287,7 +402,9 @@ function buildParams(req, defaultModel, defaultMaxTokens) {
|
|
|
287
402
|
* Key transforms:
|
|
288
403
|
* • `role: 'system'` is DROPPED — it rides `config.systemInstruction`.
|
|
289
404
|
* • `role: 'assistant'` becomes `role: 'model'`, with `toolCalls` restored as
|
|
290
|
-
* `functionCall` parts so a multi-turn tool conversation round-trips
|
|
405
|
+
* `functionCall` parts so a multi-turn tool conversation round-trips —
|
|
406
|
+
* each one carrying back the `thoughtSignature` it arrived with, which is
|
|
407
|
+
* what makes the SECOND call of a tool loop legal on a current model.
|
|
291
408
|
* • `role: 'tool'` becomes a `functionResponse` part inside a **user** turn,
|
|
292
409
|
* which is where Gemini expects results. Consecutive tool messages merge
|
|
293
410
|
* into ONE user turn, so a reply that called three tools is answered by one
|
|
@@ -308,7 +425,12 @@ function toGeminiContents(messages) {
|
|
|
308
425
|
if (m.content)
|
|
309
426
|
parts.push({ text: m.content });
|
|
310
427
|
for (const tc of m.toolCalls ?? []) {
|
|
428
|
+
const signature = thoughtSignatureOf(tc.providerMeta);
|
|
311
429
|
parts.push({
|
|
430
|
+
// Back on the PART, exactly where it came from and byte for byte.
|
|
431
|
+
// Absent when the model never sent one (a 2.5-series turn), because
|
|
432
|
+
// an invented signature is worse than a missing one.
|
|
433
|
+
...(signature !== undefined && { thoughtSignature: signature }),
|
|
312
434
|
functionCall: {
|
|
313
435
|
// Only an id GEMINI issued goes back to Gemini — see
|
|
314
436
|
// SYNTHETIC_ID_PREFIX.
|
|
@@ -353,6 +475,20 @@ function toGeminiContents(messages) {
|
|
|
353
475
|
function isRealId(id) {
|
|
354
476
|
return id !== undefined && id.length > 0 && !id.startsWith(SYNTHETIC_ID_PREFIX);
|
|
355
477
|
}
|
|
478
|
+
/** The key this adapter parks a thought signature under on `providerMeta`. */
|
|
479
|
+
const THOUGHT_SIGNATURE = 'thoughtSignature';
|
|
480
|
+
/**
|
|
481
|
+
* A signature off the port's neutral metadata bag — or nothing.
|
|
482
|
+
*
|
|
483
|
+
* Shape-checked rather than trusted: `providerMeta` survives a checkpoint, a
|
|
484
|
+
* `structuredClone` and whatever a consumer did to the history in between, and
|
|
485
|
+
* a non-string in the `thoughtSignature` field would go on the wire as a
|
|
486
|
+
* garbled signature, which the service rejects less clearly than a missing one.
|
|
487
|
+
*/
|
|
488
|
+
function thoughtSignatureOf(meta) {
|
|
489
|
+
const raw = meta?.[THOUGHT_SIGNATURE];
|
|
490
|
+
return typeof raw === 'string' && raw.length > 0 ? raw : undefined;
|
|
491
|
+
}
|
|
356
492
|
/**
|
|
357
493
|
* `LLMToolSchema` → `FunctionDeclaration`, with the schema untranslated.
|
|
358
494
|
*
|
|
@@ -376,7 +512,7 @@ function fromGeminiResponse(response, nextToolCallId) {
|
|
|
376
512
|
const toolCalls = [];
|
|
377
513
|
for (const part of candidate?.content?.parts ?? []) {
|
|
378
514
|
if (part.functionCall)
|
|
379
|
-
toolCalls.push(toLLMToolCall(part
|
|
515
|
+
toolCalls.push(toLLMToolCall(part, nextToolCallId));
|
|
380
516
|
// Thought summaries are not the answer. See the header.
|
|
381
517
|
if (part.thought)
|
|
382
518
|
continue;
|
|
@@ -391,11 +527,24 @@ function fromGeminiResponse(response, nextToolCallId) {
|
|
|
391
527
|
...(response.responseId !== undefined && { providerRef: response.responseId }),
|
|
392
528
|
};
|
|
393
529
|
}
|
|
394
|
-
|
|
530
|
+
/**
|
|
531
|
+
* One `functionCall` PART → one port tool call, signature included.
|
|
532
|
+
*
|
|
533
|
+
* Takes the part rather than the `functionCall` because the two fields that
|
|
534
|
+
* have to travel together live at different levels: the call is inside the
|
|
535
|
+
* part, the signature is on it.
|
|
536
|
+
*/
|
|
537
|
+
function toLLMToolCall(part, nextToolCallId) {
|
|
538
|
+
const fc = part.functionCall ?? {};
|
|
539
|
+
const signature = part.thoughtSignature;
|
|
395
540
|
return {
|
|
396
541
|
id: fc.id && fc.id.length > 0 ? fc.id : nextToolCallId(),
|
|
397
542
|
name: fc.name ?? '',
|
|
398
543
|
args: { ...(fc.args ?? {}) },
|
|
544
|
+
// Only when there IS one. An empty bag on every tool call would be noise
|
|
545
|
+
// in every recording, every checkpoint and every narrative line.
|
|
546
|
+
...(typeof signature === 'string' &&
|
|
547
|
+
signature.length > 0 && { providerMeta: { [THOUGHT_SIGNATURE]: signature } }),
|
|
399
548
|
};
|
|
400
549
|
}
|
|
401
550
|
/**
|
|
@@ -410,6 +559,14 @@ function toLLMToolCall(fc, nextToolCallId) {
|
|
|
410
559
|
* `cacheWrite` stays undefined on purpose: Gemini's context caching is created
|
|
411
560
|
* by a separate `caches.create` call that this adapter does not make, so there
|
|
412
561
|
* is no write for a `generateContent` turn to report.
|
|
562
|
+
*
|
|
563
|
+
* **`output` does not include thinking on this wire, and that matters for
|
|
564
|
+
* money.** A field trial's 256-token stream came back `input 21, output 9,
|
|
565
|
+
* thinking 243` — 243 tokens that were spent, were billed, and appear in
|
|
566
|
+
* neither `input` nor `output` (FINDINGS "Failure 5"). Anything adding
|
|
567
|
+
* `input + output` to estimate a Gemini turn is under-counting by whatever the
|
|
568
|
+
* model thought. `usage.thinking` is the number to add, and it now survives all
|
|
569
|
+
* the way to `agentfootprint.stream.llm_end`.
|
|
413
570
|
*/
|
|
414
571
|
function toUsage(usage) {
|
|
415
572
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../../src/adapters/llm/GeminiProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../../src/adapters/llm/GeminiProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,7 @@ const CARRIES_IN_MESSAGES = Object.freeze(['system', 'user', 'assistant']);
|
|
|
47
47
|
* .build();
|
|
48
48
|
*/
|
|
49
49
|
function openai(options = {}) {
|
|
50
|
-
const
|
|
50
|
+
const connect = createClientResolver(options);
|
|
51
51
|
const defaultModel = options.defaultModel ?? 'gpt-4o-mini';
|
|
52
52
|
const defaultMaxTokens = options.defaultMaxTokens;
|
|
53
53
|
// A custom baseURL means an OpenAI-COMPATIBLE endpoint (Ollama/vLLM/Together/Groq),
|
|
@@ -69,6 +69,9 @@ function openai(options = {}) {
|
|
|
69
69
|
carriesForcedToolChoice: !legacyEndpoint,
|
|
70
70
|
async complete(req) {
|
|
71
71
|
const params = buildParams(req, { ...cfg, stream: false });
|
|
72
|
+
// The credential is asked for HERE, per request, so a token that expired
|
|
73
|
+
// since the last call is a new token and not a 401.
|
|
74
|
+
const client = await connect();
|
|
72
75
|
try {
|
|
73
76
|
const response = (await client.chat.completions.create(params));
|
|
74
77
|
return fromOpenAIResponse(response);
|
|
@@ -79,6 +82,7 @@ function openai(options = {}) {
|
|
|
79
82
|
},
|
|
80
83
|
async *stream(req) {
|
|
81
84
|
const params = buildParams(req, { ...cfg, stream: true });
|
|
85
|
+
const client = await connect();
|
|
82
86
|
let stream;
|
|
83
87
|
try {
|
|
84
88
|
stream = client.chat.completions.create(params);
|
|
@@ -292,6 +296,63 @@ function resolveAzureClient(options) {
|
|
|
292
296
|
//
|
|
293
297
|
// openai({ baseURL: 'http://localhost:11434/v1', apiKey: 'ollama' })
|
|
294
298
|
// ─── Internals ──────────────────────────────────────────────────────
|
|
299
|
+
/**
|
|
300
|
+
* The client seam — one answer per request.
|
|
301
|
+
*
|
|
302
|
+
* Three paths, and only the third is new (the same three the Google adapters
|
|
303
|
+
* take, deliberately: two doors that solved the same problem differently would
|
|
304
|
+
* be two doors to learn):
|
|
305
|
+
*
|
|
306
|
+
* 1. `_client` injected → the double, always (the credential callback still
|
|
307
|
+
* runs, because the double replaces the client and not the credential).
|
|
308
|
+
* 2. `apiKey` a string or absent → built ONCE, at factory time, so a missing
|
|
309
|
+
* `openai` package is still refused where the consumer typed `openai(...)`.
|
|
310
|
+
* 3. `apiKey` a callback → called before every request; the SDK client is
|
|
311
|
+
* rebuilt only when the answer changed. Not eager: calling a consumer's
|
|
312
|
+
* credential provider from a factory fetches a token nobody asked for yet.
|
|
313
|
+
*/
|
|
314
|
+
function createClientResolver(options) {
|
|
315
|
+
const source = options.apiKey;
|
|
316
|
+
if (options._client) {
|
|
317
|
+
const injected = options._client;
|
|
318
|
+
// A double stands in for the SDK client, not for the credential: a
|
|
319
|
+
// callback is still called per request, so the rotation is observable in a
|
|
320
|
+
// test that never opens a socket.
|
|
321
|
+
if (typeof source !== 'function')
|
|
322
|
+
return () => injected;
|
|
323
|
+
return async () => {
|
|
324
|
+
await requireKey(source);
|
|
325
|
+
return injected;
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
if (typeof source !== 'function') {
|
|
329
|
+
const built = resolveClient(options);
|
|
330
|
+
return () => built;
|
|
331
|
+
}
|
|
332
|
+
let lastKey;
|
|
333
|
+
let built;
|
|
334
|
+
return async () => {
|
|
335
|
+
const answer = await requireKey(source);
|
|
336
|
+
if (built === undefined || answer !== lastKey) {
|
|
337
|
+
built = resolveClient({ ...options, apiKey: answer });
|
|
338
|
+
lastKey = answer;
|
|
339
|
+
}
|
|
340
|
+
return built;
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
/** Call the credential callback and insist on something usable. */
|
|
344
|
+
async function requireKey(source) {
|
|
345
|
+
const answer = await source();
|
|
346
|
+
if (typeof answer === 'string' && answer.trim().length > 0)
|
|
347
|
+
return answer;
|
|
348
|
+
// The value is never quoted back: it is a credential when it is right.
|
|
349
|
+
throw new Error('openai: the `apiKey` callback returned ' +
|
|
350
|
+
(typeof answer === 'string' ? 'an empty string' : `a ${typeof answer}`) +
|
|
351
|
+
', and a key has to be a non-empty string.\n' +
|
|
352
|
+
' The callback runs before every request, so this is a live credential failure — a ' +
|
|
353
|
+
'token fetch that failed usually throws rather than returning nothing.\n' +
|
|
354
|
+
' Fix: return the token, or throw from the callback so openai() can report why.');
|
|
355
|
+
}
|
|
295
356
|
function resolveClient(options) {
|
|
296
357
|
if (options._client)
|
|
297
358
|
return options._client;
|
|
@@ -305,7 +366,10 @@ function resolveClient(options) {
|
|
|
305
366
|
' Install: npm install openai\n' +
|
|
306
367
|
' Or pass `_client` for test injection.');
|
|
307
368
|
}
|
|
308
|
-
|
|
369
|
+
// A callback has already been resolved to a string by `createClientResolver`
|
|
370
|
+
// before it reaches here; the guard is what keeps a function from being
|
|
371
|
+
// stringified into an `Authorization` header by a future call site.
|
|
372
|
+
const apiKey = (typeof options.apiKey === 'string' ? options.apiKey : undefined) ?? process.env.OPENAI_API_KEY;
|
|
309
373
|
return new OpenAI({ apiKey, ...(options.baseURL && { baseURL: options.baseURL }) });
|
|
310
374
|
}
|
|
311
375
|
/** o-series reasoning ids (o1, o1-mini, o3, o3-mini, o4-mini, o5, …). `gpt-4o`
|