@retrivora-ai/rag-engine 2.2.2 → 2.2.4

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.
@@ -62,13 +62,14 @@ export function useRagChat(
62
62
  options: UseRagChatOptions = {}
63
63
  ): UseRagChatReturn {
64
64
  const {
65
- apiUrl = '/api/chat',
65
+ apiUrl,
66
66
  retrivoraApiBase = '/api/retrivora',
67
67
  namespace,
68
68
  persist = true,
69
69
  onReply,
70
70
  onError,
71
71
  } = options;
72
+ const primaryUrl = apiUrl || `${retrivoraApiBase.replace(/\/$/, '')}/chat`;
72
73
  const storageKey = `rag_chat_${projectId}`;
73
74
 
74
75
  const [messages, setMessages] = useStoredMessages<RagMessage>(storageKey, persist);
@@ -119,23 +120,38 @@ export function useRagChat(
119
120
  const history = messagesRef.current.map(({ role, content }) => ({ role, content }));
120
121
  const assistantMessageId = `assistant_${Date.now()}`;
121
122
 
122
- const response = await fetch(apiUrl, {
123
+ const payloadBody = JSON.stringify({
124
+ message: trimmed,
125
+ history,
126
+ namespace: namespace ?? projectId,
127
+ sessionId: options.sessionId || 'default',
128
+ messageId: assistantMessageId,
129
+ userMessageId: userMsgId,
130
+ });
131
+
132
+ const fetchHeaders = {
133
+ 'Content-Type': 'application/json',
134
+ ...(options.headers || {})
135
+ };
136
+
137
+ let response = await fetch(primaryUrl, {
123
138
  method: 'POST',
124
- headers: {
125
- 'Content-Type': 'application/json',
126
- ...(options.headers || {})
127
- },
139
+ headers: fetchHeaders,
128
140
  signal: controller.signal,
129
- body: JSON.stringify({
130
- message: trimmed,
131
- history,
132
- namespace: namespace ?? projectId,
133
- sessionId: options.sessionId || 'default',
134
- messageId: assistantMessageId,
135
- userMessageId: userMsgId,
136
- }),
141
+ body: payloadBody,
137
142
  });
138
143
 
144
+ // Dynamic Fallback: If primaryUrl (e.g. /api/retrivora/chat) returns 404, retry fallback to /api/chat
145
+ if (response.status === 404 && !apiUrl && primaryUrl !== '/api/chat') {
146
+ console.warn(`[Retrivora SDK] ⚠️ Chat endpoint "${primaryUrl}" returned 404. Retrying fallback to "/api/chat"...`);
147
+ response = await fetch('/api/chat', {
148
+ method: 'POST',
149
+ headers: fetchHeaders,
150
+ signal: controller.signal,
151
+ body: payloadBody,
152
+ });
153
+ }
154
+
139
155
  if (!response.ok) {
140
156
  const errorData = await response.json().catch(() => ({}));
141
157
  throw new Error(errorData.error || `Server returned ${response.status}`);
package/src/index.css CHANGED
@@ -112,6 +112,7 @@
112
112
  --color-white: #fff;
113
113
  --spacing: 0.25rem;
114
114
  --container-xs: 20rem;
115
+ --container-sm: 24rem;
115
116
  --container-md: 28rem;
116
117
  --container-2xl: 42rem;
117
118
  --container-4xl: 56rem;
@@ -123,11 +124,14 @@
123
124
  --text-base--line-height: calc(1.5 / 1);
124
125
  --text-lg: 1.125rem;
125
126
  --text-lg--line-height: calc(1.75 / 1.125);
127
+ --text-xl: 1.25rem;
128
+ --text-xl--line-height: calc(1.75 / 1.25);
126
129
  --text-3xl: 1.875rem;
127
130
  --text-3xl--line-height: calc(2.25 / 1.875);
128
131
  --font-weight-medium: 500;
129
132
  --font-weight-semibold: 600;
130
133
  --font-weight-bold: 700;
134
+ --font-weight-extrabold: 800;
131
135
  --tracking-tight: -0.025em;
132
136
  --tracking-wider: 0.05em;
133
137
  --tracking-widest: 0.1em;
@@ -759,6 +763,9 @@
759
763
  .max-w-none {
760
764
  max-width: none;
761
765
  }
766
+ .max-w-sm {
767
+ max-width: var(--container-sm);
768
+ }
762
769
  .max-w-xs {
763
770
  max-width: var(--container-xs);
764
771
  }
@@ -777,6 +784,9 @@
777
784
  .flex-shrink-0 {
778
785
  flex-shrink: 0;
779
786
  }
787
+ .shrink-0 {
788
+ flex-shrink: 0;
789
+ }
780
790
  .flex-grow {
781
791
  flex-grow: 1;
782
792
  }
@@ -930,6 +940,9 @@
930
940
  .gap-2 {
931
941
  gap: calc(var(--spacing) * 2);
932
942
  }
943
+ .gap-2\.5 {
944
+ gap: calc(var(--spacing) * 2.5);
945
+ }
933
946
  .gap-3 {
934
947
  gap: calc(var(--spacing) * 3);
935
948
  }
@@ -1111,6 +1124,12 @@
1111
1124
  .border-emerald-100 {
1112
1125
  border-color: var(--color-emerald-100);
1113
1126
  }
1127
+ .border-emerald-100\/50 {
1128
+ border-color: color-mix(in srgb, oklch(95% 0.052 163.051) 50%, transparent);
1129
+ @supports (color: color-mix(in lab, red, red)) {
1130
+ border-color: color-mix(in oklab, var(--color-emerald-100) 50%, transparent);
1131
+ }
1132
+ }
1114
1133
  .border-emerald-200 {
1115
1134
  border-color: var(--color-emerald-200);
1116
1135
  }
@@ -1363,6 +1382,12 @@
1363
1382
  .bg-slate-950 {
1364
1383
  background-color: var(--color-slate-950);
1365
1384
  }
1385
+ .bg-slate-950\/70 {
1386
+ background-color: color-mix(in srgb, oklch(12.9% 0.042 264.695) 70%, transparent);
1387
+ @supports (color: color-mix(in lab, red, red)) {
1388
+ background-color: color-mix(in oklab, var(--color-slate-950) 70%, transparent);
1389
+ }
1390
+ }
1366
1391
  .bg-transparent {
1367
1392
  background-color: transparent;
1368
1393
  }
@@ -1520,6 +1545,10 @@
1520
1545
  font-size: var(--text-sm);
1521
1546
  line-height: var(--tw-leading, var(--text-sm--line-height));
1522
1547
  }
1548
+ .text-xl {
1549
+ font-size: var(--text-xl);
1550
+ line-height: var(--tw-leading, var(--text-xl--line-height));
1551
+ }
1523
1552
  .text-xs {
1524
1553
  font-size: var(--text-xs);
1525
1554
  line-height: var(--tw-leading, var(--text-xs--line-height));
@@ -1551,6 +1580,10 @@
1551
1580
  --tw-font-weight: var(--font-weight-bold);
1552
1581
  font-weight: var(--font-weight-bold);
1553
1582
  }
1583
+ .font-extrabold {
1584
+ --tw-font-weight: var(--font-weight-extrabold);
1585
+ font-weight: var(--font-weight-extrabold);
1586
+ }
1554
1587
  .font-medium {
1555
1588
  --tw-font-weight: var(--font-weight-medium);
1556
1589
  font-weight: var(--font-weight-medium);
@@ -1649,6 +1682,9 @@
1649
1682
  .text-emerald-800 {
1650
1683
  color: var(--color-emerald-800);
1651
1684
  }
1685
+ .text-emerald-900 {
1686
+ color: var(--color-emerald-900);
1687
+ }
1652
1688
  .text-emerald-950 {
1653
1689
  color: var(--color-emerald-950);
1654
1690
  }
@@ -2363,6 +2399,14 @@
2363
2399
  }
2364
2400
  }
2365
2401
  }
2402
+ .dark\:border-emerald-500\/10 {
2403
+ @media (prefers-color-scheme: dark) {
2404
+ border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 10%, transparent);
2405
+ @supports (color: color-mix(in lab, red, red)) {
2406
+ border-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);
2407
+ }
2408
+ }
2409
+ }
2366
2410
  .dark\:border-emerald-500\/20 {
2367
2411
  @media (prefers-color-scheme: dark) {
2368
2412
  border-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);
@@ -121,7 +121,7 @@ export class UniversalLLMAdapter implements ILLMProvider {
121
121
  return String(result);
122
122
  }
123
123
  } catch (httpErr: any) {
124
- console.warn(`[UniversalLLMAdapter] Direct HTTP POST to ${this.baseUrl}${path} failed (${httpErr.message}). Attempting in-process gateway dispatch fallback...`);
124
+ // Direct POST fallback attempt
125
125
 
126
126
  const _g = globalThis as any;
127
127
  let dispatch = _g.__retrivoraDispatchChat;