llms-py 3.0.8__tar.gz → 3.0.10__tar.gz

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.
Files changed (194) hide show
  1. {llms_py-3.0.8 → llms_py-3.0.10}/PKG-INFO +1 -1
  2. {llms_py-3.0.8 → llms_py-3.0.10}/llms/main.py +1 -1
  3. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/ai.mjs +1 -1
  4. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/app.css +12 -0
  5. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/modules/chat/ChatBody.mjs +82 -71
  6. {llms_py-3.0.8 → llms_py-3.0.10}/llms_py.egg-info/PKG-INFO +1 -1
  7. {llms_py-3.0.8 → llms_py-3.0.10}/pyproject.toml +1 -1
  8. {llms_py-3.0.8 → llms_py-3.0.10}/setup.py +1 -1
  9. {llms_py-3.0.8 → llms_py-3.0.10}/LICENSE +0 -0
  10. {llms_py-3.0.8 → llms_py-3.0.10}/MANIFEST.in +0 -0
  11. {llms_py-3.0.8 → llms_py-3.0.10}/README.md +0 -0
  12. {llms_py-3.0.8 → llms_py-3.0.10}/llms/__init__.py +0 -0
  13. {llms_py-3.0.8 → llms_py-3.0.10}/llms/__main__.py +0 -0
  14. {llms_py-3.0.8 → llms_py-3.0.10}/llms/db.py +0 -0
  15. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/analytics/ui/index.mjs +0 -0
  16. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/app/README.md +0 -0
  17. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/app/__init__.py +0 -0
  18. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/app/db.py +0 -0
  19. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/app/ui/Recents.mjs +0 -0
  20. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/app/ui/index.mjs +0 -0
  21. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/app/ui/threadStore.mjs +0 -0
  22. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/CALCULATOR.md +0 -0
  23. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/__init__.py +0 -0
  24. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/addon/edit/closebrackets.js +0 -0
  25. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/addon/edit/closetag.js +0 -0
  26. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/addon/edit/continuelist.js +0 -0
  27. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/addon/edit/matchbrackets.js +0 -0
  28. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/addon/edit/matchtags.js +0 -0
  29. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/addon/edit/trailingspace.js +0 -0
  30. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/addon/selection/active-line.js +0 -0
  31. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/addon/selection/mark-selection.js +0 -0
  32. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/addon/selection/selection-pointer.js +0 -0
  33. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/codemirror.css +0 -0
  34. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/codemirror.js +0 -0
  35. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/doc/docs.css +0 -0
  36. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/doc/source_sans.woff +0 -0
  37. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/mode/clike/clike.js +0 -0
  38. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/mode/javascript/index.html +0 -0
  39. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/mode/javascript/javascript.js +0 -0
  40. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/mode/javascript/typescript.html +0 -0
  41. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/mode/python/python.js +0 -0
  42. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/theme/dracula.css +0 -0
  43. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/codemirror/theme/mocha.css +0 -0
  44. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/core_tools/ui/index.mjs +0 -0
  45. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/gallery/README.md +0 -0
  46. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/gallery/__init__.py +0 -0
  47. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/gallery/db.py +0 -0
  48. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/gallery/ui/index.mjs +0 -0
  49. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/README.md +0 -0
  50. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/__init__.py +0 -0
  51. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/README.md +0 -0
  52. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/auto-render.js +0 -0
  53. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/auto-render.min.js +0 -0
  54. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/auto-render.mjs +0 -0
  55. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/copy-tex.js +0 -0
  56. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/copy-tex.min.js +0 -0
  57. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/copy-tex.mjs +0 -0
  58. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/mathtex-script-type.js +0 -0
  59. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/mathtex-script-type.min.js +0 -0
  60. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/mathtex-script-type.mjs +0 -0
  61. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/mhchem.js +0 -0
  62. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/mhchem.min.js +0 -0
  63. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/mhchem.mjs +0 -0
  64. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/render-a11y-string.js +0 -0
  65. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/render-a11y-string.min.js +0 -0
  66. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/contrib/render-a11y-string.mjs +0 -0
  67. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.ttf +0 -0
  68. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff +0 -0
  69. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  70. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  71. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  72. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  73. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  74. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  75. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  76. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  77. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  78. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  79. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  80. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  81. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  82. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.ttf +0 -0
  83. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff +0 -0
  84. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff2 +0 -0
  85. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  86. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  87. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  88. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.ttf +0 -0
  89. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff +0 -0
  90. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff2 +0 -0
  91. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.ttf +0 -0
  92. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff +0 -0
  93. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff2 +0 -0
  94. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  95. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  96. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  97. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.ttf +0 -0
  98. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff +0 -0
  99. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff2 +0 -0
  100. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  101. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  102. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  103. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  104. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  105. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  106. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  107. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  108. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  109. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.ttf +0 -0
  110. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff +0 -0
  111. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff2 +0 -0
  112. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.ttf +0 -0
  113. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff +0 -0
  114. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  115. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.ttf +0 -0
  116. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff +0 -0
  117. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  118. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.ttf +0 -0
  119. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff +0 -0
  120. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  121. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.ttf +0 -0
  122. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff +0 -0
  123. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  124. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  125. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  126. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  127. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/index.mjs +0 -0
  128. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/katex-swap.css +0 -0
  129. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/katex-swap.min.css +0 -0
  130. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/katex.css +0 -0
  131. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/katex.js +0 -0
  132. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/katex.min.css +0 -0
  133. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/katex.min.js +0 -0
  134. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/katex.min.mjs +0 -0
  135. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/katex/ui/katex.mjs +0 -0
  136. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/providers/__init__.py +0 -0
  137. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/providers/anthropic.py +0 -0
  138. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/providers/cerebras.py +0 -0
  139. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/providers/chutes.py +0 -0
  140. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/providers/google.py +0 -0
  141. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/providers/nvidia.py +0 -0
  142. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/providers/openai.py +0 -0
  143. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/providers/openrouter.py +0 -0
  144. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/providers/zai.py +0 -0
  145. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/system_prompts/README.md +0 -0
  146. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/system_prompts/__init__.py +0 -0
  147. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/system_prompts/ui/index.mjs +0 -0
  148. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/system_prompts/ui/prompts.json +0 -0
  149. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/tools/__init__.py +0 -0
  150. {llms_py-3.0.8 → llms_py-3.0.10}/llms/extensions/tools/ui/index.mjs +0 -0
  151. {llms_py-3.0.8 → llms_py-3.0.10}/llms/index.html +0 -0
  152. {llms_py-3.0.8 → llms_py-3.0.10}/llms/llms.json +0 -0
  153. {llms_py-3.0.8 → llms_py-3.0.10}/llms/providers-extra.json +0 -0
  154. {llms_py-3.0.8 → llms_py-3.0.10}/llms/providers.json +0 -0
  155. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/App.mjs +0 -0
  156. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/ctx.mjs +0 -0
  157. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/fav.svg +0 -0
  158. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/index.mjs +0 -0
  159. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/chart.js +0 -0
  160. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/charts.mjs +0 -0
  161. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/color.js +0 -0
  162. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/highlight.min.mjs +0 -0
  163. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/idb.min.mjs +0 -0
  164. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/marked.min.mjs +0 -0
  165. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/servicestack-client.mjs +0 -0
  166. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/servicestack-vue.mjs +0 -0
  167. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/vue-router.min.mjs +0 -0
  168. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/vue.min.mjs +0 -0
  169. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/lib/vue.mjs +0 -0
  170. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/markdown.mjs +0 -0
  171. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/modules/chat/SettingsDialog.mjs +0 -0
  172. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/modules/chat/index.mjs +0 -0
  173. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/modules/icons.mjs +0 -0
  174. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/modules/layout.mjs +0 -0
  175. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/modules/model-selector.mjs +0 -0
  176. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/tailwind.input.css +0 -0
  177. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/typography.css +0 -0
  178. {llms_py-3.0.8 → llms_py-3.0.10}/llms/ui/utils.mjs +0 -0
  179. {llms_py-3.0.8 → llms_py-3.0.10}/llms_py.egg-info/SOURCES.txt +0 -0
  180. {llms_py-3.0.8 → llms_py-3.0.10}/llms_py.egg-info/dependency_links.txt +0 -0
  181. {llms_py-3.0.8 → llms_py-3.0.10}/llms_py.egg-info/entry_points.txt +0 -0
  182. {llms_py-3.0.8 → llms_py-3.0.10}/llms_py.egg-info/not-zip-safe +0 -0
  183. {llms_py-3.0.8 → llms_py-3.0.10}/llms_py.egg-info/requires.txt +0 -0
  184. {llms_py-3.0.8 → llms_py-3.0.10}/llms_py.egg-info/top_level.txt +0 -0
  185. {llms_py-3.0.8 → llms_py-3.0.10}/requirements.txt +0 -0
  186. {llms_py-3.0.8 → llms_py-3.0.10}/setup.cfg +0 -0
  187. {llms_py-3.0.8 → llms_py-3.0.10}/tests/test_async.py +0 -0
  188. {llms_py-3.0.8 → llms_py-3.0.10}/tests/test_config.py +0 -0
  189. {llms_py-3.0.8 → llms_py-3.0.10}/tests/test_extensions.py +0 -0
  190. {llms_py-3.0.8 → llms_py-3.0.10}/tests/test_gemini_upload.py +0 -0
  191. {llms_py-3.0.8 → llms_py-3.0.10}/tests/test_integration.py +0 -0
  192. {llms_py-3.0.8 → llms_py-3.0.10}/tests/test_provider_checks.py +0 -0
  193. {llms_py-3.0.8 → llms_py-3.0.10}/tests/test_provider_config.py +0 -0
  194. {llms_py-3.0.8 → llms_py-3.0.10}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 3.0.8
3
+ Version: 3.0.10
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
@@ -41,7 +41,7 @@ try:
41
41
  except ImportError:
42
42
  HAS_PIL = False
43
43
 
44
- VERSION = "3.0.8"
44
+ VERSION = "3.0.10"
45
45
  _ROOT = None
46
46
  DEBUG = os.getenv("DEBUG") == "1"
47
47
  MOCK = os.getenv("MOCK") == "1"
@@ -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.8',
9
+ version: '3.0.10',
10
10
  base,
11
11
  prefsKey,
12
12
  welcome: 'Welcome to llms.py',
@@ -535,6 +535,9 @@
535
535
  .mx-2 {
536
536
  margin-inline: calc(var(--spacing) * 2);
537
537
  }
538
+ .mx-4 {
539
+ margin-inline: calc(var(--spacing) * 4);
540
+ }
538
541
  .mx-auto {
539
542
  margin-inline: auto;
540
543
  }
@@ -613,6 +616,9 @@
613
616
  .mr-16 {
614
617
  margin-right: calc(var(--spacing) * 16);
615
618
  }
619
+ .-mb-4 {
620
+ margin-bottom: calc(var(--spacing) * -4);
621
+ }
616
622
  .-mb-px {
617
623
  margin-bottom: -1px;
618
624
  }
@@ -965,12 +971,18 @@
965
971
  .max-w-lg {
966
972
  max-width: var(--container-lg);
967
973
  }
974
+ .max-w-md {
975
+ max-width: var(--container-md);
976
+ }
968
977
  .max-w-none {
969
978
  max-width: none;
970
979
  }
971
980
  .max-w-sm {
972
981
  max-width: var(--container-sm);
973
982
  }
983
+ .max-w-xl {
984
+ max-width: var(--container-xl);
985
+ }
974
986
  .max-w-xs {
975
987
  max-width: var(--container-xs);
976
988
  }
@@ -12,6 +12,47 @@ function hasJsonStructure(str) {
12
12
  return tryParseJson(str) != null
13
13
  }
14
14
 
15
+ function isEmpty(v) {
16
+ return !v || v === '{}' || v === '[]' || v === 'null' || v === 'undefined' || v === '""' || v === "''" || v === "``"
17
+ }
18
+ function embedHtml(html) {
19
+ const resizeScript = `<script>
20
+ let lastH = 0;
21
+ const sendHeight = () => {
22
+ const body = document.body;
23
+ if (!body) return;
24
+ // Force re-calc
25
+ const h = document.documentElement.getBoundingClientRect().height;
26
+ if (Math.abs(h - lastH) > 2) {
27
+ lastH = h;
28
+ window.parent.postMessage({ type: 'iframe-resize', height: h }, '*');
29
+ }
30
+ }
31
+ const ro = new ResizeObserver(sendHeight);
32
+ window.addEventListener('load', () => {
33
+ // Inject styles to prevent infinite loops
34
+ const style = document.createElement('style');
35
+ style.textContent = 'html, body { height: auto !important; min-height: 0 !important; margin: 0 !important; padding: 0 !important; overflow: hidden !important; }';
36
+ document.head.appendChild(style);
37
+
38
+ const body = document.body;
39
+ if (body) {
40
+ ro.observe(body);
41
+ ro.observe(document.documentElement);
42
+ sendHeight();
43
+ }
44
+ });
45
+ <\/script>`
46
+
47
+ const escaped = (html + resizeScript)
48
+ .replace(/&/g, '&amp;')
49
+ .replace(/</g, '&lt;')
50
+ .replace(/>/g, '&gt;')
51
+ .replace(/"/g, '&quot;')
52
+ .replace(/'/g, '&#39;')
53
+ return `<iframe srcdoc="${escaped}" sandbox="allow-scripts" style="width:100%;height:auto;border:none;"></iframe>`
54
+ }
55
+
15
56
  export const TypeText = {
16
57
  template: `
17
58
  <div v-if="text.type === 'text'">
@@ -332,46 +373,6 @@ export const ToolArguments = {
332
373
  },
333
374
  setup(props) {
334
375
  const refArgs = ref()
335
- function isEmpty(v) {
336
- return !v || v === '{}' || v === '[]' || v === 'null' || v === 'undefined' || v === '""' || v === "''" || v === "``"
337
- }
338
- function embedHtml(html) {
339
- const resizeScript = `<script>
340
- let lastH = 0;
341
- const sendHeight = () => {
342
- const body = document.body;
343
- if (!body) return;
344
- // Force re-calc
345
- const h = document.documentElement.getBoundingClientRect().height;
346
- if (Math.abs(h - lastH) > 2) {
347
- lastH = h;
348
- window.parent.postMessage({ type: 'iframe-resize', height: h }, '*');
349
- }
350
- }
351
- const ro = new ResizeObserver(sendHeight);
352
- window.addEventListener('load', () => {
353
- // Inject styles to prevent infinite loops
354
- const style = document.createElement('style');
355
- style.textContent = 'html, body { height: auto !important; min-height: 0 !important; margin: 0 !important; padding: 0 !important; overflow: hidden !important; }';
356
- document.head.appendChild(style);
357
-
358
- const body = document.body;
359
- if (body) {
360
- ro.observe(body);
361
- ro.observe(document.documentElement);
362
- sendHeight();
363
- }
364
- });
365
- <\/script>`
366
-
367
- const escaped = (html + resizeScript)
368
- .replace(/&/g, '&amp;')
369
- .replace(/</g, '&lt;')
370
- .replace(/>/g, '&gt;')
371
- .replace(/"/g, '&quot;')
372
- .replace(/'/g, '&#39;')
373
- return `<iframe srcdoc="${escaped}" sandbox="allow-scripts" style="width:100%;height:auto;border:none;"></iframe>`
374
- }
375
376
  const dict = computed(() => {
376
377
  if (isEmpty(props.value)) return null
377
378
  const ret = tryParseJson(props.value)
@@ -417,9 +418,47 @@ export const ToolArguments = {
417
418
  }
418
419
 
419
420
  export const ToolOutput = {
420
- template: ``,
421
+ template: `
422
+ <div v-if="output" class="border-t border-gray-200 dark:border-gray-700">
423
+ <div class="px-3 py-1.5 flex justify-between items-center border-b border-gray-200 dark:border-gray-800 bg-gray-50/30 dark:bg-gray-800">
424
+ <div class="flex items-center gap-2 ">
425
+ <svg class="size-3.5 text-gray-400" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
426
+ <span class="text-[10px] uppercase tracking-wider text-gray-400 font-medium">Output</span>
427
+ </div>
428
+ <div v-if="hasJsonStructure(output.content)" class="flex items-center gap-2 text-[10px] uppercase tracking-wider font-medium select-none">
429
+ <span @click="$ctx.setPrefs({ toolFormat: 'text' })"
430
+ class="cursor-pointer transition-colors"
431
+ :class="$ctx.prefs.toolFormat !== 'preview' ? 'text-gray-600 dark:text-gray-300' : 'text-gray-400 hover:text-gray-600 dark:hover:text-gray-300'">
432
+ text
433
+ </span>
434
+ <span class="text-gray-300 dark:text-gray-700">|</span>
435
+ <span @click="$ctx.setPrefs({ toolFormat: 'preview' })"
436
+ class="cursor-pointer transition-colors"
437
+ :class="$ctx.prefs.toolFormat == 'preview' ? 'text-gray-600 dark:text-gray-300' : 'text-gray-400 hover:text-gray-600 dark:hover:text-gray-300'">
438
+ preview
439
+ </span>
440
+ </div>
441
+ </div>
442
+ <div class="not-prose px-3 py-2">
443
+ <pre v-if="$ctx.prefs.toolFormat !== 'preview' || !hasJsonStructure(output.content)" class="tool-output">{{ output.content }}</pre>
444
+ <div v-else class="text-xs">
445
+ <HtmlFormat v-if="tryParseJson(output.content)" :value="tryParseJson(output.content)" :classes="$utils.htmlFormatClasses" />
446
+ <div v-else class="text-gray-500 italic p-2">Invalid JSON content</div>
447
+ </div>
448
+ </div>
449
+ <ViewToolTypes :output="output" class="p-2" />
450
+ </div>
451
+ `,
452
+ props: {
453
+ tool: Object,
454
+ output: Object,
455
+ },
421
456
  setup(props) {
422
457
 
458
+ return {
459
+ tryParseJson,
460
+ hasJsonStructure,
461
+ }
423
462
  }
424
463
  }
425
464
 
@@ -523,36 +562,8 @@ export const ChatBody = {
523
562
 
524
563
  <ToolArguments :value="tool.function.arguments" />
525
564
 
526
- <!-- Tool Output (Nested) -->
527
- <div v-if="getToolOutput(tool.id)" class="border-t border-gray-200 dark:border-gray-700">
528
- <div class="px-3 py-1.5 flex justify-between items-center border-b border-gray-200 dark:border-gray-800 bg-gray-50/30 dark:bg-gray-800">
529
- <div class="flex items-center gap-2 ">
530
- <svg class="size-3.5 text-gray-400" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
531
- <span class="text-[10px] uppercase tracking-wider text-gray-400 font-medium">Output</span>
532
- </div>
533
- <div v-if="hasJsonStructure(getToolOutput(tool.id).content)" class="flex items-center gap-2 text-[10px] uppercase tracking-wider font-medium select-none">
534
- <span @click="setPrefs({ toolFormat: 'text' })"
535
- class="cursor-pointer transition-colors"
536
- :class="prefs.toolFormat !== 'preview' ? 'text-gray-600 dark:text-gray-300' : 'text-gray-400 hover:text-gray-600 dark:hover:text-gray-300'">
537
- text
538
- </span>
539
- <span class="text-gray-300 dark:text-gray-700">|</span>
540
- <span @click="setPrefs({ toolFormat: 'preview' })"
541
- class="cursor-pointer transition-colors"
542
- :class="prefs.toolFormat == 'preview' ? 'text-gray-600 dark:text-gray-300' : 'text-gray-400 hover:text-gray-600 dark:hover:text-gray-300'">
543
- preview
544
- </span>
545
- </div>
546
- </div>
547
- <div class="not-prose px-3 py-2">
548
- <pre v-if="prefs.toolFormat !== 'preview' || !hasJsonStructure(getToolOutput(tool.id).content)" class="tool-output">{{ getToolOutput(tool.id).content }}</pre>
549
- <div v-else class="text-xs">
550
- <HtmlFormat v-if="tryParseJson(getToolOutput(tool.id).content)" :value="tryParseJson(getToolOutput(tool.id).content)" :classes="$utils.htmlFormatClasses" />
551
- <div v-else class="text-gray-500 italic p-2">Invalid JSON content</div>
552
- </div>
553
- </div>
554
- <ViewToolTypes :output="getToolOutput(tool.id)" />
555
- </div>
565
+ <ToolOutput :tool="tool" :output="getToolOutput(tool.id)" />
566
+
556
567
  </div>
557
568
  </div>
558
569
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 3.0.8
3
+ Version: 3.0.10
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "llms-py"
7
- version = "3.0.8"
7
+ version = "3.0.10"
8
8
  description = "A lightweight CLI tool and OpenAI-compatible server for querying multiple Large Language Model (LLM) providers"
9
9
  readme = "README.md"
10
10
  license = "BSD-3-Clause"
@@ -15,7 +15,7 @@ with open(os.path.join(this_directory, "requirements.txt"), encoding="utf-8") as
15
15
 
16
16
  setup(
17
17
  name="llms-py",
18
- version="3.0.8",
18
+ version="3.0.10",
19
19
  author="ServiceStack",
20
20
  author_email="team@servicestack.net",
21
21
  description="A lightweight CLI tool and OpenAI-compatible server for querying multiple Large Language Model (LLM) providers",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes