{"_id":"@dndxdnd/dify-ai-provider","_rev":"2-ddb2b1239767b40c17e2a5be74e3ffc7","name":"@dndxdnd/dify-ai-provider","dist-tags":{"latest":"1.0.0"},"versions":{"0.2.0":{"name":"@dndxdnd/dify-ai-provider","version":"0.2.0","keywords":["ai","dify","vercel-ai-sdk","dify-ai-provider"],"author":{"name":"Oscar Jiang","email":"pengj0520@gmail.com"},"license":"MIT","_id":"@dndxdnd/dify-ai-provider@0.2.0","maintainers":[{"name":"dndxdnd","email":"mzhlovefama@gmail.com"}],"homepage":"https://github.com/donaldxdonald/dify-ai-provider#readme","bugs":{"url":"https://github.com/donaldxdonald/dify-ai-provider/issues"},"dist":{"shasum":"fd6af9cfb1c934dee87b7435507fe36617bce1b1","tarball":"https://registry.npmjs.org/@dndxdnd/dify-ai-provider/-/dify-ai-provider-0.2.0.tgz","fileCount":7,"integrity":"sha512-CW24YIk0edQ+hIOVU8EM2lGZ53i8uBhD/xZHeKlSHI+QkiDLkDFACssU1HgtLX98BD+5rm6EQxB4VSXUhwceNg==","signatures":[{"sig":"MEUCIQDcL/K4m7I3vTyzZNNFndbAnnKNO8c8UHYR6aa1HSbTgQIgJXUbpUAoMzMZLjbWdW4LRjtLv4BsYCX253KVs5U4LPI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58495},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"e2c6ea71a3eb69909c30104db965368278092ac9","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup"},"_npmUser":{"name":"dndxdnd","email":"mzhlovefama@gmail.com"},"repository":{"url":"git+https://github.com/donaldxdonald/dify-ai-provider.git","type":"git"},"_npmVersion":"10.9.2","description":"Dify provider for Vercel AI SDK (fork ver.)","directories":{},"_nodeVersion":"22.16.0","dependencies":{"zod":"^3.24.3","@ai-sdk/provider":"^1.1.3","@ai-sdk/provider-utils":"^2.2.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"prepublishOnly":"npm run build","devDependencies":{"tsx":"^4.7.0","tsup":"^8.0.1","vitest":"^1.0.0","typescript":"^5.3.3","@types/node":"^20.11.5"},"_npmOperationalInternal":{"tmp":"tmp/dify-ai-provider_0.2.0_1753536211201_0.8114296835448676","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@dndxdnd/dify-ai-provider","version":"1.0.0","description":"Dify provider for Vercel AI SDK (fork ver.)","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","prepublishOnly":"npm run build"},"exports":{"./package.json":"./package.json",".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"keywords":["ai","dify","vercel-ai-sdk","dify-ai-provider"],"author":{"name":"Oscar Jiang","email":"pengj0520@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/donaldxdonald/dify-ai-provider.git"},"homepage":"https://github.com/donaldxdonald/dify-ai-provider#readme","bugs":{"url":"https://github.com/donaldxdonald/dify-ai-provider/issues"},"publishConfig":{"access":"public"},"license":"MIT","dependencies":{"@ai-sdk/provider":"^2.0.0","@ai-sdk/provider-utils":"^3.0.3","zod":"^3.25.76"},"devDependencies":{"@types/node":"^20.11.5","tsup":"^8.0.1","tsx":"^4.7.0","typescript":"^5.3.3","vitest":"^1.0.0"},"_id":"@dndxdnd/dify-ai-provider@1.0.0","gitHead":"715672bffa4bacf77bac842d156251166d3a5679","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-To/n+J7HwbWHIDeEr6cYky9iEnSimLNtlh6xOLO0/RAVqTxNN80D1A3q7gNxPvFyTB8Ccm0HM9IOpVtHXNyspA==","shasum":"e88524613588e9349807f45972d8dd5b518d7dd2","tarball":"https://registry.npmjs.org/@dndxdnd/dify-ai-provider/-/dify-ai-provider-1.0.0.tgz","fileCount":7,"unpackedSize":58533,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAu95oHihj7dC7VQ2CpxPPojFsULiAkyROxggEomTSwJAiA6vgJtSn5qsL5sP5T2PAv96t7h/dasZ1C4W7ckwrE+QQ=="}]},"_npmUser":{"name":"dndxdnd","email":"mzhlovefama@gmail.com"},"directories":{},"maintainers":[{"name":"dndxdnd","email":"mzhlovefama@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dify-ai-provider_1.0.0_1755615012182_0.9169169415300544"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-26T13:23:31.069Z","modified":"2025-08-19T14:50:12.523Z","0.2.0":"2025-07-26T13:23:31.409Z","1.0.0":"2025-08-19T14:50:12.335Z"},"bugs":{"url":"https://github.com/donaldxdonald/dify-ai-provider/issues"},"author":{"name":"Oscar Jiang","email":"pengj0520@gmail.com"},"license":"MIT","homepage":"https://github.com/donaldxdonald/dify-ai-provider#readme","keywords":["ai","dify","vercel-ai-sdk","dify-ai-provider"],"repository":{"type":"git","url":"git+https://github.com/donaldxdonald/dify-ai-provider.git"},"description":"Dify provider for Vercel AI SDK (fork ver.)","maintainers":[{"name":"dndxdnd","email":"mzhlovefama@gmail.com"}],"readme":"# Dify AI Provider for Vercel AI SDK\n\n> **Note:** The current version only supports text messages.\n\nA provider for [Dify.AI](https://dify.ai/) to work with [Vercel AI SDK](https://sdk.vercel.ai/).\n\nThis provider allows you to easily integrate Dify AI's application workflow with your applications using the Vercel AI SDK.\n\n## Setting Up with Dify\n\nTo use this provider, you'll need:\n\n- **Dify Account**: Create an account at [Dify.AI](https://dify.ai/)\n- **Dify Application**: Each application functions as a model within the Vercel AI SDK\n  - **Application ID**: Serves as the model ID in your code, can be found in the URL: `https://cloud.dify.ai/app/${dify-application-id}/workflow`\n  - **API Key**: can be obtained from the application settings\n\n## Installation\n\n```bash\nnpm install dify-ai-provider\n\n# pnpm\npnpm add dify-ai-provider\n\n# yarn\nyarn add dify-ai-provider\n```\n\n## Usage\n\n### Basic Example\n\n```typescript\nimport { generateText } from \"ai\";\nimport { difyProvider } from \"dify-ai-provider\";\n\nprocess.env.DIFY_API_KEY = \"dify-api-key\"; // app-...\n\n// Create a Dify provider instance\nconst dify = difyProvider(\"dify-application-id\", {\n  responseMode: \"blocking\",\n});\n\n// Generate text using Dify AI\nconst { text, providerMetadata } = await generateText({\n  model: dify,\n  messages: [{ role: \"user\", content: \"Hello, how are you today?\" }],\n  headers: { \"user-id\": \"test-user\" },\n});\n\nconst { conversationId, messageId } = providerMetadata.difyWorkflowData;\nconsole.log(text);\nconsole.log(\"conversationId\", conversationId);\nconsole.log(\"messageId\", messageId);\n```\n\n### Continuing a Conversation\n\nYou can continue a conversation by providing a `chat-id` and `user-id` in request header:\n\n```typescript\nconst { text: followUpText } = await generateText({\n  model: dify,\n  messages: [\n    { role: \"user\", content: \"That's great! What can you help me with?\" },\n  ],\n  headers: { \"user-id\": \"test-user\", \"chat-id\": conversationId },\n});\n\nconsole.log(\"followUpText\", followUpText);\n```\n\n### Streaming\n\n```typescript\nimport { streamText } from \"ai\";\nimport { difyProvider } from \"dify-ai-provider\";\n\nconst dify = difyProvider(\"dify-application-id\");\n\nconst stream = streamText({\n  model: dify,\n  messages: [{ role: \"user\", content: \"Write a short poem about AI.\" }],\n});\n\n// Process text deltas as they arrive\nfor await (const chunk of stream.textStream) {\n  process.stdout.write(chunk);\n}\n```\n\n### Use self-hosted dify\n\n```typescript\nimport { createDifyProvider } from \"dify-ai-provider\";\nconst difyProvider = createDifyProvider({\n  baseURL: \"your-base-url\",\n});\nconst dify = difyProvider(\"dify-application-id\", {\n  responseMode: \"blocking\",\n  apiKey: \"dify-api-key\",\n});\n```\n\n### Use in Next.js AI Chatbot\n\n[Next.js AI Chatbot](https://github.com/vercel/ai-chatbot) is a full-featured, hackable Next.js AI chatbot built by Vercel. If you want to use it as a chatbot frontend for a Dify application, follow the guidelines below:\n\n#### Key Concepts\n\n- In Dify, an **application** corresponds to a **model ID** in the AI provider\n- A Dify **conversation** maps to a **chat session** in the chatbot\n- When you first send a message to Dify, it automatically generates a new conversation\n- You must save and reuse the conversation ID for subsequent messages to maintain chat continuity\n- Without reusing the conversation ID, each message will create a new conversation in Dify\n\n#### Getting the Conversation ID\n\nYou can retrieve the Dify conversation ID from the `onFinish` callback:\n\n```ts\nonFinish: async ({ response, providerMetadata }) => {\n  const conversationId = providerMetadata?.difyWorkflowData?.conversationId as string;\n  const messageId = providerMetadata?.difyWorkflowData?.messageId as string;\n  // Save conversationId for future use\n}\n```\n\n#### Passing Headers for Conversation Continuity\n\nPass the user ID and conversation ID in the headers when calling `streamText`:\n\n> **Important:** The `conversation_id` must be obtained from a Dify response. Using an invalid conversation ID will result in an error stating that the conversation does not exist.\n\n```ts\nconst stream = createDataStream({\n  execute: (dataStream) => {\n    const headers = {\n      'user-id': session.user.id,\n      'chat-id': conversation_id_returned_from_dify\n    };\n\n    const result = streamText({\n      model: myProvider.languageModel(selectedChatModel),\n      headers,\n      // ... other options\n    });\n\n    // ... rest of implementation\n  }\n  // ... other options\n});\n```\n\n## API Reference\n\n### `difyProvider(modelId, settings?)`\n\nCreates a Dify chat model instance.\n\n#### Parameters\n\n- ProviderSettings\n\n  - `modelId` (string): The ID of your Dify application.\n  - `settings` (optional object):\n    - `baseURL` (string): The base URL for the Dify API. Default is `https://api.dify.ai/v1`.\n    - `headers` (Record<string, string>): The headers that will be set to dify api\n\n- ChatSettings\n\n  - `inputs` (object): Additional inputs to send with the request.\n  - `responseMode` (string): Response mode, defaults to `\"streaming\"`.\n  - `apiKey` (string): Your Dify application API key. If not provided, it will use the `DIFY_API_KEY` environment variable.\n\n## Documentation\n\n- [Vercel AI SDK documentation](https://sdk.vercel.ai/docs/introduction)\n- [Dify API documentation](https://docs.dify.ai/guides/application-publishing/developing-with-apis)\n","readmeFilename":"README.md"}