@proteinjs/conversation 2.7.2 → 3.0.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.
Files changed (54) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +21 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +3 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/CodegenConversation.js +1 -1
  8. package/dist/src/CodegenConversation.js.map +1 -1
  9. package/dist/src/Conversation.d.ts +173 -99
  10. package/dist/src/Conversation.d.ts.map +1 -1
  11. package/dist/src/Conversation.js +903 -502
  12. package/dist/src/Conversation.js.map +1 -1
  13. package/dist/src/OpenAi.d.ts +20 -0
  14. package/dist/src/OpenAi.d.ts.map +1 -1
  15. package/dist/src/OpenAi.js +16 -0
  16. package/dist/src/OpenAi.js.map +1 -1
  17. package/dist/src/OpenAiStreamProcessor.d.ts +9 -3
  18. package/dist/src/OpenAiStreamProcessor.d.ts.map +1 -1
  19. package/dist/src/OpenAiStreamProcessor.js +5 -3
  20. package/dist/src/OpenAiStreamProcessor.js.map +1 -1
  21. package/dist/src/UsageData.d.ts.map +1 -1
  22. package/dist/src/UsageData.js +22 -0
  23. package/dist/src/UsageData.js.map +1 -1
  24. package/dist/src/code_template/Code.d.ts.map +1 -1
  25. package/dist/src/code_template/Code.js +8 -2
  26. package/dist/src/code_template/Code.js.map +1 -1
  27. package/dist/src/resolveModel.d.ts +17 -0
  28. package/dist/src/resolveModel.d.ts.map +1 -0
  29. package/dist/src/resolveModel.js +121 -0
  30. package/dist/src/resolveModel.js.map +1 -0
  31. package/dist/test/conversation/conversation.generateObject.test.d.ts +2 -0
  32. package/dist/test/conversation/conversation.generateObject.test.d.ts.map +1 -0
  33. package/dist/test/conversation/conversation.generateObject.test.js +153 -0
  34. package/dist/test/conversation/conversation.generateObject.test.js.map +1 -0
  35. package/dist/test/conversation/conversation.generateResponse.test.d.ts +2 -0
  36. package/dist/test/conversation/conversation.generateResponse.test.d.ts.map +1 -0
  37. package/dist/test/conversation/conversation.generateResponse.test.js +167 -0
  38. package/dist/test/conversation/conversation.generateResponse.test.js.map +1 -0
  39. package/dist/test/conversation/conversation.generateStream.test.d.ts +2 -0
  40. package/dist/test/conversation/conversation.generateStream.test.d.ts.map +1 -0
  41. package/dist/test/conversation/conversation.generateStream.test.js +255 -0
  42. package/dist/test/conversation/conversation.generateStream.test.js.map +1 -0
  43. package/index.ts +5 -0
  44. package/package.json +7 -2
  45. package/src/CodegenConversation.ts +1 -1
  46. package/src/Conversation.ts +938 -496
  47. package/src/OpenAi.ts +20 -0
  48. package/src/OpenAiStreamProcessor.ts +9 -3
  49. package/src/UsageData.ts +25 -0
  50. package/src/code_template/Code.ts +5 -1
  51. package/src/resolveModel.ts +130 -0
  52. package/test/conversation/conversation.generateObject.test.ts +132 -0
  53. package/test/conversation/conversation.generateResponse.test.ts +132 -0
  54. package/test/conversation/conversation.generateStream.test.ts +173 -0
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inferProvider = exports.resolveModel = void 0;
4
+ /**
5
+ * Known provider prefixes and their model factory functions.
6
+ *
7
+ * Each factory lazily imports the provider package and creates a model instance.
8
+ * This keeps imports optional: if a provider package is not installed, the
9
+ * factory simply throws a helpful error at call time.
10
+ */
11
+ var PROVIDER_FACTORIES = {
12
+ openai: function (modelId) {
13
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
14
+ var openai = require('@ai-sdk/openai').openai;
15
+ return openai(modelId);
16
+ },
17
+ anthropic: function (modelId) {
18
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
19
+ var anthropic = require('@ai-sdk/anthropic').anthropic;
20
+ return anthropic(modelId);
21
+ },
22
+ google: function (modelId) {
23
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
24
+ var google = require('@ai-sdk/google').google;
25
+ return google(modelId);
26
+ },
27
+ xai: function (modelId) {
28
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
29
+ var xai = require('@ai-sdk/xai').xai;
30
+ return xai(modelId);
31
+ },
32
+ };
33
+ /**
34
+ * Model name patterns that map to a provider.
35
+ *
36
+ * Order matters: first match wins. Patterns are tested against the raw model
37
+ * string (case-insensitive).
38
+ */
39
+ var MODEL_PROVIDER_PATTERNS = [
40
+ // OpenAI models
41
+ { test: /^(gpt-|o[134]-|o[134]$|chatgpt|dall-e|computer-use|codex)/i, provider: 'openai' },
42
+ // Anthropic models
43
+ { test: /^claude/i, provider: 'anthropic' },
44
+ // Google models
45
+ { test: /^(gemini|gemma)/i, provider: 'google' },
46
+ // xAI models
47
+ { test: /^grok/i, provider: 'xai' },
48
+ ];
49
+ /**
50
+ * Resolve a model identifier to a concrete `LanguageModel` instance.
51
+ *
52
+ * Accepted inputs:
53
+ * - A `LanguageModel` instance (returned as-is)
54
+ * - A prefixed string like `"openai:gpt-5"` or `"anthropic:claude-sonnet-4-20250514"`
55
+ * - A bare model name like `"gpt-5"`, `"claude-sonnet-4-20250514"`, `"gemini-2.5-pro"`, `"grok-3"`
56
+ * (provider inferred from name patterns)
57
+ */
58
+ function resolveModel(model) {
59
+ // Already a model instance
60
+ if (typeof model !== 'string') {
61
+ return model;
62
+ }
63
+ var raw = model.trim();
64
+ if (!raw) {
65
+ throw new Error('resolveModel: empty model string');
66
+ }
67
+ // Explicit provider prefix: "provider:model-id"
68
+ var colonIdx = raw.indexOf(':');
69
+ if (colonIdx > 0) {
70
+ var prefix = raw.slice(0, colonIdx).toLowerCase();
71
+ var modelId = raw.slice(colonIdx + 1);
72
+ var factory = PROVIDER_FACTORIES[prefix];
73
+ if (!factory) {
74
+ throw new Error("resolveModel: unknown provider prefix \"".concat(prefix, "\" in \"").concat(raw, "\". ") +
75
+ "Known providers: ".concat(Object.keys(PROVIDER_FACTORIES).join(', ')));
76
+ }
77
+ return factory(modelId);
78
+ }
79
+ // Infer provider from model name patterns
80
+ for (var _i = 0, MODEL_PROVIDER_PATTERNS_1 = MODEL_PROVIDER_PATTERNS; _i < MODEL_PROVIDER_PATTERNS_1.length; _i++) {
81
+ var _a = MODEL_PROVIDER_PATTERNS_1[_i], test_1 = _a.test, provider = _a.provider;
82
+ if (test_1.test(raw)) {
83
+ return PROVIDER_FACTORIES[provider](raw);
84
+ }
85
+ }
86
+ // Default to OpenAI for unrecognized model names
87
+ // (OpenAI has the most model aliases and is the most common provider)
88
+ return PROVIDER_FACTORIES.openai(raw);
89
+ }
90
+ exports.resolveModel = resolveModel;
91
+ /**
92
+ * Extract the provider name from a model identifier string.
93
+ * Returns 'openai', 'anthropic', 'google', 'xai', or 'unknown'.
94
+ */
95
+ function inferProvider(model) {
96
+ var _a;
97
+ if (typeof model !== 'string') {
98
+ // Try to extract from the model's provider property if available
99
+ var modelId = (_a = model.modelId) !== null && _a !== void 0 ? _a : '';
100
+ return inferProvider(modelId);
101
+ }
102
+ var raw = model.trim();
103
+ // Explicit prefix
104
+ var colonIdx = raw.indexOf(':');
105
+ if (colonIdx > 0) {
106
+ var prefix = raw.slice(0, colonIdx).toLowerCase();
107
+ if (PROVIDER_FACTORIES[prefix]) {
108
+ return prefix;
109
+ }
110
+ }
111
+ // Pattern match
112
+ for (var _i = 0, MODEL_PROVIDER_PATTERNS_2 = MODEL_PROVIDER_PATTERNS; _i < MODEL_PROVIDER_PATTERNS_2.length; _i++) {
113
+ var _b = MODEL_PROVIDER_PATTERNS_2[_i], test_2 = _b.test, provider = _b.provider;
114
+ if (test_2.test(raw)) {
115
+ return provider;
116
+ }
117
+ }
118
+ return 'unknown';
119
+ }
120
+ exports.inferProvider = inferProvider;
121
+ //# sourceMappingURL=resolveModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveModel.js","sourceRoot":"","sources":["../../src/resolveModel.ts"],"names":[],"mappings":";;;AAEA;;;;;;GAMG;AACH,IAAM,kBAAkB,GAAuD;IAC7E,MAAM,EAAE,UAAC,OAAO;QACd,8DAA8D;QACtD,IAAA,MAAM,GAAK,OAAO,CAAC,gBAAgB,CAAC,OAA9B,CAA+B;QAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IACD,SAAS,EAAE,UAAC,OAAO;QACjB,8DAA8D;QACtD,IAAA,SAAS,GAAK,OAAO,CAAC,mBAAmB,CAAC,UAAjC,CAAkC;QACnD,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,EAAE,UAAC,OAAO;QACd,8DAA8D;QACtD,IAAA,MAAM,GAAK,OAAO,CAAC,gBAAgB,CAAC,OAA9B,CAA+B;QAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IACD,GAAG,EAAE,UAAC,OAAO;QACX,8DAA8D;QACtD,IAAA,GAAG,GAAK,OAAO,CAAC,aAAa,CAAC,IAA3B,CAA4B;QACvC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,IAAM,uBAAuB,GAA8C;IACzE,gBAAgB;IAChB,EAAE,IAAI,EAAE,4DAA4D,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAE1F,mBAAmB;IACnB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;IAE3C,gBAAgB;IAChB,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAEhD,aAAa;IACb,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;CACpC,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAAC,KAA6B;IACxD,2BAA2B;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,KAAK,CAAC;KACd;IAED,IAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IAED,gDAAgD;IAChD,IAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ,GAAG,CAAC,EAAE;QAChB,IAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,IAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACxC,IAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CACb,kDAA0C,MAAM,qBAAS,GAAG,SAAK;gBAC/D,2BAAoB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CACnE,CAAC;SACH;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;KACzB;IAED,0CAA0C;IAC1C,KAAiC,UAAuB,EAAvB,mDAAuB,EAAvB,qCAAuB,EAAvB,IAAuB,EAAE;QAA/C,IAAA,kCAAkB,EAAhB,MAAI,UAAA,EAAE,QAAQ,cAAA;QACzB,IAAI,MAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClB,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;SAC1C;KACF;IAED,iDAAiD;IACjD,sEAAsE;IACtE,OAAO,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AApCD,oCAoCC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAC,KAA6B;;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,iEAAiE;QACjE,IAAM,OAAO,GAAG,MAAC,KAAa,CAAC,OAAO,mCAAI,EAAE,CAAC;QAC7C,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;KAC/B;IAED,IAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAEzB,kBAAkB;IAClB,IAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ,GAAG,CAAC,EAAE;QAChB,IAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;YAC9B,OAAO,MAAM,CAAC;SACf;KACF;IAED,gBAAgB;IAChB,KAAiC,UAAuB,EAAvB,mDAAuB,EAAvB,qCAAuB,EAAvB,IAAuB,EAAE;QAA/C,IAAA,kCAAkB,EAAhB,MAAI,UAAA,EAAE,QAAQ,cAAA;QACzB,IAAI,MAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClB,OAAO,QAAQ,CAAC;SACjB;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AA1BD,sCA0BC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversation.generateObject.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.generateObject.test.d.ts","sourceRoot":"","sources":["../../../test/conversation/conversation.generateObject.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ var Conversation_1 = require("../../src/Conversation");
40
+ var zod_1 = require("zod");
41
+ /**
42
+ * Integration tests for Conversation.generateObject.
43
+ *
44
+ * These hit the real OpenAI API (requires OPENAI_API_KEY env var).
45
+ * They verify structured output generation, schema strictification,
46
+ * JSON repair, and usage data extraction.
47
+ */
48
+ var hasApiKey = !!process.env.OPENAI_API_KEY;
49
+ var describeIfKey = hasApiKey ? describe : describe.skip;
50
+ var TEST_MODEL = 'gpt-4.1-nano';
51
+ var TIMEOUT = 60000;
52
+ describeIfKey('Conversation.generateObject', function () {
53
+ test('returns a typed object matching a Zod schema', function () { return __awaiter(void 0, void 0, void 0, function () {
54
+ var schema, conversation, result;
55
+ return __generator(this, function (_a) {
56
+ switch (_a.label) {
57
+ case 0:
58
+ schema = zod_1.z.object({
59
+ name: zod_1.z.string(),
60
+ population: zod_1.z.number(),
61
+ continent: zod_1.z.string(),
62
+ });
63
+ conversation = new Conversation_1.Conversation({ name: 'test-object-zod' });
64
+ return [4 /*yield*/, conversation.generateObject({
65
+ messages: [
66
+ 'Give me info about France. Return the country name, population (approximate number), and continent.',
67
+ ],
68
+ model: TEST_MODEL,
69
+ schema: schema,
70
+ })];
71
+ case 1:
72
+ result = _a.sent();
73
+ expect(result.object).toBeDefined();
74
+ expect(typeof result.object.name).toBe('string');
75
+ expect(typeof result.object.population).toBe('number');
76
+ expect(typeof result.object.continent).toBe('string');
77
+ expect(result.object.name.toLowerCase()).toContain('france');
78
+ expect(result.object.population).toBeGreaterThan(1000000);
79
+ // Usage should be populated
80
+ expect(result.usage.totalTokenUsage.inputTokens).toBeGreaterThan(0);
81
+ expect(result.usage.totalTokenUsage.outputTokens).toBeGreaterThan(0);
82
+ return [2 /*return*/];
83
+ }
84
+ });
85
+ }); }, TIMEOUT);
86
+ test('returns a typed object matching a JSON Schema', function () { return __awaiter(void 0, void 0, void 0, function () {
87
+ var jsonSchema, conversation, result, lower;
88
+ return __generator(this, function (_a) {
89
+ switch (_a.label) {
90
+ case 0:
91
+ jsonSchema = {
92
+ type: 'object',
93
+ properties: {
94
+ colors: {
95
+ type: 'array',
96
+ items: { type: 'string' },
97
+ },
98
+ },
99
+ required: ['colors'],
100
+ };
101
+ conversation = new Conversation_1.Conversation({ name: 'test-object-json-schema' });
102
+ return [4 /*yield*/, conversation.generateObject({
103
+ messages: ['List the 3 primary colors (red, blue, yellow).'],
104
+ model: TEST_MODEL,
105
+ schema: jsonSchema,
106
+ })];
107
+ case 1:
108
+ result = _a.sent();
109
+ expect(result.object).toBeDefined();
110
+ expect(Array.isArray(result.object.colors)).toBe(true);
111
+ expect(result.object.colors.length).toBe(3);
112
+ lower = result.object.colors.map(function (c) { return c.toLowerCase(); });
113
+ expect(lower).toContain('red');
114
+ expect(lower).toContain('blue');
115
+ expect(lower).toContain('yellow');
116
+ return [2 /*return*/];
117
+ }
118
+ });
119
+ }); }, TIMEOUT);
120
+ test('handles nested object schemas (strictification)', function () { return __awaiter(void 0, void 0, void 0, function () {
121
+ var schema, conversation, result;
122
+ return __generator(this, function (_a) {
123
+ switch (_a.label) {
124
+ case 0:
125
+ schema = zod_1.z.object({
126
+ person: zod_1.z.object({
127
+ firstName: zod_1.z.string(),
128
+ lastName: zod_1.z.string(),
129
+ age: zod_1.z.number(),
130
+ }),
131
+ occupation: zod_1.z.string(),
132
+ });
133
+ conversation = new Conversation_1.Conversation({ name: 'test-object-nested' });
134
+ return [4 /*yield*/, conversation.generateObject({
135
+ messages: [
136
+ 'Create a fictional person profile. Use firstName "Ada", lastName "Lovelace", age 36, occupation "Mathematician".',
137
+ ],
138
+ model: TEST_MODEL,
139
+ schema: schema,
140
+ })];
141
+ case 1:
142
+ result = _a.sent();
143
+ expect(result.object.person).toBeDefined();
144
+ expect(result.object.person.firstName).toBe('Ada');
145
+ expect(result.object.person.lastName).toBe('Lovelace');
146
+ expect(result.object.person.age).toBe(36);
147
+ expect(result.object.occupation).toBe('Mathematician');
148
+ return [2 /*return*/];
149
+ }
150
+ });
151
+ }); }, TIMEOUT);
152
+ });
153
+ //# sourceMappingURL=conversation.generateObject.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.generateObject.test.js","sourceRoot":"","sources":["../../../test/conversation/conversation.generateObject.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAsD;AACtD,2BAAwB;AAExB;;;;;;GAMG;AAEH,IAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAC/C,IAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAE3D,IAAM,UAAU,GAAG,cAAc,CAAC;AAClC,IAAM,OAAO,GAAG,KAAM,CAAC;AAqBvB,aAAa,CAAC,6BAA6B,EAAE;IAC3C,IAAI,CACF,8CAA8C,EAC9C;;;;;oBACQ,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;wBACtB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;wBAChB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;wBACtB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;qBACtB,CAAC,CAAC;oBAEG,YAAY,GAAG,IAAI,2BAAY,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;oBACpD,qBAAM,YAAY,CAAC,cAAc,CAAc;4BAC5D,QAAQ,EAAE;gCACR,qGAAqG;6BACtG;4BACD,KAAK,EAAE,UAAU;4BACjB,MAAM,QAAA;yBACP,CAAC,EAAA;;oBANI,MAAM,GAAG,SAMb;oBAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;oBACpC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACjD,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACvD,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACtD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAC7D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,OAAS,CAAC,CAAC;oBAE5D,4BAA4B;oBAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;oBACpE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;;;SACtE,EACD,OAAO,CACR,CAAC;IAEF,IAAI,CACF,+CAA+C,EAC/C;;;;;oBACQ,UAAU,GAAG;wBACjB,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,MAAM,EAAE;gCACN,IAAI,EAAE,OAAO;gCACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;6BAC1B;yBACF;wBACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;qBACrB,CAAC;oBAEI,YAAY,GAAG,IAAI,2BAAY,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,CAAC;oBAC5D,qBAAM,YAAY,CAAC,cAAc,CAAY;4BAC1D,QAAQ,EAAE,CAAC,gDAAgD,CAAC;4BAC5D,KAAK,EAAE,UAAU;4BACjB,MAAM,EAAE,UAAU;yBACnB,CAAC,EAAA;;oBAJI,MAAM,GAAG,SAIb;oBAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;oBACpC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAEtC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,EAAE,EAAf,CAAe,CAAC,CAAC;oBAC/D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBAChC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;;;;SACnC,EACD,OAAO,CACR,CAAC;IAEF,IAAI,CACF,iDAAiD,EACjD;;;;;oBACQ,MAAM,GAAG,OAAC,CAAC,MAAM,CAAC;wBACtB,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;4BACf,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;4BACrB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;4BACpB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;yBAChB,CAAC;wBACF,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;qBACvB,CAAC,CAAC;oBAEG,YAAY,GAAG,IAAI,2BAAY,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;oBACvD,qBAAM,YAAY,CAAC,cAAc,CAAgB;4BAC9D,QAAQ,EAAE;gCACR,kHAAkH;6BACnH;4BACD,KAAK,EAAE,UAAU;4BACjB,MAAM,QAAA;yBACP,CAAC,EAAA;;oBANI,MAAM,GAAG,SAMb;oBAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC3C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;;;SACxD,EACD,OAAO,CACR,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversation.generateResponse.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.generateResponse.test.d.ts","sourceRoot":"","sources":["../../../test/conversation/conversation.generateResponse.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ var Conversation_1 = require("../../src/Conversation");
40
+ /**
41
+ * Integration tests for Conversation.generateResponse (non-streaming convenience).
42
+ *
43
+ * These hit the real OpenAI API (requires OPENAI_API_KEY env var).
44
+ */
45
+ var hasApiKey = !!process.env.OPENAI_API_KEY;
46
+ var describeIfKey = hasApiKey ? describe : describe.skip;
47
+ var TEST_MODEL = 'gpt-4.1-nano';
48
+ var TIMEOUT = 60000;
49
+ function createTestModule(systemMessage, functions) {
50
+ return {
51
+ getName: function () { return 'TestModule'; },
52
+ getSystemMessages: function () { return [systemMessage]; },
53
+ getFunctions: function () { return functions; },
54
+ getMessageModerators: function () { return []; },
55
+ };
56
+ }
57
+ describeIfKey('Conversation.generateResponse', function () {
58
+ test('returns a complete text response with usage', function () { return __awaiter(void 0, void 0, void 0, function () {
59
+ var conversation, result;
60
+ return __generator(this, function (_a) {
61
+ switch (_a.label) {
62
+ case 0:
63
+ conversation = new Conversation_1.Conversation({ name: 'test-response' });
64
+ return [4 /*yield*/, conversation.generateResponse({
65
+ messages: ['Say "hello" and nothing else.'],
66
+ model: TEST_MODEL,
67
+ })];
68
+ case 1:
69
+ result = _a.sent();
70
+ expect(result.text.toLowerCase()).toContain('hello');
71
+ expect(result.usage.totalTokenUsage.inputTokens).toBeGreaterThan(0);
72
+ expect(result.usage.totalTokenUsage.outputTokens).toBeGreaterThan(0);
73
+ expect(result.toolInvocations).toEqual([]);
74
+ return [2 /*return*/];
75
+ }
76
+ });
77
+ }); }, TIMEOUT);
78
+ test('accumulates usage across multiple tool call steps', function () { return __awaiter(void 0, void 0, void 0, function () {
79
+ var lookupCalls, lookupTool, conversation, result;
80
+ return __generator(this, function (_a) {
81
+ switch (_a.label) {
82
+ case 0:
83
+ lookupCalls = [];
84
+ lookupTool = {
85
+ definition: {
86
+ name: 'lookupCapital',
87
+ description: 'Looks up the capital city of a country.',
88
+ parameters: {
89
+ type: 'object',
90
+ properties: {
91
+ country: { type: 'string', description: 'The country name' },
92
+ },
93
+ required: ['country'],
94
+ },
95
+ },
96
+ call: function (args) {
97
+ var _a;
98
+ return __awaiter(this, void 0, void 0, function () {
99
+ var capitals;
100
+ return __generator(this, function (_b) {
101
+ lookupCalls.push(args.country);
102
+ capitals = {
103
+ france: 'Paris',
104
+ japan: 'Tokyo',
105
+ brazil: 'Brasília',
106
+ };
107
+ return [2 /*return*/, { capital: (_a = capitals[args.country.toLowerCase()]) !== null && _a !== void 0 ? _a : 'Unknown' }];
108
+ });
109
+ });
110
+ },
111
+ };
112
+ conversation = new Conversation_1.Conversation({
113
+ name: 'test-multi-tool',
114
+ modules: [
115
+ createTestModule('You are a geography assistant. Use lookupCapital for each country the user asks about. Make a separate call for each country.', [lookupTool]),
116
+ ],
117
+ });
118
+ return [4 /*yield*/, conversation.generateResponse({
119
+ messages: ['What are the capitals of France, Japan, and Brazil?'],
120
+ model: TEST_MODEL,
121
+ })];
122
+ case 1:
123
+ result = _a.sent();
124
+ // Should have called the tool at least 2 times (ideally 3, but LLMs can batch)
125
+ expect(lookupCalls.length).toBeGreaterThanOrEqual(2);
126
+ // Response should mention the capitals
127
+ expect(result.text).toContain('Paris');
128
+ expect(result.text).toContain('Tokyo');
129
+ // Usage should reflect multiple steps
130
+ expect(result.usage.totalRequestsToAssistant).toBeGreaterThanOrEqual(2);
131
+ expect(result.usage.totalToolCalls).toBeGreaterThanOrEqual(2);
132
+ expect(result.usage.callsPerTool['lookupCapital']).toBeGreaterThanOrEqual(2);
133
+ // Total tokens should be substantial (multiple round trips)
134
+ expect(result.usage.totalTokenUsage.inputTokens).toBeGreaterThan(50);
135
+ expect(result.usage.totalTokenUsage.outputTokens).toBeGreaterThan(10);
136
+ // Cost should be calculated (gpt-4.1-nano is in our pricing table)
137
+ expect(result.usage.totalCostUsd.totalUsd).toBeGreaterThanOrEqual(0);
138
+ return [2 /*return*/];
139
+ }
140
+ });
141
+ }); }, TIMEOUT);
142
+ test('handles conversation modules with system messages', function () { return __awaiter(void 0, void 0, void 0, function () {
143
+ var conversation, result, lower, hasPirateWord;
144
+ return __generator(this, function (_a) {
145
+ switch (_a.label) {
146
+ case 0:
147
+ conversation = new Conversation_1.Conversation({
148
+ name: 'test-system-msg',
149
+ modules: [createTestModule('You are a pirate. Always respond in pirate speak.', [])],
150
+ });
151
+ return [4 /*yield*/, conversation.generateResponse({
152
+ messages: ['Say hello.'],
153
+ model: TEST_MODEL,
154
+ })];
155
+ case 1:
156
+ result = _a.sent();
157
+ lower = result.text.toLowerCase();
158
+ hasPirateWord = ['ahoy', 'matey', 'arr', 'ye', 'aye', 'avast', 'yarr', 'shiver'].some(function (w) {
159
+ return lower.includes(w);
160
+ });
161
+ expect(hasPirateWord).toBe(true);
162
+ return [2 /*return*/];
163
+ }
164
+ });
165
+ }); }, TIMEOUT);
166
+ });
167
+ //# sourceMappingURL=conversation.generateResponse.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.generateResponse.test.js","sourceRoot":"","sources":["../../../test/conversation/conversation.generateResponse.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversation.generateStream.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.generateStream.test.d.ts","sourceRoot":"","sources":["../../../test/conversation/conversation.generateStream.test.ts"],"names":[],"mappings":""}