graphlit-client 1.0.20251112001 → 1.0.20251112002
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 +2 -0
- package/dist/client.d.ts +1 -1
- package/dist/client.js +30 -30
- package/dist/streaming/llm-formatters.js +7 -5
- package/dist/streaming/providers.js +14 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -172,6 +172,7 @@ The deprecated `@google/generative-ai` SDK has been replaced with the new `@goog
|
|
|
172
172
|
### Migration Steps
|
|
173
173
|
|
|
174
174
|
1. **Update your dependencies:**
|
|
175
|
+
|
|
175
176
|
```bash
|
|
176
177
|
# Remove old SDK
|
|
177
178
|
npm uninstall @google/generative-ai
|
|
@@ -181,6 +182,7 @@ npm install @google/genai
|
|
|
181
182
|
```
|
|
182
183
|
|
|
183
184
|
2. **Update your client initialization:**
|
|
185
|
+
|
|
184
186
|
```typescript
|
|
185
187
|
// Old (deprecated)
|
|
186
188
|
import { GoogleGenerativeAI } from "@google/generative-ai";
|
package/dist/client.d.ts
CHANGED
|
@@ -158,7 +158,7 @@ declare class Graphlit {
|
|
|
158
158
|
extractContents(prompt: string, tools: Types.ToolDefinitionInput[], specification?: Types.EntityReferenceInput, filter?: Types.ContentFilter, correlationId?: string): Promise<Types.ExtractContentsMutation>;
|
|
159
159
|
publishContents(publishPrompt: string, connector: Types.ContentPublishingConnectorInput, summaryPrompt?: string, summarySpecification?: Types.EntityReferenceInput, publishSpecification?: Types.EntityReferenceInput, name?: string, filter?: Types.ContentFilter, workflow?: Types.EntityReferenceInput, isSynchronous?: boolean, includeDetails?: boolean, correlationId?: string): Promise<Types.PublishContentsMutation>;
|
|
160
160
|
publishText(text: string, textType: Types.TextTypes, connector: Types.ContentPublishingConnectorInput, name?: string, workflow?: Types.EntityReferenceInput, isSynchronous?: boolean, correlationId?: string): Promise<Types.PublishTextMutation>;
|
|
161
|
-
researchContents(
|
|
161
|
+
researchContents(connector: Types.ContentPublishingConnectorInput, filter?: Types.ContentFilter, name?: string, summarySpecification?: Types.EntityReferenceInput, publishSpecification?: Types.EntityReferenceInput, workflow?: Types.EntityReferenceInput, correlationId?: string): Promise<Types.ResearchContentsMutation>;
|
|
162
162
|
getContent(id: string): Promise<Types.GetContentQuery>;
|
|
163
163
|
lookupContents(ids: string[]): Promise<Types.LookupContentsResults>;
|
|
164
164
|
queryObservables(filter?: Types.ContentFilter): Promise<Types.QueryObservablesQuery>;
|
package/dist/client.js
CHANGED
|
@@ -730,11 +730,14 @@ class Graphlit {
|
|
|
730
730
|
correlationId: correlationId,
|
|
731
731
|
});
|
|
732
732
|
}
|
|
733
|
-
async researchContents(
|
|
733
|
+
async researchContents(connector, filter, name, summarySpecification, publishSpecification, workflow, correlationId) {
|
|
734
734
|
return this.mutateAndCheckError(Documents.ResearchContents, {
|
|
735
|
-
|
|
736
|
-
specification: specification,
|
|
735
|
+
connector: connector,
|
|
737
736
|
filter: filter,
|
|
737
|
+
name: name,
|
|
738
|
+
summarySpecification: summarySpecification,
|
|
739
|
+
publishSpecification: publishSpecification,
|
|
740
|
+
workflow: workflow,
|
|
738
741
|
correlationId: correlationId,
|
|
739
742
|
});
|
|
740
743
|
}
|
|
@@ -1177,10 +1180,7 @@ class Graphlit {
|
|
|
1177
1180
|
public async connectorExists(
|
|
1178
1181
|
filter?: Types.ConnectorFilter
|
|
1179
1182
|
): Promise<Types.ConnectorExistsQuery> {
|
|
1180
|
-
return this.queryAndCheckError<
|
|
1181
|
-
Types.QueryConnectorsQuery,
|
|
1182
|
-
{ filter?: Types.ConnectorFilter }
|
|
1183
|
-
>(Documents.ConnectorExists, { filter: filter });
|
|
1183
|
+
return this.queryAndCheckError<Types.QueryConnectorsQuery, Types.QueryConnectorsQueryVariables>(Documents.ConnectorExists, { filter: filter });
|
|
1184
1184
|
}
|
|
1185
1185
|
*/
|
|
1186
1186
|
async createView(view) {
|
|
@@ -1513,10 +1513,10 @@ class Graphlit {
|
|
|
1513
1513
|
return this.queryAndCheckError(Documents.QuerySoftwares, { filter: filter });
|
|
1514
1514
|
}
|
|
1515
1515
|
async createMedicalCondition(MedicalCondition) {
|
|
1516
|
-
return this.mutateAndCheckError(Documents.CreateMedicalCondition, {
|
|
1516
|
+
return this.mutateAndCheckError(Documents.CreateMedicalCondition, { medicalCondition: MedicalCondition });
|
|
1517
1517
|
}
|
|
1518
1518
|
async updateMedicalCondition(MedicalCondition) {
|
|
1519
|
-
return this.mutateAndCheckError(Documents.UpdateMedicalCondition, {
|
|
1519
|
+
return this.mutateAndCheckError(Documents.UpdateMedicalCondition, { medicalCondition: MedicalCondition });
|
|
1520
1520
|
}
|
|
1521
1521
|
async deleteMedicalCondition(id) {
|
|
1522
1522
|
return this.mutateAndCheckError(Documents.DeleteMedicalCondition, { id: id });
|
|
@@ -1541,10 +1541,10 @@ class Graphlit {
|
|
|
1541
1541
|
return this.queryAndCheckError(Documents.QueryMedicalConditions, { filter: filter });
|
|
1542
1542
|
}
|
|
1543
1543
|
async createMedicalGuideline(MedicalGuideline) {
|
|
1544
|
-
return this.mutateAndCheckError(Documents.CreateMedicalGuideline, {
|
|
1544
|
+
return this.mutateAndCheckError(Documents.CreateMedicalGuideline, { medicalGuideline: MedicalGuideline });
|
|
1545
1545
|
}
|
|
1546
1546
|
async updateMedicalGuideline(MedicalGuideline) {
|
|
1547
|
-
return this.mutateAndCheckError(Documents.UpdateMedicalGuideline, {
|
|
1547
|
+
return this.mutateAndCheckError(Documents.UpdateMedicalGuideline, { medicalGuideline: MedicalGuideline });
|
|
1548
1548
|
}
|
|
1549
1549
|
async deleteMedicalGuideline(id) {
|
|
1550
1550
|
return this.mutateAndCheckError(Documents.DeleteMedicalGuideline, { id: id });
|
|
@@ -1569,10 +1569,10 @@ class Graphlit {
|
|
|
1569
1569
|
return this.queryAndCheckError(Documents.QueryMedicalGuidelines, { filter: filter });
|
|
1570
1570
|
}
|
|
1571
1571
|
async createMedicalDrug(MedicalDrug) {
|
|
1572
|
-
return this.mutateAndCheckError(Documents.CreateMedicalDrug, {
|
|
1572
|
+
return this.mutateAndCheckError(Documents.CreateMedicalDrug, { medicalDrug: MedicalDrug });
|
|
1573
1573
|
}
|
|
1574
1574
|
async updateMedicalDrug(MedicalDrug) {
|
|
1575
|
-
return this.mutateAndCheckError(Documents.UpdateMedicalDrug, {
|
|
1575
|
+
return this.mutateAndCheckError(Documents.UpdateMedicalDrug, { medicalDrug: MedicalDrug });
|
|
1576
1576
|
}
|
|
1577
1577
|
async deleteMedicalDrug(id) {
|
|
1578
1578
|
return this.mutateAndCheckError(Documents.DeleteMedicalDrug, { id: id });
|
|
@@ -1595,12 +1595,12 @@ class Graphlit {
|
|
|
1595
1595
|
}
|
|
1596
1596
|
async createMedicalIndication(MedicalIndication) {
|
|
1597
1597
|
return this.mutateAndCheckError(Documents.CreateMedicalIndication, {
|
|
1598
|
-
|
|
1598
|
+
medicalIndication: MedicalIndication,
|
|
1599
1599
|
});
|
|
1600
1600
|
}
|
|
1601
1601
|
async updateMedicalIndication(MedicalIndication) {
|
|
1602
1602
|
return this.mutateAndCheckError(Documents.UpdateMedicalIndication, {
|
|
1603
|
-
|
|
1603
|
+
medicalIndication: MedicalIndication,
|
|
1604
1604
|
});
|
|
1605
1605
|
}
|
|
1606
1606
|
async deleteMedicalIndication(id) {
|
|
@@ -1627,12 +1627,12 @@ class Graphlit {
|
|
|
1627
1627
|
}
|
|
1628
1628
|
async createMedicalContraindication(MedicalContraindication) {
|
|
1629
1629
|
return this.mutateAndCheckError(Documents.CreateMedicalContraindication, {
|
|
1630
|
-
|
|
1630
|
+
medicalContraindication: MedicalContraindication,
|
|
1631
1631
|
});
|
|
1632
1632
|
}
|
|
1633
1633
|
async updateMedicalContraindication(MedicalContraindication) {
|
|
1634
1634
|
return this.mutateAndCheckError(Documents.UpdateMedicalContraindication, {
|
|
1635
|
-
|
|
1635
|
+
medicalContraindication: MedicalContraindication,
|
|
1636
1636
|
});
|
|
1637
1637
|
}
|
|
1638
1638
|
async deleteMedicalContraindication(id) {
|
|
@@ -1658,10 +1658,10 @@ class Graphlit {
|
|
|
1658
1658
|
return this.queryAndCheckError(Documents.QueryMedicalContraindications, { filter: filter });
|
|
1659
1659
|
}
|
|
1660
1660
|
async createMedicalTest(MedicalTest) {
|
|
1661
|
-
return this.mutateAndCheckError(Documents.CreateMedicalTest, {
|
|
1661
|
+
return this.mutateAndCheckError(Documents.CreateMedicalTest, { medicalTest: MedicalTest });
|
|
1662
1662
|
}
|
|
1663
1663
|
async updateMedicalTest(MedicalTest) {
|
|
1664
|
-
return this.mutateAndCheckError(Documents.UpdateMedicalTest, {
|
|
1664
|
+
return this.mutateAndCheckError(Documents.UpdateMedicalTest, { medicalTest: MedicalTest });
|
|
1665
1665
|
}
|
|
1666
1666
|
async deleteMedicalTest(id) {
|
|
1667
1667
|
return this.mutateAndCheckError(Documents.DeleteMedicalTest, { id: id });
|
|
@@ -1683,10 +1683,10 @@ class Graphlit {
|
|
|
1683
1683
|
return this.queryAndCheckError(Documents.QueryMedicalTests, { filter: filter });
|
|
1684
1684
|
}
|
|
1685
1685
|
async createMedicalDevice(MedicalDevice) {
|
|
1686
|
-
return this.mutateAndCheckError(Documents.CreateMedicalDevice, {
|
|
1686
|
+
return this.mutateAndCheckError(Documents.CreateMedicalDevice, { medicalDevice: MedicalDevice });
|
|
1687
1687
|
}
|
|
1688
1688
|
async updateMedicalDevice(MedicalDevice) {
|
|
1689
|
-
return this.mutateAndCheckError(Documents.UpdateMedicalDevice, {
|
|
1689
|
+
return this.mutateAndCheckError(Documents.UpdateMedicalDevice, { medicalDevice: MedicalDevice });
|
|
1690
1690
|
}
|
|
1691
1691
|
async deleteMedicalDevice(id) {
|
|
1692
1692
|
return this.mutateAndCheckError(Documents.DeleteMedicalDevice, { id: id });
|
|
@@ -1711,10 +1711,10 @@ class Graphlit {
|
|
|
1711
1711
|
return this.queryAndCheckError(Documents.QueryMedicalDevices, { filter: filter });
|
|
1712
1712
|
}
|
|
1713
1713
|
async createMedicalProcedure(MedicalProcedure) {
|
|
1714
|
-
return this.mutateAndCheckError(Documents.CreateMedicalProcedure, {
|
|
1714
|
+
return this.mutateAndCheckError(Documents.CreateMedicalProcedure, { medicalProcedure: MedicalProcedure });
|
|
1715
1715
|
}
|
|
1716
1716
|
async updateMedicalProcedure(MedicalProcedure) {
|
|
1717
|
-
return this.mutateAndCheckError(Documents.UpdateMedicalProcedure, {
|
|
1717
|
+
return this.mutateAndCheckError(Documents.UpdateMedicalProcedure, { medicalProcedure: MedicalProcedure });
|
|
1718
1718
|
}
|
|
1719
1719
|
async deleteMedicalProcedure(id) {
|
|
1720
1720
|
return this.mutateAndCheckError(Documents.DeleteMedicalProcedure, { id: id });
|
|
@@ -1739,10 +1739,10 @@ class Graphlit {
|
|
|
1739
1739
|
return this.queryAndCheckError(Documents.QueryMedicalProcedures, { filter: filter });
|
|
1740
1740
|
}
|
|
1741
1741
|
async createMedicalStudy(MedicalStudy) {
|
|
1742
|
-
return this.mutateAndCheckError(Documents.CreateMedicalStudy, {
|
|
1742
|
+
return this.mutateAndCheckError(Documents.CreateMedicalStudy, { medicalStudy: MedicalStudy });
|
|
1743
1743
|
}
|
|
1744
1744
|
async updateMedicalStudy(MedicalStudy) {
|
|
1745
|
-
return this.mutateAndCheckError(Documents.UpdateMedicalStudy, {
|
|
1745
|
+
return this.mutateAndCheckError(Documents.UpdateMedicalStudy, { medicalStudy: MedicalStudy });
|
|
1746
1746
|
}
|
|
1747
1747
|
async deleteMedicalStudy(id) {
|
|
1748
1748
|
return this.mutateAndCheckError(Documents.DeleteMedicalStudy, { id: id });
|
|
@@ -1767,10 +1767,10 @@ class Graphlit {
|
|
|
1767
1767
|
return this.queryAndCheckError(Documents.QueryMedicalStudies, { filter: filter });
|
|
1768
1768
|
}
|
|
1769
1769
|
async createMedicalDrugClass(MedicalDrugClass) {
|
|
1770
|
-
return this.mutateAndCheckError(Documents.CreateMedicalDrugClass, {
|
|
1770
|
+
return this.mutateAndCheckError(Documents.CreateMedicalDrugClass, { medicalDrugClass: MedicalDrugClass });
|
|
1771
1771
|
}
|
|
1772
1772
|
async updateMedicalDrugClass(MedicalDrugClass) {
|
|
1773
|
-
return this.mutateAndCheckError(Documents.UpdateMedicalDrugClass, {
|
|
1773
|
+
return this.mutateAndCheckError(Documents.UpdateMedicalDrugClass, { medicalDrugClass: MedicalDrugClass });
|
|
1774
1774
|
}
|
|
1775
1775
|
async deleteMedicalDrugClass(id) {
|
|
1776
1776
|
return this.mutateAndCheckError(Documents.DeleteMedicalDrugClass, { id: id });
|
|
@@ -1795,10 +1795,10 @@ class Graphlit {
|
|
|
1795
1795
|
return this.queryAndCheckError(Documents.QueryMedicalDrugClasses, { filter: filter });
|
|
1796
1796
|
}
|
|
1797
1797
|
async createMedicalTherapy(MedicalTherapy) {
|
|
1798
|
-
return this.mutateAndCheckError(Documents.CreateMedicalTherapy, {
|
|
1798
|
+
return this.mutateAndCheckError(Documents.CreateMedicalTherapy, { medicalTherapy: MedicalTherapy });
|
|
1799
1799
|
}
|
|
1800
1800
|
async updateMedicalTherapy(MedicalTherapy) {
|
|
1801
|
-
return this.mutateAndCheckError(Documents.UpdateMedicalTherapy, {
|
|
1801
|
+
return this.mutateAndCheckError(Documents.UpdateMedicalTherapy, { medicalTherapy: MedicalTherapy });
|
|
1802
1802
|
}
|
|
1803
1803
|
async deleteMedicalTherapy(id) {
|
|
1804
1804
|
return this.mutateAndCheckError(Documents.DeleteMedicalTherapy, { id: id });
|
|
@@ -1906,7 +1906,7 @@ class Graphlit {
|
|
|
1906
1906
|
case Types.ModelServiceTypes.Anthropic:
|
|
1907
1907
|
return Anthropic !== undefined || this.anthropicClient !== undefined;
|
|
1908
1908
|
case Types.ModelServiceTypes.Google:
|
|
1909
|
-
return
|
|
1909
|
+
return GoogleGenAI !== undefined || this.googleClient !== undefined;
|
|
1910
1910
|
case Types.ModelServiceTypes.Groq:
|
|
1911
1911
|
return Groq !== undefined || this.groqClient !== undefined;
|
|
1912
1912
|
case Types.ModelServiceTypes.Cerebras:
|
|
@@ -114,13 +114,15 @@ export function formatMessagesForAnthropic(messages) {
|
|
|
114
114
|
console.log(`🔍 [formatMessagesForAnthropic] Has tool calls: ${message.toolCalls?.length || 0}`);
|
|
115
115
|
}
|
|
116
116
|
// Check if message contains thinking content (for Anthropic compatibility)
|
|
117
|
-
const hasThinking = trimmedMessage.includes(
|
|
117
|
+
const hasThinking = trimmedMessage.includes("<thinking");
|
|
118
118
|
if (hasThinking) {
|
|
119
119
|
// Parse thinking and text content separately for proper Anthropic format
|
|
120
120
|
const thinkingMatch = trimmedMessage.match(/<thinking(?:\s+signature="([^"]*)")?\s*>(.*?)<\/thinking>/s);
|
|
121
|
-
const thinkingSignature = thinkingMatch ? thinkingMatch[1] :
|
|
122
|
-
const thinkingContent = thinkingMatch ? thinkingMatch[2].trim() :
|
|
123
|
-
const textContent = trimmedMessage
|
|
121
|
+
const thinkingSignature = thinkingMatch ? thinkingMatch[1] : "";
|
|
122
|
+
const thinkingContent = thinkingMatch ? thinkingMatch[2].trim() : "";
|
|
123
|
+
const textContent = trimmedMessage
|
|
124
|
+
.replace(/<thinking(?:\s+signature="[^"]*")?\s*>.*?<\/thinking>/s, "")
|
|
125
|
+
.trim();
|
|
124
126
|
if (process.env.DEBUG_GRAPHLIT_SDK_STREAMING) {
|
|
125
127
|
console.log(`🔍 [formatMessagesForAnthropic] Found thinking content: ${thinkingContent.length} chars`);
|
|
126
128
|
console.log(`🔍 [formatMessagesForAnthropic] Text content after thinking: "${textContent}"`);
|
|
@@ -157,7 +159,7 @@ export function formatMessagesForAnthropic(messages) {
|
|
|
157
159
|
});
|
|
158
160
|
}
|
|
159
161
|
if (process.env.DEBUG_GRAPHLIT_SDK_STREAMING) {
|
|
160
|
-
console.log(`🔍 [formatMessagesForAnthropic] Content array: ${content.map(c => c.type).join(
|
|
162
|
+
console.log(`🔍 [formatMessagesForAnthropic] Content array: ${content.map((c) => c.type).join(", ")}`);
|
|
161
163
|
}
|
|
162
164
|
// Add tool uses if present
|
|
163
165
|
if (message.toolCalls && message.toolCalls.length > 0) {
|
|
@@ -864,7 +864,8 @@ onEvent, onComplete, abortSignal, thinkingConfig) {
|
|
|
864
864
|
console.log(`🧠 [Anthropic] Final stored message: "${messageWithThinking}"`);
|
|
865
865
|
}
|
|
866
866
|
}
|
|
867
|
-
else if (process.env.DEBUG_GRAPHLIT_SDK_STREAMING &&
|
|
867
|
+
else if (process.env.DEBUG_GRAPHLIT_SDK_STREAMING &&
|
|
868
|
+
completeThinkingContent.trim()) {
|
|
868
869
|
console.log(`🧠 [Anthropic] Thinking content captured (${completeThinkingContent.length} chars) - not including (no tool calls)`);
|
|
869
870
|
}
|
|
870
871
|
onComplete(messageWithThinking, validToolCalls, usageData);
|
|
@@ -989,14 +990,19 @@ onEvent, onComplete, abortSignal, thinkingConfig) {
|
|
|
989
990
|
if (thinkingConfig) {
|
|
990
991
|
// Google Gemini 2.5 supports thinking mode
|
|
991
992
|
// -1 = dynamic thinking (model decides), 0 = disabled, >0 = specific budget
|
|
992
|
-
const budget = thinkingConfig.budget_tokens === 0
|
|
993
|
-
|
|
993
|
+
const budget = thinkingConfig.budget_tokens === 0
|
|
994
|
+
? 0
|
|
995
|
+
: thinkingConfig.budget_tokens || -1; // Default to dynamic if not specified
|
|
994
996
|
generationConfig.thinkingConfig = {
|
|
995
997
|
thinkingBudget: budget,
|
|
996
998
|
includeThoughts: budget !== 0, // Include thoughts unless explicitly disabled
|
|
997
999
|
};
|
|
998
1000
|
if (process.env.DEBUG_GRAPHLIT_SDK_STREAMING) {
|
|
999
|
-
const mode = budget === -1
|
|
1001
|
+
const mode = budget === -1
|
|
1002
|
+
? "dynamic"
|
|
1003
|
+
: budget === 0
|
|
1004
|
+
? "disabled"
|
|
1005
|
+
: `${budget} tokens`;
|
|
1000
1006
|
console.log(`🧠 [Google] Thinking mode: ${mode} | Include thoughts: ${budget !== 0}`);
|
|
1001
1007
|
}
|
|
1002
1008
|
}
|
|
@@ -1042,7 +1048,7 @@ onEvent, onComplete, abortSignal, thinkingConfig) {
|
|
|
1042
1048
|
const part = chunk.candidates[0].content.parts[i];
|
|
1043
1049
|
console.log(`[Google] Part ${i}: thought=${!!part.thought}, text length=${part.text?.length || 0}`);
|
|
1044
1050
|
if (part.thought && part.text) {
|
|
1045
|
-
console.log(`[Google] THOUGHT CONTENT: "${part.text.substring(0, 100)}${part.text.length > 100 ?
|
|
1051
|
+
console.log(`[Google] THOUGHT CONTENT: "${part.text.substring(0, 100)}${part.text.length > 100 ? "..." : ""}"`);
|
|
1046
1052
|
}
|
|
1047
1053
|
}
|
|
1048
1054
|
}
|
|
@@ -1072,7 +1078,7 @@ onEvent, onComplete, abortSignal, thinkingConfig) {
|
|
|
1072
1078
|
// Regular text part - add to message content
|
|
1073
1079
|
regularText += part.text;
|
|
1074
1080
|
if (process.env.DEBUG_GRAPHLIT_SDK_STREAMING) {
|
|
1075
|
-
console.log(`[Google] Regular text part (NOT thought): "${part.text.substring(0, 100)}${part.text.length > 100 ?
|
|
1081
|
+
console.log(`[Google] Regular text part (NOT thought): "${part.text.substring(0, 100)}${part.text.length > 100 ? "..." : ""}"`);
|
|
1076
1082
|
}
|
|
1077
1083
|
}
|
|
1078
1084
|
}
|
|
@@ -1080,11 +1086,11 @@ onEvent, onComplete, abortSignal, thinkingConfig) {
|
|
|
1080
1086
|
// Use regularText to avoid including thought parts
|
|
1081
1087
|
const text = regularText; // Only use text from non-thought parts
|
|
1082
1088
|
if (process.env.DEBUG_GRAPHLIT_SDK_STREAMING && text) {
|
|
1083
|
-
console.log(`[Google] Text to add (excluding thoughts): "${text.substring(0, 100)}${text.length > 100 ?
|
|
1089
|
+
console.log(`[Google] Text to add (excluding thoughts): "${text.substring(0, 100)}${text.length > 100 ? "..." : ""}" (${text.length} chars)`);
|
|
1084
1090
|
}
|
|
1085
1091
|
if (text) {
|
|
1086
1092
|
if (process.env.DEBUG_GRAPHLIT_SDK_STREAMING) {
|
|
1087
|
-
console.log(`[Google] Adding to fullMessage: "${text.substring(0, 50)}${text.length > 50 ?
|
|
1093
|
+
console.log(`[Google] Adding to fullMessage: "${text.substring(0, 50)}${text.length > 50 ? "..." : ""}" (${text.length} chars)`);
|
|
1088
1094
|
}
|
|
1089
1095
|
fullMessage += text;
|
|
1090
1096
|
tokenCount++;
|