@humaan/payload-plugin-ai-assistant 0.0.0-stage → 0.1.1
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 +277 -2
- package/dist/admin/AiAssistantControl.d.ts +11 -0
- package/dist/admin/AiAssistantControl.js +31 -0
- package/dist/admin/AiAssistantControl.js.map +1 -0
- package/dist/admin/AiAssistantPanel.d.ts +10 -0
- package/dist/admin/AiAssistantPanel.js +208 -0
- package/dist/admin/AiAssistantPanel.js.map +1 -0
- package/dist/admin/AiAssistantPanel.module.scss +689 -0
- package/dist/admin/AiSourceSwitch.d.ts +13 -0
- package/dist/admin/AiSourceSwitch.js +14 -0
- package/dist/admin/AiSourceSwitch.js.map +1 -0
- package/dist/admin/BudgetField.d.ts +8 -0
- package/dist/admin/BudgetField.js +145 -0
- package/dist/admin/BudgetField.js.map +1 -0
- package/dist/admin/BudgetField.module.scss +47 -0
- package/dist/admin/Conversation.d.ts +12 -0
- package/dist/admin/Conversation.js +469 -0
- package/dist/admin/Conversation.js.map +1 -0
- package/dist/admin/Markdown.d.ts +9 -0
- package/dist/admin/Markdown.js +63 -0
- package/dist/admin/Markdown.js.map +1 -0
- package/dist/admin/PageContextBridge.d.ts +5 -0
- package/dist/admin/PageContextBridge.js +72 -0
- package/dist/admin/PageContextBridge.js.map +1 -0
- package/dist/admin/Pill.d.ts +11 -0
- package/dist/admin/Pill.js +27 -0
- package/dist/admin/Pill.js.map +1 -0
- package/dist/admin/PlanCard.d.ts +14 -0
- package/dist/admin/PlanCard.js +465 -0
- package/dist/admin/PlanCard.js.map +1 -0
- package/dist/admin/SettingsAlerts.d.ts +7 -0
- package/dist/admin/SettingsAlerts.js +37 -0
- package/dist/admin/SettingsAlerts.js.map +1 -0
- package/dist/admin/UsageSummary.d.ts +11 -0
- package/dist/admin/UsageSummary.js +129 -0
- package/dist/admin/UsageSummary.js.map +1 -0
- package/dist/admin/attachmentUpload.d.ts +25 -0
- package/dist/admin/attachmentUpload.js +76 -0
- package/dist/admin/attachmentUpload.js.map +1 -0
- package/dist/admin/openDocument.d.ts +13 -0
- package/dist/admin/openDocument.js +34 -0
- package/dist/admin/openDocument.js.map +1 -0
- package/dist/admin/percent.d.ts +10 -0
- package/dist/admin/percent.js +21 -0
- package/dist/admin/percent.js.map +1 -0
- package/dist/admin/threads.d.ts +21 -0
- package/dist/admin/threads.js +92 -0
- package/dist/admin/threads.js.map +1 -0
- package/dist/admin/toolSteps.d.ts +12 -0
- package/dist/admin/toolSteps.js +57 -0
- package/dist/admin/toolSteps.js.map +1 -0
- package/dist/admin/transport.d.ts +24 -0
- package/dist/admin/transport.js +75 -0
- package/dist/admin/transport.js.map +1 -0
- package/dist/admin/useAttachments.d.ts +32 -0
- package/dist/admin/useAttachments.js +91 -0
- package/dist/admin/useAttachments.js.map +1 -0
- package/dist/admin/useEntityLabel.d.ts +3 -0
- package/dist/admin/useEntityLabel.js +23 -0
- package/dist/admin/useEntityLabel.js.map +1 -0
- package/dist/attachments/collection.d.ts +15 -0
- package/dist/attachments/collection.js +90 -0
- package/dist/attachments/collection.js.map +1 -0
- package/dist/attachments/conversation.d.ts +25 -0
- package/dist/attachments/conversation.js +105 -0
- package/dist/attachments/conversation.js.map +1 -0
- package/dist/attachments/rules.d.ts +9 -0
- package/dist/attachments/rules.js +17 -0
- package/dist/attachments/rules.js.map +1 -0
- package/dist/attachments/store.d.ts +27 -0
- package/dist/attachments/store.js +187 -0
- package/dist/attachments/store.js.map +1 -0
- package/dist/billing.d.ts +60 -0
- package/dist/billing.js +116 -0
- package/dist/billing.js.map +1 -0
- package/dist/chat/history.d.ts +37 -0
- package/dist/chat/history.js +165 -0
- package/dist/chat/history.js.map +1 -0
- package/dist/chat/messages.d.ts +5 -0
- package/dist/chat/messages.js +3 -0
- package/dist/chat/messages.js.map +1 -0
- package/dist/chat/threads.d.ts +33 -0
- package/dist/chat/threads.js +77 -0
- package/dist/chat/threads.js.map +1 -0
- package/dist/chat/tools.d.ts +76 -0
- package/dist/chat/tools.js +596 -0
- package/dist/chat/tools.js.map +1 -0
- package/dist/chat/usage.d.ts +66 -0
- package/dist/chat/usage.js +219 -0
- package/dist/chat/usage.js.map +1 -0
- package/dist/collectionAccess.d.ts +6 -0
- package/dist/collectionAccess.js +32 -0
- package/dist/collectionAccess.js.map +1 -0
- package/dist/constants.d.ts +64 -0
- package/dist/constants.js +51 -0
- package/dist/constants.js.map +1 -0
- package/dist/endpoints/access.d.ts +4 -0
- package/dist/endpoints/access.js +28 -0
- package/dist/endpoints/access.js.map +1 -0
- package/dist/endpoints/allowance.d.ts +22 -0
- package/dist/endpoints/allowance.js +37 -0
- package/dist/endpoints/allowance.js.map +1 -0
- package/dist/endpoints/applyEndpoint.d.ts +12 -0
- package/dist/endpoints/applyEndpoint.js +170 -0
- package/dist/endpoints/applyEndpoint.js.map +1 -0
- package/dist/endpoints/budget.d.ts +30 -0
- package/dist/endpoints/budget.js +153 -0
- package/dist/endpoints/budget.js.map +1 -0
- package/dist/endpoints/chatEndpoint.d.ts +12 -0
- package/dist/endpoints/chatEndpoint.js +295 -0
- package/dist/endpoints/chatEndpoint.js.map +1 -0
- package/dist/endpoints/form.d.ts +23 -0
- package/dist/endpoints/form.js +95 -0
- package/dist/endpoints/form.js.map +1 -0
- package/dist/endpoints/usageEndpoint.d.ts +13 -0
- package/dist/endpoints/usageEndpoint.js +70 -0
- package/dist/endpoints/usageEndpoint.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lexical/editorConfig.d.ts +4 -0
- package/dist/lexical/editorConfig.js +19 -0
- package/dist/lexical/editorConfig.js.map +1 -0
- package/dist/lexical/lexicalToMarkdown.d.ts +10 -0
- package/dist/lexical/lexicalToMarkdown.js +10 -0
- package/dist/lexical/lexicalToMarkdown.js.map +1 -0
- package/dist/lexical/markdownToLexical.d.ts +7 -0
- package/dist/lexical/markdownToLexical.js +10 -0
- package/dist/lexical/markdownToLexical.js.map +1 -0
- package/dist/plan/allowed.d.ts +7 -0
- package/dist/plan/allowed.js +19 -0
- package/dist/plan/allowed.js.map +1 -0
- package/dist/plan/applyPlan.d.ts +16 -0
- package/dist/plan/applyPlan.js +353 -0
- package/dist/plan/applyPlan.js.map +1 -0
- package/dist/plan/catalogue.d.ts +37 -0
- package/dist/plan/catalogue.js +157 -0
- package/dist/plan/catalogue.js.map +1 -0
- package/dist/plan/diff.d.ts +13 -0
- package/dist/plan/diff.js +87 -0
- package/dist/plan/diff.js.map +1 -0
- package/dist/plan/parsePlan.d.ts +27 -0
- package/dist/plan/parsePlan.js +322 -0
- package/dist/plan/parsePlan.js.map +1 -0
- package/dist/plan/prompt.d.ts +1 -0
- package/dist/plan/prompt.js +45 -0
- package/dist/plan/prompt.js.map +1 -0
- package/dist/plan/stored.d.ts +53 -0
- package/dist/plan/stored.js +3 -0
- package/dist/plan/stored.js.map +1 -0
- package/dist/plan/tokens.d.ts +8 -0
- package/dist/plan/tokens.js +79 -0
- package/dist/plan/tokens.js.map +1 -0
- package/dist/plan/view.d.ts +4 -0
- package/dist/plan/view.js +43 -0
- package/dist/plan/view.js.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.js +464 -0
- package/dist/plugin.js.map +1 -0
- package/dist/read/outline.d.ts +7 -0
- package/dist/read/outline.js +70 -0
- package/dist/read/outline.js.map +1 -0
- package/dist/read/readTarget.d.ts +4 -0
- package/dist/read/readTarget.js +13 -0
- package/dist/read/readTarget.js.map +1 -0
- package/dist/read/readable.d.ts +8 -0
- package/dist/read/readable.js +131 -0
- package/dist/read/readable.js.map +1 -0
- package/dist/runtime.d.ts +15 -0
- package/dist/runtime.js +14 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema/fields.d.ts +113 -0
- package/dist/schema/fields.js +1036 -0
- package/dist/schema/fields.js.map +1 -0
- package/dist/schema/listingFields.d.ts +9 -0
- package/dist/schema/listingFields.js +95 -0
- package/dist/schema/listingFields.js.map +1 -0
- package/dist/schema/slugify.d.ts +2 -0
- package/dist/schema/slugify.js +5 -0
- package/dist/schema/slugify.js.map +1 -0
- package/dist/settings.d.ts +10 -0
- package/dist/settings.js +54 -0
- package/dist/settings.js.map +1 -0
- package/dist/types.d.ts +198 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/uploads/routeAsset.d.ts +27 -0
- package/dist/uploads/routeAsset.js +127 -0
- package/dist/uploads/routeAsset.js.map +1 -0
- package/package.json +122 -3
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { dayIn, monthStart, usageTotals } from '../chat/usage.js';
|
|
3
|
+
import { accountAllowance, budgetView } from '../endpoints/allowance.js';
|
|
4
|
+
import { formatReset, nextReset } from '../endpoints/budget.js';
|
|
5
|
+
import { pluginRuntime } from '../runtime.js';
|
|
6
|
+
import { AiSourceSwitch } from './AiSourceSwitch.js';
|
|
7
|
+
import styles from './BudgetField.module.scss';
|
|
8
|
+
import { percentOf, usdOf } from './percent.js';
|
|
9
|
+
/**
|
|
10
|
+
* What the model costs, on the settings screen, for AI Source as it stands in the form. On Humaan AI: how much of the
|
|
11
|
+
* project's budget is used, as shares only. On the own key: the site's spend on it, which is the client's own money,
|
|
12
|
+
* so it is shown in US dollars. Both are rendered here, on the server, so no token or key reaches the browser, and
|
|
13
|
+
* `AiSourceSwitch` shows the one that matches. The settings global is admin-only, and so is this screen.
|
|
14
|
+
*/ export async function BudgetField({ payload, req }) {
|
|
15
|
+
const runtime = pluginRuntime(payload.config);
|
|
16
|
+
const allowance = await accountAllowance(req);
|
|
17
|
+
const humaanAi = /*#__PURE__*/ _jsx(HumaanAiBudget, {
|
|
18
|
+
allowance: allowance,
|
|
19
|
+
timeZone: runtime.timeZone
|
|
20
|
+
});
|
|
21
|
+
// Only the summary on the config: the credentials never reach this component.
|
|
22
|
+
if (!runtime.ownKey) {
|
|
23
|
+
return humaanAi;
|
|
24
|
+
}
|
|
25
|
+
const today = dayIn(runtime.timeZone);
|
|
26
|
+
const [month, day] = await Promise.all([
|
|
27
|
+
usageTotals(req, monthStart(today), today),
|
|
28
|
+
usageTotals(req, today, today)
|
|
29
|
+
]);
|
|
30
|
+
return /*#__PURE__*/ _jsx(AiSourceSwitch, {
|
|
31
|
+
humaanAi: humaanAi,
|
|
32
|
+
ownKey: /*#__PURE__*/ _jsx(OwnKeyUsage, {
|
|
33
|
+
allowance: allowance,
|
|
34
|
+
month: month,
|
|
35
|
+
ownKey: runtime.ownKey,
|
|
36
|
+
today: day
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** How much of the project's Humaan AI budget is used, or why it cannot be read. */ function HumaanAiBudget({ allowance, timeZone }) {
|
|
41
|
+
return /*#__PURE__*/ _jsxs("section", {
|
|
42
|
+
"aria-labelledby": "ai-assistant-budget-heading",
|
|
43
|
+
className: styles.budget,
|
|
44
|
+
children: [
|
|
45
|
+
/*#__PURE__*/ _jsx("h3", {
|
|
46
|
+
className: styles.budget__heading,
|
|
47
|
+
id: "ai-assistant-budget-heading",
|
|
48
|
+
children: "Humaan AI Budget"
|
|
49
|
+
}),
|
|
50
|
+
typeof allowance === 'string' ? /*#__PURE__*/ _jsx("p", {
|
|
51
|
+
className: styles.budget__note,
|
|
52
|
+
children: allowance
|
|
53
|
+
}) : /*#__PURE__*/ _jsx(BudgetDetails, {
|
|
54
|
+
allowance: allowance,
|
|
55
|
+
timeZone: timeZone,
|
|
56
|
+
view: budgetView(allowance)
|
|
57
|
+
})
|
|
58
|
+
]
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/** A gauge of the budget used. The text carries the figure; the bar only helps scanning. */ function BudgetDetails({ allowance, view, timeZone }) {
|
|
62
|
+
const usedShare = Math.min(Math.max(1 - view.remainingShare, 0), 1);
|
|
63
|
+
const used = percentOf(usedShare, 1);
|
|
64
|
+
const reset = nextReset(allowance.refreshPeriod);
|
|
65
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
66
|
+
children: [
|
|
67
|
+
/*#__PURE__*/ _jsxs("p", {
|
|
68
|
+
className: styles.budget__figure,
|
|
69
|
+
id: "ai-assistant-budget-used",
|
|
70
|
+
children: [
|
|
71
|
+
used,
|
|
72
|
+
" used",
|
|
73
|
+
view.low ? /*#__PURE__*/ _jsx("strong", {
|
|
74
|
+
className: styles.budget__low,
|
|
75
|
+
children: " (low)"
|
|
76
|
+
}) : null
|
|
77
|
+
]
|
|
78
|
+
}),
|
|
79
|
+
/*#__PURE__*/ _jsx("div", {
|
|
80
|
+
"aria-labelledby": "ai-assistant-budget-used",
|
|
81
|
+
"aria-valuemax": 100,
|
|
82
|
+
"aria-valuemin": 0,
|
|
83
|
+
"aria-valuenow": Math.round(usedShare * 100),
|
|
84
|
+
"aria-valuetext": `${used} used`,
|
|
85
|
+
className: styles.budget__bar,
|
|
86
|
+
"data-low": view.low || undefined,
|
|
87
|
+
role: "meter",
|
|
88
|
+
children: /*#__PURE__*/ _jsx("span", {
|
|
89
|
+
className: styles['budget__bar-fill'],
|
|
90
|
+
style: {
|
|
91
|
+
width: `${usedShare * 100}%`
|
|
92
|
+
}
|
|
93
|
+
})
|
|
94
|
+
}),
|
|
95
|
+
/*#__PURE__*/ _jsx("p", {
|
|
96
|
+
className: styles.budget__note,
|
|
97
|
+
children: reset ? `Share of this project's ${allowance.refreshPeriod} budget. Resets on ${formatReset(reset, timeZone)}.` : "Share of this project's budget, which does not reset."
|
|
98
|
+
})
|
|
99
|
+
]
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The site's spend on its own key, this month and today, as the gateway prices it. The provider's invoice is the
|
|
104
|
+
* record. Fallbacks are flagged at the top of the screen; this shows the budget that caps them.
|
|
105
|
+
*/ function OwnKeyUsage({ ownKey, month, today, allowance }) {
|
|
106
|
+
return /*#__PURE__*/ _jsxs("section", {
|
|
107
|
+
"aria-labelledby": "ai-assistant-budget-heading",
|
|
108
|
+
className: styles.budget,
|
|
109
|
+
children: [
|
|
110
|
+
/*#__PURE__*/ _jsxs("h3", {
|
|
111
|
+
className: styles.budget__heading,
|
|
112
|
+
id: "ai-assistant-budget-heading",
|
|
113
|
+
children: [
|
|
114
|
+
"Own provider key: ",
|
|
115
|
+
ownKey.label
|
|
116
|
+
]
|
|
117
|
+
}),
|
|
118
|
+
/*#__PURE__*/ _jsxs("p", {
|
|
119
|
+
className: styles.budget__figure,
|
|
120
|
+
children: [
|
|
121
|
+
usdOf(month.ownKeyUsd),
|
|
122
|
+
" this month"
|
|
123
|
+
]
|
|
124
|
+
}),
|
|
125
|
+
/*#__PURE__*/ _jsxs("p", {
|
|
126
|
+
className: styles.budget__note,
|
|
127
|
+
children: [
|
|
128
|
+
"Today: ",
|
|
129
|
+
usdOf(today.ownKeyUsd),
|
|
130
|
+
" across ",
|
|
131
|
+
today.replies,
|
|
132
|
+
' ',
|
|
133
|
+
today.replies === 1 ? 'reply' : 'replies',
|
|
134
|
+
". The provider bills the account that owns the credentials; figures are the gateway's prices, and the provider's invoice is the record. Months follow the site's time zone."
|
|
135
|
+
]
|
|
136
|
+
}),
|
|
137
|
+
/*#__PURE__*/ _jsx("p", {
|
|
138
|
+
className: styles.budget__note,
|
|
139
|
+
children: typeof allowance === 'string' ? `Fallbacks are capped by the project's Vercel budget, which could not be read: ${allowance}` : `Fallbacks are capped by the project's Vercel budget, ${percentOf(1 - budgetView(allowance).remainingShare, 1)} used.`
|
|
140
|
+
})
|
|
141
|
+
]
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
//# sourceMappingURL=BudgetField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/admin/BudgetField.tsx"],"sourcesContent":["import type { UIFieldServerProps } from 'payload'\n\nimport type { OwnKeySummary } from '../billing.js'\nimport type { UsageTotals } from '../chat/usage.js'\nimport type { Allowance } from '../endpoints/allowance.js'\nimport type { BudgetView } from '../types.js'\n\nimport { dayIn, monthStart, usageTotals } from '../chat/usage.js'\nimport { accountAllowance, budgetView } from '../endpoints/allowance.js'\nimport { formatReset, nextReset } from '../endpoints/budget.js'\nimport { pluginRuntime } from '../runtime.js'\nimport { AiSourceSwitch } from './AiSourceSwitch.js'\nimport styles from './BudgetField.module.scss'\nimport { percentOf, usdOf } from './percent.js'\n\n/**\n * What the model costs, on the settings screen, for AI Source as it stands in the form. On Humaan AI: how much of the\n * project's budget is used, as shares only. On the own key: the site's spend on it, which is the client's own money,\n * so it is shown in US dollars. Both are rendered here, on the server, so no token or key reaches the browser, and\n * `AiSourceSwitch` shows the one that matches. The settings global is admin-only, and so is this screen.\n */\nexport async function BudgetField({ payload, req }: UIFieldServerProps) {\n const runtime = pluginRuntime(payload.config)\n const allowance = await accountAllowance(req)\n const humaanAi = <HumaanAiBudget allowance={allowance} timeZone={runtime.timeZone} />\n // Only the summary on the config: the credentials never reach this component.\n if (!runtime.ownKey) {\n return humaanAi\n }\n\n const today = dayIn(runtime.timeZone)\n const [month, day] = await Promise.all([\n usageTotals(req, monthStart(today), today),\n usageTotals(req, today, today),\n ])\n return (\n <AiSourceSwitch\n humaanAi={humaanAi}\n ownKey={\n <OwnKeyUsage allowance={allowance} month={month} ownKey={runtime.ownKey} today={day} />\n }\n />\n )\n}\n\n/** How much of the project's Humaan AI budget is used, or why it cannot be read. */\nfunction HumaanAiBudget({\n allowance,\n timeZone,\n}: {\n allowance: Allowance | string\n timeZone: string\n}) {\n return (\n <section aria-labelledby=\"ai-assistant-budget-heading\" className={styles.budget}>\n <h3 className={styles.budget__heading} id=\"ai-assistant-budget-heading\">\n Humaan AI Budget\n </h3>\n {typeof allowance === 'string' ? (\n <p className={styles.budget__note}>{allowance}</p>\n ) : (\n <BudgetDetails allowance={allowance} timeZone={timeZone} view={budgetView(allowance)} />\n )}\n </section>\n )\n}\n\n/** A gauge of the budget used. The text carries the figure; the bar only helps scanning. */\nfunction BudgetDetails({\n allowance,\n view,\n timeZone,\n}: {\n allowance: Allowance\n timeZone: string\n view: BudgetView\n}) {\n const usedShare = Math.min(Math.max(1 - view.remainingShare, 0), 1)\n const used = percentOf(usedShare, 1)\n const reset = nextReset(allowance.refreshPeriod)\n return (\n <>\n <p className={styles.budget__figure} id=\"ai-assistant-budget-used\">\n {used} used\n {view.low ? <strong className={styles.budget__low}> (low)</strong> : null}\n </p>\n <div\n aria-labelledby=\"ai-assistant-budget-used\"\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuenow={Math.round(usedShare * 100)}\n aria-valuetext={`${used} used`}\n className={styles.budget__bar}\n data-low={view.low || undefined}\n role=\"meter\"\n >\n <span className={styles['budget__bar-fill']} style={{ width: `${usedShare * 100}%` }} />\n </div>\n <p className={styles.budget__note}>\n {reset\n ? `Share of this project's ${allowance.refreshPeriod} budget. Resets on ${formatReset(reset, timeZone)}.`\n : \"Share of this project's budget, which does not reset.\"}\n </p>\n </>\n )\n}\n\n/**\n * The site's spend on its own key, this month and today, as the gateway prices it. The provider's invoice is the\n * record. Fallbacks are flagged at the top of the screen; this shows the budget that caps them.\n */\nfunction OwnKeyUsage({\n ownKey,\n month,\n today,\n allowance,\n}: {\n allowance: Allowance | string\n month: UsageTotals\n ownKey: OwnKeySummary\n today: UsageTotals\n}) {\n return (\n <section aria-labelledby=\"ai-assistant-budget-heading\" className={styles.budget}>\n <h3 className={styles.budget__heading} id=\"ai-assistant-budget-heading\">\n Own provider key: {ownKey.label}\n </h3>\n <p className={styles.budget__figure}>{usdOf(month.ownKeyUsd)} this month</p>\n <p className={styles.budget__note}>\n Today: {usdOf(today.ownKeyUsd)} across {today.replies}{' '}\n {today.replies === 1 ? 'reply' : 'replies'}. The provider bills the account that owns the\n credentials; figures are the gateway's prices, and the provider's invoice is the\n record. Months follow the site's time zone.\n </p>\n <p className={styles.budget__note}>\n {typeof allowance === 'string'\n ? `Fallbacks are capped by the project's Vercel budget, which could not be read: ${allowance}`\n : `Fallbacks are capped by the project's Vercel budget, ${percentOf(1 - budgetView(allowance).remainingShare, 1)} used.`}\n </p>\n </section>\n )\n}\n"],"names":["dayIn","monthStart","usageTotals","accountAllowance","budgetView","formatReset","nextReset","pluginRuntime","AiSourceSwitch","styles","percentOf","usdOf","BudgetField","payload","req","runtime","config","allowance","humaanAi","HumaanAiBudget","timeZone","ownKey","today","month","day","Promise","all","OwnKeyUsage","section","aria-labelledby","className","budget","h3","budget__heading","id","p","budget__note","BudgetDetails","view","usedShare","Math","min","max","remainingShare","used","reset","refreshPeriod","budget__figure","low","strong","budget__low","div","aria-valuemax","aria-valuemin","aria-valuenow","round","aria-valuetext","budget__bar","data-low","undefined","role","span","style","width","label","ownKeyUsd","replies"],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Read-only AI Gateway budget on the Humaan AI settings screen.
|
|
2
|
+
.budget {
|
|
3
|
+
margin-block-end: var(--spacing-field, calc(var(--base) * 1));
|
|
4
|
+
padding: calc(var(--base) * 0.75) calc(var(--base) * 1);
|
|
5
|
+
border: 1px solid var(--theme-elevation-150);
|
|
6
|
+
border-radius: var(--style-radius-m, 4px);
|
|
7
|
+
|
|
8
|
+
&__heading {
|
|
9
|
+
margin: 0 0 calc(var(--base) * 0.5);
|
|
10
|
+
font-size: 1rem;
|
|
11
|
+
font-weight: 600;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
&__figure {
|
|
15
|
+
margin: 0 0 calc(var(--base) * 0.375);
|
|
16
|
+
font-size: 1.125rem;
|
|
17
|
+
font-weight: 600;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&__bar {
|
|
21
|
+
overflow: hidden;
|
|
22
|
+
height: calc(var(--base) * 0.5);
|
|
23
|
+
border-radius: 999px;
|
|
24
|
+
background: var(--theme-elevation-100);
|
|
25
|
+
|
|
26
|
+
&[data-low] {
|
|
27
|
+
--budget-bar-fill: var(--theme-warning-500);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&-fill {
|
|
31
|
+
display: block;
|
|
32
|
+
height: 100%;
|
|
33
|
+
border-radius: inherit;
|
|
34
|
+
background: var(--budget-bar-fill, var(--theme-success-500));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&__low {
|
|
39
|
+
color: var(--theme-warning-750, var(--theme-warning-800));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&__note {
|
|
43
|
+
margin: calc(var(--base) * 0.5) 0 0;
|
|
44
|
+
color: var(--theme-elevation-600);
|
|
45
|
+
font-size: 0.8125rem;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LoadedThread } from './threads.js';
|
|
2
|
+
interface ConversationProps {
|
|
3
|
+
apiRoute: string;
|
|
4
|
+
/** Whether the project registered the attachments collection. */
|
|
5
|
+
attachmentsEnabled: boolean;
|
|
6
|
+
/** Called when a reply finishes and the thread has been saved. */
|
|
7
|
+
onReply: () => void;
|
|
8
|
+
session: LoadedThread;
|
|
9
|
+
}
|
|
10
|
+
/** One conversation. Remounted with a new key to switch conversations. */
|
|
11
|
+
export declare function Conversation({ apiRoute, session, attachmentsEnabled, onReply, }: ConversationProps): import("react").JSX.Element;
|
|
12
|
+
export {};
|