@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.
Files changed (91) hide show
  1. package/README.md +139 -0
  2. package/index.js +58 -0
  3. package/package.json +64 -0
  4. package/src/data/connectionTypes.json +18587 -0
  5. package/src/engine/index.js +183 -0
  6. package/src/engine/llm.js +71 -0
  7. package/src/engine/promptBuilder.js +38 -0
  8. package/src/index.js +156 -0
  9. package/src/middleware/auth.js +63 -0
  10. package/src/providers/embedding/index.js +69 -0
  11. package/src/providers/llm/index.js +136 -0
  12. package/src/routes/admin.js +686 -0
  13. package/src/routes/agents.js +193 -0
  14. package/src/routes/apiKeys.js +55 -0
  15. package/src/routes/audio.js +111 -0
  16. package/src/routes/auth.js +83 -0
  17. package/src/routes/chat.js +381 -0
  18. package/src/routes/connectors.js +435 -0
  19. package/src/routes/dashboard.js +244 -0
  20. package/src/routes/documents.js +443 -0
  21. package/src/routes/embed.js +103 -0
  22. package/src/routes/marketplace.js +49 -0
  23. package/src/routes/models.js +81 -0
  24. package/src/routes/oauth.js +423 -0
  25. package/src/routes/projects.js +238 -0
  26. package/src/routes/settings.js +45 -0
  27. package/src/routes/setup.js +42 -0
  28. package/src/routes/sso.js +218 -0
  29. package/src/routes/superadmin.js +51 -0
  30. package/src/routes/templates.js +75 -0
  31. package/src/routes/threads.js +53 -0
  32. package/src/routes/workspaces.js +464 -0
  33. package/src/telemetry/bootstrap.js +39 -0
  34. package/src/telemetry/registration.js +16 -0
  35. package/src/utils/activityLog.js +16 -0
  36. package/src/utils/agentChain.js +141 -0
  37. package/src/utils/buildVisualization.js +102 -0
  38. package/src/utils/dlpScanner.js +57 -0
  39. package/src/utils/ingestionQueue.js +240 -0
  40. package/src/utils/prepareConnectors.js +66 -0
  41. package/src/utils/rag/_settings.js +6 -0
  42. package/src/utils/rag/chroma.js +82 -0
  43. package/src/utils/rag/lancedb.js +103 -0
  44. package/src/utils/rag/milvus.js +116 -0
  45. package/src/utils/rag/pgvector.js +104 -0
  46. package/src/utils/rag/pinecone.js +71 -0
  47. package/src/utils/rag/qdrant.js +106 -0
  48. package/src/utils/rag/weaviate.js +137 -0
  49. package/src/utils/rag/zilliz.js +115 -0
  50. package/src/utils/scheduler.js +168 -0
  51. package/src/utils/tier.js +106 -0
  52. package/src/utils/tools/adapters/_template.js +74 -0
  53. package/src/utils/tools/adapters/box.js +71 -0
  54. package/src/utils/tools/adapters/confluence.js +80 -0
  55. package/src/utils/tools/adapters/database.js +215 -0
  56. package/src/utils/tools/adapters/dropbox.js +74 -0
  57. package/src/utils/tools/adapters/elasticsearch.js +90 -0
  58. package/src/utils/tools/adapters/filesystem.js +197 -0
  59. package/src/utils/tools/adapters/freshdesk.js +87 -0
  60. package/src/utils/tools/adapters/gdrive.js +326 -0
  61. package/src/utils/tools/adapters/github.js +169 -0
  62. package/src/utils/tools/adapters/gmail.js +157 -0
  63. package/src/utils/tools/adapters/graphql.js +73 -0
  64. package/src/utils/tools/adapters/hubspot.js +101 -0
  65. package/src/utils/tools/adapters/image-gen.js +120 -0
  66. package/src/utils/tools/adapters/jira.js +86 -0
  67. package/src/utils/tools/adapters/kafka.js +126 -0
  68. package/src/utils/tools/adapters/ldap.js +118 -0
  69. package/src/utils/tools/adapters/mcp-client.js +138 -0
  70. package/src/utils/tools/adapters/mongodb.js +119 -0
  71. package/src/utils/tools/adapters/mqtt.js +106 -0
  72. package/src/utils/tools/adapters/music-gen.js +118 -0
  73. package/src/utils/tools/adapters/notion.js +93 -0
  74. package/src/utils/tools/adapters/ocr.js +107 -0
  75. package/src/utils/tools/adapters/onedrive.js +72 -0
  76. package/src/utils/tools/adapters/redis.js +104 -0
  77. package/src/utils/tools/adapters/rest-api.js +119 -0
  78. package/src/utils/tools/adapters/s3.js +142 -0
  79. package/src/utils/tools/adapters/search.js +80 -0
  80. package/src/utils/tools/adapters/sftp.js +121 -0
  81. package/src/utils/tools/adapters/shell.js +97 -0
  82. package/src/utils/tools/adapters/slack.js +83 -0
  83. package/src/utils/tools/adapters/speech.js +160 -0
  84. package/src/utils/tools/adapters/ssh.js +113 -0
  85. package/src/utils/tools/adapters/video-gen.js +152 -0
  86. package/src/utils/tools/adapters/web3.js +111 -0
  87. package/src/utils/tools/adapters/zendesk.js +82 -0
  88. package/src/utils/tools/adapters/zoho-mail.js +246 -0
  89. package/src/utils/tools/registry.js +229 -0
  90. package/src/utils/vectorStore.js +68 -0
  91. 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 };