llms-py 2.0.35__py3-none-any.whl → 3.0.0__py3-none-any.whl
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.
- llms/__pycache__/__init__.cpython-312.pyc +0 -0
- llms/__pycache__/__init__.cpython-313.pyc +0 -0
- llms/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/__pycache__/__main__.cpython-312.pyc +0 -0
- llms/__pycache__/__main__.cpython-314.pyc +0 -0
- llms/__pycache__/llms.cpython-312.pyc +0 -0
- llms/__pycache__/main.cpython-312.pyc +0 -0
- llms/__pycache__/main.cpython-313.pyc +0 -0
- llms/__pycache__/main.cpython-314.pyc +0 -0
- llms/__pycache__/plugins.cpython-314.pyc +0 -0
- llms/{ui/Analytics.mjs → extensions/analytics/ui/index.mjs} +154 -238
- llms/extensions/app/README.md +20 -0
- llms/extensions/app/__init__.py +530 -0
- llms/extensions/app/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/app/__pycache__/db.cpython-314.pyc +0 -0
- llms/extensions/app/__pycache__/db_manager.cpython-314.pyc +0 -0
- llms/extensions/app/db.py +644 -0
- llms/extensions/app/db_manager.py +195 -0
- llms/extensions/app/requests.json +9073 -0
- llms/extensions/app/threads.json +15290 -0
- llms/{ui → extensions/app/ui}/Recents.mjs +91 -65
- llms/{ui/Sidebar.mjs → extensions/app/ui/index.mjs} +124 -58
- llms/extensions/app/ui/threadStore.mjs +411 -0
- llms/extensions/core_tools/CALCULATOR.md +32 -0
- llms/extensions/core_tools/__init__.py +598 -0
- llms/extensions/core_tools/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/core_tools/ui/codemirror/addon/edit/closebrackets.js +201 -0
- llms/extensions/core_tools/ui/codemirror/addon/edit/closetag.js +185 -0
- llms/extensions/core_tools/ui/codemirror/addon/edit/continuelist.js +101 -0
- llms/extensions/core_tools/ui/codemirror/addon/edit/matchbrackets.js +160 -0
- llms/extensions/core_tools/ui/codemirror/addon/edit/matchtags.js +66 -0
- llms/extensions/core_tools/ui/codemirror/addon/edit/trailingspace.js +27 -0
- llms/extensions/core_tools/ui/codemirror/addon/selection/active-line.js +72 -0
- llms/extensions/core_tools/ui/codemirror/addon/selection/mark-selection.js +119 -0
- llms/extensions/core_tools/ui/codemirror/addon/selection/selection-pointer.js +98 -0
- llms/extensions/core_tools/ui/codemirror/doc/docs.css +225 -0
- llms/extensions/core_tools/ui/codemirror/doc/source_sans.woff +0 -0
- llms/extensions/core_tools/ui/codemirror/lib/codemirror.css +344 -0
- llms/extensions/core_tools/ui/codemirror/lib/codemirror.js +9884 -0
- llms/extensions/core_tools/ui/codemirror/mode/clike/clike.js +942 -0
- llms/extensions/core_tools/ui/codemirror/mode/javascript/index.html +118 -0
- llms/extensions/core_tools/ui/codemirror/mode/javascript/javascript.js +962 -0
- llms/extensions/core_tools/ui/codemirror/mode/javascript/typescript.html +62 -0
- llms/extensions/core_tools/ui/codemirror/mode/python/python.js +402 -0
- llms/extensions/core_tools/ui/codemirror/theme/dracula.css +40 -0
- llms/extensions/core_tools/ui/codemirror/theme/mocha.css +135 -0
- llms/extensions/core_tools/ui/index.mjs +650 -0
- llms/extensions/gallery/README.md +61 -0
- llms/extensions/gallery/__init__.py +61 -0
- llms/extensions/gallery/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/gallery/__pycache__/db.cpython-314.pyc +0 -0
- llms/extensions/gallery/db.py +298 -0
- llms/extensions/gallery/ui/index.mjs +482 -0
- llms/extensions/katex/README.md +39 -0
- llms/extensions/katex/__init__.py +6 -0
- llms/extensions/katex/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/katex/ui/README.md +125 -0
- llms/extensions/katex/ui/contrib/auto-render.js +338 -0
- llms/extensions/katex/ui/contrib/auto-render.min.js +1 -0
- llms/extensions/katex/ui/contrib/auto-render.mjs +244 -0
- llms/extensions/katex/ui/contrib/copy-tex.js +127 -0
- llms/extensions/katex/ui/contrib/copy-tex.min.js +1 -0
- llms/extensions/katex/ui/contrib/copy-tex.mjs +105 -0
- llms/extensions/katex/ui/contrib/mathtex-script-type.js +109 -0
- llms/extensions/katex/ui/contrib/mathtex-script-type.min.js +1 -0
- llms/extensions/katex/ui/contrib/mathtex-script-type.mjs +24 -0
- llms/extensions/katex/ui/contrib/mhchem.js +3213 -0
- llms/extensions/katex/ui/contrib/mhchem.min.js +1 -0
- llms/extensions/katex/ui/contrib/mhchem.mjs +3109 -0
- llms/extensions/katex/ui/contrib/render-a11y-string.js +887 -0
- llms/extensions/katex/ui/contrib/render-a11y-string.min.js +1 -0
- llms/extensions/katex/ui/contrib/render-a11y-string.mjs +800 -0
- llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- llms/extensions/katex/ui/index.mjs +92 -0
- llms/extensions/katex/ui/katex-swap.css +1230 -0
- llms/extensions/katex/ui/katex-swap.min.css +1 -0
- llms/extensions/katex/ui/katex.css +1230 -0
- llms/extensions/katex/ui/katex.js +19080 -0
- llms/extensions/katex/ui/katex.min.css +1 -0
- llms/extensions/katex/ui/katex.min.js +1 -0
- llms/extensions/katex/ui/katex.min.mjs +1 -0
- llms/extensions/katex/ui/katex.mjs +18547 -0
- llms/extensions/providers/__init__.py +18 -0
- llms/extensions/providers/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/providers/__pycache__/anthropic.cpython-314.pyc +0 -0
- llms/extensions/providers/__pycache__/chutes.cpython-314.pyc +0 -0
- llms/extensions/providers/__pycache__/google.cpython-314.pyc +0 -0
- llms/extensions/providers/__pycache__/nvidia.cpython-314.pyc +0 -0
- llms/extensions/providers/__pycache__/openai.cpython-314.pyc +0 -0
- llms/extensions/providers/__pycache__/openrouter.cpython-314.pyc +0 -0
- llms/extensions/providers/anthropic.py +229 -0
- llms/extensions/providers/chutes.py +155 -0
- llms/extensions/providers/google.py +378 -0
- llms/extensions/providers/nvidia.py +105 -0
- llms/extensions/providers/openai.py +156 -0
- llms/extensions/providers/openrouter.py +72 -0
- llms/extensions/system_prompts/README.md +22 -0
- llms/extensions/system_prompts/__init__.py +45 -0
- llms/extensions/system_prompts/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/system_prompts/ui/index.mjs +280 -0
- llms/extensions/system_prompts/ui/prompts.json +1067 -0
- llms/extensions/tools/__init__.py +5 -0
- llms/extensions/tools/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/tools/ui/index.mjs +204 -0
- llms/index.html +35 -77
- llms/llms.json +357 -1186
- llms/main.py +2349 -591
- llms/providers-extra.json +356 -0
- llms/providers.json +1 -0
- llms/ui/App.mjs +151 -60
- llms/ui/ai.mjs +132 -60
- llms/ui/app.css +2173 -161
- llms/ui/ctx.mjs +365 -0
- llms/ui/index.mjs +129 -0
- llms/ui/lib/charts.mjs +9 -13
- llms/ui/lib/servicestack-vue.mjs +3 -3
- llms/ui/lib/vue.min.mjs +10 -9
- llms/ui/lib/vue.mjs +1796 -1635
- llms/ui/markdown.mjs +18 -7
- llms/ui/modules/chat/ChatBody.mjs +691 -0
- llms/ui/{SettingsDialog.mjs → modules/chat/SettingsDialog.mjs} +9 -9
- llms/ui/modules/chat/index.mjs +828 -0
- llms/ui/modules/layout.mjs +243 -0
- llms/ui/modules/model-selector.mjs +851 -0
- llms/ui/tailwind.input.css +496 -80
- llms/ui/utils.mjs +161 -93
- {llms_py-2.0.35.dist-info → llms_py-3.0.0.dist-info}/METADATA +1 -1
- llms_py-3.0.0.dist-info/RECORD +202 -0
- llms/ui/Avatar.mjs +0 -85
- llms/ui/Brand.mjs +0 -52
- llms/ui/ChatPrompt.mjs +0 -590
- llms/ui/Main.mjs +0 -823
- llms/ui/ModelSelector.mjs +0 -78
- llms/ui/OAuthSignIn.mjs +0 -92
- llms/ui/ProviderIcon.mjs +0 -30
- llms/ui/ProviderStatus.mjs +0 -105
- llms/ui/SignIn.mjs +0 -64
- llms/ui/SystemPromptEditor.mjs +0 -31
- llms/ui/SystemPromptSelector.mjs +0 -56
- llms/ui/Welcome.mjs +0 -8
- llms/ui/threadStore.mjs +0 -563
- llms/ui.json +0 -1069
- llms_py-2.0.35.dist-info/RECORD +0 -48
- {llms_py-2.0.35.dist-info → llms_py-3.0.0.dist-info}/WHEEL +0 -0
- {llms_py-2.0.35.dist-info → llms_py-3.0.0.dist-info}/entry_points.txt +0 -0
- {llms_py-2.0.35.dist-info → llms_py-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {llms_py-2.0.35.dist-info → llms_py-3.0.0.dist-info}/top_level.txt +0 -0
|
Binary file
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { inject, computed } from "vue"
|
|
2
|
+
|
|
3
|
+
const Tools = {
|
|
4
|
+
template: `
|
|
5
|
+
<div class="p-4 md:p-6 max-w-7xl mx-auto w-full">
|
|
6
|
+
<div class="mb-6">
|
|
7
|
+
<h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100">Tools</h1>
|
|
8
|
+
<p class="text-gray-600 dark:text-gray-400 mt-1">
|
|
9
|
+
{{ ($state.tools || []).length }} tools available
|
|
10
|
+
</p>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4">
|
|
14
|
+
<div v-for="tool in (Array.isArray($state.tools) ? $state.tools : []).filter(x => x.function)" :key="tool.function.name"
|
|
15
|
+
class="bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden flex flex-col">
|
|
16
|
+
|
|
17
|
+
<div class="p-4 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50">
|
|
18
|
+
<div class="font-bold text-lg text-gray-900 dark:text-gray-100 font-mono break-all">
|
|
19
|
+
{{ tool.function.name }}
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div class="p-4 flex-1 flex flex-col">
|
|
24
|
+
<p v-if="tool.function.description" class="text-sm text-gray-600 dark:text-gray-300 mb-4 flex-1">
|
|
25
|
+
{{ tool.function.description }}
|
|
26
|
+
</p>
|
|
27
|
+
<p v-else class="text-sm text-gray-400 italic mb-4 flex-1">
|
|
28
|
+
No description provided
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
<div v-if="tool.function.parameters?.properties && Object.keys(tool.function.parameters.properties).length > 0">
|
|
32
|
+
<div class="text-xs font-semibold text-gray-500 uppercase tracking-wider mb-2">Parameters</div>
|
|
33
|
+
<div class="space-y-3">
|
|
34
|
+
<div v-for="(prop, name) in tool.function.parameters.properties" :key="name" class="text-sm bg-gray-50 dark:bg-gray-700/30 rounded p-2">
|
|
35
|
+
<div class="flex flex-wrap items-baseline gap-2 mb-1">
|
|
36
|
+
<span class="font-mono font-medium text-blue-600 dark:text-blue-400">{{ name }}</span>
|
|
37
|
+
<span class="text-gray-500 text-xs">({{ prop.type }})</span>
|
|
38
|
+
<span v-if="tool.function.parameters.required?.includes(name)"
|
|
39
|
+
class="px-1.5 py-0.5 text-[10px] rounded bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 font-medium">
|
|
40
|
+
REQUIRED
|
|
41
|
+
</span>
|
|
42
|
+
</div>
|
|
43
|
+
<div v-if="prop.description" class="text-gray-600 dark:text-gray-400 text-xs">
|
|
44
|
+
{{ prop.description }}
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
<div v-else class="text-sm text-gray-400 italic border-t border-gray-100 dark:border-gray-700 pt-2 mt-auto">
|
|
50
|
+
No parameters
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
`,
|
|
57
|
+
setup() {
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const ToolSelector = {
|
|
63
|
+
template: `
|
|
64
|
+
<div class="px-4 py-2 bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700">
|
|
65
|
+
<div class="flex flex-wrap items-center gap-2 text-sm">
|
|
66
|
+
|
|
67
|
+
<!-- All -->
|
|
68
|
+
<button @click="$ctx.setPrefs({ onlyTools: null })"
|
|
69
|
+
class="px-2.5 py-1 rounded-full text-xs font-medium border transition-colors select-none"
|
|
70
|
+
:class="$prefs.onlyTools == null
|
|
71
|
+
? 'bg-green-100 dark:bg-green-900/40 text-green-800 dark:text-green-300 border-green-200 dark:border-green-800'
|
|
72
|
+
: 'cursor-pointer bg-white dark:bg-gray-800 text-gray-600 dark:border-gray-700 dark:text-gray-400 border-gray-200 dark:hover:border-gray-600 hover:border-gray-300'">
|
|
73
|
+
All
|
|
74
|
+
</button>
|
|
75
|
+
|
|
76
|
+
<!-- None -->
|
|
77
|
+
<button @click="$ctx.setPrefs({ onlyTools:[] })"
|
|
78
|
+
class="px-2.5 py-1 rounded-full text-xs font-medium border transition-colors select-none"
|
|
79
|
+
:class="$prefs.onlyTools?.length === 0
|
|
80
|
+
? 'bg-fuchsia-100 dark:bg-fuchsia-900/40 text-fuchsia-800 dark:text-fuchsia-300 border-fuchsia-200 dark:border-fuchsia-800'
|
|
81
|
+
: 'cursor-pointer bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-400 border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600'">
|
|
82
|
+
None
|
|
83
|
+
</button>
|
|
84
|
+
|
|
85
|
+
<div class="border-l h-4"></div>
|
|
86
|
+
|
|
87
|
+
<!-- Tools -->
|
|
88
|
+
<button v-for="tool in availableTools" :key="tool.function.name" type="button"
|
|
89
|
+
@click="toggleTool(tool.function.name)"
|
|
90
|
+
:title="tool.function.description"
|
|
91
|
+
class="px-2.5 py-1 rounded-full text-xs font-medium border transition-colors select-none"
|
|
92
|
+
:class="isToolActive(tool.function.name)
|
|
93
|
+
? 'bg-blue-100 dark:bg-blue-900/40 text-blue-800 dark:text-blue-300 border-blue-200 dark:border-blue-800'
|
|
94
|
+
: 'bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-400 border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600'">
|
|
95
|
+
{{ tool.function.name }}
|
|
96
|
+
</button>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
`,
|
|
100
|
+
setup() {
|
|
101
|
+
const ctx = inject('ctx')
|
|
102
|
+
|
|
103
|
+
const availableTools = computed(() => (Array.isArray(ctx.state.tools) ? ctx.state.tools : []).filter(x => x.function))
|
|
104
|
+
|
|
105
|
+
function isToolActive(name) {
|
|
106
|
+
const only = ctx.prefs.onlyTools
|
|
107
|
+
if (only == null) return true
|
|
108
|
+
if (Array.isArray(only)) return only.includes(name)
|
|
109
|
+
return false
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function toggleTool(name) {
|
|
113
|
+
let onlyTools = ctx.prefs.onlyTools
|
|
114
|
+
|
|
115
|
+
// If currently 'All', clicking a tool means we enter custom mode with all OTHER tools selected (deselecting clicked)
|
|
116
|
+
if (onlyTools == null) {
|
|
117
|
+
onlyTools = availableTools.value.map(t => t.function.name).filter(t => t !== name)
|
|
118
|
+
} else {
|
|
119
|
+
// Currently Custom or None
|
|
120
|
+
if (onlyTools.includes(name)) {
|
|
121
|
+
onlyTools = onlyTools.filter(t => t !== name)
|
|
122
|
+
} else {
|
|
123
|
+
onlyTools = [...onlyTools, name]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
ctx.setPrefs({ onlyTools })
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
availableTools,
|
|
132
|
+
isToolActive,
|
|
133
|
+
toggleTool
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export default {
|
|
139
|
+
order: 10 - 100,
|
|
140
|
+
|
|
141
|
+
install(ctx) {
|
|
142
|
+
|
|
143
|
+
ctx.components({
|
|
144
|
+
Tools,
|
|
145
|
+
ToolSelector,
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
const svg = (attrs, title) => `<svg ${attrs} xmlns="http://www.w4.org/2000/svg" viewBox="0 0 24 24">${title ? "<title>" + title + "</title>" : ''}<path fill="currentColor" d="M5.33 3.272a3.5 3.5 0 0 1 4.472 4.473L20.647 18.59l-2.122 2.122L7.68 9.867a3.5 3.5 0 0 1-4.472-4.474L5.444 7.63a1.5 1.5 0 0 0 2.121-2.121zm10.367 1.883l3.182-1.768l1.414 1.415l-1.768 3.182l-1.768.353l-2.12 2.121l-1.415-1.414l2.121-2.121zm-7.071 7.778l2.121 2.122l-4.95 4.95A1.5 1.5 0 0 1 3.58 17.99l.097-.107z" /></svg>`
|
|
149
|
+
|
|
150
|
+
ctx.setLeftIcons({
|
|
151
|
+
tools: {
|
|
152
|
+
component: {
|
|
153
|
+
template: svg(`@click="$ctx.togglePath('/tools')"`),
|
|
154
|
+
},
|
|
155
|
+
isActive({ path }) {
|
|
156
|
+
return path === '/tools'
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
ctx.setTopIcons({
|
|
162
|
+
tools: {
|
|
163
|
+
component: {
|
|
164
|
+
template: svg([
|
|
165
|
+
`@click="$ctx.toggleTop('ToolSelector')"`,
|
|
166
|
+
`:class="$prefs.onlyTools == null ? 'text-green-600 dark:text-green-300' : $prefs.onlyTools.length ? 'text-blue-600! dark:text-blue-300!' : ''"`
|
|
167
|
+
].join(' ')),
|
|
168
|
+
// , "{{$prefs.onlyTools == null ? 'Include All Tools' : $prefs.onlyTools.length ? 'Include Selected Tools' : 'All Tools Excluded'}}"
|
|
169
|
+
},
|
|
170
|
+
isActive({ top }) {
|
|
171
|
+
return top === 'ToolSelector'
|
|
172
|
+
},
|
|
173
|
+
get title() {
|
|
174
|
+
return ctx.prefs.onlyTools == null
|
|
175
|
+
? `All Tools Included`
|
|
176
|
+
: ctx.prefs.onlyTools.length
|
|
177
|
+
? `${ctx.prefs.onlyTools.length} ${ctx.utils.pluralize('Tool', ctx.prefs.onlyTools.length)} Included`
|
|
178
|
+
: 'No Tools Included'
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
ctx.chatRequestFilters.push(({ request, thread }) => {
|
|
184
|
+
// Tool Preferences
|
|
185
|
+
const prefs = ctx.prefs
|
|
186
|
+
if (prefs.onlyTools != null) {
|
|
187
|
+
if (Array.isArray(prefs.onlyTools)) {
|
|
188
|
+
request.metadata.tools = prefs.onlyTools.length > 0
|
|
189
|
+
? prefs.onlyTools.join(',')
|
|
190
|
+
: 'none'
|
|
191
|
+
}
|
|
192
|
+
} else {
|
|
193
|
+
request.metadata.tools = 'all'
|
|
194
|
+
}
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
ctx.routes.push({ path: '/tools', component: Tools, meta: { title: 'View Tools' } })
|
|
198
|
+
},
|
|
199
|
+
|
|
200
|
+
async load(ctx) {
|
|
201
|
+
const ext = ctx.scope('tools')
|
|
202
|
+
ctx.state.tools = (await ext.getJson('/')).response || []
|
|
203
|
+
}
|
|
204
|
+
}
|
llms/index.html
CHANGED
|
@@ -1,100 +1,58 @@
|
|
|
1
1
|
<html>
|
|
2
|
+
|
|
2
3
|
<head>
|
|
3
4
|
<title>llms.py</title>
|
|
4
5
|
<link rel="stylesheet" href="/ui/app.css">
|
|
5
6
|
<link rel="stylesheet" href="/ui/typography.css">
|
|
6
7
|
<link rel="icon" type="image/svg" href="/ui/fav.svg">
|
|
7
8
|
<style>
|
|
8
|
-
[type='button'],
|
|
9
|
-
[type='
|
|
9
|
+
[type='button'],
|
|
10
|
+
button[type='submit'] {
|
|
11
|
+
cursor: pointer
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
[type='checkbox'].switch:checked:hover,
|
|
10
15
|
[type='checkbox'].switch:checked:focus,
|
|
11
16
|
[type='checkbox'].switch:checked,
|
|
12
17
|
[type='checkbox'].switch:focus,
|
|
13
|
-
[type='checkbox'].switch
|
|
14
|
-
|
|
15
|
-
border: none;
|
|
18
|
+
[type='checkbox'].switch {
|
|
19
|
+
border: none;
|
|
16
20
|
background: none;
|
|
17
21
|
outline: none;
|
|
18
22
|
box-shadow: none;
|
|
19
23
|
cursor: pointer;
|
|
20
24
|
}
|
|
21
25
|
</style>
|
|
26
|
+
<script type="importmap"></script>
|
|
27
|
+
|
|
22
28
|
</head>
|
|
23
|
-
<script type="importmap">
|
|
24
|
-
{
|
|
25
|
-
"imports": {
|
|
26
|
-
"vue": "/ui/lib/vue.min.mjs",
|
|
27
|
-
"vue-router": "/ui/lib/vue-router.min.mjs",
|
|
28
|
-
"@servicestack/client": "/ui/lib/servicestack-client.mjs",
|
|
29
|
-
"@servicestack/vue": "/ui/lib/servicestack-vue.mjs",
|
|
30
|
-
"idb": "/ui/lib/idb.min.mjs",
|
|
31
|
-
"marked": "/ui/lib/marked.min.mjs",
|
|
32
|
-
"highlight.js": "/ui/lib/highlight.min.mjs",
|
|
33
|
-
"chart.js": "/ui/lib/chart.js",
|
|
34
|
-
"color.js": "/ui/lib/color.js"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
</script>
|
|
38
|
-
<body>
|
|
39
|
-
<div id="app"></div>
|
|
40
|
-
</body>
|
|
41
|
-
<script>
|
|
42
|
-
let colorScheme = location.search === "?dark"
|
|
43
|
-
? "dark"
|
|
44
|
-
: location.search === "?light"
|
|
45
|
-
? "light"
|
|
46
|
-
: localStorage.getItem('color-scheme')
|
|
47
|
-
let darkMode = colorScheme != null
|
|
48
|
-
? colorScheme === 'dark'
|
|
49
|
-
: window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
50
|
-
let html = document.documentElement
|
|
51
|
-
html.classList.toggle('dark', darkMode)
|
|
52
|
-
html.style.setProperty('color-scheme', darkMode ? 'dark' : null)
|
|
53
|
-
if (localStorage.getItem('color-scheme') === null) {
|
|
54
|
-
localStorage.setItem('color-scheme', darkMode ? 'dark' : 'light')
|
|
55
|
-
}
|
|
56
|
-
</script>
|
|
57
|
-
<script type="module">
|
|
58
|
-
import { createApp, defineAsyncComponent } from 'vue'
|
|
59
|
-
import { createWebHistory, createRouter } from "vue-router"
|
|
60
|
-
import ServiceStackVue from "@servicestack/vue"
|
|
61
|
-
import App from '/ui/App.mjs'
|
|
62
|
-
import ai from '/ui/ai.mjs'
|
|
63
|
-
import SettingsDialog from '/ui/SettingsDialog.mjs'
|
|
64
29
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const RecentsComponent = defineAsyncComponent(() => import(ai.base + '/ui/Recents.mjs'))
|
|
68
|
-
const AnalyticsComponent = defineAsyncComponent(() => import(ai.base + '/ui/Analytics.mjs'))
|
|
30
|
+
<body>
|
|
31
|
+
<div id="app"></div>
|
|
69
32
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
33
|
+
<script>
|
|
34
|
+
let colorScheme = location.search === "?dark"
|
|
35
|
+
? "dark"
|
|
36
|
+
: location.search === "?light"
|
|
37
|
+
? "light"
|
|
38
|
+
: localStorage.getItem('color-scheme')
|
|
39
|
+
let darkMode = colorScheme != null
|
|
40
|
+
? colorScheme === 'dark'
|
|
41
|
+
: window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
42
|
+
let html = document.documentElement
|
|
43
|
+
html.classList.toggle('dark', darkMode)
|
|
44
|
+
html.style.setProperty('color-scheme', darkMode ? 'dark' : null)
|
|
45
|
+
if (localStorage.getItem('color-scheme') === null) {
|
|
46
|
+
localStorage.setItem('color-scheme', darkMode ? 'dark' : 'light')
|
|
47
|
+
}
|
|
48
|
+
</script>
|
|
49
|
+
<script type="module">
|
|
50
|
+
import { createContext } from '/ui/index.mjs'
|
|
73
51
|
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
{ path: '/recents', component: RecentsComponent },
|
|
78
|
-
{ path: '/analytics', component: AnalyticsComponent },
|
|
79
|
-
{ path: '/:fallback(.*)*', component: MainComponent }
|
|
80
|
-
]
|
|
81
|
-
routes.forEach(r => r.path = ai.base + r.path)
|
|
82
|
-
const router = createRouter({
|
|
83
|
-
history: createWebHistory(),
|
|
84
|
-
routes,
|
|
85
|
-
})
|
|
86
|
-
const app = createApp(App, { config, models })
|
|
87
|
-
app.use(router)
|
|
88
|
-
app.use(ServiceStackVue)
|
|
89
|
-
app.provide('ai', ai)
|
|
90
|
-
app.provide('config', config)
|
|
91
|
-
app.provide('models', models)
|
|
92
|
-
Object.keys(Components).forEach(name => {
|
|
93
|
-
app.component(name, Components[name])
|
|
94
|
-
})
|
|
52
|
+
const context = await createContext()
|
|
53
|
+
context.app.mount('#app')
|
|
54
|
+
</script>
|
|
95
55
|
|
|
96
|
-
|
|
56
|
+
</body>
|
|
97
57
|
|
|
98
|
-
app.mount('#app')
|
|
99
|
-
</script>
|
|
100
58
|
</html>
|