Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@deep-foundation/chatgpt-azure

Package Overview
Dependencies
Maintainers
11
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@deep-foundation/chatgpt-azure - npm Package Compare versions

Comparing version 0.0.1 to 0.0.2

129

deep.json
{
"package": {
"name": "@deep-foundation/chatgpt-azure",
"version": "0.0.1"
"version": "0.0.2"
},

@@ -23,4 +23,4 @@ "data": [

"package": {
"dependencyId": 2,
"containValue": "Dependency"
"dependencyId": 0,
"containValue": "Value"
},

@@ -31,4 +31,4 @@ "id": 3

"package": {
"dependencyId": 3,
"containValue": "TokensDependency"
"dependencyId": 0,
"containValue": "String"
},

@@ -39,4 +39,4 @@ "id": 4

"package": {
"dependencyId": 0,
"containValue": "SyncTextFile"
"dependencyId": 2,
"containValue": "Tokens"
},

@@ -47,4 +47,4 @@ "id": 5

"package": {
"dependencyId": 0,
"containValue": "Handler"
"dependencyId": 1,
"containValue": "UsesModel"
},

@@ -55,4 +55,4 @@ "id": 6

"package": {
"dependencyId": 0,
"containValue": "dockerSupportsJs"
"dependencyId": 3,
"containValue": "Dependency"
},

@@ -63,4 +63,4 @@ "id": 7

"package": {
"dependencyId": 0,
"containValue": "HandleInsert"
"dependencyId": 4,
"containValue": "TokensDependency"
},

@@ -71,4 +71,4 @@ "id": 8

"package": {
"dependencyId": 4,
"containValue": "Reply"
"dependencyId": 0,
"containValue": "SyncTextFile"
},

@@ -79,4 +79,4 @@ "id": 9

"package": {
"dependencyId": 4,
"containValue": "Message"
"dependencyId": 0,
"containValue": "Handler"
},

@@ -88,3 +88,3 @@ "id": 10

"dependencyId": 0,
"containValue": "Any"
"containValue": "dockerSupportsJs"
},

@@ -96,3 +96,3 @@ "id": 11

"dependencyId": 0,
"containValue": "Value"
"containValue": "HandleInsert"
},

@@ -103,4 +103,4 @@ "id": 12

"package": {
"dependencyId": 0,
"containValue": "String"
"dependencyId": 5,
"containValue": "Reply"
},

@@ -110,2 +110,16 @@ "id": 13

{
"package": {
"dependencyId": 5,
"containValue": "Message"
},
"id": 14
},
{
"package": {
"dependencyId": 0,
"containValue": "Any"
},
"id": 15
},
{
"id": "Conversation",

@@ -115,2 +129,25 @@ "type": 1

{
"id": "Endpoint",
"type": 1
},
{
"id": "ProvidedBy",
"type": 1,
"from": 2,
"to": "Endpoint"
},
{
"id": "gpt-4-endpoint",
"type": "Endpoint",
"value": {
"value": "https://deep-ai.openai.azure.com/openai/deployments/gpt-4-32k/chat/completions?api-version=2023-03-15-preview"
}
},
{
"id": "EndpointValue",
"type": 3,
"from": "Endpoint",
"to": 4
},
{
"id": "gpt-4",

@@ -123,12 +160,32 @@ "type": 2,

{
"id": "gpt-4-providedBy",
"type": "ProvidedBy",
"from": "gpt-4",
"to": "gpt-4-endpoint"
},
{
"id": "gpt-4-max-tokens",
"type": 5,
"from": "gpt-4",
"to": "gpt-4",
"value": {
"value": 8192
}
},
{
"id": "gpt-4-uses-model",
"type": 6,
"to": "gpt-4"
},
{
"id": "Dependency",
"type": 3,
"from": 4,
"to": 4
"type": 7,
"from": 8,
"to": 8
},
{
"id": "ReplyInsertHandlerCode",
"type": 5,
"type": 9,
"value": {
"value": "async ({ data: { newLink: replyLink, triggeredByLinkId }, deep, require }) => {\n const startTime = Date.now();\n const PACKAGE_NAME = `@deep-foundation/chatgpt`;\n const axios = require('axios');\nconst APP_URL = 'https://chat.deep.foundation';\nconst APP_NAME = 'Deep.Foundation';\n\n const { Configuration, OpenAIApi } = require('openai');\n const chatGPTTypeLinkId = await deep.id(PACKAGE_NAME, 'ChatGPT');\n const conversationTypeLinkId = await deep.id(PACKAGE_NAME, 'Conversation');\n const apiKeyTypeLinkId = await deep.id('@deep-foundation/openai', 'ApiKey');\n const usesApiKeyTypeLinkId = await deep.id('@deep-foundation/openai', 'UsesApiKey');\n const modelTypeLinkId = await deep.id('@deep-foundation/openai', 'Model');\n const usesModelTypeLinkId = await deep.id('@deep-foundation/openai', 'UsesModel');\n const messageTypeLinkId = await deep.id('@deep-foundation/messaging', 'Message');\n const replyTypeLinkId = await deep.id('@deep-foundation/messaging', 'Reply');\n const authorTypeLinkId = await deep.id('@deep-foundation/messaging', 'Author');\n const containTypeLinkId = await deep.id('@deep-foundation/core', 'Contain');\n const messagingTreeId = await deep.id('@deep-foundation/messaging', 'MessagingTree');\n const systemTypeLinkId = await deep.id('@deep-foundation/chatgpt', 'System');\n const tokensTypeLinkId = await deep.id(\"@deep-foundation/tokens\", \"Tokens\")\n const reservedIds = await deep.reserve(1);\n const chatGPTMessageLinkId = reservedIds.pop();\n let systemMessageId;\n let model;\n let MAX_TOKENS;\n let systemMessage;\n\n const { data: [messageLink] } = await deep.select({\n id: replyLink.from_id,\n _not: {\n out: {\n to_id: chatGPTTypeLinkId,\n type_id: authorTypeLinkId,\n },\n },\n });\n if (!messageLink) {\n return 'No need to react to message of this reply.';\n }\n if (!messageLink.value?.value) {\n throw new Error(`Message ##${messageLink.id} must have a value`);\n }\n const message = messageLink.value.value;\n\n const apiKeyLink = await getTokenLink();\n const apiKey = apiKeyLink.value.value;\n const configuration = new Configuration({\n apiKey: apiKey,\n });\n const openai = new OpenAIApi(configuration);\n\n const { data: conversationLink } = await deep.select({\n tree_id: { _eq: messagingTreeId },\n parent: { type_id: { _in: [conversationTypeLinkId, messageTypeLinkId] } },\n link: { id: { _eq: replyLink.from_id } },\n }, {\n table: 'tree',\n variables: { order_by: { depth: \"asc\" } },\n returning: `\n id\n depth\n root_id\n parent_id\n link_id\n parent {\n id\n from_id\n type_id\n to_id\n value\n author: out (where: { type_id: { _eq: ${authorTypeLinkId}} }) { \n id\n from_id\n type_id\n to_id\n }\n tokens: out (where: { type_id: { _eq: ${tokensTypeLinkId}} }) { \n id\n from_id\n type_id\n to_id\n value\n }\n }`\n })\n if (!conversationLink) {\n throw new Error('A conversationLink link is not found');\n }\n const currentConversation = conversationLink.find(\n (link) => link.parent.type_id === conversationTypeLinkId\n );\n\n conversationLink.forEach((link) => {\n if (link.parent.author && link.parent.author.length > 0) {\n link.parent.author = link.parent.author[0];\n }\n });\n\n const {\n data: [linkedModel],\n } = await deep.select({\n type_id: modelTypeLinkId,\n in: {\n type_id: usesModelTypeLinkId,\n from_id: currentConversation.parent.id,\n },\n });\n\n const {\n data: [userLinkedModel],\n } = await deep.select({\n type_id: modelTypeLinkId,\n in: {\n type_id: usesModelTypeLinkId,\n from_id: triggeredByLinkId,\n },\n });\n\n if (!linkedModel && !userLinkedModel) {\n model = 'gpt-3.5-turbo';\n } else if (\n (linkedModel &&\n linkedModel.value?.value &&\n userLinkedModel &&\n userLinkedModel.value?.value) ||\n (linkedModel && linkedModel.value?.value)\n ) {\n model = linkedModel.value.value;\n } else {\n if (!userLinkedModel) {\n throw new Error(`A link with type ##${userLinkedModel} is not found`);\n }\n if (!userLinkedModel.value?.value) {\n throw new Error(`Linked model with user ##${userLinkedModel.id} must have a value`);\n } else {\n model = userLinkedModel.value.value;\n }\n }\n const messageLinks = conversationLink\n .map(item => item.parent)\n .filter(link => link && link.type_id === messageTypeLinkId);\n let allMessages = await getMessages({ messageLinks });\n const messagesToSend = [...allMessages];\n\n const { data: userLinkedSystemMessageLinks } = await deep.select({\n type_id: systemTypeLinkId,\n to_id: triggeredByLinkId,\n }, { returning: `id message: from{ id value} conversation:to{id}` });\n // Fetching system messages linked to the conversation\n const { data: conversationLinkedSystemMessageLink } = await deep.select({\n type_id: systemTypeLinkId,\n to_id: currentConversation.parent.id,\n }, { returning: `id message: from{ id value} conversation:to{id}` });\n\n if (conversationLinkedSystemMessageLink && conversationLinkedSystemMessageLink.length > 0) {\n const systemMessageLink = conversationLinkedSystemMessageLink[0];\n if (!systemMessageLink.message?.value?.value) {\n throw new Error(`System message with link to conversation ##${systemMessageLink.id} must have a value`);\n } else {\n systemMessage = systemMessageLink.message.value.value;\n systemMessageId = systemMessageLink.message;\n }\n } else if (userLinkedSystemMessageLinks && userLinkedSystemMessageLinks.length > 0) {\n if (userLinkedSystemMessageLinks.length > 1) {\n throw new Error(\"Multiple system messages linked to the user are found\");\n }\n\n const userLinkedSystemMessageLink = userLinkedSystemMessageLinks[0];\n\n if (!userLinkedSystemMessageLink.message?.value?.value) {\n throw new Error(`System message with link to user ##${userLinkedSystemMessageLink.id} must have a value`);\n } else {\n systemMessage = userLinkedSystemMessageLink.message.value.value;\n systemMessageId = userLinkedSystemMessageLink.message;\n }\n }\n\n if (systemMessage) {\n const { data: tokensLinkedToSystemMessage } = await deep.select({\n type_id: tokensTypeLinkId,\n from_id: systemMessageId.id,\n to_id: systemMessageId.id,\n });\n let tokenCount = tokensLinkedToSystemMessage[0].value?.value;\n messagesToSend.unshift({\n role: \"system\",\n content: systemMessage,\n tokens: tokenCount,\n });\n\n }\nif (model === 'gpt-3.5-turbo') {\n MAX_TOKENS = 16000;\n} else if (model === 'gpt-4') {\n MAX_TOKENS = 8192;\n} else if (model === 'openai/gpt-3.5-turbo') {\n MAX_TOKENS = 16000;\n} else if (model === 'openai/gpt-3.5-turbo-16k') {\n MAX_TOKENS = 16000;\n} else if (model === 'openai/gpt-4') {\n MAX_TOKENS = 8192;\n} else if (model === 'openai/gpt-4-32k') {\n MAX_TOKENS = 32000;\n} else if (model === 'anthropic/claude-2') {\n MAX_TOKENS = 8000;\n} else if (model === 'anthropic/claude-instant-v1') {\n MAX_TOKENS = 8000; \n} else if (model === 'google/palm-2-chat-bison') {\n MAX_TOKENS = 8000; \n} else if (model === 'google/palm-2-codechat-bison') {\n MAX_TOKENS = 8000; \n} else if (model === 'meta-llama/llama-2-13b-chat') {\n MAX_TOKENS = 13000; \n} else if (model === 'meta-llama/llama-2-70b-chat') {\n MAX_TOKENS = 70000; \n} else {\n throw new Error(`Unsupported model: ${model}`);\n}\n const tokenLimit = MAX_TOKENS * 7 / 8;\n let totalTokens = 0;\n let messagesToSendToOpenAI = [];\n\n for (let i = messagesToSend.length - 1; i >= 0; i--) {\n const message = messagesToSend[i];\n\n if (message.role === 'system' || totalTokens + message.tokens <= tokenLimit) {\n messagesToSendToOpenAI.unshift({ role: message.role, content: message.content });\n totalTokens += message.tokens;\n } else {\n break;\n }\n }\n\nlet response;\n\nif (model === 'gpt-3.5-turbo' || model === 'gpt-4') {\n response = await openai.createChatCompletion({\n model: model,\n messages: [\n ...messagesToSendToOpenAI\n ],\n });\n} else if (\n model === 'openai/gpt-3.5-turbo' || model === 'openai/gpt-3.5-turbo-16k' ||\n model === 'openai/gpt-4' || model === 'openai/gpt-4-32k' ||\n model === 'anthropic/claude-2' || model === 'anthropic/claude-instant-v1' ||\n model === 'google/palm-2-chat-bison' || model === 'google/palm-2-codechat-bison' ||\n model === 'meta-llama/llama-2-13b-chat' || model === 'meta-llama/llama-2-70b-chat'\n) {\n const body = {\n model: model,\n messages: [\n ...messagesToSendToOpenAI\n ],\n };\n\n response = await getResponse(body);\n}\nconst content = response.data.choices[0]?.message?.content;\n\n deep.serial({\n operations: [\n {\n table: 'links',\n type: 'insert',\n objects: {\n id: chatGPTMessageLinkId,\n type_id: messageTypeLinkId,\n in: {\n data: [\n {\n type_id: containTypeLinkId,\n from_id: triggeredByLinkId,\n },\n ],\n },\n out: {\n data: [\n {\n type_id: authorTypeLinkId,\n to_id: chatGPTTypeLinkId,\n },\n ],\n },\n },\n },\n {\n table: 'strings',\n type: 'insert',\n objects: {\n link_id: chatGPTMessageLinkId,\n value: content\n }\n },\n {\n table: 'links',\n type: 'insert',\n objects: {\n type_id: replyTypeLinkId,\n from_id: chatGPTMessageLinkId,\n to_id: replyLink.from_id,\n in: {\n data: {\n type_id: containTypeLinkId,\n from_id: triggeredByLinkId,\n },\n },\n },\n },\n ],\n });\n\n async function getMessages({ messageLinks }) {\n return Promise.all(\n messageLinks.map(async (link) => {\n const tokens = link.tokens?.length > 0 ? link.tokens[0].value.value : undefined;\n return {\n role: await getMessageRole({ messageLink: link }),\n content: link.value.value,\n tokens: tokens,\n }\n })\n );\n }\n\n async function getMessageRole({ messageLink }) {\n const authorLink = messageLink.author;\n if (!authorLink) {\n throw new Error(`Author link not found for message ##${messageLink.id}`);\n }\n return authorLink.to_id === chatGPTTypeLinkId ? 'assistant' : 'user';\n }\n\n async function getTokenLink() {\n let resultTokenLink;\n const { data } = await deep.select({\n _or: [\n {\n type_id: apiKeyTypeLinkId,\n in: {\n type_id: containTypeLinkId,\n from_id: triggeredByLinkId,\n },\n },\n {\n from_id: triggeredByLinkId,\n type_id: usesApiKeyTypeLinkId,\n },\n ],\n });\n if (data.length === 0) {\n throw new Error(`ApiKey ##${apiKeyTypeLinkId} is not found`);\n }\n const usesLinks = data.filter(\n (link) => link.type_id === usesApiKeyTypeLinkId\n );\n if (usesLinks.length > 1) {\n throw new Error(\n `More than 1 links of type ##${usesApiKeyTypeLinkId} are found`\n );\n }\n const usesLink = data.find(\n (link) => link.type_id === usesApiKeyTypeLinkId\n );\n if (usesLink) {\n const tokenLink = data.find((link) => link.id === usesLink.to_id);\n if (!tokenLink) {\n throw new Error(`ApiKey ##${apiKeyTypeLinkId} is not found`);\n } else {\n resultTokenLink = tokenLink;\n }\n } else {\n const tokenLink = data.filter(\n (link) => link.type_id === apiKeyTypeLinkId\n );\n if (tokenLink.length > 1) {\n throw new Error(\n `For 2 or more ApiKey ##${apiKeyTypeLinkId} links you must activate it with usesOpenAiApiKey link`\n );\n } else {\n const tokenLink = data.find(\n (link) => link.type_id === apiKeyTypeLinkId\n );\n if (!tokenLink) {\n throw new Error(`ApiKey ##${apiKeyTypeLinkId} is not found`);\n }\n resultTokenLink = tokenLink;\n }\n }\n if (!resultTokenLink.value?.value) {\n throw new Error(`ApiKey ##${apiKeyTypeLinkId} has no value`);\n }\n return resultTokenLink;\n }\n\nasync function getResponse(body) {\n try {\n const apiResponse = await axios.post('https://openrouter.ai/api/v1/chat/completions', body, {\n headers: {\n 'Authorization': 'Bearer ' + apiKey,\n 'HTTP-Referer': APP_URL,\n 'X-Title': APP_NAME\n }\n });\n return apiResponse;\n } catch (error) {\n console.error('An error occurred:', error);\n return null;\n }\n}\n\n const endTime = Date.now();\n const duration = (endTime - startTime) / 1000;\n return {\n request: {\n model: model,\n messages: [\n ...messagesToSendToOpenAI\n ],\n },\n response: response.data,\n duration: duration,\n totalTokens: totalTokens\n };\n};"
"value": "async ({ data: { newLink: replyLink, triggeredByLinkId }, deep, require }) => {\n const startTime = Date.now();\n const PACKAGE_NAME = `@deep-foundation/chatgpt-azure`;\n const axios = require('axios');\n\n const { Configuration, OpenAIApi } = require('openai');\n const chatGPTTypeLinkId = await deep.id(PACKAGE_NAME, 'ChatGPT');\n const conversationTypeLinkId = await deep.id(PACKAGE_NAME, 'Conversation');\n const apiKeyTypeLinkId = await deep.id('@deep-foundation/openai', 'ApiKey');\n const usesApiKeyTypeLinkId = await deep.id('@deep-foundation/openai', 'UsesApiKey');\n const modelTypeLinkId = await deep.id('@deep-foundation/openai', 'Model');\n const usesModelTypeLinkId = await deep.id('@deep-foundation/openai', 'UsesModel');\n const messageTypeLinkId = await deep.id('@deep-foundation/messaging', 'Message');\n const replyTypeLinkId = await deep.id('@deep-foundation/messaging', 'Reply');\n const authorTypeLinkId = await deep.id('@deep-foundation/messaging', 'Author');\n const containTypeLinkId = await deep.id('@deep-foundation/core', 'Contain');\n const messagingTreeId = await deep.id('@deep-foundation/messaging', 'MessagingTree');\n const systemTypeLinkId = await deep.id('@deep-foundation/chatgpt-azure', 'System');\n const tokensTypeLinkId = await deep.id(\"@deep-foundation/tokens\", \"Tokens\")\n const reservedIds = await deep.reserve(1);\n const chatGPTMessageLinkId = reservedIds.pop();\n let systemMessageId;\n let model;\n let systemMessage;\n\n const { data: [messageLink] } = await deep.select({\n id: replyLink.from_id,\n _not: {\n out: {\n to_id: chatGPTTypeLinkId,\n type_id: authorTypeLinkId,\n },\n },\n });\n if (!messageLink) {\n return 'No need to react to message of this reply.';\n }\n if (!messageLink.value?.value) {\n throw new Error(`Message ##${messageLink.id} must have a value`);\n }\n const message = messageLink.value.value;\n\n const apiKeyLink = await getTokenLink();\n const apiKey = apiKeyLink.value.value;\n const configuration = new Configuration({\n apiKey: apiKey,\n });\n const openai = new OpenAIApi(configuration);\n\n const { data: conversationLink } = await deep.select({\n tree_id: { _eq: messagingTreeId },\n parent: { type_id: { _in: [conversationTypeLinkId, messageTypeLinkId] } },\n link: { id: { _eq: replyLink.from_id } },\n }, {\n table: 'tree',\n variables: { order_by: { depth: \"asc\" } },\n returning: `\n id\n depth\n root_id\n parent_id\n link_id\n parent {\n id\n from_id\n type_id\n to_id\n value\n author: out (where: { type_id: { _eq: ${authorTypeLinkId}} }) { \n id\n from_id\n type_id\n to_id\n }\n tokens: out (where: { type_id: { _eq: ${tokensTypeLinkId}} }) { \n id\n from_id\n type_id\n to_id\n value\n }\n }`\n })\n if (!conversationLink) {\n throw new Error('A conversationLink link is not found');\n }\n const currentConversation = conversationLink.find(\n (link) => link.parent.type_id === conversationTypeLinkId\n );\n\n conversationLink.forEach((link) => {\n if (link.parent.author && link.parent.author.length > 0) {\n link.parent.author = link.parent.author[0];\n }\n });\n\n const {\n data: [linkedModel],\n } = await deep.select({\n type_id: modelTypeLinkId,\n in: {\n type_id: usesModelTypeLinkId,\n from_id: currentConversation.parent.id,\n },\n });\n\n const {\n data: [userLinkedModel],\n } = await deep.select({\n type_id: 1165,\n in: {\n type_id: 1166,\n from_id: 380,\n }, \n }, {\n returning: `\n id\n value\n in(where: { type_id: { _eq: ${1166} } }) {\n id\n type_id\n from_id\n to_id\n value\n }\n tokens: out(where: { type_id: { _eq: ${1101} } }) {\n id\n from_id\n to_id\n value\n }\n endpointLink: out(where: { type_id: { _eq: ${1325} } }) {\n id\n from_id\n to_id\n endpoint: to {\n id\n value\n }\n }\n `\n });\n\n if (!userLinkedModel[0]?.tokens?.[0]?.value?.value) {\n throw new Error(\"Token limit for the model is not specified.\");\n }\n const MAX_TOKENS = userLinkedModel[0].tokens[0].value.value;\n\n if (!userLinkedModel[0]?.endpointLink?.[0]?.endpoint?.value) {\n throw new Error(\"Endpoint for the model is not specified.\");\n }\n const API_ENDPOINT = userLinkedModel[0].endpointLink[0].endpoint.value;\n\n if (!linkedModel && !userLinkedModel) {\n model = 'gpt-35-turbo';\n } else if (\n (linkedModel &&\n linkedModel.value?.value &&\n userLinkedModel &&\n userLinkedModel.value?.value) ||\n (linkedModel && linkedModel.value?.value)\n ) {\n model = linkedModel.value.value;\n } else {\n if (!userLinkedModel) {\n throw new Error(`A link with type ##${userLinkedModel} is not found`);\n }\n if (!userLinkedModel.value?.value) {\n throw new Error(`Linked model with user ##${userLinkedModel.id} must have a value`);\n } else {\n model = userLinkedModel.value.value;\n }\n }\n const messageLinks = conversationLink\n .map(item => item.parent)\n .filter(link => link && link.type_id === messageTypeLinkId);\n let allMessages = await getMessages({ messageLinks });\n const messagesToSend = [...allMessages];\n\n const { data: userLinkedSystemMessageLinks } = await deep.select({\n type_id: systemTypeLinkId,\n to_id: triggeredByLinkId,\n }, { returning: `id message: from{ id value} conversation:to{id}` });\n \n const { data: conversationLinkedSystemMessageLink } = await deep.select({\n type_id: systemTypeLinkId,\n to_id: currentConversation.parent.id,\n }, { returning: `id message: from{ id value} conversation:to{id}` });\n\n if (conversationLinkedSystemMessageLink && conversationLinkedSystemMessageLink.length > 0) {\n const systemMessageLink = conversationLinkedSystemMessageLink[0];\n if (!systemMessageLink.message?.value?.value) {\n throw new Error(`System message with link to conversation ##${systemMessageLink.id} must have a value`);\n } else {\n systemMessage = systemMessageLink.message.value.value;\n systemMessageId = systemMessageLink.message;\n }\n } else if (userLinkedSystemMessageLinks && userLinkedSystemMessageLinks.length > 0) {\n if (userLinkedSystemMessageLinks.length > 1) {\n throw new Error(\"Multiple system messages linked to the user are found\");\n }\n\n const userLinkedSystemMessageLink = userLinkedSystemMessageLinks[0];\n\n if (!userLinkedSystemMessageLink.message?.value?.value) {\n throw new Error(`System message with link to user ##${userLinkedSystemMessageLink.id} must have a value`);\n } else {\n systemMessage = userLinkedSystemMessageLink.message.value.value;\n systemMessageId = userLinkedSystemMessageLink.message;\n }\n }\n\n if (systemMessage) {\n const { data: tokensLinkedToSystemMessage } = await deep.select({\n type_id: tokensTypeLinkId,\n from_id: systemMessageId.id,\n to_id: systemMessageId.id,\n });\n let tokenCount = tokensLinkedToSystemMessage[0].value?.value;\n messagesToSend.unshift({\n role: \"system\",\n content: systemMessage,\n tokens: tokenCount,\n });\n\n }\n\n const tokenLimit = MAX_TOKENS * 7 / 8;\n let totalTokens = 0;\n let messagesToSendToOpenAI = [];\n\n for (let i = messagesToSend.length - 1; i >= 0; i--) {\n const message = messagesToSend[i];\n\n if (message.role === 'system' || totalTokens + message.tokens <= tokenLimit) {\n messagesToSendToOpenAI.unshift({ role: message.role, content: message.content });\n totalTokens += message.tokens;\n } else {\n break;\n }\n }\nlet response;\n\n try {\n response = await axios.post(API_ENDPOINT, {\n messages: [\n ...messagesToSendToOpenAI\n ],\n }, {\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': apiKey\n }\n });\n } catch (error) {\n console.error('Error making API call:', error);\n }\n\nconst content = response.data.choices[0]?.message?.content;\n\n deep.serial({\n operations: [\n {\n table: 'links',\n type: 'insert',\n objects: {\n id: chatGPTMessageLinkId,\n type_id: messageTypeLinkId,\n in: {\n data: [\n {\n type_id: containTypeLinkId,\n from_id: triggeredByLinkId,\n },\n ],\n },\n out: {\n data: [\n {\n type_id: authorTypeLinkId,\n to_id: chatGPTTypeLinkId,\n },\n ],\n },\n },\n },\n {\n table: 'strings',\n type: 'insert',\n objects: {\n link_id: chatGPTMessageLinkId,\n value: content\n }\n },\n {\n table: 'links',\n type: 'insert',\n objects: {\n type_id: replyTypeLinkId,\n from_id: chatGPTMessageLinkId,\n to_id: replyLink.from_id,\n in: {\n data: {\n type_id: containTypeLinkId,\n from_id: triggeredByLinkId,\n },\n },\n },\n },\n ],\n });\n\n async function getMessages({ messageLinks }) {\n return Promise.all(\n messageLinks.map(async (link) => {\n const tokens = link.tokens?.length > 0 ? link.tokens[0].value.value : undefined;\n return {\n role: await getMessageRole({ messageLink: link }),\n content: link.value.value,\n tokens: tokens,\n }\n })\n );\n }\n\n async function getMessageRole({ messageLink }) {\n const authorLink = messageLink.author;\n if (!authorLink) {\n throw new Error(`Author link not found for message ##${messageLink.id}`);\n }\n return authorLink.to_id === chatGPTTypeLinkId ? 'assistant' : 'user';\n }\n\n async function getTokenLink() {\n let resultTokenLink;\n const { data } = await deep.select({\n _or: [\n {\n type_id: apiKeyTypeLinkId,\n in: {\n type_id: containTypeLinkId,\n from_id: triggeredByLinkId,\n },\n },\n {\n from_id: triggeredByLinkId,\n type_id: usesApiKeyTypeLinkId,\n },\n ],\n });\n if (data.length === 0) {\n throw new Error(`ApiKey ##${apiKeyTypeLinkId} is not found`);\n }\n const usesLinks = data.filter(\n (link) => link.type_id === usesApiKeyTypeLinkId\n );\n if (usesLinks.length > 1) {\n throw new Error(\n `More than 1 links of type ##${usesApiKeyTypeLinkId} are found`\n );\n }\n const usesLink = data.find(\n (link) => link.type_id === usesApiKeyTypeLinkId\n );\n if (usesLink) {\n const tokenLink = data.find((link) => link.id === usesLink.to_id);\n if (!tokenLink) {\n throw new Error(`ApiKey ##${apiKeyTypeLinkId} is not found`);\n } else {\n resultTokenLink = tokenLink;\n }\n } else {\n const tokenLink = data.filter(\n (link) => link.type_id === apiKeyTypeLinkId\n );\n if (tokenLink.length > 1) {\n throw new Error(\n `For 2 or more ApiKey ##${apiKeyTypeLinkId} links you must activate it with usesOpenAiApiKey link`\n );\n } else {\n const tokenLink = data.find(\n (link) => link.type_id === apiKeyTypeLinkId\n );\n if (!tokenLink) {\n throw new Error(`ApiKey ##${apiKeyTypeLinkId} is not found`);\n }\n resultTokenLink = tokenLink;\n }\n }\n if (!resultTokenLink.value?.value) {\n throw new Error(`ApiKey ##${apiKeyTypeLinkId} has no value`);\n }\n return resultTokenLink;\n }\n\n const endTime = Date.now();\n const duration = (endTime - startTime) / 1000;\n return {\n request: {\n model: model,\n messages: [\n ...messagesToSendToOpenAI\n ],\n },\n response: response.data,\n duration: duration,\n totalTokens: totalTokens\n };\n};"
}

@@ -138,4 +195,4 @@ },

"id": "ReplyInsertHandler",
"type": 6,
"from": 7,
"type": 10,
"from": 11,
"to": "ReplyInsertHandlerCode"

@@ -145,4 +202,4 @@ },

"id": "HandleReplyInsert",
"type": 8,
"from": 9,
"type": 12,
"from": 13,
"to": "ReplyInsertHandler"

@@ -174,4 +231,4 @@ },

"type": 1,
"from": 10,
"to": 11
"from": 14,
"to": 15
},

@@ -184,5 +241,5 @@ {

"id": "ConversationValue",
"type": 12,
"type": 3,
"from": "Conversation",
"to": 13
"to": 4
}

@@ -201,2 +258,6 @@ ],

{
"name": "@deep-foundation/tokens",
"version": "0.0.11"
},
{
"name": "@freephoenix888/dependency",

@@ -203,0 +264,0 @@ "version": "0.0.1"

@@ -8,5 +8,6 @@ {

"@deep-foundation/openai": "~1.0.2",
"@deep-foundation/tokens": "^0.0.11",
"@freephoenix888/dependency": "^0.0.1"
},
"version": "0.0.1",
"version": "0.0.2",
"keywords": [

@@ -13,0 +14,0 @@ "deep-package"

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc