@openenthrium/oe-runtime-sdk 1.7.5
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.
- package/README.md +139 -0
- package/index.js +58 -0
- package/package.json +64 -0
- package/src/data/connectionTypes.json +18587 -0
- package/src/engine/index.js +183 -0
- package/src/engine/llm.js +71 -0
- package/src/engine/promptBuilder.js +38 -0
- package/src/index.js +156 -0
- package/src/middleware/auth.js +63 -0
- package/src/providers/embedding/index.js +69 -0
- package/src/providers/llm/index.js +136 -0
- package/src/routes/admin.js +686 -0
- package/src/routes/agents.js +193 -0
- package/src/routes/apiKeys.js +55 -0
- package/src/routes/audio.js +111 -0
- package/src/routes/auth.js +83 -0
- package/src/routes/chat.js +381 -0
- package/src/routes/connectors.js +435 -0
- package/src/routes/dashboard.js +244 -0
- package/src/routes/documents.js +443 -0
- package/src/routes/embed.js +103 -0
- package/src/routes/marketplace.js +49 -0
- package/src/routes/models.js +81 -0
- package/src/routes/oauth.js +423 -0
- package/src/routes/projects.js +238 -0
- package/src/routes/settings.js +45 -0
- package/src/routes/setup.js +42 -0
- package/src/routes/sso.js +218 -0
- package/src/routes/superadmin.js +51 -0
- package/src/routes/templates.js +75 -0
- package/src/routes/threads.js +53 -0
- package/src/routes/workspaces.js +464 -0
- package/src/telemetry/bootstrap.js +39 -0
- package/src/telemetry/registration.js +16 -0
- package/src/utils/activityLog.js +16 -0
- package/src/utils/agentChain.js +141 -0
- package/src/utils/buildVisualization.js +102 -0
- package/src/utils/dlpScanner.js +57 -0
- package/src/utils/ingestionQueue.js +240 -0
- package/src/utils/prepareConnectors.js +66 -0
- package/src/utils/rag/_settings.js +6 -0
- package/src/utils/rag/chroma.js +82 -0
- package/src/utils/rag/lancedb.js +103 -0
- package/src/utils/rag/milvus.js +116 -0
- package/src/utils/rag/pgvector.js +104 -0
- package/src/utils/rag/pinecone.js +71 -0
- package/src/utils/rag/qdrant.js +106 -0
- package/src/utils/rag/weaviate.js +137 -0
- package/src/utils/rag/zilliz.js +115 -0
- package/src/utils/scheduler.js +168 -0
- package/src/utils/tier.js +106 -0
- package/src/utils/tools/adapters/_template.js +74 -0
- package/src/utils/tools/adapters/box.js +71 -0
- package/src/utils/tools/adapters/confluence.js +80 -0
- package/src/utils/tools/adapters/database.js +215 -0
- package/src/utils/tools/adapters/dropbox.js +74 -0
- package/src/utils/tools/adapters/elasticsearch.js +90 -0
- package/src/utils/tools/adapters/filesystem.js +197 -0
- package/src/utils/tools/adapters/freshdesk.js +87 -0
- package/src/utils/tools/adapters/gdrive.js +326 -0
- package/src/utils/tools/adapters/github.js +169 -0
- package/src/utils/tools/adapters/gmail.js +157 -0
- package/src/utils/tools/adapters/graphql.js +73 -0
- package/src/utils/tools/adapters/hubspot.js +101 -0
- package/src/utils/tools/adapters/image-gen.js +120 -0
- package/src/utils/tools/adapters/jira.js +86 -0
- package/src/utils/tools/adapters/kafka.js +126 -0
- package/src/utils/tools/adapters/ldap.js +118 -0
- package/src/utils/tools/adapters/mcp-client.js +138 -0
- package/src/utils/tools/adapters/mongodb.js +119 -0
- package/src/utils/tools/adapters/mqtt.js +106 -0
- package/src/utils/tools/adapters/music-gen.js +118 -0
- package/src/utils/tools/adapters/notion.js +93 -0
- package/src/utils/tools/adapters/ocr.js +107 -0
- package/src/utils/tools/adapters/onedrive.js +72 -0
- package/src/utils/tools/adapters/redis.js +104 -0
- package/src/utils/tools/adapters/rest-api.js +119 -0
- package/src/utils/tools/adapters/s3.js +142 -0
- package/src/utils/tools/adapters/search.js +80 -0
- package/src/utils/tools/adapters/sftp.js +121 -0
- package/src/utils/tools/adapters/shell.js +97 -0
- package/src/utils/tools/adapters/slack.js +83 -0
- package/src/utils/tools/adapters/speech.js +160 -0
- package/src/utils/tools/adapters/ssh.js +113 -0
- package/src/utils/tools/adapters/video-gen.js +152 -0
- package/src/utils/tools/adapters/web3.js +111 -0
- package/src/utils/tools/adapters/zendesk.js +82 -0
- package/src/utils/tools/adapters/zoho-mail.js +246 -0
- package/src/utils/tools/registry.js +229 -0
- package/src/utils/vectorStore.js +68 -0
- package/src/utils/workflowEngine.js +4 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const { PrismaClient } = require("@prisma/client");
|
|
2
|
+
const db = new PrismaClient();
|
|
3
|
+
|
|
4
|
+
async function getSetting(key) {
|
|
5
|
+
const s = await db.setting.findUnique({ where: { key } });
|
|
6
|
+
return s?.value || null;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Providers that use the OpenAI SDK with a custom baseURL
|
|
10
|
+
const OPENAI_COMPATIBLE = {
|
|
11
|
+
groq: { baseURL: "https://api.groq.com/openai/v1" },
|
|
12
|
+
togetherai: { baseURL: "https://api.together.xyz/v1" },
|
|
13
|
+
mistral: { baseURL: "https://api.mistral.ai/v1" },
|
|
14
|
+
openrouter: { baseURL: "https://openrouter.ai/api/v1" },
|
|
15
|
+
perplexity: { baseURL: "https://api.perplexity.ai" },
|
|
16
|
+
deepseek: { baseURL: "https://api.deepseek.com/v1" },
|
|
17
|
+
xai: { baseURL: "https://api.x.ai/v1" },
|
|
18
|
+
fireworks: { baseURL: "https://api.fireworks.ai/inference/v1" },
|
|
19
|
+
// Google Gemini exposes an OpenAI-compatible endpoint
|
|
20
|
+
gemini: { baseURL: "https://generativelanguage.googleapis.com/v1beta/openai/" },
|
|
21
|
+
nvidiaNim: { baseURL: "https://integrate.api.nvidia.com/v1" },
|
|
22
|
+
sambanova: { baseURL: "https://api.sambanova.ai/v1" },
|
|
23
|
+
litellm: { baseURL: null, apiKey: "no-key", localBaseUrlKey: "llm_base_url", localDefault: "http://localhost:4000" },
|
|
24
|
+
// Local providers
|
|
25
|
+
ollama: { baseURL: null, apiKey: "ollama", localBaseUrlKey: "llm_base_url", localDefault: "http://localhost:11434/v1" },
|
|
26
|
+
lmstudio: { baseURL: null, apiKey: "lmstudio", localBaseUrlKey: "llm_base_url", localDefault: "http://localhost:1234/v1" },
|
|
27
|
+
"generic-openai": { baseURL: null, localBaseUrlKey: "llm_base_url", localDefault: "" },
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
async function getLLMClient() {
|
|
31
|
+
const { default: OpenAI } = await import("openai");
|
|
32
|
+
const provider = (await getSetting("llm_provider")) || process.env.LLM_PROVIDER || "openai";
|
|
33
|
+
const apiKey = (await getSetting("llm_api_key")) || null;
|
|
34
|
+
|
|
35
|
+
// Azure (special case — needs endpoint + deployment in URL)
|
|
36
|
+
if (provider === "azure") {
|
|
37
|
+
const endpoint = (await getSetting("llm_azure_endpoint")) || process.env.AZURE_OPENAI_ENDPOINT;
|
|
38
|
+
const deployment = (await getSetting("llm_azure_deployment")) || process.env.AZURE_OPENAI_DEPLOYMENT;
|
|
39
|
+
const azureKey = (await getSetting("llm_api_key")) || process.env.AZURE_OPENAI_API_KEY;
|
|
40
|
+
return {
|
|
41
|
+
provider: "azure",
|
|
42
|
+
client: new OpenAI({
|
|
43
|
+
apiKey: azureKey,
|
|
44
|
+
baseURL: `${endpoint}/openai/deployments/${deployment}`,
|
|
45
|
+
defaultQuery: { "api-version": "2024-08-01-preview" },
|
|
46
|
+
defaultHeaders: { "api-key": azureKey }
|
|
47
|
+
})
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Anthropic (separate SDK)
|
|
52
|
+
if (provider === "anthropic") {
|
|
53
|
+
const Anthropic = require("@anthropic-ai/sdk");
|
|
54
|
+
const anthropicKey = apiKey || process.env.ANTHROPIC_API_KEY;
|
|
55
|
+
return { provider: "anthropic", client: new Anthropic({ apiKey: anthropicKey }) };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Standard OpenAI
|
|
59
|
+
if (provider === "openai") {
|
|
60
|
+
return { provider: "openai", client: new OpenAI({ apiKey: apiKey || process.env.OPENAI_API_KEY }) };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// All OpenAI-compatible providers
|
|
64
|
+
const compat = OPENAI_COMPATIBLE[provider];
|
|
65
|
+
if (compat) {
|
|
66
|
+
let baseURL = compat.baseURL;
|
|
67
|
+
if (!baseURL) {
|
|
68
|
+
baseURL = (await getSetting(compat.localBaseUrlKey)) || compat.localDefault;
|
|
69
|
+
}
|
|
70
|
+
const key = apiKey || compat.apiKey || "no-key";
|
|
71
|
+
return { provider, client: new OpenAI({ apiKey: key, baseURL }) };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
throw new Error(`Unknown LLM provider: ${provider}`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function chat(messages, { stream = false, systemPrompt = null, temperature = 0.7 } = {}) {
|
|
78
|
+
const { provider, client } = await getLLMClient();
|
|
79
|
+
const model = (await getSetting("llm_model"))
|
|
80
|
+
|| process.env.OPENAI_MODEL
|
|
81
|
+
|| process.env.OLLAMA_MODEL
|
|
82
|
+
|| "gpt-4o";
|
|
83
|
+
|
|
84
|
+
const allMessages = systemPrompt
|
|
85
|
+
? [{ role: "system", content: systemPrompt }, ...messages]
|
|
86
|
+
: messages;
|
|
87
|
+
|
|
88
|
+
if (provider === "anthropic") {
|
|
89
|
+
const system = allMessages.find(m => m.role === "system")?.content;
|
|
90
|
+
const userMsgs = allMessages.filter(m => m.role !== "system");
|
|
91
|
+
const response = await client.messages.create({
|
|
92
|
+
model: model || "claude-3-5-sonnet-20241022",
|
|
93
|
+
max_tokens: 4096,
|
|
94
|
+
system: system || undefined,
|
|
95
|
+
messages: userMsgs,
|
|
96
|
+
temperature,
|
|
97
|
+
stream
|
|
98
|
+
});
|
|
99
|
+
if (stream) return response;
|
|
100
|
+
return response.content[0].text;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const response = await client.chat.completions.create({ model, messages: allMessages, temperature, stream });
|
|
104
|
+
if (stream) return response;
|
|
105
|
+
return response.choices[0].message.content;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Read LLM settings from DB and return a plain config object
|
|
110
|
+
* that can be passed directly to engine.run() or createLLMClient().
|
|
111
|
+
*/
|
|
112
|
+
async function getLLMConfig() {
|
|
113
|
+
const provider = (await getSetting("llm_provider")) || process.env.LLM_PROVIDER || "openai";
|
|
114
|
+
const apiKey = (await getSetting("llm_api_key")) || null;
|
|
115
|
+
const model = (await getSetting("llm_model")) || process.env.OPENAI_MODEL || process.env.OLLAMA_MODEL || "gpt-4o";
|
|
116
|
+
|
|
117
|
+
if (provider === "azure") {
|
|
118
|
+
return {
|
|
119
|
+
provider,
|
|
120
|
+
apiKey: apiKey || process.env.AZURE_OPENAI_API_KEY,
|
|
121
|
+
model,
|
|
122
|
+
azureEndpoint: (await getSetting("llm_azure_endpoint")) || process.env.AZURE_OPENAI_ENDPOINT,
|
|
123
|
+
azureDeployment: (await getSetting("llm_azure_deployment")) || process.env.AZURE_OPENAI_DEPLOYMENT,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const compat = OPENAI_COMPATIBLE[provider];
|
|
128
|
+
if (compat?.localBaseUrlKey) {
|
|
129
|
+
return { provider, apiKey: apiKey || compat.apiKey || "no-key", model,
|
|
130
|
+
baseURL: (await getSetting(compat.localBaseUrlKey)) || compat.localDefault };
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return { provider, apiKey, model };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
module.exports = { chat, getLLMClient, getLLMConfig, getSetting };
|