# Chat — OpenAI (ChatGPT)

> The Chat API, using the gpt-3.5-turbo or gpt-4 model. See the documentation

- Key: `openai-chat`
- Type: Action (Write)
- Version: 0.3.6
- App: OpenAI (ChatGPT) (`openai`) — https://pipedream.com/apps/openai.md
- This page (HTML): https://pipedream.com/apps/openai/actions/chat
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/openai/actions/chat/chat.mjs

## 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)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `modelId` | `string` | Yes | The ID of the model to use for chat completions Options are loaded from the connected account. |
| `userMessage` | `string` | Yes | The user messages provide instructions to the assistant. They can be generated by the end users of an application, or set by a developer as an instruction. |
| `maxTokens` | `integer` | No | The maximum number of tokens to generate in the completion. |
| `temperature` | `string` | No | Optional. What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer. |
| `topP` | `string` | No | An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. |
| `n` | `integer` | No | How many completions to generate for each prompt |
| `stop` | `string[]` | No | Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence. |
| `presencePenalty` | `string` | No | Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics. |
| `frequencyPenalty` | `string` | No | Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. |
| `user` | `string` | No | A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. Learn more here. |
| `systemInstructions` | `string` | No | The system message helps set the behavior of the assistant. For example: "You are a helpful assistant." See these docs for tips on writing good instructions. |
| `messages` | `string[]` | No | Advanced. Because the models have no memory of past chat requests, all relevant information must be supplied via the conversation. You can provide an array of messages from prior conversations here. If this param is set, the action ignores the values passed to System Instructions and Assistant Response, appends the new User Message to the end of this array, and sends it to the API. |
| `images` | `string[]` | No | Provide one or more images to OpenAI's vision model. Each entry should be either a file URL or a path to a file in the /tmp directory (for example, /tmp/myFile.jpg), or raw base64-encoded image data. Compatible with the gpt4-vision-preview model |
| `audio` | `string` | No | The audio file to upload. Provide either a file URL or a path to a file in the /tmp directory (for example, /tmp/myFile.mp3). For use with the gpt-4o-audio-preview model. Currently supports wav and mp3 files. |
| `responseFormat` | `string` | No | Text: Returns unstructured text output. JSON Schema: Enables you to define a specific structure for the model's output using a JSON schema. |
| `toolTypes` | `string[]` | No | The types of tools to enable on the assistant |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "openai",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "openai-chat",
  arguments: {
    modelId: "Model",
    userMessage: "User Message",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "openai-chat",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    openai: { authProvisionId: "apn_xxxxxxx" },
    modelId: "Model",
    userMessage: "User Message",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "openai-chat",
    "configured_props": {
      "openai": { "authProvisionId": "apn_xxxxxxx" },
      "modelId": "Model",
      "userMessage": "User Message"
    }
  }'
```

---

- App: https://pipedream.com/apps/openai.md · All apps: https://pipedream.com/apps
