Feat/sdk vision support (#1531)

Co-authored-by: Joel <iamjoel007@gmail.com>
This commit is contained in:
Garfield Dai
2023-11-20 17:54:01 +08:00
committed by GitHub
parent ac3496e681
commit 5b7071e4b0
11 changed files with 319 additions and 62 deletions

View File

@@ -14,27 +14,33 @@ import { DifyClient, ChatClient, CompletionClient } from 'dify-client'
const API_KEY = 'your-api-key-here'
const user = `random-user-id`
const inputs = {
name: 'test name a'
}
const query = "Please tell me a short story in 10 words or less."
const query = 'Please tell me a short story in 10 words or less.'
const remote_url_files = [{
type: 'image',
transfer_method: 'remote_url',
url: 'your_url_addresss'
}]
// Create a completion client
const completionClient = new CompletionClient(API_KEY)
// Create a completion message
completionClient.createCompletionMessage(inputs, query, responseMode, user)
completionClient.createCompletionMessage({'query': query}, user)
// Create a completion message with vision model
completionClient.createCompletionMessage({'query': 'Describe the picture.'}, user, false, remote_url_files)
// Create a chat client
const chatClient = new ChatClient(API_KEY)
// Create a chat message in stream mode
const response = await chatClient.createChatMessage(inputs, query, user, true, null)
const response = await chatClient.createChatMessage({}, query, user, true, null)
const stream = response.data;
stream.on('data', data => {
console.log(data);
});
stream.on('end', () => {
console.log("stream done");
console.log('stream done');
});
// Create a chat message with vision model
chatClient.createChatMessage({}, 'Describe the picture.', user, false, null, remote_url_files)
// Fetch conversations
chatClient.getConversations(user)
// Fetch conversation messages

View File

@@ -34,6 +34,10 @@ export const routes = {
method: "DELETE",
url: (conversation_id) => `/conversations/${conversation_id}`,
},
fileUpload: {
method: "POST",
url: () => `/files/upload`,
}
};
export class DifyClient {
@@ -51,11 +55,15 @@ export class DifyClient {
endpoint,
data = null,
params = null,
stream = false
stream = false,
headerParams = {}
) {
const headers = {
Authorization: `Bearer ${this.apiKey}`,
"Content-Type": "application/json",
...{
Authorization: `Bearer ${this.apiKey}`,
"Content-Type": "application/json",
},
...headerParams
};
const url = `${this.baseUrl}${endpoint}`;
@@ -104,15 +112,28 @@ export class DifyClient {
params
);
}
fileUpload(data) {
return this.sendRequest(
routes.fileUpload.method,
routes.fileUpload.url(),
data,
null,
false,
{
"Content-Type": 'multipart/form-data'
}
);
}
}
export class CompletionClient extends DifyClient {
createCompletionMessage(inputs, query, user, stream = false) {
createCompletionMessage(inputs, user, stream = false, files = null) {
const data = {
inputs,
query,
user,
response_mode: stream ? "streaming" : "blocking",
files,
};
return this.sendRequest(
routes.createCompletionMessage.method,
@@ -130,13 +151,15 @@ export class ChatClient extends DifyClient {
query,
user,
stream = false,
conversation_id = null
conversation_id = null,
files = null
) {
const data = {
inputs,
query,
user,
response_mode: stream ? "streaming" : "blocking",
files,
};
if (conversation_id) data.conversation_id = conversation_id;

View File

@@ -1,6 +1,6 @@
{
"name": "dify-client",
"version": "2.0.0",
"version": "2.1.0",
"description": "This is the Node.js SDK for the Dify.AI API, which allows you to easily integrate Dify.AI into your Node.js applications.",
"main": "index.js",
"type": "module",