llms-py 3.0.0b9__py3-none-any.whl → 3.0.1__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/extensions/app/README.md +20 -0
- llms/extensions/app/__init__.py +16 -15
- llms/extensions/app/db.py +7 -6
- llms/extensions/app/ui/index.mjs +1 -1
- llms/extensions/app/ui/threadStore.mjs +21 -17
- llms/extensions/core_tools/CALCULATOR.md +32 -0
- llms/extensions/core_tools/__init__.py +1 -1
- llms/extensions/core_tools/ui/index.mjs +4 -4
- llms/extensions/gallery/README.md +61 -0
- llms/extensions/gallery/ui/index.mjs +1 -0
- llms/extensions/katex/README.md +39 -0
- llms/extensions/system_prompts/README.md +22 -0
- llms/extensions/system_prompts/ui/index.mjs +21 -26
- llms/extensions/system_prompts/ui/prompts.json +5 -5
- llms/llms.json +9 -12
- llms/main.py +25 -5
- llms/providers.json +1 -1
- llms/ui/ai.mjs +20 -5
- llms/ui/ctx.mjs +25 -1
- llms/ui/modules/chat/ChatBody.mjs +43 -27
- llms/ui/modules/chat/index.mjs +17 -29
- {llms_py-3.0.0b9.dist-info → llms_py-3.0.1.dist-info}/METADATA +1 -1
- {llms_py-3.0.0b9.dist-info → llms_py-3.0.1.dist-info}/RECORD +27 -53
- 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/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/requests.json +0 -9073
- llms/extensions/app/threads.json +0 -15290
- llms/extensions/core_tools/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/core_tools/ui/codemirror/lib/codemirror.css +0 -344
- llms/extensions/core_tools/ui/codemirror/lib/codemirror.js +0 -9884
- llms/extensions/gallery/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/gallery/__pycache__/db.cpython-314.pyc +0 -0
- llms/extensions/katex/__pycache__/__init__.cpython-314.pyc +0 -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/system_prompts/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/extensions/tools/__pycache__/__init__.cpython-314.pyc +0 -0
- llms/ui/modules/chat/HomeTools.mjs +0 -12
- {llms_py-3.0.0b9.dist-info → llms_py-3.0.1.dist-info}/WHEEL +0 -0
- {llms_py-3.0.0b9.dist-info → llms_py-3.0.1.dist-info}/entry_points.txt +0 -0
- {llms_py-3.0.0b9.dist-info → llms_py-3.0.1.dist-info}/licenses/LICENSE +0 -0
- {llms_py-3.0.0b9.dist-info → llms_py-3.0.1.dist-info}/top_level.txt +0 -0
llms/ui/ai.mjs
CHANGED
|
@@ -6,7 +6,7 @@ const headers = { 'Accept': 'application/json' }
|
|
|
6
6
|
const prefsKey = 'llms.prefs'
|
|
7
7
|
|
|
8
8
|
export const o = {
|
|
9
|
-
version: '3.0.
|
|
9
|
+
version: '3.0.1',
|
|
10
10
|
base,
|
|
11
11
|
prefsKey,
|
|
12
12
|
welcome: 'Welcome to llms.py',
|
|
@@ -74,12 +74,27 @@ export const o = {
|
|
|
74
74
|
return { responseStatus }
|
|
75
75
|
}
|
|
76
76
|
},
|
|
77
|
+
createErrorStatus({ message, errorCode, stackTrace, errors, meta }) {
|
|
78
|
+
const ret = {
|
|
79
|
+
errorCode: errorCode || 'Error',
|
|
80
|
+
message: message,
|
|
81
|
+
}
|
|
82
|
+
if (stackTrace) {
|
|
83
|
+
ret.stackTrace = stackTrace
|
|
84
|
+
}
|
|
85
|
+
if (errors && Array.isArray(errors)) {
|
|
86
|
+
ret.errors = errors
|
|
87
|
+
}
|
|
88
|
+
if (meta) {
|
|
89
|
+
ret.meta = meta
|
|
90
|
+
}
|
|
91
|
+
return ret
|
|
92
|
+
},
|
|
77
93
|
createErrorResult(e) {
|
|
78
94
|
return new ApiResult({
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
message: `${e.message ?? e}`
|
|
82
|
-
}
|
|
95
|
+
error: e.errorCode
|
|
96
|
+
? this.createErrorStatus(e)
|
|
97
|
+
: this.createErrorStatus({ message: `${e.message ?? e}` })
|
|
83
98
|
})
|
|
84
99
|
},
|
|
85
100
|
async getConfig() {
|
llms/ui/ctx.mjs
CHANGED
|
@@ -22,6 +22,9 @@ export class ExtensionScope {
|
|
|
22
22
|
savePrefs() {
|
|
23
23
|
storageObject(this.storageKey, this.prefs)
|
|
24
24
|
}
|
|
25
|
+
setState(o) {
|
|
26
|
+
Object.assign(this.state, o)
|
|
27
|
+
}
|
|
25
28
|
get(url, options) {
|
|
26
29
|
return this.ctx.ai.get(combinePaths(this.baseUrl, url), options)
|
|
27
30
|
}
|
|
@@ -43,6 +46,18 @@ export class ExtensionScope {
|
|
|
43
46
|
post(url, options) {
|
|
44
47
|
return this.ctx.ai.post(combinePaths(this.baseUrl, url), options)
|
|
45
48
|
}
|
|
49
|
+
put(url, options) {
|
|
50
|
+
return this.ctx.ai.post(combinePaths(this.baseUrl, url), {
|
|
51
|
+
...options,
|
|
52
|
+
method: 'PUT'
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
patch(url, options) {
|
|
56
|
+
return this.ctx.ai.post(combinePaths(this.baseUrl, url), {
|
|
57
|
+
...options,
|
|
58
|
+
method: 'PATCH'
|
|
59
|
+
})
|
|
60
|
+
}
|
|
46
61
|
async postForm(url, options) {
|
|
47
62
|
return await this.ctx.ai.postForm(combinePaths(this.baseUrl, url), options)
|
|
48
63
|
}
|
|
@@ -66,6 +81,9 @@ export class ExtensionScope {
|
|
|
66
81
|
async createJsonResult(res) {
|
|
67
82
|
return this.ctx.ai.createJsonResult(res)
|
|
68
83
|
}
|
|
84
|
+
createErrorStatus(status) {
|
|
85
|
+
return this.ctx.ai.createErrorStatus(status)
|
|
86
|
+
}
|
|
69
87
|
createErrorResult(e) {
|
|
70
88
|
return this.ctx.ai.createErrorResult(e)
|
|
71
89
|
}
|
|
@@ -217,7 +235,6 @@ export class AppContext {
|
|
|
217
235
|
}
|
|
218
236
|
setState(o) {
|
|
219
237
|
Object.assign(this.state, o)
|
|
220
|
-
//this.events.publish('update:state', this.state)
|
|
221
238
|
}
|
|
222
239
|
setLayout(o) {
|
|
223
240
|
Object.assign(this.layout, o)
|
|
@@ -263,6 +280,12 @@ export class AppContext {
|
|
|
263
280
|
return toggle
|
|
264
281
|
}
|
|
265
282
|
|
|
283
|
+
createErrorStatus(status) {
|
|
284
|
+
return this.ai.createErrorStatus(status)
|
|
285
|
+
}
|
|
286
|
+
createErrorResult(e) {
|
|
287
|
+
return this.ai.createErrorResult(e)
|
|
288
|
+
}
|
|
266
289
|
setError(error, msg = null) {
|
|
267
290
|
this.state.error = error
|
|
268
291
|
if (error) {
|
|
@@ -331,6 +354,7 @@ export class AppContext {
|
|
|
331
354
|
if (Array.isArray(content)) {
|
|
332
355
|
content = content.filter(c => c.type === 'text').map(c => c.text).join('\n')
|
|
333
356
|
}
|
|
357
|
+
// Handled by katex
|
|
334
358
|
// if (content) {
|
|
335
359
|
// content = content
|
|
336
360
|
// .replaceAll(`\\[ \\boxed{`, '\n<span class="inline-block text-xl text-blue-500 bg-blue-50 dark:text-blue-400 dark:bg-blue-950 px-3 py-1 rounded">')
|
|
@@ -20,9 +20,50 @@ const MessageUsage = {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
const MessageReasoning = {
|
|
24
|
+
template: `
|
|
25
|
+
<div class="mt-2 mb-2">
|
|
26
|
+
<button type="button" @click="toggleReasoning(message.id)" class="text-xs text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 flex items-center space-x-1">
|
|
27
|
+
<svg class="w-3 h-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" :class="isReasoningExpanded(message.id) ? 'transform rotate-90' : ''"><path fill="currentColor" d="M7 5l6 5l-6 5z"/></svg>
|
|
28
|
+
<span>{{ isReasoningExpanded(message.id) ? 'Hide reasoning' : 'Show reasoning' }}</span>
|
|
29
|
+
</button>
|
|
30
|
+
<div v-if="isReasoningExpanded(message.id)" class="reasoning mt-2 rounded-lg border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900 p-2">
|
|
31
|
+
<div v-if="typeof reasoning === 'string'" v-html="$fmt.markdown(reasoning)" class="prose prose-xs max-w-none dark:prose-invert"></div>
|
|
32
|
+
<pre v-else class="text-xs whitespace-pre-wrap overflow-x-auto">{{ formatReasoning(reasoning) }}</pre>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
`,
|
|
36
|
+
props: {
|
|
37
|
+
reasoning: String,
|
|
38
|
+
message: Object,
|
|
39
|
+
},
|
|
40
|
+
setup(props) {
|
|
41
|
+
const expandedReasoning = ref(new Set())
|
|
42
|
+
const isReasoningExpanded = (id) => expandedReasoning.value.has(id)
|
|
43
|
+
const toggleReasoning = (id) => {
|
|
44
|
+
const s = new Set(expandedReasoning.value)
|
|
45
|
+
if (s.has(id)) {
|
|
46
|
+
s.delete(id)
|
|
47
|
+
} else {
|
|
48
|
+
s.add(id)
|
|
49
|
+
}
|
|
50
|
+
expandedReasoning.value = s
|
|
51
|
+
}
|
|
52
|
+
const formatReasoning = (r) => typeof r === 'string' ? r : JSON.stringify(r, null, 2)
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
expandedReasoning,
|
|
56
|
+
isReasoningExpanded,
|
|
57
|
+
toggleReasoning,
|
|
58
|
+
formatReasoning,
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
23
63
|
export default {
|
|
24
64
|
components: {
|
|
25
65
|
MessageUsage,
|
|
66
|
+
MessageReasoning,
|
|
26
67
|
},
|
|
27
68
|
template: `
|
|
28
69
|
<div class="flex flex-col h-full">
|
|
@@ -110,16 +151,8 @@ export default {
|
|
|
110
151
|
></div>
|
|
111
152
|
|
|
112
153
|
<!-- Collapsible reasoning section -->
|
|
113
|
-
<
|
|
114
|
-
|
|
115
|
-
<svg class="w-3 h-3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" :class="isReasoningExpanded(message.id) ? 'transform rotate-90' : ''"><path fill="currentColor" d="M7 5l6 5l-6 5z"/></svg>
|
|
116
|
-
<span>{{ isReasoningExpanded(message.id) ? 'Hide reasoning' : 'Show reasoning' }}</span>
|
|
117
|
-
</button>
|
|
118
|
-
<div v-if="isReasoningExpanded(message.id)" class="reasoning mt-2 rounded-lg border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900 p-2">
|
|
119
|
-
<div v-if="typeof message.reasoning === 'string'" v-html="$fmt.markdown(message.reasoning)" class="prose prose-xs max-w-none dark:prose-invert"></div>
|
|
120
|
-
<pre v-else class="text-xs whitespace-pre-wrap overflow-x-auto">{{ formatReasoning(message.reasoning) }}</pre>
|
|
121
|
-
</div>
|
|
122
|
-
</div>
|
|
154
|
+
<MessageReasoning v-if="message.role === 'assistant' && (message.reasoning || message.thinking || message.reasoning_content)"
|
|
155
|
+
:reasoning="message.reasoning || message.thinking || message.reasoning_content" :message="message" />
|
|
123
156
|
|
|
124
157
|
<!-- Tool Calls & Outputs -->
|
|
125
158
|
<div v-if="message.tool_calls && message.tool_calls.length > 0" class="mb-3 space-y-4">
|
|
@@ -435,20 +468,6 @@ export default {
|
|
|
435
468
|
}
|
|
436
469
|
}
|
|
437
470
|
|
|
438
|
-
// Reasoning collapse state and helpers
|
|
439
|
-
const expandedReasoning = ref(new Set())
|
|
440
|
-
const isReasoningExpanded = (id) => expandedReasoning.value.has(id)
|
|
441
|
-
const toggleReasoning = (id) => {
|
|
442
|
-
const s = new Set(expandedReasoning.value)
|
|
443
|
-
if (s.has(id)) {
|
|
444
|
-
s.delete(id)
|
|
445
|
-
} else {
|
|
446
|
-
s.add(id)
|
|
447
|
-
}
|
|
448
|
-
expandedReasoning.value = s
|
|
449
|
-
}
|
|
450
|
-
const formatReasoning = (r) => typeof r === 'string' ? r : JSON.stringify(r, null, 2)
|
|
451
|
-
|
|
452
471
|
const copyMessageContent = async (message) => {
|
|
453
472
|
let content = ''
|
|
454
473
|
if (Array.isArray(message.content)) {
|
|
@@ -651,9 +670,6 @@ export default {
|
|
|
651
670
|
selectedModelObj,
|
|
652
671
|
messagesContainer,
|
|
653
672
|
copying,
|
|
654
|
-
isReasoningExpanded,
|
|
655
|
-
toggleReasoning,
|
|
656
|
-
formatReasoning,
|
|
657
673
|
copyMessageContent,
|
|
658
674
|
redoMessage,
|
|
659
675
|
editMessage,
|
llms/ui/modules/chat/index.mjs
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
import { ref,
|
|
3
|
-
import { useRouter } from 'vue-router'
|
|
2
|
+
import { ref, watch, nextTick, inject } from 'vue'
|
|
4
3
|
import { $$, createElement, lastRightPart, ApiResult, createErrorStatus, pick } from "@servicestack/client"
|
|
5
4
|
import SettingsDialog, { useSettings } from './SettingsDialog.mjs'
|
|
6
5
|
import ChatBody from './ChatBody.mjs'
|
|
7
|
-
import HomeTools from './HomeTools.mjs'
|
|
8
6
|
import { AppContext } from '../../ctx.mjs'
|
|
9
7
|
|
|
10
8
|
const imageExts = 'png,webp,jpg,jpeg,gif,bmp,svg,tiff,ico'.split(',')
|
|
@@ -238,7 +236,7 @@ export function useChatPrompt(ctx) {
|
|
|
238
236
|
return request
|
|
239
237
|
}
|
|
240
238
|
|
|
241
|
-
async function completion({ request,
|
|
239
|
+
async function completion({ request, thread, model, controller, redirect }) {
|
|
242
240
|
try {
|
|
243
241
|
let error
|
|
244
242
|
if (!model) {
|
|
@@ -250,20 +248,18 @@ export function useChatPrompt(ctx) {
|
|
|
250
248
|
}
|
|
251
249
|
|
|
252
250
|
if (!model) {
|
|
253
|
-
return
|
|
254
|
-
error: createErrorStatus(`Model ${request.model || ''} not found`, 'NotFound')
|
|
255
|
-
})
|
|
251
|
+
return ctx.createErrorResult({ message: `Model ${request.model || ''} not found`, errorCode: 'NotFound' })
|
|
256
252
|
}
|
|
257
253
|
|
|
258
254
|
if (!request.messages) request.messages = []
|
|
259
255
|
if (!request.metadata) request.metadata = {}
|
|
260
256
|
|
|
261
|
-
if (
|
|
257
|
+
if (!thread) {
|
|
262
258
|
const title = getTextContent(request) || 'New Chat'
|
|
263
|
-
thread = await ctx.threads.startNewThread({ title, model })
|
|
259
|
+
thread = await ctx.threads.startNewThread({ title, model, redirect })
|
|
264
260
|
}
|
|
265
261
|
|
|
266
|
-
const threadId = thread?.id
|
|
262
|
+
const threadId = thread?.id
|
|
267
263
|
|
|
268
264
|
const ctxRequest = {
|
|
269
265
|
request,
|
|
@@ -282,7 +278,7 @@ export function useChatPrompt(ctx) {
|
|
|
282
278
|
|
|
283
279
|
let response = null
|
|
284
280
|
if (!res.ok) {
|
|
285
|
-
error = createErrorStatus(
|
|
281
|
+
error = ctx.createErrorStatus({ message: `HTTP ${res.status} ${res.statusText}` })
|
|
286
282
|
let errorBody = null
|
|
287
283
|
try {
|
|
288
284
|
errorBody = await res.text()
|
|
@@ -338,22 +334,6 @@ export function useChatPrompt(ctx) {
|
|
|
338
334
|
}
|
|
339
335
|
}
|
|
340
336
|
|
|
341
|
-
// Add assistant response (save entire message including reasoning)
|
|
342
|
-
const assistantMessage = response.choices?.[0]?.message
|
|
343
|
-
|
|
344
|
-
const usage = response.usage
|
|
345
|
-
if (usage) {
|
|
346
|
-
if (response.metadata?.pricing) {
|
|
347
|
-
const [input, output] = response.metadata.pricing.split('/')
|
|
348
|
-
usage.duration = response.metadata.duration ?? (Date.now() - startTime)
|
|
349
|
-
usage.input = input
|
|
350
|
-
usage.output = output
|
|
351
|
-
usage.tokens = usage.completion_tokens
|
|
352
|
-
usage.price = usage.output
|
|
353
|
-
usage.cost = ctx.fmt.tokenCost(usage.prompt_tokens / 1_000_000 * parseFloat(input) + usage.completion_tokens / 1_000_000 * parseFloat(output))
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
|
|
357
337
|
nextTick(addCopyButtons)
|
|
358
338
|
|
|
359
339
|
return new ApiResult({ response })
|
|
@@ -666,7 +646,7 @@ const ChatPrompt = {
|
|
|
666
646
|
|
|
667
647
|
// Create thread if none exists
|
|
668
648
|
if (!ctx.threads.currentThread.value) {
|
|
669
|
-
thread = await ctx.threads.startNewThread({ model: props.model })
|
|
649
|
+
thread = await ctx.threads.startNewThread({ model: props.model, redirect: true })
|
|
670
650
|
} else {
|
|
671
651
|
thread = ctx.threads.currentThread.value
|
|
672
652
|
}
|
|
@@ -740,7 +720,7 @@ const ChatPrompt = {
|
|
|
740
720
|
console.debug(`thread title is '${thread.title}'`, request.title)
|
|
741
721
|
}
|
|
742
722
|
|
|
743
|
-
const api = await ctx.threads.queueChat(
|
|
723
|
+
const api = await ctx.threads.queueChat({ request, thread })
|
|
744
724
|
if (api.response) {
|
|
745
725
|
// success
|
|
746
726
|
ctx.chat.editingMessage.value = null
|
|
@@ -794,6 +774,14 @@ const ChatPrompt = {
|
|
|
794
774
|
}
|
|
795
775
|
}
|
|
796
776
|
|
|
777
|
+
const HomeTools = {
|
|
778
|
+
template: `
|
|
779
|
+
<div class="mt-4 flex space-x-3 justify-center items-center">
|
|
780
|
+
<DarkModeToggle />
|
|
781
|
+
</div>
|
|
782
|
+
`,
|
|
783
|
+
}
|
|
784
|
+
|
|
797
785
|
export default {
|
|
798
786
|
/**@param {AppContext} ctx */
|
|
799
787
|
install(ctx) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: llms-py
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.1
|
|
4
4
|
Summary: A lightweight CLI tool and OpenAI-compatible server for querying multiple Large Language Model (LLM) providers
|
|
5
5
|
Home-page: https://github.com/ServiceStack/llms
|
|
6
6
|
Author: ServiceStack
|
|
@@ -1,35 +1,21 @@
|
|
|
1
1
|
llms/__init__.py,sha256=DKwTZDsyYL_wHe7yvLw49Nf8PSgPSyWaeVdotUqSvrQ,84
|
|
2
2
|
llms/__main__.py,sha256=hrBulHIt3lmPm1BCyAEVtB6DQ0Hvc3gnIddhHCmJasg,151
|
|
3
3
|
llms/index.html,sha256=nGk1Djtn9p7l6LuKp4Kg0JIB9fCzxtTWXFfmDb4ggpc,1658
|
|
4
|
-
llms/llms.json,sha256=
|
|
5
|
-
llms/main.py,sha256=
|
|
4
|
+
llms/llms.json,sha256=sgHUcE6iu-MOIoEbs8ZOH1O07ziXP58UUGnEILeeAxg,11086
|
|
5
|
+
llms/main.py,sha256=G08w-96rZ4Y9hXA0Kwsgg86XeoKICC34JmMtAJs-fvg,154259
|
|
6
6
|
llms/providers-extra.json,sha256=w7_5gB0YUPK0PJNeViM7vRDfNGChXUKMHfGHenVxEkM,10165
|
|
7
|
-
llms/providers.json,sha256=
|
|
8
|
-
llms/__pycache__/__init__.cpython-312.pyc,sha256=lg2oFc0aKgj536NOJxcIpbCpEWi47ptF8NufPphgUUk,204
|
|
9
|
-
llms/__pycache__/__init__.cpython-313.pyc,sha256=DvmykIYAjV4Xjv5NeC70BA0JIX8qtwEWP2dfzmOBrps,173
|
|
10
|
-
llms/__pycache__/__init__.cpython-314.pyc,sha256=9CxeBz41D_-ezno6pIOsnoMAFzdRX2uZjKkBLUm25RQ,206
|
|
11
|
-
llms/__pycache__/__main__.cpython-312.pyc,sha256=fcu9LVl5nfdSzg9HqoKyDGoDvENeIXKkjygN7FENEGE,321
|
|
12
|
-
llms/__pycache__/__main__.cpython-314.pyc,sha256=IFxtGVpJq_3whKuM5Ln7YMweKFNbHVp8M7VSrLK5h2A,324
|
|
13
|
-
llms/__pycache__/llms.cpython-312.pyc,sha256=S5dFI79JdUe2dQW4ogdB-CCNhudQeFaFGcfKxgJGBms,72080
|
|
14
|
-
llms/__pycache__/main.cpython-312.pyc,sha256=HrqApYAiiBmYN73HIx_Hl2-Xm1Gy7I_0zuR5j86qoRM,104940
|
|
15
|
-
llms/__pycache__/main.cpython-313.pyc,sha256=6NQ__SJ2rC9ItFLKLHL5ewb5RqxLzZabwgczA9wZd-w,74814
|
|
16
|
-
llms/__pycache__/main.cpython-314.pyc,sha256=f-kRvP_ai0SidMk2j9L3JgvjvxLLrRcy1OoKH2PToWY,198508
|
|
17
|
-
llms/__pycache__/plugins.cpython-314.pyc,sha256=fer8nTkidG_vQSx80tL2bAvMS0opDom93bewjseFcyg,3560
|
|
7
|
+
llms/providers.json,sha256=5pxk0HRgyKQkW_EmA9LjSC3zqNfVo0h-qYg--i0Fy1Y,283185
|
|
18
8
|
llms/extensions/analytics/ui/index.mjs,sha256=cr9dPmEJjha2xX6A_7xbJxkOolWFP1p6TgIoO8M8juI,69540
|
|
19
|
-
llms/extensions/app/
|
|
20
|
-
llms/extensions/app/
|
|
9
|
+
llms/extensions/app/README.md,sha256=TKoblZpHlheLCh_dfXOxqTc5OvxlgMBa-vKo8Hqb2gg,1370
|
|
10
|
+
llms/extensions/app/__init__.py,sha256=D8D0IymnaVaI-znD4B6zO7HS8M_M0h1Bj2lTEGr5Qdk,18750
|
|
11
|
+
llms/extensions/app/db.py,sha256=n_K0dYqXUeaX1DQnPeixCZBrKMvjnz867MtjeBIxmv4,24188
|
|
21
12
|
llms/extensions/app/db_manager.py,sha256=NcdOK_FzEmzCYEoQjdivZTrgJdFf9dGlAelJvP4VecA,7046
|
|
22
|
-
llms/extensions/app/requests.json,sha256=xMQ_FgMaBxbrCcTnsdkaBvufy40yFT7U1kR6nn_GaNE,264556
|
|
23
|
-
llms/extensions/app/threads.json,sha256=f_xPjkmY2OGbGnSXxVTcSGKRU-2rvfAXnHbf2pH1K5Q,741352
|
|
24
|
-
llms/extensions/app/__pycache__/__init__.cpython-314.pyc,sha256=xpU2rCIqsC19tihBMJcd41FTMq08Hhr3fTtuLwknMn0,26695
|
|
25
|
-
llms/extensions/app/__pycache__/db.cpython-314.pyc,sha256=RPDnz59j1I1AXWanfQvKpe5x5NeITTCVKj_AC5HDJjc,35533
|
|
26
|
-
llms/extensions/app/__pycache__/db_manager.cpython-314.pyc,sha256=mS-NkAbnGYTDQfsKXZufkI9LnOBSWD5fYNMqTVjQrnE,11071
|
|
27
13
|
llms/extensions/app/ui/Recents.mjs,sha256=HT9R2IEus3dGEqtKPGrgX1eMp4EQ2j2jLwv-Fn1Us5E,9253
|
|
28
|
-
llms/extensions/app/ui/index.mjs,sha256=
|
|
29
|
-
llms/extensions/app/ui/threadStore.mjs,sha256=
|
|
30
|
-
llms/extensions/core_tools/
|
|
31
|
-
llms/extensions/core_tools/
|
|
32
|
-
llms/extensions/core_tools/ui/index.mjs,sha256=
|
|
14
|
+
llms/extensions/app/ui/index.mjs,sha256=sB9176LLNuKFsZ28yL-tROA6J4xePNtvxtSrzFcinRo,13271
|
|
15
|
+
llms/extensions/app/ui/threadStore.mjs,sha256=oCPPegkG3QHZIB82jwSCZ4d9dWEyhn1z1_Zo2dho4Bg,11588
|
|
16
|
+
llms/extensions/core_tools/CALCULATOR.md,sha256=pJRtCVF01BgxFrSNh2Ys_lrRi3SFwLgJzAX93AGh93Q,1944
|
|
17
|
+
llms/extensions/core_tools/__init__.py,sha256=S9Pr08RtZtVpx8v6hyG_qVhfEJbT2JvmAD-AJTQZWmU,21468
|
|
18
|
+
llms/extensions/core_tools/ui/index.mjs,sha256=KycJ2FcQ6BieBY7fjWGxVBGHN6WuFx712OFrO6flXww,31770
|
|
33
19
|
llms/extensions/core_tools/ui/codemirror/addon/edit/closebrackets.js,sha256=FDwwFMKSVPNTHMML5tkCBQhLz8Ns_6b5sqRv1CpAviA,7123
|
|
34
20
|
llms/extensions/core_tools/ui/codemirror/addon/edit/closetag.js,sha256=b74rk8wXRNnhStHWE0SffhbfTCqihC9ljvwXq_Zi-FA,8544
|
|
35
21
|
llms/extensions/core_tools/ui/codemirror/addon/edit/continuelist.js,sha256=a6nNlSi3Tn929LnOntBne_7XBX0areAFAYU2jP0OouM,3989
|
|
@@ -41,8 +27,6 @@ llms/extensions/core_tools/ui/codemirror/addon/selection/mark-selection.js,sha25
|
|
|
41
27
|
llms/extensions/core_tools/ui/codemirror/addon/selection/selection-pointer.js,sha256=_df_U9DKeWxeN5LOtQY8hNBzW8rxmKHAbHiIDxxmSiI,3295
|
|
42
28
|
llms/extensions/core_tools/ui/codemirror/doc/docs.css,sha256=apFfZ7aIURmhMA5bPWqPasrUeNQQbyIj3RQ8A5cwV94,3315
|
|
43
29
|
llms/extensions/core_tools/ui/codemirror/doc/source_sans.woff,sha256=4ppXym_xSqFSK1sYxUPXogFs3Xu6YyHWBN-jUZ8Osec,29448
|
|
44
|
-
llms/extensions/core_tools/ui/codemirror/lib/codemirror.css,sha256=60lOqXLSZh74b39qxlbdZ4bXIeScnBtG4euWfktvm_M,8720
|
|
45
|
-
llms/extensions/core_tools/ui/codemirror/lib/codemirror.js,sha256=7cA89SlK249o7tVfiEWIiqDEA6ZEWxX4CoZmofVA14s,402008
|
|
46
30
|
llms/extensions/core_tools/ui/codemirror/mode/clike/clike.js,sha256=BYoKZKIGseTbzBmm_6QBWoS7a_4T0LqFdovhHe9bTtI,37362
|
|
47
31
|
llms/extensions/core_tools/ui/codemirror/mode/javascript/index.html,sha256=K5xIggY1lgSYrcM9UhLcniq6G5zM_4Jl29cb_1YvHFQ,4668
|
|
48
32
|
llms/extensions/core_tools/ui/codemirror/mode/javascript/javascript.js,sha256=9do6jQ3GPCXs0-d8rPV89EMd8Lq_WU_TsZwrHT4imic,40636
|
|
@@ -50,13 +34,12 @@ llms/extensions/core_tools/ui/codemirror/mode/javascript/typescript.html,sha256=
|
|
|
50
34
|
llms/extensions/core_tools/ui/codemirror/mode/python/python.js,sha256=GaWco4et2wTpUALJrb4rjCMUJ85JNprFNxB-MIimlHw,14984
|
|
51
35
|
llms/extensions/core_tools/ui/codemirror/theme/dracula.css,sha256=Av32BJYI3djQ189kA7blslEzB0Dfw5N3T2i7ZHJ7PG4,2042
|
|
52
36
|
llms/extensions/core_tools/ui/codemirror/theme/mocha.css,sha256=0Y1y9DUgzBSakbXep55HuqOYiPMC-YK3xjVQBiwUQ4g,2402
|
|
37
|
+
llms/extensions/gallery/README.md,sha256=zif27qiMef1dBboMEPvTJqPDnLvrqntraVSw8oQ-1RM,2985
|
|
53
38
|
llms/extensions/gallery/__init__.py,sha256=6YrgWsrfQXviFsJETFJxDlaEf0DAaPPBzokPxeK6AvU,1583
|
|
54
39
|
llms/extensions/gallery/db.py,sha256=hMsy0NMSKudA4HPUMvffMhXhOmqgVD31Ej_UmPrlbEg,11436
|
|
55
|
-
llms/extensions/gallery/
|
|
56
|
-
llms/extensions/
|
|
57
|
-
llms/extensions/gallery/ui/index.mjs,sha256=Vfnqs1UJffnWEBuy1BoklsNXKgtcIVoNtDy7cVpS78M,28281
|
|
40
|
+
llms/extensions/gallery/ui/index.mjs,sha256=1kPvtavUie0KtXCw3YjJpokJyl9zixAoEkcDfSYSfVk,28313
|
|
41
|
+
llms/extensions/katex/README.md,sha256=fD_0riNXrKW0SfehifIc3jnXKg9diQdlXVq5X_e1zTc,1473
|
|
58
42
|
llms/extensions/katex/__init__.py,sha256=CvEe9CPtzoANc4AFuxZTbrJZdggoWLuKnENKfEdncPQ,206
|
|
59
|
-
llms/extensions/katex/__pycache__/__init__.cpython-314.pyc,sha256=0oIxzaTcTIWR7KuMF_Wkpj-nlxJjVKKv021xXb74hPk,594
|
|
60
43
|
llms/extensions/katex/ui/README.md,sha256=Xkjgncuvv4WT4TzNX4muWHYKJOwZ-kSpNnyveLlJDNU,7268
|
|
61
44
|
llms/extensions/katex/ui/index.mjs,sha256=K54EGfcnQwvqmPiJAMgNplnq1t9AaCHsXvTcVBdbl_4,2829
|
|
62
45
|
llms/extensions/katex/ui/katex-swap.css,sha256=TFnBXg_P8omwxMkHbFFw7jRpnB11EGzV-z2NdUVi_x4,31769
|
|
@@ -149,24 +132,16 @@ llms/extensions/providers/google.py,sha256=khH8F9uQueHdqMdMx9SvnD1AbBUp_KSZBVwH1
|
|
|
149
132
|
llms/extensions/providers/nvidia.py,sha256=AokVo18QBqB9xAbIWkcum4SefrwHflhtoIxGWuBycIM,4366
|
|
150
133
|
llms/extensions/providers/openai.py,sha256=qC5o-On3enNS_zSNNfGNHzDa0-Ca50Moz-7kilxd0q0,6234
|
|
151
134
|
llms/extensions/providers/openrouter.py,sha256=gVUIa1DhbrEG7S8_-Qkxa0kdtHT8Doj3El0DO-q_tcQ,3253
|
|
152
|
-
llms/extensions/
|
|
153
|
-
llms/extensions/providers/__pycache__/anthropic.cpython-314.pyc,sha256=93ULyorNB8bBHRGOu-38HXy4BnkuDKJkOm_Vo6PP62g,10933
|
|
154
|
-
llms/extensions/providers/__pycache__/chutes.cpython-314.pyc,sha256=QH2fiGb6VueqWNjN0RwizVpPOeqdN78s2rp_WoR0DrA,7367
|
|
155
|
-
llms/extensions/providers/__pycache__/google.cpython-314.pyc,sha256=STxidyM6xp0vwkCLO29wDTIw1jXluDBIB4KLNKf4c14,17473
|
|
156
|
-
llms/extensions/providers/__pycache__/nvidia.cpython-314.pyc,sha256=UOsgdqA2-9E5jVo2CbytViJxrk5AEdXJvH9X0gmK_mA,6216
|
|
157
|
-
llms/extensions/providers/__pycache__/openai.cpython-314.pyc,sha256=mu8QC52_OUwtFX89FN_WXZgkgoFglvF1gDukN4ge8Rk,8735
|
|
158
|
-
llms/extensions/providers/__pycache__/openrouter.cpython-314.pyc,sha256=LknnfQPVrXB2-7GCKVHoXIk6mW2ghRlQmn8piwQCv3I,5335
|
|
135
|
+
llms/extensions/system_prompts/README.md,sha256=ayr18lnSsGp62bunC6kxkvcSvZki775rbZ-8VoMDQEc,597
|
|
159
136
|
llms/extensions/system_prompts/__init__.py,sha256=TZy1CS2dPkBNBA_Ovf9BlVetZqTt2NgnsrZi6Mtg_C0,1535
|
|
160
|
-
llms/extensions/system_prompts/
|
|
161
|
-
llms/extensions/system_prompts/ui/
|
|
162
|
-
llms/extensions/system_prompts/ui/prompts.json,sha256=eu7h4i2XAEcrID2Zr2ma0pweg2WfFehDAvTPaToqcBk,128484
|
|
137
|
+
llms/extensions/system_prompts/ui/index.mjs,sha256=_pVCreAebSzE9dzcHF2kiYODwP-fDHCqtUQB-X5Io9Q,12107
|
|
138
|
+
llms/extensions/system_prompts/ui/prompts.json,sha256=t5DD3bird-87wFa4OlW-bC2wdoYDrVzfyc8TO5OaotI,128489
|
|
163
139
|
llms/extensions/tools/__init__.py,sha256=yfIK7dVqYiZGX5VeJ3x7HQWLPQfuPqeNYJsd0lpZUM4,120
|
|
164
|
-
llms/extensions/tools/__pycache__/__init__.cpython-314.pyc,sha256=3H5i6ooI1LCCdVjZPDBteU2Ov6nYSeLAk9kUl6F9pZg,641
|
|
165
140
|
llms/extensions/tools/ui/index.mjs,sha256=Nu69U6odCUh8uu1i8d5f8ryO4Lj_OFbPX2LnVyYu1fk,9602
|
|
166
141
|
llms/ui/App.mjs,sha256=zU-GtbcSMREizjUS9nWiMK6m_oT14MNJ-p_RCz2RVqA,7445
|
|
167
|
-
llms/ui/ai.mjs,sha256=
|
|
142
|
+
llms/ui/ai.mjs,sha256=aEzcYd3IWHmDvKAuFcbRMaOAm7mpTYHNzZww82Bqdtw,6540
|
|
168
143
|
llms/ui/app.css,sha256=VcyYn6-qinFH7iOkIxUb5dmPDjLDcDBvgEOaRaeyg1E,173909
|
|
169
|
-
llms/ui/ctx.mjs,sha256=
|
|
144
|
+
llms/ui/ctx.mjs,sha256=UTdIvJUPoD7bWuAX8ju2jA8PDTP_wfVccyVoXauArmo,11174
|
|
170
145
|
llms/ui/fav.svg,sha256=_R6MFeXl6wBFT0lqcUxYQIDWgm246YH_3hSTW0oO8qw,734
|
|
171
146
|
llms/ui/index.mjs,sha256=j2rkXwpxPpBsurWLvvN6a25cVu7r9s9avP9ozKOpzMA,4253
|
|
172
147
|
llms/ui/markdown.mjs,sha256=ZeGXxX4_UEUCVkLZzmwXlqWBfReSFzBivdxNu8uSgFk,6648
|
|
@@ -186,13 +161,12 @@ llms/ui/lib/vue.min.mjs,sha256=T1TVu9SFEoLArPLKKEp6gsj_eScmHl5TkUebxGK6ldk,16628
|
|
|
186
161
|
llms/ui/lib/vue.mjs,sha256=75FuLhUTPk19sncwNIrm0BGEL0_Qw298-_v01fPWYoI,542872
|
|
187
162
|
llms/ui/modules/layout.mjs,sha256=ft5dOT-fBegSmSPQKnktHKfpbmNFan8ZN44z25T8ig8,10892
|
|
188
163
|
llms/ui/modules/model-selector.mjs,sha256=TrXxOIeNgibNMu_6M-wROjQgmHJPrVxH404v1_kXF4c,67486
|
|
189
|
-
llms/ui/modules/chat/ChatBody.mjs,sha256=
|
|
190
|
-
llms/ui/modules/chat/HomeTools.mjs,sha256=Jak12OvR8DZ6CmrWMMxELoNS8864EtMrhmiQp4SFfoM,213
|
|
164
|
+
llms/ui/modules/chat/ChatBody.mjs,sha256=0G2E82RnlRxVjW6xWRFXWJF8vjMZJfdeddcE66M4Wxg,42289
|
|
191
165
|
llms/ui/modules/chat/SettingsDialog.mjs,sha256=HMBJTwrapKrRIAstIIqp0QlJL5O-ho4hzgvfagPfsX8,19930
|
|
192
|
-
llms/ui/modules/chat/index.mjs,sha256=
|
|
193
|
-
llms_py-3.0.
|
|
194
|
-
llms_py-3.0.
|
|
195
|
-
llms_py-3.0.
|
|
196
|
-
llms_py-3.0.
|
|
197
|
-
llms_py-3.0.
|
|
198
|
-
llms_py-3.0.
|
|
166
|
+
llms/ui/modules/chat/index.mjs,sha256=sTKf7pwCkyu_Ls--pE3yrr2DSztuKQtLT7kFffaHIVU,33678
|
|
167
|
+
llms_py-3.0.1.dist-info/licenses/LICENSE,sha256=bus9cuAOWeYqBk2OuhSABVV1P4z7hgrEFISpyda_H5w,1532
|
|
168
|
+
llms_py-3.0.1.dist-info/METADATA,sha256=D4SsSqtkOU2pRuKlZUXa49YX0rSKPgvDcbzm1HdRYL8,2191
|
|
169
|
+
llms_py-3.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
170
|
+
llms_py-3.0.1.dist-info/entry_points.txt,sha256=WswyE7PfnkZMIxboC-MS6flBD6wm-CYU7JSUnMhqMfM,40
|
|
171
|
+
llms_py-3.0.1.dist-info/top_level.txt,sha256=gC7hk9BKSeog8gyg-EM_g2gxm1mKHwFRfK-10BxOsa4,5
|
|
172
|
+
llms_py-3.0.1.dist-info/RECORD,,
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|