@pipedream/openai 1.0.2 → 1.1.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.
@@ -5,7 +5,7 @@ import constants from "../../common/constants.mjs";
5
5
  export default {
6
6
  ...common,
7
7
  name: "Chat",
8
- version: "0.3.1",
8
+ version: "0.3.2",
9
9
  key: "openai-chat",
10
10
  description: "The Chat API, using the `gpt-3.5-turbo` or `gpt-4` model. [See the documentation](https://platform.openai.com/docs/api-reference/chat)",
11
11
  type: "action",
@@ -5,7 +5,7 @@ import constants from "../../common/constants.mjs";
5
5
  export default {
6
6
  ...common,
7
7
  name: "Chat using File Search",
8
- version: "0.0.5",
8
+ version: "0.0.6",
9
9
  key: "openai-chat-using-file-search",
10
10
  description: "Chat with your files knowledge base (vector stores). [See the documentation](https://platform.openai.com/docs/guides/tools-file-search)",
11
11
  type: "action",
@@ -5,7 +5,7 @@ import constants from "../../common/constants.mjs";
5
5
  export default {
6
6
  ...common,
7
7
  name: "Chat using Functions",
8
- version: "0.0.6",
8
+ version: "0.0.7",
9
9
  key: "openai-chat-using-functions",
10
10
  description: "Chat with your models and allow them to invoke functions. Optionally, you can build and invoke workflows as functions. [See the documentation](https://platform.openai.com/docs/guides/function-calling)",
11
11
  type: "action",
@@ -5,7 +5,7 @@ import constants from "../../common/constants.mjs";
5
5
  export default {
6
6
  ...common,
7
7
  name: "Chat using Web Search",
8
- version: "0.0.5",
8
+ version: "0.0.6",
9
9
  key: "openai-chat-using-web-search",
10
10
  description: "Chat using the web search tool. [See the documentation](https://platform.openai.com/docs/guides/tools-web-search)",
11
11
  type: "action",
@@ -0,0 +1,171 @@
1
+ import openai from "../../openai.app.mjs";
2
+ import common from "../common/common.mjs";
3
+ import constants from "../../common/constants.mjs";
4
+ import {
5
+ parseArray,
6
+ parseJson,
7
+ } from "../../common/helpers.mjs";
8
+
9
+ export default {
10
+ ...common,
11
+ key: "openai-chat-with-responses-api",
12
+ name: "Chat With Responses API",
13
+ version: "0.0.1",
14
+ description: "Send a chat via the Responses API, mixing built-in tools and MCP server tools. [See the documentation](https://platform.openai.com/docs/guides/tools?api-mode=responses).",
15
+ type: "action",
16
+ props: {
17
+ openai,
18
+ modelId: {
19
+ description: "Model used to generate the response",
20
+ propDefinition: [
21
+ openai,
22
+ "chatCompletionModelId",
23
+ ],
24
+ },
25
+ input: {
26
+ description: "Text input to the model used to generate a response",
27
+ propDefinition: [
28
+ openai,
29
+ "input",
30
+ ],
31
+ },
32
+ instructions: {
33
+ description: "Inserts a system (or developer) message as the first item in the model's context",
34
+ propDefinition: [
35
+ openai,
36
+ "instructions",
37
+ ],
38
+ },
39
+ previousResponseId: {
40
+ type: "string",
41
+ label: "Previous Response ID",
42
+ description: "The unique ID of the previous response to the model. Use this to create multi-turn conversations",
43
+ optional: true,
44
+ },
45
+ truncation: {
46
+ type: "string",
47
+ label: "Truncation",
48
+ description:
49
+ "Specifies the truncation mode for the response if it exceeds the context window",
50
+ default: "auto",
51
+ options: [
52
+ "auto",
53
+ "disabled",
54
+ ],
55
+ optional: true,
56
+ },
57
+ responseFormat: {
58
+ type: "string",
59
+ label: "Response Format",
60
+ description: "- `text`: Returns unstructured text output.\n- `json_schema`: Enforces a specific structure using a JSON schema.",
61
+ options: [
62
+ "text",
63
+ "json_schema",
64
+ ],
65
+ default: "text",
66
+ optional: true,
67
+ reloadProps: true,
68
+ },
69
+ builtInTools: {
70
+ type: "string[]",
71
+ label: "Built-In Tools",
72
+ description: "Which of OpenAI's first-party tools to enable (web search, file search, code interpreter).",
73
+ options: [
74
+ {
75
+ label: "Web Search",
76
+ value: "web_search_preview",
77
+ },
78
+ {
79
+ label: "File Search",
80
+ value: "file_search",
81
+ },
82
+ {
83
+ label: "Code Interpreter",
84
+ value: "code_interpreter",
85
+ },
86
+ ],
87
+ default: [],
88
+ },
89
+ otherTools: {
90
+ type: "string[]",
91
+ label: "Other Tools",
92
+ description: "Other tools to include in the chat. [See the documentation](https://platform.openai.com/docs/guides/tools-remote-mcp). Example: `{ type: \"mcp\", server_label: \"gmail\", server_url: \"https://remote.mcp.pipedream.net\", headers: {}, require_approval: \"never\" }`",
93
+ optional: true,
94
+ },
95
+ },
96
+ additionalProps() {
97
+ if (this.responseFormat === constants.CHAT_RESPONSE_FORMAT.JSON_SCHEMA.value) {
98
+ return {
99
+ schemaName: {
100
+ type: "string",
101
+ label: "Name",
102
+ description: "The name of the schema.",
103
+ },
104
+ schema: {
105
+ type: "string",
106
+ label: "JSON Schema",
107
+ description: "Define the schema that the model's output must adhere to. Only supported models are `gpt-4o-mini`, `gpt-4o-mini-2024-07-18`, `gpt-4o-2024-08-06` and later.",
108
+ },
109
+ };
110
+ }
111
+ return {};
112
+ },
113
+ async run({ $ }) {
114
+ const {
115
+ builtInTools,
116
+ otherTools,
117
+ modelId,
118
+ input,
119
+ instructions,
120
+ previousResponseId,
121
+ truncation,
122
+ responseFormat,
123
+ schemaName,
124
+ schema,
125
+ } = this;
126
+
127
+ const tools = builtInTools.map((tool) => ({
128
+ type: tool,
129
+ }));
130
+
131
+ if (otherTools) {
132
+ tools.push(...parseArray(otherTools));
133
+ }
134
+
135
+ const data = {
136
+ model: modelId,
137
+ input,
138
+ instructions,
139
+ previous_response_id: previousResponseId,
140
+ truncation,
141
+ tools,
142
+ };
143
+
144
+ if (responseFormat === constants.CHAT_RESPONSE_FORMAT.JSON_SCHEMA.value) {
145
+ try {
146
+ data.text = {
147
+ format: {
148
+ type: responseFormat,
149
+ name: schemaName,
150
+ schema: parseJson(schema),
151
+ },
152
+ };
153
+ } catch {
154
+ throw new Error("Invalid JSON format in the provided JSON Schema");
155
+ }
156
+ }
157
+
158
+ const response = await this.openai.responses({
159
+ $,
160
+ data,
161
+ debug: true,
162
+ });
163
+
164
+ if (response) {
165
+ $.export("$summary", `Successfully sent chat to OpenAI Responses API with ID \`${response.id}\`.`);
166
+ $.export("chat_responses", response.output);
167
+ }
168
+
169
+ return response;
170
+ },
171
+ };
@@ -3,7 +3,7 @@ import common from "../common/common-helper.mjs";
3
3
  export default {
4
4
  ...common,
5
5
  name: "Classify Items into Categories",
6
- version: "0.1.7",
6
+ version: "0.1.8",
7
7
  key: "openai-classify-items-into-categories",
8
8
  description: "Classify items into specific categories using the Chat API. [See the documentation](https://platform.openai.com/docs/api-reference/chat)",
9
9
  type: "action",
@@ -4,7 +4,7 @@ import common from "../common/common.mjs";
4
4
 
5
5
  export default {
6
6
  name: "Create Embeddings",
7
- version: "0.0.19",
7
+ version: "0.0.20",
8
8
  key: "openai-create-embeddings",
9
9
  description: "Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms. [See the documentation](https://platform.openai.com/docs/api-reference/embeddings)",
10
10
  type: "action",
@@ -4,7 +4,7 @@ import common from "../common/common.mjs";
4
4
  export default {
5
5
  ...common,
6
6
  name: "Create Completion (Send Prompt)",
7
- version: "0.1.18",
7
+ version: "0.1.19",
8
8
  key: "openai-send-prompt",
9
9
  description: "OpenAI recommends using the **Chat** action for the latest `gpt-3.5-turbo` API, since it's faster and 10x cheaper. This action creates a completion for the provided prompt and parameters using the older `/completions` API. [See the documentation](https://beta.openai.com/docs/api-reference/completions/create)",
10
10
  type: "action",
@@ -4,7 +4,7 @@ import constants from "../../common/constants.mjs";
4
4
  export default {
5
5
  ...common,
6
6
  name: "Summarize Text",
7
- version: "0.1.7",
7
+ version: "0.1.8",
8
8
  key: "openai-summarize",
9
9
  description: "Summarizes text using the Chat API. [See the documentation](https://platform.openai.com/docs/api-reference/chat)",
10
10
  type: "action",
@@ -9,7 +9,7 @@ const langOptions = lang.LANGUAGES.map((l) => ({
9
9
  export default {
10
10
  ...common,
11
11
  name: "Translate Text (Whisper)",
12
- version: "0.1.7",
12
+ version: "0.1.8",
13
13
  key: "openai-translate-text",
14
14
  description: "Translate text from one language to another using the Chat API. [See the documentation](https://platform.openai.com/docs/api-reference/chat)",
15
15
  type: "action",
@@ -37,3 +37,52 @@ export function parse(value) {
37
37
  throw new ConfigurationError("Make sure the schema contains a valid JSON object.");
38
38
  }
39
39
  }
40
+
41
+ export const parseJson = (input, maxDepth = 100) => {
42
+ const seen = new WeakSet();
43
+ const parse = (value) => {
44
+ if (maxDepth <= 0) {
45
+ return value;
46
+ }
47
+ if (typeof(value) === "string") {
48
+ // Only parse if the string looks like a JSON object or array
49
+ const trimmed = value.trim();
50
+ if (
51
+ (trimmed.startsWith("{") && trimmed.endsWith("}")) ||
52
+ (trimmed.startsWith("[") && trimmed.endsWith("]"))
53
+ ) {
54
+ try {
55
+ return parseJson(JSON.parse(value), maxDepth - 1);
56
+ } catch (e) {
57
+ return value;
58
+ }
59
+ }
60
+ return value;
61
+ } else if (typeof(value) === "object" && value !== null && !Array.isArray(value)) {
62
+ if (seen.has(value)) {
63
+ return value;
64
+ }
65
+ seen.add(value);
66
+ return Object.entries(value)
67
+ .reduce((acc, [
68
+ key,
69
+ val,
70
+ ]) => Object.assign(acc, {
71
+ [key]: parse(val),
72
+ }), {});
73
+ } else if (Array.isArray(value)) {
74
+ return value.map((item) => parse(item));
75
+ }
76
+ return value;
77
+ };
78
+
79
+ return parse(input);
80
+ };
81
+
82
+ export function parseArray (input, maxDepth = 100) {
83
+ if (!Array.isArray(input)) {
84
+ return input;
85
+ }
86
+
87
+ return input.map((item) => parseJson(item, maxDepth));
88
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipedream/openai",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "Pipedream OpenAI Components",
5
5
  "main": "openai.app.mjs",
6
6
  "keywords": [
@@ -16,7 +16,6 @@
16
16
  "dependencies": {
17
17
  "@pipedream/platform": "^3.1.0",
18
18
  "@pipedream/types": "^0.1.4",
19
- "axios": "^1.6.2",
20
19
  "bottleneck": "^2.19.5",
21
20
  "form-data": "^4.0.0",
22
21
  "got": "^12.6.0",