@netbirdio/explain 0.1.0 → 0.1.2
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 +12 -12
- package/dist/client/AIAssistantProvider.d.ts +6 -2
- package/dist/client/AIAssistantProvider.d.ts.map +1 -1
- package/dist/client/AIAssistantProvider.js +28 -11
- package/dist/client/AIAssistantProvider.js.map +1 -1
- package/dist/client/AIChatBot.d.ts +3 -1
- package/dist/client/AIChatBot.d.ts.map +1 -1
- package/dist/client/AIChatBot.js +2 -2
- package/dist/client/AIChatBot.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/styles.d.ts +1 -0
- package/dist/client/styles.d.ts.map +1 -1
- package/dist/client/styles.js +8 -0
- package/dist/client/styles.js.map +1 -1
- package/dist/server/handler.d.ts +5 -2
- package/dist/server/handler.d.ts.map +1 -1
- package/dist/server/handler.js +18 -1
- package/dist/server/handler.js.map +1 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/providers/dify.d.ts +10 -0
- package/dist/server/providers/dify.d.ts.map +1 -0
- package/dist/server/providers/dify.js +56 -0
- package/dist/server/providers/dify.js.map +1 -0
- package/dist/server/providers/types.d.ts +10 -0
- package/dist/server/providers/types.d.ts.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client/AIAssistantProvider.tsx +52 -23
- package/src/client/AIChatBot.tsx +7 -3
- package/src/client/index.ts +1 -1
- package/src/client/styles.ts +9 -0
- package/src/server/handler.ts +26 -4
- package/src/server/index.ts +2 -1
- package/src/server/providers/dify.ts +66 -0
- package/src/server/providers/types.ts +12 -1
- package/src/types.ts +8 -0
package/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @netbirdio/explain
|
|
2
2
|
|
|
3
3
|
AI-powered "Explain" assistant for React apps. Users click on UI elements and get contextual AI explanations via a chat panel.
|
|
4
4
|
|
|
5
5
|
The package has two entry points:
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
7
|
+
- `@netbirdio/explain/client` — React components (provider, chat panel, floating button)
|
|
8
|
+
- `@netbirdio/explain/server` — Node.js handler that proxies requests to Anthropic or OpenAI
|
|
9
9
|
|
|
10
10
|
No CSS framework required — the package is fully self-contained with inline styles and CSS custom properties.
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
npm install
|
|
15
|
+
npm install @netbirdio/explain
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Peer dependencies: `react >=18`, `react-dom >=18`.
|
|
@@ -22,7 +22,7 @@ For local development as a workspace package, add it to your `package.json`:
|
|
|
22
22
|
```json
|
|
23
23
|
{
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"
|
|
25
|
+
"@netbirdio/explain": "file:./packages/@netbirdio/explain"
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
```
|
|
@@ -31,7 +31,7 @@ If you're using Next.js, add to `next.config.js`:
|
|
|
31
31
|
|
|
32
32
|
```js
|
|
33
33
|
module.exports = {
|
|
34
|
-
transpilePackages: ["
|
|
34
|
+
transpilePackages: ["@netbirdio/explain"],
|
|
35
35
|
};
|
|
36
36
|
```
|
|
37
37
|
|
|
@@ -44,7 +44,7 @@ module.exports = {
|
|
|
44
44
|
Wrap your app with `AIAssistantProvider`:
|
|
45
45
|
|
|
46
46
|
```tsx
|
|
47
|
-
import { AIAssistantProvider } from "
|
|
47
|
+
import { AIAssistantProvider } from "@netbirdio/explain/client";
|
|
48
48
|
|
|
49
49
|
export default function App({ children }) {
|
|
50
50
|
return (
|
|
@@ -112,7 +112,7 @@ Use `data-nb-explain-ignore` to prevent an element from being selectable in expl
|
|
|
112
112
|
Use the `useAIAssistant` hook to provide context that gets included in every query:
|
|
113
113
|
|
|
114
114
|
```tsx
|
|
115
|
-
import { useAIAssistant } from "
|
|
115
|
+
import { useAIAssistant } from "@netbirdio/explain/client";
|
|
116
116
|
|
|
117
117
|
function MyModal() {
|
|
118
118
|
const { setExplainContext, clearExplainContext } = useAIAssistant();
|
|
@@ -222,7 +222,7 @@ The server module provides a framework-agnostic handler that proxies chat reques
|
|
|
222
222
|
|
|
223
223
|
```ts
|
|
224
224
|
import express from "express";
|
|
225
|
-
import { createAssistant } from "
|
|
225
|
+
import { createAssistant } from "@netbirdio/explain/server";
|
|
226
226
|
|
|
227
227
|
const assistant = createAssistant({
|
|
228
228
|
provider: "anthropic",
|
|
@@ -243,7 +243,7 @@ app.listen(3080);
|
|
|
243
243
|
|
|
244
244
|
```ts
|
|
245
245
|
import http from "http";
|
|
246
|
-
import { createAssistant } from "
|
|
246
|
+
import { createAssistant } from "@netbirdio/explain/server";
|
|
247
247
|
|
|
248
248
|
const assistant = createAssistant({
|
|
249
249
|
provider: "openai",
|
|
@@ -341,7 +341,7 @@ Environment variables:
|
|
|
341
341
|
|
|
342
342
|
```tsx
|
|
343
343
|
// layout.tsx — wrap app with provider
|
|
344
|
-
import { AIAssistantProvider } from "
|
|
344
|
+
import { AIAssistantProvider } from "@netbirdio/explain/client";
|
|
345
345
|
|
|
346
346
|
export default function Layout({ children }) {
|
|
347
347
|
return (
|
|
@@ -357,7 +357,7 @@ export default function Layout({ children }) {
|
|
|
357
357
|
|
|
358
358
|
```tsx
|
|
359
359
|
// MyModal.tsx — add explain support to a modal
|
|
360
|
-
import { useAIAssistant } from "
|
|
360
|
+
import { useAIAssistant } from "@netbirdio/explain/client";
|
|
361
361
|
import { Sparkles } from "lucide-react";
|
|
362
362
|
|
|
363
363
|
function MyModal() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { ExplainContext } from "../types";
|
|
2
|
+
import type { ExplainContext, ExplainEvent } from "../types";
|
|
3
3
|
type AIAssistantContextType = {
|
|
4
4
|
openChat: (selectedText?: string) => void;
|
|
5
5
|
closeChat: () => void;
|
|
@@ -15,7 +15,11 @@ type AIAssistantProviderProps = {
|
|
|
15
15
|
endpoint: string;
|
|
16
16
|
apiKey?: string;
|
|
17
17
|
children: React.ReactNode;
|
|
18
|
+
title?: string;
|
|
19
|
+
subtitle?: string;
|
|
20
|
+
onExplain?: (event: ExplainEvent) => void;
|
|
21
|
+
showChat?: boolean;
|
|
18
22
|
};
|
|
19
|
-
export default function AIAssistantProvider({ endpoint, apiKey, children, }: AIAssistantProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export default function AIAssistantProvider({ endpoint, apiKey, children, title, subtitle, onExplain, showChat, }: AIAssistantProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
20
24
|
export {};
|
|
21
25
|
//# sourceMappingURL=AIAssistantProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIAssistantProvider.d.ts","sourceRoot":"","sources":["../../src/client/AIAssistantProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"AIAssistantProvider.d.ts","sourceRoot":"","sources":["../../src/client/AIAssistantProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK7D,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,mBAAmB,EAAE,MAAM,IAAI,CAAC;CACjC,CAAC;AAaF,eAAO,MAAM,cAAc,8BAAuC,CAAC;AAEnE,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAyEF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAe,GAChB,EAAE,wBAAwB,2CA6L1B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useCallback, useContext, useEffect, useState, } from "react";
|
|
4
4
|
import AIChatBot from "./AIChatBot";
|
|
5
5
|
import AIFloatingButton from "./AIFloatingButton";
|
|
@@ -82,7 +82,7 @@ function buildQuery(label, ctx, elementDocs) {
|
|
|
82
82
|
}
|
|
83
83
|
return parts.join("\n");
|
|
84
84
|
}
|
|
85
|
-
export default function AIAssistantProvider({ endpoint, apiKey, children, }) {
|
|
85
|
+
export default function AIAssistantProvider({ endpoint, apiKey, children, title, subtitle, onExplain, showChat = true, }) {
|
|
86
86
|
const [isChatOpen, setIsChatOpen] = useState(false);
|
|
87
87
|
const [initialQuery, setInitialQuery] = useState("");
|
|
88
88
|
const [explainMode, setExplainMode] = useState(false);
|
|
@@ -142,6 +142,9 @@ export default function AIAssistantProvider({ endpoint, apiKey, children, }) {
|
|
|
142
142
|
: extractLabel(explainable);
|
|
143
143
|
const elementDocs = findExplainDocs(explainable);
|
|
144
144
|
const query = buildQuery(label, explainCtx, elementDocs);
|
|
145
|
+
if (onExplain) {
|
|
146
|
+
onExplain({ label, query, context: explainCtx, docs: elementDocs, element: explainable });
|
|
147
|
+
}
|
|
145
148
|
openChat(query);
|
|
146
149
|
};
|
|
147
150
|
const handleKeyDown = (e) => {
|
|
@@ -159,7 +162,7 @@ export default function AIAssistantProvider({ endpoint, apiKey, children, }) {
|
|
|
159
162
|
document.removeEventListener("click", handleClick, true);
|
|
160
163
|
document.removeEventListener("keydown", handleKeyDown);
|
|
161
164
|
};
|
|
162
|
-
}, [explainMode, explainCtx, openChat, exitExplainMode]);
|
|
165
|
+
}, [explainMode, explainCtx, openChat, exitExplainMode, onExplain]);
|
|
163
166
|
// Apply/remove highlight on hovered explainable element via CSS class
|
|
164
167
|
useEffect(() => {
|
|
165
168
|
if (!hoveredEl)
|
|
@@ -177,6 +180,20 @@ export default function AIAssistantProvider({ endpoint, apiKey, children, }) {
|
|
|
177
180
|
});
|
|
178
181
|
}
|
|
179
182
|
}, [explainMode]);
|
|
183
|
+
// Inject global styles via DOM to avoid SSR hydration mismatch
|
|
184
|
+
// (inline <style> tags with quotes get HTML-escaped differently on server vs client)
|
|
185
|
+
useEffect(() => {
|
|
186
|
+
const id = "nb-explain-styles";
|
|
187
|
+
if (document.getElementById(id))
|
|
188
|
+
return;
|
|
189
|
+
const style = document.createElement("style");
|
|
190
|
+
style.id = id;
|
|
191
|
+
style.textContent = S.CSS_VARS + S.ANIMATIONS + S.HIGHLIGHT_STYLES;
|
|
192
|
+
document.head.appendChild(style);
|
|
193
|
+
return () => {
|
|
194
|
+
style.remove();
|
|
195
|
+
};
|
|
196
|
+
}, []);
|
|
180
197
|
return (_jsxs(AIAssistantContext.Provider, { value: {
|
|
181
198
|
openChat,
|
|
182
199
|
closeChat,
|
|
@@ -186,13 +203,13 @@ export default function AIAssistantProvider({ endpoint, apiKey, children, }) {
|
|
|
186
203
|
exitExplainMode,
|
|
187
204
|
setExplainContext,
|
|
188
205
|
clearExplainContext,
|
|
189
|
-
}, children: [
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
206
|
+
}, children: [children, explainMode && (_jsxs("div", { "data-nb-explain-banner": true, style: S.banner, children: [_jsx("span", { children: "Click on a highlighted element to explain it" }), _jsx("button", { onClick: () => exitExplainMode(), style: S.bannerCancel, children: "Cancel" })] })), showChat && (_jsxs(_Fragment, { children: [_jsx(AIFloatingButton, { isOpen: isChatOpen, onClick: () => {
|
|
207
|
+
if (isChatOpen) {
|
|
208
|
+
closeChat();
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
openChat();
|
|
212
|
+
}
|
|
213
|
+
} }), _jsx(AIChatBot, { open: isChatOpen, onClose: closeChat, initialQuery: initialQuery, endpoint: endpoint, apiKey: apiKey, title: title, subtitle: subtitle })] }))] }));
|
|
197
214
|
}
|
|
198
215
|
//# sourceMappingURL=AIAssistantProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIAssistantProvider.js","sourceRoot":"","sources":["../../src/client/AIAssistantProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AAEf,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAa9B,MAAM,kBAAkB,GAAG,aAAa,CAAyB;IAC/D,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;IACnB,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,KAAK;IAClB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;IACzB,iBAAiB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC3B,mBAAmB,EAAE,GAAG,EAAE,GAAE,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AIAssistantProvider.js","sourceRoot":"","sources":["../../src/client/AIAssistantProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@ type Props = {
|
|
|
4
4
|
initialQuery: string;
|
|
5
5
|
endpoint: string;
|
|
6
6
|
apiKey?: string;
|
|
7
|
+
title?: string;
|
|
8
|
+
subtitle?: string;
|
|
7
9
|
};
|
|
8
|
-
export default function AIChatBot({ open, onClose, initialQuery, endpoint, apiKey, }: Props): import("react/jsx-runtime").JSX.Element | null;
|
|
10
|
+
export default function AIChatBot({ open, onClose, initialQuery, endpoint, apiKey, title, subtitle, }: Props): import("react/jsx-runtime").JSX.Element | null;
|
|
9
11
|
export {};
|
|
10
12
|
//# sourceMappingURL=AIChatBot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIChatBot.d.ts","sourceRoot":"","sources":["../../src/client/AIChatBot.tsx"],"names":[],"mappings":"AAcA,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AIChatBot.d.ts","sourceRoot":"","sources":["../../src/client/AIChatBot.tsx"],"names":[],"mappings":"AAcA,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAkCF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,KAAsB,EACtB,QAAyB,GAC1B,EAAE,KAAK,kDAwPP"}
|
package/dist/client/AIChatBot.js
CHANGED
|
@@ -27,7 +27,7 @@ async function fetchAIResponse(endpoint, apiKey, messages) {
|
|
|
27
27
|
const data = await response.json();
|
|
28
28
|
return data.reply;
|
|
29
29
|
}
|
|
30
|
-
export default function AIChatBot({ open, onClose, initialQuery, endpoint, apiKey, }) {
|
|
30
|
+
export default function AIChatBot({ open, onClose, initialQuery, endpoint, apiKey, title = "AI Assistant", subtitle = "Ask anything", }) {
|
|
31
31
|
const [messages, setMessages] = useState([]);
|
|
32
32
|
const [input, setInput] = useState("");
|
|
33
33
|
const [isTyping, setIsTyping] = useState(false);
|
|
@@ -126,7 +126,7 @@ export default function AIChatBot({ open, onClose, initialQuery, endpoint, apiKe
|
|
|
126
126
|
if (!open)
|
|
127
127
|
return null;
|
|
128
128
|
const active = !!input.trim() && !isTyping;
|
|
129
|
-
return (_jsxs("div", { style: S.chatPanel, children: [_jsxs("div", { style: S.chatHeader, children: [_jsxs("div", { style: S.chatHeaderLeft, children: [_jsx("div", { style: S.chatHeaderIcon, children: _jsx(Sparkles, { size: 15, style: { color: "var(--nb-explain-accent)" } }) }), _jsxs("div", { children: [_jsx("h3", { style: S.chatHeaderTitle, children:
|
|
129
|
+
return (_jsxs("div", { style: S.chatPanel, children: [_jsxs("div", { style: S.chatHeader, children: [_jsxs("div", { style: S.chatHeaderLeft, children: [_jsx("div", { style: S.chatHeaderIcon, children: _jsx(Sparkles, { size: 15, style: { color: "var(--nb-explain-accent)" } }) }), _jsxs("div", { style: S.chatHeaderText, children: [_jsx("h3", { style: S.chatHeaderTitle, children: title }), _jsx("span", { style: S.chatHeaderSubtitle, children: subtitle })] })] }), _jsx("button", { onClick: onClose, style: S.chatCloseBtn, onMouseEnter: (e) => {
|
|
130
130
|
e.currentTarget.style.color = "var(--nb-explain-text)";
|
|
131
131
|
e.currentTarget.style.background = "var(--nb-explain-bg-hover)";
|
|
132
132
|
}, onMouseLeave: (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIChatBot.js","sourceRoot":"","sources":["../../src/client/AIChatBot.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EACL,GAAG,EACH,qBAAqB,EACrB,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,CAAC,GACF,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExE,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"AIChatBot.js","sourceRoot":"","sources":["../../src/client/AIChatBot.tsx"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { default as AIAssistantProvider, useAIAssistant } from "./AIAssistantProvider";
|
|
2
2
|
export { default as AIChatBot } from "./AIChatBot";
|
|
3
3
|
export { default as AIFloatingButton } from "./AIFloatingButton";
|
|
4
|
-
export type { Message, ExplainContext } from "../types";
|
|
4
|
+
export type { Message, ExplainContext, ExplainEvent } from "../types";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/client/styles.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export declare const chatPanel: React.CSSProperties;
|
|
|
22
22
|
export declare const chatHeader: React.CSSProperties;
|
|
23
23
|
export declare const chatHeaderLeft: React.CSSProperties;
|
|
24
24
|
export declare const chatHeaderIcon: React.CSSProperties;
|
|
25
|
+
export declare const chatHeaderText: React.CSSProperties;
|
|
25
26
|
export declare const chatHeaderTitle: React.CSSProperties;
|
|
26
27
|
export declare const chatHeaderSubtitle: React.CSSProperties;
|
|
27
28
|
export declare const chatCloseBtn: React.CSSProperties;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,eAAO,MAAM,QAAQ,69BAwBpB,CAAC;AAIF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,aAgB7B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,aAM9B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,aAIlC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,eAAO,MAAM,QAAQ,69BAwBpB,CAAC;AAIF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,aAgB7B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,aAM9B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,aAIlC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,aASlC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,aAIlC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,aAMnC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,aAKtC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,aAUhC,CAAC;AAIF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,aAOhC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,aAS9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,aAKnC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,aAIlC,CAAC;AAGF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,aAGhC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,aASrC,CAAC;AAGF,eAAO,MAAM,UAAU,GAAI,QAAQ,OAAO,KAAG,KAAK,CAAC,aAIjD,CAAC;AAEH,eAAO,MAAM,aAAa,GAAI,QAAQ,OAAO,KAAG,KAAK,CAAC,aAUpD,CAAC;AAEH,eAAO,MAAM,aAAa,GAAI,QAAQ,OAAO,KAAG,KAAK,CAAC,aASpD,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,aAG/B,CAAC;AAGF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,aAG7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,aAMhC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,aAK7B,CAAC;AAIF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,aAG7B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,aAO5B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,aAQ9B,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,QAAQ,OAAO,KAAG,KAAK,CAAC,aAW9C,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,aAK/B,CAAC;AAIF,eAAO,MAAM,GAAG,GAAI,QAAQ,OAAO,KAAG,KAAK,CAAC,aAmB1C,CAAC;AAIH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,aAkB1B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,aAShC,CAAC;AAIF,eAAO,MAAM,UAAU,kuBAgBtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,mMAO5B,CAAC"}
|
package/dist/client/styles.js
CHANGED
|
@@ -80,6 +80,12 @@ export const chatHeaderIcon = {
|
|
|
80
80
|
display: "flex",
|
|
81
81
|
alignItems: "center",
|
|
82
82
|
justifyContent: "center",
|
|
83
|
+
flexShrink: 0,
|
|
84
|
+
};
|
|
85
|
+
export const chatHeaderText = {
|
|
86
|
+
display: "flex",
|
|
87
|
+
flexDirection: "column",
|
|
88
|
+
justifyContent: "center",
|
|
83
89
|
};
|
|
84
90
|
export const chatHeaderTitle = {
|
|
85
91
|
fontSize: 14,
|
|
@@ -91,6 +97,8 @@ export const chatHeaderTitle = {
|
|
|
91
97
|
export const chatHeaderSubtitle = {
|
|
92
98
|
fontSize: 11,
|
|
93
99
|
color: "var(--nb-explain-text-dim)",
|
|
100
|
+
lineHeight: 1,
|
|
101
|
+
marginTop: 2,
|
|
94
102
|
};
|
|
95
103
|
export const chatCloseBtn = {
|
|
96
104
|
padding: 6,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBvB,CAAC;AAEF,qBAAqB;AAErB,MAAM,CAAC,MAAM,SAAS,GAAwB;IAC5C,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,QAAQ;IACvB,YAAY,EAAE,0BAA0B;IACxC,MAAM,EAAE,oCAAoC;IAC5C,UAAU,EAAE,sBAAsB;IAClC,SAAS,EAAE,0BAA0B;IACrC,UAAU,EAAE,wBAAwB;IACpC,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,mCAAmC;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAwB;IAC7C,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,cAAc,EAAE,eAAe;IAC/B,OAAO,EAAE,WAAW;IACpB,YAAY,EAAE,oCAAoC;CACnD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,GAAG,EAAE,EAAE;CACR,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,6BAA6B;IAC3C,UAAU,EAAE,+BAA+B;IAC3C,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,cAAc,EAAE,QAAQ;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAwB;IAClD,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,wBAAwB;IAC/B,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,4BAA4B;
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"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"}
|
package/dist/server/handler.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { Message } from "../types";
|
|
2
|
+
import type { LLMProvider, Middleware } from "./providers/types";
|
|
2
3
|
export type AssistantConfig = {
|
|
3
|
-
provider: "anthropic" | "openai";
|
|
4
|
-
apiKey
|
|
4
|
+
provider: "anthropic" | "openai" | "dify" | LLMProvider;
|
|
5
|
+
apiKey?: string;
|
|
5
6
|
model?: string;
|
|
7
|
+
baseUrl?: string;
|
|
6
8
|
systemPrompt?: string;
|
|
9
|
+
middleware?: Middleware[];
|
|
7
10
|
};
|
|
8
11
|
type HandlerOptions = {
|
|
9
12
|
apiKey?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/server/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/server/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAIxC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;CAC3B,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC;CACrE;AAED,UAAU,gBAAgB;IACxB,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACxE;AA2ED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe;gBAI5B,WAAW,KAAG,OAAO,CAAC,YAAY,CAAC;qBAkBpC,cAAc,MACtB,KAAK,eAAe,EAAE,KAAK,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAAC;EAwC5E"}
|
package/dist/server/handler.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AnthropicProvider } from "./providers/anthropic";
|
|
2
|
+
import { DifyProvider } from "./providers/dify";
|
|
2
3
|
import { OpenAIProvider } from "./providers/openai";
|
|
3
4
|
function getHeader(req, name) {
|
|
4
5
|
if (typeof req.headers === "object" && req.headers !== null) {
|
|
@@ -55,22 +56,38 @@ async function parseBody(req) {
|
|
|
55
56
|
throw new Error("Unable to parse request body");
|
|
56
57
|
}
|
|
57
58
|
function createProvider(config) {
|
|
59
|
+
if (typeof config.provider === "object") {
|
|
60
|
+
return config.provider;
|
|
61
|
+
}
|
|
62
|
+
if (!config.apiKey) {
|
|
63
|
+
throw new Error("apiKey is required when using a built-in provider");
|
|
64
|
+
}
|
|
58
65
|
switch (config.provider) {
|
|
59
66
|
case "anthropic":
|
|
60
67
|
return new AnthropicProvider({ apiKey: config.apiKey, model: config.model });
|
|
61
68
|
case "openai":
|
|
62
69
|
return new OpenAIProvider({ apiKey: config.apiKey, model: config.model });
|
|
70
|
+
case "dify":
|
|
71
|
+
return new DifyProvider({ apiKey: config.apiKey, baseUrl: config.baseUrl });
|
|
63
72
|
default:
|
|
64
73
|
throw new Error(`Unknown provider: ${config.provider}`);
|
|
65
74
|
}
|
|
66
75
|
}
|
|
67
76
|
export function createAssistant(config) {
|
|
68
77
|
const provider = createProvider(config);
|
|
78
|
+
const middlewares = config.middleware || [];
|
|
69
79
|
async function chat(req) {
|
|
70
80
|
if (!req.messages || !Array.isArray(req.messages) || req.messages.length === 0) {
|
|
71
81
|
throw new Error("messages array is required and must not be empty");
|
|
72
82
|
}
|
|
73
|
-
|
|
83
|
+
let messages = req.messages;
|
|
84
|
+
let systemPrompt = config.systemPrompt;
|
|
85
|
+
for (const mw of middlewares) {
|
|
86
|
+
const result = await mw(messages, systemPrompt);
|
|
87
|
+
messages = result.messages;
|
|
88
|
+
systemPrompt = result.systemPrompt;
|
|
89
|
+
}
|
|
90
|
+
const reply = await provider.chat(messages, systemPrompt);
|
|
74
91
|
return { reply };
|
|
75
92
|
}
|
|
76
93
|
function handler(opts) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/server/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/server/handler.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createAssistant } from "./handler";
|
|
2
2
|
export type { AssistantConfig } from "./handler";
|
|
3
3
|
export { AnthropicProvider } from "./providers/anthropic";
|
|
4
|
+
export { DifyProvider } from "./providers/dify";
|
|
4
5
|
export { OpenAIProvider } from "./providers/openai";
|
|
5
|
-
export type { LLMProvider, ProviderConfig } from "./providers/types";
|
|
6
|
+
export type { LLMProvider, ProviderConfig, Middleware } from "./providers/types";
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/server/index.js
CHANGED
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Message } from "../../types";
|
|
2
|
+
import type { LLMProvider, ProviderConfig } from "./types";
|
|
3
|
+
export declare class DifyProvider implements LLMProvider {
|
|
4
|
+
private apiKey;
|
|
5
|
+
private baseUrl;
|
|
6
|
+
constructor(config: ProviderConfig);
|
|
7
|
+
chat(messages: Message[], systemPrompt?: string): Promise<string>;
|
|
8
|
+
private buildQuery;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=dify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dify.d.ts","sourceRoot":"","sources":["../../../src/server/providers/dify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE3D,qBAAa,YAAa,YAAW,WAAW;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,cAAc;IAQ5B,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BvE,OAAO,CAAC,UAAU;CAqBnB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export class DifyProvider {
|
|
2
|
+
constructor(config) {
|
|
3
|
+
this.apiKey = config.apiKey;
|
|
4
|
+
if (!config.baseUrl) {
|
|
5
|
+
throw new Error("baseUrl is required for the Dify provider");
|
|
6
|
+
}
|
|
7
|
+
this.baseUrl = config.baseUrl.replace(/\/+$/, "");
|
|
8
|
+
}
|
|
9
|
+
async chat(messages, systemPrompt) {
|
|
10
|
+
const query = this.buildQuery(messages, systemPrompt);
|
|
11
|
+
const response = await fetch(`${this.baseUrl}/v1/chat-messages`, {
|
|
12
|
+
method: "POST",
|
|
13
|
+
headers: {
|
|
14
|
+
"Content-Type": "application/json",
|
|
15
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
16
|
+
},
|
|
17
|
+
body: JSON.stringify({
|
|
18
|
+
inputs: {},
|
|
19
|
+
query,
|
|
20
|
+
response_mode: "blocking",
|
|
21
|
+
user: "explain-user",
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
const text = await response.text();
|
|
26
|
+
throw new Error(`Dify API error ${response.status}: ${text}`);
|
|
27
|
+
}
|
|
28
|
+
const data = await response.json();
|
|
29
|
+
if (!data.answer) {
|
|
30
|
+
throw new Error("No answer in Dify response");
|
|
31
|
+
}
|
|
32
|
+
return data.answer;
|
|
33
|
+
}
|
|
34
|
+
buildQuery(messages, systemPrompt) {
|
|
35
|
+
const parts = [];
|
|
36
|
+
if (systemPrompt) {
|
|
37
|
+
parts.push(`[System]: ${systemPrompt}`);
|
|
38
|
+
}
|
|
39
|
+
for (const m of messages) {
|
|
40
|
+
if (m.role === "context") {
|
|
41
|
+
parts.push(`[Context]: ${m.content}`);
|
|
42
|
+
}
|
|
43
|
+
else if (m.role === "system") {
|
|
44
|
+
parts.push(`[System]: ${m.content}`);
|
|
45
|
+
}
|
|
46
|
+
else if (m.role === "assistant") {
|
|
47
|
+
parts.push(`[Assistant]: ${m.content}`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
parts.push(m.content);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return parts.join("\n\n");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=dify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dify.js","sourceRoot":"","sources":["../../../src/server/providers/dify.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IAIvB,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAmB,EAAE,YAAqB;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,EAAE;gBACV,KAAK;gBACL,aAAa,EAAE,UAAU;gBACzB,IAAI,EAAE,cAAc;aACrB,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,UAAU,CAAC,QAAmB,EAAE,YAAqB;QAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,aAAa,YAAY,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -5,5 +5,15 @@ export interface LLMProvider {
|
|
|
5
5
|
export type ProviderConfig = {
|
|
6
6
|
apiKey: string;
|
|
7
7
|
model?: string;
|
|
8
|
+
baseUrl?: string;
|
|
8
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Middleware that can transform messages before they reach the LLM.
|
|
12
|
+
* Useful for RAG context injection, logging, filtering, etc.
|
|
13
|
+
* Return the (possibly modified) messages array.
|
|
14
|
+
*/
|
|
15
|
+
export type Middleware = (messages: Message[], systemPrompt?: string) => Promise<{
|
|
16
|
+
messages: Message[];
|
|
17
|
+
systemPrompt?: string;
|
|
18
|
+
}>;
|
|
9
19
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -8,4 +8,11 @@ export type ExplainContext = {
|
|
|
8
8
|
pageName?: string;
|
|
9
9
|
docsUrls?: string[];
|
|
10
10
|
};
|
|
11
|
+
export type ExplainEvent = {
|
|
12
|
+
label: string;
|
|
13
|
+
query: string;
|
|
14
|
+
context: ExplainContext | null;
|
|
15
|
+
docs: string[];
|
|
16
|
+
element: HTMLElement;
|
|
17
|
+
};
|
|
11
18
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@ import React, {
|
|
|
7
7
|
useEffect,
|
|
8
8
|
useState,
|
|
9
9
|
} from "react";
|
|
10
|
-
import type { ExplainContext } from "../types";
|
|
10
|
+
import type { ExplainContext, ExplainEvent } from "../types";
|
|
11
11
|
import AIChatBot from "./AIChatBot";
|
|
12
12
|
import AIFloatingButton from "./AIFloatingButton";
|
|
13
13
|
import * as S from "./styles";
|
|
@@ -40,6 +40,10 @@ type AIAssistantProviderProps = {
|
|
|
40
40
|
endpoint: string;
|
|
41
41
|
apiKey?: string;
|
|
42
42
|
children: React.ReactNode;
|
|
43
|
+
title?: string;
|
|
44
|
+
subtitle?: string;
|
|
45
|
+
onExplain?: (event: ExplainEvent) => void;
|
|
46
|
+
showChat?: boolean;
|
|
43
47
|
};
|
|
44
48
|
|
|
45
49
|
/**
|
|
@@ -117,6 +121,10 @@ export default function AIAssistantProvider({
|
|
|
117
121
|
endpoint,
|
|
118
122
|
apiKey,
|
|
119
123
|
children,
|
|
124
|
+
title,
|
|
125
|
+
subtitle,
|
|
126
|
+
onExplain,
|
|
127
|
+
showChat = true,
|
|
120
128
|
}: AIAssistantProviderProps) {
|
|
121
129
|
const [isChatOpen, setIsChatOpen] = useState(false);
|
|
122
130
|
const [initialQuery, setInitialQuery] = useState("");
|
|
@@ -194,6 +202,10 @@ export default function AIAssistantProvider({
|
|
|
194
202
|
|
|
195
203
|
const elementDocs = findExplainDocs(explainable);
|
|
196
204
|
const query = buildQuery(label, explainCtx, elementDocs);
|
|
205
|
+
|
|
206
|
+
if (onExplain) {
|
|
207
|
+
onExplain({ label, query, context: explainCtx, docs: elementDocs, element: explainable });
|
|
208
|
+
}
|
|
197
209
|
openChat(query);
|
|
198
210
|
};
|
|
199
211
|
|
|
@@ -214,7 +226,7 @@ export default function AIAssistantProvider({
|
|
|
214
226
|
document.removeEventListener("click", handleClick, true);
|
|
215
227
|
document.removeEventListener("keydown", handleKeyDown);
|
|
216
228
|
};
|
|
217
|
-
}, [explainMode, explainCtx, openChat, exitExplainMode]);
|
|
229
|
+
}, [explainMode, explainCtx, openChat, exitExplainMode, onExplain]);
|
|
218
230
|
|
|
219
231
|
// Apply/remove highlight on hovered explainable element via CSS class
|
|
220
232
|
useEffect(() => {
|
|
@@ -234,6 +246,20 @@ export default function AIAssistantProvider({
|
|
|
234
246
|
}
|
|
235
247
|
}, [explainMode]);
|
|
236
248
|
|
|
249
|
+
// Inject global styles via DOM to avoid SSR hydration mismatch
|
|
250
|
+
// (inline <style> tags with quotes get HTML-escaped differently on server vs client)
|
|
251
|
+
useEffect(() => {
|
|
252
|
+
const id = "nb-explain-styles";
|
|
253
|
+
if (document.getElementById(id)) return;
|
|
254
|
+
const style = document.createElement("style");
|
|
255
|
+
style.id = id;
|
|
256
|
+
style.textContent = S.CSS_VARS + S.ANIMATIONS + S.HIGHLIGHT_STYLES;
|
|
257
|
+
document.head.appendChild(style);
|
|
258
|
+
return () => {
|
|
259
|
+
style.remove();
|
|
260
|
+
};
|
|
261
|
+
}, []);
|
|
262
|
+
|
|
237
263
|
return (
|
|
238
264
|
<AIAssistantContext.Provider
|
|
239
265
|
value={{
|
|
@@ -247,9 +273,6 @@ export default function AIAssistantProvider({
|
|
|
247
273
|
clearExplainContext,
|
|
248
274
|
}}
|
|
249
275
|
>
|
|
250
|
-
{/* Inject CSS custom properties, animations, and highlight styles */}
|
|
251
|
-
<style>{S.CSS_VARS + S.ANIMATIONS + S.HIGHLIGHT_STYLES}</style>
|
|
252
|
-
|
|
253
276
|
{children}
|
|
254
277
|
|
|
255
278
|
{/* Explain mode banner */}
|
|
@@ -265,24 +288,30 @@ export default function AIAssistantProvider({
|
|
|
265
288
|
</div>
|
|
266
289
|
)}
|
|
267
290
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
291
|
+
{showChat && (
|
|
292
|
+
<>
|
|
293
|
+
<AIFloatingButton
|
|
294
|
+
isOpen={isChatOpen}
|
|
295
|
+
onClick={() => {
|
|
296
|
+
if (isChatOpen) {
|
|
297
|
+
closeChat();
|
|
298
|
+
} else {
|
|
299
|
+
openChat();
|
|
300
|
+
}
|
|
301
|
+
}}
|
|
302
|
+
/>
|
|
303
|
+
|
|
304
|
+
<AIChatBot
|
|
305
|
+
open={isChatOpen}
|
|
306
|
+
onClose={closeChat}
|
|
307
|
+
initialQuery={initialQuery}
|
|
308
|
+
endpoint={endpoint}
|
|
309
|
+
apiKey={apiKey}
|
|
310
|
+
title={title}
|
|
311
|
+
subtitle={subtitle}
|
|
312
|
+
/>
|
|
313
|
+
</>
|
|
314
|
+
)}
|
|
286
315
|
</AIAssistantContext.Provider>
|
|
287
316
|
);
|
|
288
317
|
}
|
package/src/client/AIChatBot.tsx
CHANGED
|
@@ -18,6 +18,8 @@ type Props = {
|
|
|
18
18
|
initialQuery: string;
|
|
19
19
|
endpoint: string;
|
|
20
20
|
apiKey?: string;
|
|
21
|
+
title?: string;
|
|
22
|
+
subtitle?: string;
|
|
21
23
|
};
|
|
22
24
|
|
|
23
25
|
async function fetchAIResponse(
|
|
@@ -58,6 +60,8 @@ export default function AIChatBot({
|
|
|
58
60
|
initialQuery,
|
|
59
61
|
endpoint,
|
|
60
62
|
apiKey,
|
|
63
|
+
title = "AI Assistant",
|
|
64
|
+
subtitle = "Ask anything",
|
|
61
65
|
}: Props) {
|
|
62
66
|
const [messages, setMessages] = useState<Message[]>([]);
|
|
63
67
|
const [input, setInput] = useState("");
|
|
@@ -182,9 +186,9 @@ export default function AIChatBot({
|
|
|
182
186
|
<div style={S.chatHeaderIcon}>
|
|
183
187
|
<Sparkles size={15} style={{ color: "var(--nb-explain-accent)" }} />
|
|
184
188
|
</div>
|
|
185
|
-
<div>
|
|
186
|
-
<h3 style={S.chatHeaderTitle}>
|
|
187
|
-
<span style={S.chatHeaderSubtitle}>
|
|
189
|
+
<div style={S.chatHeaderText}>
|
|
190
|
+
<h3 style={S.chatHeaderTitle}>{title}</h3>
|
|
191
|
+
<span style={S.chatHeaderSubtitle}>{subtitle}</span>
|
|
188
192
|
</div>
|
|
189
193
|
</div>
|
|
190
194
|
<button
|
package/src/client/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { default as AIAssistantProvider, useAIAssistant } from "./AIAssistantProvider";
|
|
2
2
|
export { default as AIChatBot } from "./AIChatBot";
|
|
3
3
|
export { default as AIFloatingButton } from "./AIFloatingButton";
|
|
4
|
-
export type { Message, ExplainContext } from "../types";
|
|
4
|
+
export type { Message, ExplainContext, ExplainEvent } from "../types";
|
package/src/client/styles.ts
CHANGED
|
@@ -86,6 +86,13 @@ export const chatHeaderIcon: React.CSSProperties = {
|
|
|
86
86
|
display: "flex",
|
|
87
87
|
alignItems: "center",
|
|
88
88
|
justifyContent: "center",
|
|
89
|
+
flexShrink: 0,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const chatHeaderText: React.CSSProperties = {
|
|
93
|
+
display: "flex",
|
|
94
|
+
flexDirection: "column",
|
|
95
|
+
justifyContent: "center",
|
|
89
96
|
};
|
|
90
97
|
|
|
91
98
|
export const chatHeaderTitle: React.CSSProperties = {
|
|
@@ -99,6 +106,8 @@ export const chatHeaderTitle: React.CSSProperties = {
|
|
|
99
106
|
export const chatHeaderSubtitle: React.CSSProperties = {
|
|
100
107
|
fontSize: 11,
|
|
101
108
|
color: "var(--nb-explain-text-dim)",
|
|
109
|
+
lineHeight: 1,
|
|
110
|
+
marginTop: 2,
|
|
102
111
|
};
|
|
103
112
|
|
|
104
113
|
export const chatCloseBtn: React.CSSProperties = {
|
package/src/server/handler.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { Message } from "../types";
|
|
2
2
|
import { AnthropicProvider } from "./providers/anthropic";
|
|
3
|
+
import { DifyProvider } from "./providers/dify";
|
|
3
4
|
import { OpenAIProvider } from "./providers/openai";
|
|
4
|
-
import type { LLMProvider } from "./providers/types";
|
|
5
|
+
import type { LLMProvider, Middleware } from "./providers/types";
|
|
5
6
|
|
|
6
7
|
export type AssistantConfig = {
|
|
7
|
-
provider: "anthropic" | "openai";
|
|
8
|
-
apiKey
|
|
8
|
+
provider: "anthropic" | "openai" | "dify" | LLMProvider;
|
|
9
|
+
apiKey?: string;
|
|
9
10
|
model?: string;
|
|
11
|
+
baseUrl?: string;
|
|
10
12
|
systemPrompt?: string;
|
|
13
|
+
middleware?: Middleware[];
|
|
11
14
|
};
|
|
12
15
|
|
|
13
16
|
type HandlerOptions = {
|
|
@@ -93,11 +96,19 @@ async function parseBody(req: IncomingRequest): Promise<unknown> {
|
|
|
93
96
|
}
|
|
94
97
|
|
|
95
98
|
function createProvider(config: AssistantConfig): LLMProvider {
|
|
99
|
+
if (typeof config.provider === "object") {
|
|
100
|
+
return config.provider;
|
|
101
|
+
}
|
|
102
|
+
if (!config.apiKey) {
|
|
103
|
+
throw new Error("apiKey is required when using a built-in provider");
|
|
104
|
+
}
|
|
96
105
|
switch (config.provider) {
|
|
97
106
|
case "anthropic":
|
|
98
107
|
return new AnthropicProvider({ apiKey: config.apiKey, model: config.model });
|
|
99
108
|
case "openai":
|
|
100
109
|
return new OpenAIProvider({ apiKey: config.apiKey, model: config.model });
|
|
110
|
+
case "dify":
|
|
111
|
+
return new DifyProvider({ apiKey: config.apiKey, baseUrl: config.baseUrl });
|
|
101
112
|
default:
|
|
102
113
|
throw new Error(`Unknown provider: ${config.provider}`);
|
|
103
114
|
}
|
|
@@ -105,12 +116,23 @@ function createProvider(config: AssistantConfig): LLMProvider {
|
|
|
105
116
|
|
|
106
117
|
export function createAssistant(config: AssistantConfig) {
|
|
107
118
|
const provider = createProvider(config);
|
|
119
|
+
const middlewares = config.middleware || [];
|
|
108
120
|
|
|
109
121
|
async function chat(req: ChatRequest): Promise<ChatResponse> {
|
|
110
122
|
if (!req.messages || !Array.isArray(req.messages) || req.messages.length === 0) {
|
|
111
123
|
throw new Error("messages array is required and must not be empty");
|
|
112
124
|
}
|
|
113
|
-
|
|
125
|
+
|
|
126
|
+
let messages = req.messages;
|
|
127
|
+
let systemPrompt = config.systemPrompt;
|
|
128
|
+
|
|
129
|
+
for (const mw of middlewares) {
|
|
130
|
+
const result = await mw(messages, systemPrompt);
|
|
131
|
+
messages = result.messages;
|
|
132
|
+
systemPrompt = result.systemPrompt;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const reply = await provider.chat(messages, systemPrompt);
|
|
114
136
|
return { reply };
|
|
115
137
|
}
|
|
116
138
|
|
package/src/server/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { createAssistant } from "./handler";
|
|
2
2
|
export type { AssistantConfig } from "./handler";
|
|
3
3
|
export { AnthropicProvider } from "./providers/anthropic";
|
|
4
|
+
export { DifyProvider } from "./providers/dify";
|
|
4
5
|
export { OpenAIProvider } from "./providers/openai";
|
|
5
|
-
export type { LLMProvider, ProviderConfig } from "./providers/types";
|
|
6
|
+
export type { LLMProvider, ProviderConfig, Middleware } from "./providers/types";
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Message } from "../../types";
|
|
2
|
+
import type { LLMProvider, ProviderConfig } from "./types";
|
|
3
|
+
|
|
4
|
+
export class DifyProvider implements LLMProvider {
|
|
5
|
+
private apiKey: string;
|
|
6
|
+
private baseUrl: string;
|
|
7
|
+
|
|
8
|
+
constructor(config: ProviderConfig) {
|
|
9
|
+
this.apiKey = config.apiKey;
|
|
10
|
+
if (!config.baseUrl) {
|
|
11
|
+
throw new Error("baseUrl is required for the Dify provider");
|
|
12
|
+
}
|
|
13
|
+
this.baseUrl = config.baseUrl.replace(/\/+$/, "");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async chat(messages: Message[], systemPrompt?: string): Promise<string> {
|
|
17
|
+
const query = this.buildQuery(messages, systemPrompt);
|
|
18
|
+
|
|
19
|
+
const response = await fetch(`${this.baseUrl}/v1/chat-messages`, {
|
|
20
|
+
method: "POST",
|
|
21
|
+
headers: {
|
|
22
|
+
"Content-Type": "application/json",
|
|
23
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify({
|
|
26
|
+
inputs: {},
|
|
27
|
+
query,
|
|
28
|
+
response_mode: "blocking",
|
|
29
|
+
user: "explain-user",
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
const text = await response.text();
|
|
35
|
+
throw new Error(`Dify API error ${response.status}: ${text}`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const data = await response.json();
|
|
39
|
+
if (!data.answer) {
|
|
40
|
+
throw new Error("No answer in Dify response");
|
|
41
|
+
}
|
|
42
|
+
return data.answer;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private buildQuery(messages: Message[], systemPrompt?: string): string {
|
|
46
|
+
const parts: string[] = [];
|
|
47
|
+
|
|
48
|
+
if (systemPrompt) {
|
|
49
|
+
parts.push(`[System]: ${systemPrompt}`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
for (const m of messages) {
|
|
53
|
+
if (m.role === "context") {
|
|
54
|
+
parts.push(`[Context]: ${m.content}`);
|
|
55
|
+
} else if (m.role === "system") {
|
|
56
|
+
parts.push(`[System]: ${m.content}`);
|
|
57
|
+
} else if (m.role === "assistant") {
|
|
58
|
+
parts.push(`[Assistant]: ${m.content}`);
|
|
59
|
+
} else {
|
|
60
|
+
parts.push(m.content);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return parts.join("\n\n");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -7,4 +7,15 @@ export interface LLMProvider {
|
|
|
7
7
|
export type ProviderConfig = {
|
|
8
8
|
apiKey: string;
|
|
9
9
|
model?: string;
|
|
10
|
-
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Middleware that can transform messages before they reach the LLM.
|
|
15
|
+
* Useful for RAG context injection, logging, filtering, etc.
|
|
16
|
+
* Return the (possibly modified) messages array.
|
|
17
|
+
*/
|
|
18
|
+
export type Middleware = (
|
|
19
|
+
messages: Message[],
|
|
20
|
+
systemPrompt?: string,
|
|
21
|
+
) => Promise<{ messages: Message[]; systemPrompt?: string }>;
|
package/src/types.ts
CHANGED
|
@@ -8,4 +8,12 @@ export type ExplainContext = {
|
|
|
8
8
|
modalName?: string;
|
|
9
9
|
pageName?: string;
|
|
10
10
|
docsUrls?: string[];
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type ExplainEvent = {
|
|
14
|
+
label: string;
|
|
15
|
+
query: string;
|
|
16
|
+
context: ExplainContext | null;
|
|
17
|
+
docs: string[];
|
|
18
|
+
element: HTMLElement;
|
|
11
19
|
};
|