Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0cef844168 | ||
|
|
c56d6963b0 | ||
|
|
92e2cfdd2f | ||
|
|
3ad5a7d97c | ||
|
|
867fddb821 | ||
|
|
de69c08a1d | ||
|
|
30cc51ec82 | ||
|
|
ba69c751ca | ||
|
|
be85f7cc35 | ||
|
|
4191ec692e | ||
|
|
6b5f99bf66 | ||
|
|
ef301aa16b | ||
|
|
32b27749ef | ||
|
|
b81a5833c7 | ||
|
|
6f635d8b7d | ||
|
|
549989e9ec | ||
|
|
1c665592e4 | ||
|
|
c61790b355 | ||
|
|
3a79840a87 | ||
|
|
a515a5df1a | ||
|
|
ba72d4625f | ||
|
|
3dc34c2402 | ||
|
|
be912f1529 | ||
|
|
d5fd3b3600 | ||
|
|
34ec10a78c | ||
|
|
015ac2f532 | ||
|
|
030b6b26af | ||
|
|
6d1c18e118 | ||
|
|
54dda08d39 | ||
|
|
7bfe4c6a43 | ||
|
|
cc1dc6cb78 | ||
|
|
3f58a17e47 | ||
|
|
3e1be8b958 | ||
|
|
d704b8b686 | ||
|
|
12c2138982 | ||
|
|
337ece4d50 | ||
|
|
1299c11650 | ||
|
|
628a10e34a | ||
|
|
513895c2d5 | ||
|
|
ccbc46fbbe | ||
|
|
8acc1ab425 | ||
|
|
616e9e2760 | ||
|
|
c95a65a4bd | ||
|
|
220d35ebcb | ||
|
|
947f5e840e | ||
|
|
ebf5cb22ab | ||
|
|
d84a3c0bf4 | ||
|
|
9143716463 | ||
|
|
9657474a8d | ||
|
|
b38711a581 | ||
|
|
04b9065f08 | ||
|
|
827326e1a2 | ||
|
|
bfa5550cc3 | ||
|
|
e60fa7927d | ||
|
|
1fea4f794f | ||
|
|
7c8597765f | ||
|
|
08b6ea0e17 | ||
|
|
68f5ff540c | ||
|
|
9509528deb | ||
|
|
4ca0ea1e55 | ||
|
|
3886dee1ce | ||
|
|
305435b4ef | ||
|
|
4abe2cfa7b | ||
|
|
a6d6c928d9 | ||
|
|
af518cacbf | ||
|
|
54e4c1e0cc | ||
|
|
f6b20ca109 | ||
|
|
994f17b430 | ||
|
|
a655bb5a63 | ||
|
|
cf5201aada | ||
|
|
2df9f7fb4d | ||
|
|
731251d11a | ||
|
|
2b8be86f23 | ||
|
|
5e46c27806 | ||
|
|
b34401a087 | ||
|
|
61a9d9927d | ||
|
|
f761d2cf90 | ||
|
|
0f40cb0de4 | ||
|
|
b50dcb1862 | ||
|
|
b9f55a44b7 | ||
|
|
f1bb43707e | ||
|
|
519bb64238 | ||
|
|
410af53eca | ||
|
|
c2de7efa2f | ||
|
|
6424c8b644 | ||
|
|
bd2021e8e1 | ||
|
|
ccc64ac6b7 | ||
|
|
7620a6bf8c | ||
|
|
54b30e0b7f | ||
|
|
f56983632f | ||
|
|
3a553f7208 | ||
|
|
571e4c9600 | ||
|
|
a38f3c7617 | ||
|
|
b1fb298bee | ||
|
|
176a7fc986 | ||
|
|
efd50c3c5a | ||
|
|
263086aa91 | ||
|
|
a3bb7df610 | ||
|
|
3a6a05cef1 | ||
|
|
d62353c140 | ||
|
|
803b39b00c | ||
|
|
ed5de96d1d | ||
|
|
c667d27c38 | ||
|
|
e088f1ef23 | ||
|
|
ad1486c8bd | ||
|
|
6359cb55fe | ||
|
|
96618967bd | ||
|
|
19bf7289c1 | ||
|
|
369f461691 | ||
|
|
9c760ace80 | ||
|
|
45e9d05240 | ||
|
|
ace3303ff5 | ||
|
|
62e57a4cf5 | ||
|
|
2a4dfc02a2 | ||
|
|
e0e151f4f4 | ||
|
|
ea07e242f5 | ||
|
|
53f2ab1676 | ||
|
|
500f4d73e1 | ||
|
|
6c957f2407 | ||
|
|
1dcbec71ec | ||
|
|
87dcbd198c | ||
|
|
d7927506f1 | ||
|
|
f65dc715f9 | ||
|
|
c69278c13c | ||
|
|
a129e0954e | ||
|
|
5e1cb76b93 | ||
|
|
8e14372dd8 | ||
|
|
9d8d4393a6 | ||
|
|
c4a3a9c616 | ||
|
|
8c6f4f6579 | ||
|
|
86ce111edd | ||
|
|
0889dd3a51 | ||
|
|
de182ddec2 | ||
|
|
bfdcc12cdc | ||
|
|
ed210517c2 | ||
|
|
7b5247810c | ||
|
|
9cc00afc6b | ||
|
|
5c055b73a3 | ||
|
|
853adad894 | ||
|
|
5aabe21cbe | ||
|
|
e63b8b3879 | ||
|
|
0a8199a056 | ||
|
|
7b36466c1c | ||
|
|
27da31dc83 | ||
|
|
c36acd46cc | ||
|
|
413297b5c7 | ||
|
|
f94965909c | ||
|
|
982c84c8ac | ||
|
|
1f45b9df2e | ||
|
|
3dd2e80dec | ||
|
|
67a612fe24 | ||
|
|
791dd24ace | ||
|
|
9cf3381381 | ||
|
|
b0d74a59f1 | ||
|
|
1a30b3746e | ||
|
|
0a3817ed86 | ||
|
|
0a845db8ec | ||
|
|
7680ac2517 | ||
|
|
b3eb3b3c05 | ||
|
|
d5e866d839 | ||
|
|
db0a0b395f | ||
|
|
8f31b6d74a |
@@ -5,6 +5,73 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [0.6.9] - 2025-05-10
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- 📝 **Edit Attached Images/Files in Messages**: You can now easily edit your sent messages by removing attached files—streamlining document management, correcting mistakes on the fly, and keeping your chats clutter-free.
|
||||||
|
- 🚨 **Clear Alerts for Private Task Models**: When interacting with private task models, the UI now clearly alerts you—making it easier to understand resource availability and access, reducing confusion during workflow setup.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- 🛡️ **Confirm Dialog Focus Trap Reliability**: The focus now stays correctly within confirmation dialogs, ensuring keyboard navigation and accessibility is seamless and preventing accidental operations—especially helpful during critical or rapid workflows.
|
||||||
|
- 💬 **Temporary Chat Admin Controls & Session Cleanliness**: Admins are now able to properly enable temporary chat mode without errors, and previous session prompts or tool selections no longer carry over—delivering a fresh, predictable, and consistent temporary chat experience every time.
|
||||||
|
- 🤖 **External Reranker Integration Functionality Restored**: External reranker integrations now work correctly, allowing you to fully leverage advanced ranking services for sharper, more relevant search results in your RAG and knowledge base workflows.
|
||||||
|
|
||||||
|
## [0.6.8] - 2025-05-10
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- 🏆 **External Reranker Support for Knowledge Base Search**: Supercharge your Retrieval-Augmented Generation (RAG) workflows with the new External Reranker integration; easily plug in advanced reranking services via the UI to deliver sharper and more relevant search results, accelerating research and insight discovery.
|
||||||
|
- 📤 **Unstylized PDF Export Option (Reduced File Size)**: When exporting chat transcripts or documents, you can now choose an unstylized PDF export for snappier downloads, minimal file size, and clean data archiving—perfect for large-scale storage or sharing.
|
||||||
|
- 📝 **Vazirmatn Font for Persian & Arabic**: Arabic and Persian users will now see their text beautifully rendered with the specialized Vazirmatn font for an improved localized reading experience.
|
||||||
|
- 🏷️ **SharePoint Tenant ID Support for OneDrive**: You can now specify a SharePoint tenant ID in OneDrive settings for seamless authentication and granular enterprise integration.
|
||||||
|
- 👤 **Refresh OAuth Profile Picture**: Your OAuth profile picture now updates in real-time, ensuring your presence and avatar always match your latest identity across integrated platforms.
|
||||||
|
- 🔧 **Milvus Configuration Improvements**: Configure index and metric types for Milvus directly within settings; take full control of your vector database for more accurate and robust AI search experiences.
|
||||||
|
- 🛡️ **S3 Tagging Toggle for Compatibility**: Optional S3 tagging via an environment toggle grants full compatibility with all storage backends—including those that don’t support tagging like Cloudflare R2—ensuring error-free attachment and document management.
|
||||||
|
- 👨🦯 **Icon Button Accessibility Improvements**: Key interactive icon-buttons now include aria-labels and ARIA descriptions, so screen readers provide precise guidance about what action each button performs for improved accessibility.
|
||||||
|
- ♿ **Enhanced Accessibility with Modal Focus Trap**: Modal dialogs and pop-ups now feature a focus trap and improved ARIA roles, ensuring seamless navigation and screen reader support—making the interface friendlier for everyone, including keyboard and assistive tech users.
|
||||||
|
- 🏃 **Improved Admin User List Loading Indicator**: The user list loading experience is now clearer and more responsive in the admin panel.
|
||||||
|
- 🧑🤝🧑 **Larger Admin User List Page Size**: Admins can now manage up to 30 users per page in the admin interface, drastically reducing pagination and making large user teams easier and faster to manage.
|
||||||
|
- 🌠 **Default Code Interpreter Prompt Clarified**: The built-in code interpreter prompt is now more explicit, preventing AI from wrapping code in Markdown blocks when not needed—ensuring properly formatted code runs as intended every time.
|
||||||
|
- 🧾 **Improved Default Title Generation Prompt Template**: Title generation now uses a robust template for reliable JSON output, improving chat organization and searchability.
|
||||||
|
- 🔗 **Support Jupyter Notebooks with Non-Root Base URLs**: Notebook-based code execution now supports non-root deployed Jupyter servers, granting full flexibility for hybrid or multi-user setups.
|
||||||
|
- 📰 **UI Scrollbar Always Visible for Overflow Tools**: When available tools overflow the display, the scrollbar is now always visible and there’s a handy "show all" toggle, making navigation of large toolsets snappier and more intuitive.
|
||||||
|
- 🛠️ **General Backend Refactoring for Stability**: Multiple under-the-hood improvements have been made across backend components, ensuring smoother performance, fewer errors, and a more reliable overall experience for all users.
|
||||||
|
- 🚀 **Optimized Web Search for Faster Results**: Web search speed and performance have been significantly enhanced, delivering answers and sources in record time to accelerate your research-heavy workflows.
|
||||||
|
- 💡 **More Supported Languages**: Expanded language support ensures an even wider range of users can enjoy an intuitive and natural interface in their native tongue.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- 🏃♂️ **Exhausting Workers in Nginx Reverse Proxy Due to Websocket Fix**: Websocket sessions are now fully compatible behind Nginx, eliminating worker exhaustion and restoring 24/7 reliability for real-time chats even in complex deployments.
|
||||||
|
- 🎤 **Audio Transcription Issue with OpenAI Resolved**: OpenAI-based audio transcription now handles WebM and newer formats without error, ensuring seamless voice-to-text workflows every time.
|
||||||
|
- 👉 **Message Input RTL Issue Fixed**: The chat message input now displays correctly for right-to-left languages, creating a flawless typing and reading experience for Arabic, Hebrew, and more.
|
||||||
|
- 🀄 **Katex: Proper Rendering of Chinese Characters Next to Math**: Math formulas now render perfectly even when directly adjacent to Chinese (CJK) characters, improving visual clarity for multilingual teams and cross-language documents.
|
||||||
|
- 🔂 **Duplicate Web Search URLs Eliminated**: Search results now reliably filter out URL duplicates, so your knowledge and search citations are always clean, trimmed, and easy to review.
|
||||||
|
- 📄 **Markdown Rendering Fixed in Knowledge Bases**: Markdown is now displayed correctly within knowledge bases, enabling better formatting and clarity of information-rich files.
|
||||||
|
- 🗂️ **LDAP Import/Loading Issue Resolved**: LDAP user imports process correctly, ensuring smooth onboarding and access without interruption.
|
||||||
|
- 🌎 **Pinecone Batch Operations and Async Safety**: All Pinecone operations (batch insert, upsert, delete) now run efficiently and safely in an async environment, boosting performance and preventing slowdowns in large-scale RAG jobs.
|
||||||
|
|
||||||
|
## [0.6.7] - 2025-05-07
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- 🌐 **Custom Azure TTS API URL Support Added**: You can now define a custom Azure Text-to-Speech endpoint—enabling flexibility for enterprise deployments and regional compliance.
|
||||||
|
- ⚙️ **TOOL_SERVER_CONNECTIONS Environment Variable Suppor**: Easily configure and deploy tool servers via environment variables, streamlining setup and enabling faster enterprise provisioning.
|
||||||
|
- 👥 **Enhanced OAuth Group Handling as String or List**: OAuth group data can now be passed as either a list or a comma-separated string, improving compatibility with varied identity provider formats and reducing onboarding friction.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- 🧠 **Embedding with Ollama Proxy Endpoints Restored**: Fixed an issue where missing API config broke embedding for proxied Ollama models—ensuring consistent performance and compatibility.
|
||||||
|
- 🔐 **OIDC OAuth Login Issue Resolved**: Users can once again sign in seamlessly using OpenID Connect-based OAuth, eliminating login interruptions and improving reliability.
|
||||||
|
- 📝 **Notes Feature Access Fixed for Non-Admins**: Fixed an issue preventing non-admin users from accessing the Notes feature, restoring full cross-role collaboration capabilities.
|
||||||
|
- 🖼️ **Tika Loader Image Extraction Problem Resolved**: Ensured TikaLoader now processes 'extract_images' parameter correctly, restoring complete file extraction functionality in document workflows.
|
||||||
|
- 🎨 **Automatic1111 Image Model Setting Applied Properly**: Fixed an issue where switching to a specific image model via the UI wasn’t reflected in generation, re-enabling full visual creativity control.
|
||||||
|
- 🏷️ **Multiple XML Tags in Messages Now Parsed Correctly**: Fixed parsing issues when messages included multiple XML-style tags, ensuring clean and unbroken rendering of rich content in chats.
|
||||||
|
- 🖌️ **OpenAI Image Generation Issues Resolved**: Resolved broken image output when using OpenAI’s image generation, ensuring fully functional visual creation workflows.
|
||||||
|
- 🔎 **Tool Server Settings UI Privacy Restored**: Prevented restricted users from accessing tool server settings via search—restoring tight permissions control and safeguarding sensitive configurations.
|
||||||
|
- 🎧 **WebM Audio Transcription Now Supported**: Fixed an issue where WebM files failed during audio transcription—these formats are now fully supported, ensuring smoother voice note workflows and broader file compatibility.
|
||||||
|
|
||||||
## [0.6.6] - 2025-05-05
|
## [0.6.6] - 2025-05-05
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
+3
-3
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
## Our Pledge
|
## Our Pledge
|
||||||
|
|
||||||
As members, contributors, and leaders of this community, we pledge to make participation in our open-source project a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socioeconomic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
As members, contributors, and leaders of this community, we pledge to make participation in our project a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socioeconomic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
We are committed to creating and maintaining an open, respectful, and professional environment where positive contributions and meaningful discussions can flourish. By participating in this project, you agree to uphold these values and align your behavior to the standards outlined in this Code of Conduct.
|
We are committed to creating and maintaining an open, respectful, and professional environment where positive contributions and meaningful discussions can flourish. By participating in this project, you agree to uphold these values and align your behavior to the standards outlined in this Code of Conduct.
|
||||||
|
|
||||||
## Why These Standards Are Important
|
## Why These Standards Are Important
|
||||||
|
|
||||||
Open-source projects rely on a community of volunteers dedicating their time, expertise, and effort toward a shared goal. These projects are inherently collaborative but also fragile, as the success of the project depends on the goodwill, energy, and productivity of those involved.
|
Projects rely on a community of volunteers dedicating their time, expertise, and effort toward a shared goal. These projects are inherently collaborative but also fragile, as the success of the project depends on the goodwill, energy, and productivity of those involved.
|
||||||
|
|
||||||
Maintaining a positive and respectful environment is essential to safeguarding the integrity of this project and protecting contributors' efforts. Behavior that disrupts this atmosphere—whether through hostility, entitlement, or unprofessional conduct—can severely harm the morale and productivity of the community. **Strict enforcement of these standards ensures a safe and supportive space for meaningful collaboration.**
|
Maintaining a positive and respectful environment is essential to safeguarding the integrity of this project and protecting contributors' efforts. Behavior that disrupts this atmosphere—whether through hostility, entitlement, or unprofessional conduct—can severely harm the morale and productivity of the community. **Strict enforcement of these standards ensures a safe and supportive space for meaningful collaboration.**
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ This approach ensures that disruptive behaviors are addressed swiftly and decisi
|
|||||||
|
|
||||||
## Why Zero Tolerance Is Necessary
|
## Why Zero Tolerance Is Necessary
|
||||||
|
|
||||||
Open-source projects thrive on collaboration, goodwill, and mutual respect. Toxic behaviors—such as entitlement, hostility, or persistent negativity—threaten not just individual contributors but the health of the project as a whole. Allowing such behaviors to persist robs contributors of their time, energy, and enthusiasm for the work they do.
|
Projects thrive on collaboration, goodwill, and mutual respect. Toxic behaviors—such as entitlement, hostility, or persistent negativity—threaten not just individual contributors but the health of the project as a whole. Allowing such behaviors to persist robs contributors of their time, energy, and enthusiasm for the work they do.
|
||||||
|
|
||||||
By enforcing a zero-tolerance policy, we ensure that the community remains a safe, welcoming space for all participants. These measures are not about harshness—they are about protecting contributors and fostering a productive environment where innovation can thrive.
|
By enforcing a zero-tolerance policy, we ensure that the community remains a safe, welcoming space for all participants. These measures are not about harshness—they are about protecting contributors and fostering a productive environment where innovation can thrive.
|
||||||
|
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
# Run with
|
|
||||||
# caddy run --envfile ./example.env --config ./Caddyfile.localhost
|
|
||||||
#
|
|
||||||
# This is configured for
|
|
||||||
# - Automatic HTTPS (even for localhost)
|
|
||||||
# - Reverse Proxying to Ollama API Base URL (http://localhost:11434/api)
|
|
||||||
# - CORS
|
|
||||||
# - HTTP Basic Auth API Tokens (uncomment basicauth section)
|
|
||||||
|
|
||||||
|
|
||||||
# CORS Preflight (OPTIONS) + Request (GET, POST, PATCH, PUT, DELETE)
|
|
||||||
(cors-api) {
|
|
||||||
@match-cors-api-preflight method OPTIONS
|
|
||||||
handle @match-cors-api-preflight {
|
|
||||||
header {
|
|
||||||
Access-Control-Allow-Origin "{http.request.header.origin}"
|
|
||||||
Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
|
||||||
Access-Control-Allow-Headers "Origin, Accept, Authorization, Content-Type, X-Requested-With"
|
|
||||||
Access-Control-Allow-Credentials "true"
|
|
||||||
Access-Control-Max-Age "3600"
|
|
||||||
defer
|
|
||||||
}
|
|
||||||
respond "" 204
|
|
||||||
}
|
|
||||||
|
|
||||||
@match-cors-api-request {
|
|
||||||
not {
|
|
||||||
header Origin "{http.request.scheme}://{http.request.host}"
|
|
||||||
}
|
|
||||||
header Origin "{http.request.header.origin}"
|
|
||||||
}
|
|
||||||
handle @match-cors-api-request {
|
|
||||||
header {
|
|
||||||
Access-Control-Allow-Origin "{http.request.header.origin}"
|
|
||||||
Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
|
||||||
Access-Control-Allow-Headers "Origin, Accept, Authorization, Content-Type, X-Requested-With"
|
|
||||||
Access-Control-Allow-Credentials "true"
|
|
||||||
Access-Control-Max-Age "3600"
|
|
||||||
defer
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# replace localhost with example.com or whatever
|
|
||||||
localhost {
|
|
||||||
## HTTP Basic Auth
|
|
||||||
## (uncomment to enable)
|
|
||||||
# basicauth {
|
|
||||||
# # see .example.env for how to generate tokens
|
|
||||||
# {env.OLLAMA_API_ID} {env.OLLAMA_API_TOKEN_DIGEST}
|
|
||||||
# }
|
|
||||||
|
|
||||||
handle /api/* {
|
|
||||||
# Comment to disable CORS
|
|
||||||
import cors-api
|
|
||||||
|
|
||||||
reverse_proxy localhost:11434
|
|
||||||
}
|
|
||||||
|
|
||||||
# Same-Origin Static Web Server
|
|
||||||
file_server {
|
|
||||||
root ./build/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -109,54 +109,7 @@ if os.path.exists(f"{DATA_DIR}/config.json"):
|
|||||||
|
|
||||||
DEFAULT_CONFIG = {
|
DEFAULT_CONFIG = {
|
||||||
"version": 0,
|
"version": 0,
|
||||||
"ui": {
|
"ui": {},
|
||||||
"default_locale": "",
|
|
||||||
"prompt_suggestions": [
|
|
||||||
{
|
|
||||||
"title": [
|
|
||||||
"Help me study",
|
|
||||||
"vocabulary for a college entrance exam",
|
|
||||||
],
|
|
||||||
"content": "Help me study vocabulary: write a sentence for me to fill in the blank, and I'll try to pick the correct option.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": [
|
|
||||||
"Give me ideas",
|
|
||||||
"for what to do with my kids' art",
|
|
||||||
],
|
|
||||||
"content": "What are 5 creative things I could do with my kids' art? I don't want to throw them away, but it's also so much clutter.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": ["Tell me a fun fact", "about the Roman Empire"],
|
|
||||||
"content": "Tell me a random fun fact about the Roman Empire",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": [
|
|
||||||
"Show me a code snippet",
|
|
||||||
"of a website's sticky header",
|
|
||||||
],
|
|
||||||
"content": "Show me a code snippet of a website's sticky header in CSS and JavaScript.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": [
|
|
||||||
"Explain options trading",
|
|
||||||
"if I'm familiar with buying and selling stocks",
|
|
||||||
],
|
|
||||||
"content": "Explain options trading in simple terms if I'm familiar with buying and selling stocks.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": ["Overcome procrastination", "give me tips"],
|
|
||||||
"content": "Could you start by asking me about instances when I procrastinate the most and then give me some suggestions to overcome it?",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": [
|
|
||||||
"Grammar check",
|
|
||||||
"rewrite it for better readability ",
|
|
||||||
],
|
|
||||||
"content": 'Check the following sentence for grammar and clarity: "[sentence]". Rewrite it for better readability while maintaining its original meaning.',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -552,6 +505,12 @@ OAUTH_ALLOWED_DOMAINS = PersistentConfig(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
OAUTH_UPDATE_PICTURE_ON_LOGIN = PersistentConfig(
|
||||||
|
"OAUTH_UPDATE_PICTURE_ON_LOGIN",
|
||||||
|
"oauth.update_picture_on_login",
|
||||||
|
os.environ.get("OAUTH_UPDATE_PICTURE_ON_LOGIN", "False").lower() == "true",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def load_oauth_providers():
|
def load_oauth_providers():
|
||||||
OAUTH_PROVIDERS.clear()
|
OAUTH_PROVIDERS.clear()
|
||||||
@@ -761,9 +720,10 @@ S3_BUCKET_NAME = os.environ.get("S3_BUCKET_NAME", None)
|
|||||||
S3_KEY_PREFIX = os.environ.get("S3_KEY_PREFIX", None)
|
S3_KEY_PREFIX = os.environ.get("S3_KEY_PREFIX", None)
|
||||||
S3_ENDPOINT_URL = os.environ.get("S3_ENDPOINT_URL", None)
|
S3_ENDPOINT_URL = os.environ.get("S3_ENDPOINT_URL", None)
|
||||||
S3_USE_ACCELERATE_ENDPOINT = (
|
S3_USE_ACCELERATE_ENDPOINT = (
|
||||||
os.environ.get("S3_USE_ACCELERATE_ENDPOINT", "False").lower() == "true"
|
os.environ.get("S3_USE_ACCELERATE_ENDPOINT", "false").lower() == "true"
|
||||||
)
|
)
|
||||||
S3_ADDRESSING_STYLE = os.environ.get("S3_ADDRESSING_STYLE", None)
|
S3_ADDRESSING_STYLE = os.environ.get("S3_ADDRESSING_STYLE", None)
|
||||||
|
S3_ENABLE_TAGGING = os.getenv("S3_ENABLE_TAGGING", "false").lower() == "true"
|
||||||
|
|
||||||
GCS_BUCKET_NAME = os.environ.get("GCS_BUCKET_NAME", None)
|
GCS_BUCKET_NAME = os.environ.get("GCS_BUCKET_NAME", None)
|
||||||
GOOGLE_APPLICATION_CREDENTIALS_JSON = os.environ.get(
|
GOOGLE_APPLICATION_CREDENTIALS_JSON = os.environ.get(
|
||||||
@@ -921,11 +881,19 @@ OPENAI_API_BASE_URL = "https://api.openai.com/v1"
|
|||||||
# TOOL_SERVERS
|
# TOOL_SERVERS
|
||||||
####################################
|
####################################
|
||||||
|
|
||||||
|
try:
|
||||||
|
tool_server_connections = json.loads(
|
||||||
|
os.environ.get("TOOL_SERVER_CONNECTIONS", "[]")
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
log.exception(f"Error loading TOOL_SERVER_CONNECTIONS: {e}")
|
||||||
|
tool_server_connections = []
|
||||||
|
|
||||||
|
|
||||||
TOOL_SERVER_CONNECTIONS = PersistentConfig(
|
TOOL_SERVER_CONNECTIONS = PersistentConfig(
|
||||||
"TOOL_SERVER_CONNECTIONS",
|
"TOOL_SERVER_CONNECTIONS",
|
||||||
"tool_server.connections",
|
"tool_server.connections",
|
||||||
[],
|
tool_server_connections,
|
||||||
)
|
)
|
||||||
|
|
||||||
####################################
|
####################################
|
||||||
@@ -1002,6 +970,7 @@ if default_prompt_suggestions == []:
|
|||||||
"content": "Could you start by asking me about instances when I procrastinate the most and then give me some suggestions to overcome it?",
|
"content": "Could you start by asking me about instances when I procrastinate the most and then give me some suggestions to overcome it?",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
DEFAULT_PROMPT_SUGGESTIONS = PersistentConfig(
|
DEFAULT_PROMPT_SUGGESTIONS = PersistentConfig(
|
||||||
"DEFAULT_PROMPT_SUGGESTIONS",
|
"DEFAULT_PROMPT_SUGGESTIONS",
|
||||||
"ui.prompt_suggestions",
|
"ui.prompt_suggestions",
|
||||||
@@ -1246,7 +1215,16 @@ ENABLE_USER_WEBHOOKS = PersistentConfig(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# FastAPI / AnyIO settings
|
# FastAPI / AnyIO settings
|
||||||
THREAD_POOL_SIZE = int(os.getenv("THREAD_POOL_SIZE", "0"))
|
THREAD_POOL_SIZE = os.getenv("THREAD_POOL_SIZE", None)
|
||||||
|
|
||||||
|
if THREAD_POOL_SIZE is not None and isinstance(THREAD_POOL_SIZE, str):
|
||||||
|
try:
|
||||||
|
THREAD_POOL_SIZE = int(THREAD_POOL_SIZE)
|
||||||
|
except ValueError:
|
||||||
|
log.warning(
|
||||||
|
f"THREAD_POOL_SIZE is not a valid integer: {THREAD_POOL_SIZE}. Defaulting to None."
|
||||||
|
)
|
||||||
|
THREAD_POOL_SIZE = None
|
||||||
|
|
||||||
|
|
||||||
def validate_cors_origins(origins):
|
def validate_cors_origins(origins):
|
||||||
@@ -1348,6 +1326,9 @@ Generate a concise, 3-5 word title with an emoji summarizing the chat history.
|
|||||||
- Use emojis that enhance understanding of the topic, but avoid quotation marks or special formatting.
|
- Use emojis that enhance understanding of the topic, but avoid quotation marks or special formatting.
|
||||||
- Write the title in the chat's primary language; default to English if multilingual.
|
- Write the title in the chat's primary language; default to English if multilingual.
|
||||||
- Prioritize accuracy over excessive creativity; keep it clear and simple.
|
- Prioritize accuracy over excessive creativity; keep it clear and simple.
|
||||||
|
- Your entire response must consist solely of the JSON object, without any introductory or concluding text.
|
||||||
|
- The output must be a single, raw JSON object, without any markdown code fences or other encapsulating text.
|
||||||
|
- Ensure no conversational text, affirmations, or explanations precede or follow the raw JSON output, as this will cause direct parsing failure.
|
||||||
### Output:
|
### Output:
|
||||||
JSON format: { "title": "your concise title here" }
|
JSON format: { "title": "your concise title here" }
|
||||||
### Examples:
|
### Examples:
|
||||||
@@ -1690,7 +1671,8 @@ DEFAULT_CODE_INTERPRETER_PROMPT = """
|
|||||||
1. **Code Interpreter**: `<code_interpreter type="code" lang="python"></code_interpreter>`
|
1. **Code Interpreter**: `<code_interpreter type="code" lang="python"></code_interpreter>`
|
||||||
- You have access to a Python shell that runs directly in the user's browser, enabling fast execution of code for analysis, calculations, or problem-solving. Use it in this response.
|
- You have access to a Python shell that runs directly in the user's browser, enabling fast execution of code for analysis, calculations, or problem-solving. Use it in this response.
|
||||||
- The Python code you write can incorporate a wide array of libraries, handle data manipulation or visualization, perform API calls for web-related tasks, or tackle virtually any computational challenge. Use this flexibility to **think outside the box, craft elegant solutions, and harness Python's full potential**.
|
- The Python code you write can incorporate a wide array of libraries, handle data manipulation or visualization, perform API calls for web-related tasks, or tackle virtually any computational challenge. Use this flexibility to **think outside the box, craft elegant solutions, and harness Python's full potential**.
|
||||||
- To use it, **you must enclose your code within `<code_interpreter type="code" lang="python">` XML tags** and stop right away. If you don't, the code won't execute. Do NOT use triple backticks.
|
- To use it, **you must enclose your code within `<code_interpreter type="code" lang="python">` XML tags** and stop right away. If you don't, the code won't execute.
|
||||||
|
- When writing code in the code_interpreter XML tag, Do NOT use the triple backticks code block for markdown formatting, example: ```py # python code ``` will cause an error because it is markdown formatting, it is not python code.
|
||||||
- When coding, **always aim to print meaningful outputs** (e.g., results, tables, summaries, or visuals) to better interpret and verify the findings. Avoid relying on implicit outputs; prioritize explicit and clear print statements so the results are effectively communicated to the user.
|
- When coding, **always aim to print meaningful outputs** (e.g., results, tables, summaries, or visuals) to better interpret and verify the findings. Avoid relying on implicit outputs; prioritize explicit and clear print statements so the results are effectively communicated to the user.
|
||||||
- After obtaining the printed output, **always provide a concise analysis, interpretation, or next steps to help the user understand the findings or refine the outcome further.**
|
- After obtaining the printed output, **always provide a concise analysis, interpretation, or next steps to help the user understand the findings or refine the outcome further.**
|
||||||
- If the results are unclear, unexpected, or require validation, refine the code and execute it again as needed. Always aim to deliver meaningful insights from the results, iterating if necessary.
|
- If the results are unclear, unexpected, or require validation, refine the code and execute it again as needed. Always aim to deliver meaningful insights from the results, iterating if necessary.
|
||||||
@@ -1737,6 +1719,12 @@ MILVUS_URI = os.environ.get("MILVUS_URI", f"{DATA_DIR}/vector_db/milvus.db")
|
|||||||
MILVUS_DB = os.environ.get("MILVUS_DB", "default")
|
MILVUS_DB = os.environ.get("MILVUS_DB", "default")
|
||||||
MILVUS_TOKEN = os.environ.get("MILVUS_TOKEN", None)
|
MILVUS_TOKEN = os.environ.get("MILVUS_TOKEN", None)
|
||||||
|
|
||||||
|
MILVUS_INDEX_TYPE = os.environ.get("MILVUS_INDEX_TYPE", "HNSW")
|
||||||
|
MILVUS_METRIC_TYPE = os.environ.get("MILVUS_METRIC_TYPE", "COSINE")
|
||||||
|
MILVUS_HNSW_M = int(os.environ.get("MILVUS_HNSW_M", "16"))
|
||||||
|
MILVUS_HNSW_EFCONSTRUCTION = int(os.environ.get("MILVUS_HNSW_EFCONSTRUCTION", "100"))
|
||||||
|
MILVUS_IVF_FLAT_NLIST = int(os.environ.get("MILVUS_IVF_FLAT_NLIST", "128"))
|
||||||
|
|
||||||
# Qdrant
|
# Qdrant
|
||||||
QDRANT_URI = os.environ.get("QDRANT_URI", None)
|
QDRANT_URI = os.environ.get("QDRANT_URI", None)
|
||||||
QDRANT_API_KEY = os.environ.get("QDRANT_API_KEY", None)
|
QDRANT_API_KEY = os.environ.get("QDRANT_API_KEY", None)
|
||||||
@@ -1824,6 +1812,11 @@ ONEDRIVE_SHAREPOINT_URL = PersistentConfig(
|
|||||||
os.environ.get("ONEDRIVE_SHAREPOINT_URL", ""),
|
os.environ.get("ONEDRIVE_SHAREPOINT_URL", ""),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
ONEDRIVE_SHAREPOINT_TENANT_ID = PersistentConfig(
|
||||||
|
"ONEDRIVE_SHAREPOINT_TENANT_ID",
|
||||||
|
"onedrive.sharepoint_tenant_id",
|
||||||
|
os.environ.get("ONEDRIVE_SHAREPOINT_TENANT_ID", ""),
|
||||||
|
)
|
||||||
|
|
||||||
# RAG Content Extraction
|
# RAG Content Extraction
|
||||||
CONTENT_EXTRACTION_ENGINE = PersistentConfig(
|
CONTENT_EXTRACTION_ENGINE = PersistentConfig(
|
||||||
@@ -1972,6 +1965,12 @@ RAG_EMBEDDING_PREFIX_FIELD_NAME = os.environ.get(
|
|||||||
"RAG_EMBEDDING_PREFIX_FIELD_NAME", None
|
"RAG_EMBEDDING_PREFIX_FIELD_NAME", None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
RAG_RERANKING_ENGINE = PersistentConfig(
|
||||||
|
"RAG_RERANKING_ENGINE",
|
||||||
|
"rag.reranking_engine",
|
||||||
|
os.environ.get("RAG_RERANKING_ENGINE", ""),
|
||||||
|
)
|
||||||
|
|
||||||
RAG_RERANKING_MODEL = PersistentConfig(
|
RAG_RERANKING_MODEL = PersistentConfig(
|
||||||
"RAG_RERANKING_MODEL",
|
"RAG_RERANKING_MODEL",
|
||||||
"rag.reranking_model",
|
"rag.reranking_model",
|
||||||
@@ -1980,6 +1979,7 @@ RAG_RERANKING_MODEL = PersistentConfig(
|
|||||||
if RAG_RERANKING_MODEL.value != "":
|
if RAG_RERANKING_MODEL.value != "":
|
||||||
log.info(f"Reranking model set: {RAG_RERANKING_MODEL.value}")
|
log.info(f"Reranking model set: {RAG_RERANKING_MODEL.value}")
|
||||||
|
|
||||||
|
|
||||||
RAG_RERANKING_MODEL_AUTO_UPDATE = (
|
RAG_RERANKING_MODEL_AUTO_UPDATE = (
|
||||||
not OFFLINE_MODE
|
not OFFLINE_MODE
|
||||||
and os.environ.get("RAG_RERANKING_MODEL_AUTO_UPDATE", "True").lower() == "true"
|
and os.environ.get("RAG_RERANKING_MODEL_AUTO_UPDATE", "True").lower() == "true"
|
||||||
@@ -1989,6 +1989,18 @@ RAG_RERANKING_MODEL_TRUST_REMOTE_CODE = (
|
|||||||
os.environ.get("RAG_RERANKING_MODEL_TRUST_REMOTE_CODE", "True").lower() == "true"
|
os.environ.get("RAG_RERANKING_MODEL_TRUST_REMOTE_CODE", "True").lower() == "true"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
RAG_EXTERNAL_RERANKER_URL = PersistentConfig(
|
||||||
|
"RAG_EXTERNAL_RERANKER_URL",
|
||||||
|
"rag.external_reranker_url",
|
||||||
|
os.environ.get("RAG_EXTERNAL_RERANKER_URL", ""),
|
||||||
|
)
|
||||||
|
|
||||||
|
RAG_EXTERNAL_RERANKER_API_KEY = PersistentConfig(
|
||||||
|
"RAG_EXTERNAL_RERANKER_API_KEY",
|
||||||
|
"rag.external_reranker_api_key",
|
||||||
|
os.environ.get("RAG_EXTERNAL_RERANKER_API_KEY", ""),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
RAG_TEXT_SPLITTER = PersistentConfig(
|
RAG_TEXT_SPLITTER = PersistentConfig(
|
||||||
"RAG_TEXT_SPLITTER",
|
"RAG_TEXT_SPLITTER",
|
||||||
@@ -2689,7 +2701,7 @@ AUDIO_STT_AZURE_BASE_URL = PersistentConfig(
|
|||||||
AUDIO_STT_AZURE_MAX_SPEAKERS = PersistentConfig(
|
AUDIO_STT_AZURE_MAX_SPEAKERS = PersistentConfig(
|
||||||
"AUDIO_STT_AZURE_MAX_SPEAKERS",
|
"AUDIO_STT_AZURE_MAX_SPEAKERS",
|
||||||
"audio.stt.azure.max_speakers",
|
"audio.stt.azure.max_speakers",
|
||||||
os.getenv("AUDIO_STT_AZURE_MAX_SPEAKERS", "3"),
|
os.getenv("AUDIO_STT_AZURE_MAX_SPEAKERS", ""),
|
||||||
)
|
)
|
||||||
|
|
||||||
AUDIO_TTS_OPENAI_API_BASE_URL = PersistentConfig(
|
AUDIO_TTS_OPENAI_API_BASE_URL = PersistentConfig(
|
||||||
@@ -2737,7 +2749,13 @@ AUDIO_TTS_SPLIT_ON = PersistentConfig(
|
|||||||
AUDIO_TTS_AZURE_SPEECH_REGION = PersistentConfig(
|
AUDIO_TTS_AZURE_SPEECH_REGION = PersistentConfig(
|
||||||
"AUDIO_TTS_AZURE_SPEECH_REGION",
|
"AUDIO_TTS_AZURE_SPEECH_REGION",
|
||||||
"audio.tts.azure.speech_region",
|
"audio.tts.azure.speech_region",
|
||||||
os.getenv("AUDIO_TTS_AZURE_SPEECH_REGION", "eastus"),
|
os.getenv("AUDIO_TTS_AZURE_SPEECH_REGION", ""),
|
||||||
|
)
|
||||||
|
|
||||||
|
AUDIO_TTS_AZURE_SPEECH_BASE_URL = PersistentConfig(
|
||||||
|
"AUDIO_TTS_AZURE_SPEECH_BASE_URL",
|
||||||
|
"audio.tts.azure.speech_base_url",
|
||||||
|
os.getenv("AUDIO_TTS_AZURE_SPEECH_BASE_URL", ""),
|
||||||
)
|
)
|
||||||
|
|
||||||
AUDIO_TTS_AZURE_SPEECH_OUTPUT_FORMAT = PersistentConfig(
|
AUDIO_TTS_AZURE_SPEECH_OUTPUT_FORMAT = PersistentConfig(
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ from open_webui.config import (
|
|||||||
ENABLE_OPENAI_API,
|
ENABLE_OPENAI_API,
|
||||||
ONEDRIVE_CLIENT_ID,
|
ONEDRIVE_CLIENT_ID,
|
||||||
ONEDRIVE_SHAREPOINT_URL,
|
ONEDRIVE_SHAREPOINT_URL,
|
||||||
|
ONEDRIVE_SHAREPOINT_TENANT_ID,
|
||||||
OPENAI_API_BASE_URLS,
|
OPENAI_API_BASE_URLS,
|
||||||
OPENAI_API_KEYS,
|
OPENAI_API_KEYS,
|
||||||
OPENAI_API_CONFIGS,
|
OPENAI_API_CONFIGS,
|
||||||
@@ -166,6 +167,7 @@ from open_webui.config import (
|
|||||||
AUDIO_TTS_SPLIT_ON,
|
AUDIO_TTS_SPLIT_ON,
|
||||||
AUDIO_TTS_VOICE,
|
AUDIO_TTS_VOICE,
|
||||||
AUDIO_TTS_AZURE_SPEECH_REGION,
|
AUDIO_TTS_AZURE_SPEECH_REGION,
|
||||||
|
AUDIO_TTS_AZURE_SPEECH_BASE_URL,
|
||||||
AUDIO_TTS_AZURE_SPEECH_OUTPUT_FORMAT,
|
AUDIO_TTS_AZURE_SPEECH_OUTPUT_FORMAT,
|
||||||
PLAYWRIGHT_WS_URL,
|
PLAYWRIGHT_WS_URL,
|
||||||
PLAYWRIGHT_TIMEOUT,
|
PLAYWRIGHT_TIMEOUT,
|
||||||
@@ -186,7 +188,10 @@ from open_webui.config import (
|
|||||||
RAG_EMBEDDING_MODEL,
|
RAG_EMBEDDING_MODEL,
|
||||||
RAG_EMBEDDING_MODEL_AUTO_UPDATE,
|
RAG_EMBEDDING_MODEL_AUTO_UPDATE,
|
||||||
RAG_EMBEDDING_MODEL_TRUST_REMOTE_CODE,
|
RAG_EMBEDDING_MODEL_TRUST_REMOTE_CODE,
|
||||||
|
RAG_RERANKING_ENGINE,
|
||||||
RAG_RERANKING_MODEL,
|
RAG_RERANKING_MODEL,
|
||||||
|
RAG_EXTERNAL_RERANKER_URL,
|
||||||
|
RAG_EXTERNAL_RERANKER_API_KEY,
|
||||||
RAG_RERANKING_MODEL_AUTO_UPDATE,
|
RAG_RERANKING_MODEL_AUTO_UPDATE,
|
||||||
RAG_RERANKING_MODEL_TRUST_REMOTE_CODE,
|
RAG_RERANKING_MODEL_TRUST_REMOTE_CODE,
|
||||||
RAG_EMBEDDING_ENGINE,
|
RAG_EMBEDDING_ENGINE,
|
||||||
@@ -254,6 +259,7 @@ from open_webui.config import (
|
|||||||
GOOGLE_DRIVE_API_KEY,
|
GOOGLE_DRIVE_API_KEY,
|
||||||
ONEDRIVE_CLIENT_ID,
|
ONEDRIVE_CLIENT_ID,
|
||||||
ONEDRIVE_SHAREPOINT_URL,
|
ONEDRIVE_SHAREPOINT_URL,
|
||||||
|
ONEDRIVE_SHAREPOINT_TENANT_ID,
|
||||||
ENABLE_RAG_HYBRID_SEARCH,
|
ENABLE_RAG_HYBRID_SEARCH,
|
||||||
ENABLE_RAG_LOCAL_WEB_FETCH,
|
ENABLE_RAG_LOCAL_WEB_FETCH,
|
||||||
ENABLE_WEB_LOADER_SSL_VERIFICATION,
|
ENABLE_WEB_LOADER_SSL_VERIFICATION,
|
||||||
@@ -437,7 +443,7 @@ print(
|
|||||||
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚══╝╚══╝ ╚══════╝╚═════╝ ╚═════╝ ╚═╝
|
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚══╝╚══╝ ╚══════╝╚═════╝ ╚═════╝ ╚═╝
|
||||||
|
|
||||||
|
|
||||||
v{VERSION} - building the best open-source AI user interface.
|
v{VERSION} - building the best AI user interface.
|
||||||
{f"Commit: {WEBUI_BUILD_HASH}" if WEBUI_BUILD_HASH != "dev-build" else ""}
|
{f"Commit: {WEBUI_BUILD_HASH}" if WEBUI_BUILD_HASH != "dev-build" else ""}
|
||||||
https://github.com/open-webui/open-webui
|
https://github.com/open-webui/open-webui
|
||||||
"""
|
"""
|
||||||
@@ -458,10 +464,9 @@ async def lifespan(app: FastAPI):
|
|||||||
log.info("Installing external dependencies of functions and tools...")
|
log.info("Installing external dependencies of functions and tools...")
|
||||||
install_tool_and_function_dependencies()
|
install_tool_and_function_dependencies()
|
||||||
|
|
||||||
pool_size = THREAD_POOL_SIZE
|
if THREAD_POOL_SIZE and THREAD_POOL_SIZE > 0:
|
||||||
if pool_size and pool_size > 0:
|
|
||||||
limiter = anyio.to_thread.current_default_thread_limiter()
|
limiter = anyio.to_thread.current_default_thread_limiter()
|
||||||
limiter.total_tokens = pool_size
|
limiter.total_tokens = THREAD_POOL_SIZE
|
||||||
|
|
||||||
asyncio.create_task(periodic_usage_pool_cleanup())
|
asyncio.create_task(periodic_usage_pool_cleanup())
|
||||||
|
|
||||||
@@ -653,7 +658,12 @@ app.state.config.CHUNK_OVERLAP = CHUNK_OVERLAP
|
|||||||
app.state.config.RAG_EMBEDDING_ENGINE = RAG_EMBEDDING_ENGINE
|
app.state.config.RAG_EMBEDDING_ENGINE = RAG_EMBEDDING_ENGINE
|
||||||
app.state.config.RAG_EMBEDDING_MODEL = RAG_EMBEDDING_MODEL
|
app.state.config.RAG_EMBEDDING_MODEL = RAG_EMBEDDING_MODEL
|
||||||
app.state.config.RAG_EMBEDDING_BATCH_SIZE = RAG_EMBEDDING_BATCH_SIZE
|
app.state.config.RAG_EMBEDDING_BATCH_SIZE = RAG_EMBEDDING_BATCH_SIZE
|
||||||
|
|
||||||
|
app.state.config.RAG_RERANKING_ENGINE = RAG_RERANKING_ENGINE
|
||||||
app.state.config.RAG_RERANKING_MODEL = RAG_RERANKING_MODEL
|
app.state.config.RAG_RERANKING_MODEL = RAG_RERANKING_MODEL
|
||||||
|
app.state.config.RAG_EXTERNAL_RERANKER_URL = RAG_EXTERNAL_RERANKER_URL
|
||||||
|
app.state.config.RAG_EXTERNAL_RERANKER_API_KEY = RAG_EXTERNAL_RERANKER_API_KEY
|
||||||
|
|
||||||
app.state.config.RAG_TEMPLATE = RAG_TEMPLATE
|
app.state.config.RAG_TEMPLATE = RAG_TEMPLATE
|
||||||
|
|
||||||
app.state.config.RAG_OPENAI_API_BASE_URL = RAG_OPENAI_API_BASE_URL
|
app.state.config.RAG_OPENAI_API_BASE_URL = RAG_OPENAI_API_BASE_URL
|
||||||
@@ -734,7 +744,10 @@ try:
|
|||||||
)
|
)
|
||||||
|
|
||||||
app.state.rf = get_rf(
|
app.state.rf = get_rf(
|
||||||
|
app.state.config.RAG_RERANKING_ENGINE,
|
||||||
app.state.config.RAG_RERANKING_MODEL,
|
app.state.config.RAG_RERANKING_MODEL,
|
||||||
|
app.state.config.RAG_EXTERNAL_RERANKER_URL,
|
||||||
|
app.state.config.RAG_EXTERNAL_RERANKER_API_KEY,
|
||||||
RAG_RERANKING_MODEL_AUTO_UPDATE,
|
RAG_RERANKING_MODEL_AUTO_UPDATE,
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -852,6 +865,7 @@ app.state.config.TTS_SPLIT_ON = AUDIO_TTS_SPLIT_ON
|
|||||||
|
|
||||||
|
|
||||||
app.state.config.TTS_AZURE_SPEECH_REGION = AUDIO_TTS_AZURE_SPEECH_REGION
|
app.state.config.TTS_AZURE_SPEECH_REGION = AUDIO_TTS_AZURE_SPEECH_REGION
|
||||||
|
app.state.config.TTS_AZURE_SPEECH_BASE_URL = AUDIO_TTS_AZURE_SPEECH_BASE_URL
|
||||||
app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT = AUDIO_TTS_AZURE_SPEECH_OUTPUT_FORMAT
|
app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT = AUDIO_TTS_AZURE_SPEECH_OUTPUT_FORMAT
|
||||||
|
|
||||||
|
|
||||||
@@ -1379,6 +1393,7 @@ async def get_app_config(request: Request):
|
|||||||
"onedrive": {
|
"onedrive": {
|
||||||
"client_id": ONEDRIVE_CLIENT_ID.value,
|
"client_id": ONEDRIVE_CLIENT_ID.value,
|
||||||
"sharepoint_url": ONEDRIVE_SHAREPOINT_URL.value,
|
"sharepoint_url": ONEDRIVE_SHAREPOINT_URL.value,
|
||||||
|
"sharepoint_tenant_id": ONEDRIVE_SHAREPOINT_TENANT_ID.value,
|
||||||
},
|
},
|
||||||
"license_metadata": app.state.LICENSE_METADATA,
|
"license_metadata": app.state.LICENSE_METADATA,
|
||||||
**(
|
**(
|
||||||
|
|||||||
@@ -391,5 +391,13 @@ class UsersTable:
|
|||||||
users = db.query(User).filter(User.id.in_(user_ids)).all()
|
users = db.query(User).filter(User.id.in_(user_ids)).all()
|
||||||
return [user.id for user in users]
|
return [user.id for user in users]
|
||||||
|
|
||||||
|
def get_super_admin_user(self) -> Optional[UserModel]:
|
||||||
|
with get_db() as db:
|
||||||
|
user = db.query(User).filter_by(role="admin").first()
|
||||||
|
if user:
|
||||||
|
return UserModel.model_validate(user)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
Users = UsersTable()
|
Users = UsersTable()
|
||||||
|
|||||||
@@ -85,11 +85,13 @@ known_source_ext = [
|
|||||||
|
|
||||||
|
|
||||||
class TikaLoader:
|
class TikaLoader:
|
||||||
def __init__(self, url, file_path, mime_type=None):
|
def __init__(self, url, file_path, mime_type=None, extract_images=None):
|
||||||
self.url = url
|
self.url = url
|
||||||
self.file_path = file_path
|
self.file_path = file_path
|
||||||
self.mime_type = mime_type
|
self.mime_type = mime_type
|
||||||
|
|
||||||
|
self.extract_images = extract_images
|
||||||
|
|
||||||
def load(self) -> list[Document]:
|
def load(self) -> list[Document]:
|
||||||
with open(self.file_path, "rb") as f:
|
with open(self.file_path, "rb") as f:
|
||||||
data = f.read()
|
data = f.read()
|
||||||
@@ -99,7 +101,7 @@ class TikaLoader:
|
|||||||
else:
|
else:
|
||||||
headers = {}
|
headers = {}
|
||||||
|
|
||||||
if self.kwargs.get("PDF_EXTRACT_IMAGES") == True:
|
if self.extract_images == True:
|
||||||
headers["X-Tika-PDFextractInlineImages"] = "true"
|
headers["X-Tika-PDFextractInlineImages"] = "true"
|
||||||
|
|
||||||
endpoint = self.url
|
endpoint = self.url
|
||||||
@@ -213,6 +215,7 @@ class Loader:
|
|||||||
url=self.kwargs.get("TIKA_SERVER_URL"),
|
url=self.kwargs.get("TIKA_SERVER_URL"),
|
||||||
file_path=file_path,
|
file_path=file_path,
|
||||||
mime_type=file_content_type,
|
mime_type=file_content_type,
|
||||||
|
extract_images=self.kwargs.get("PDF_EXTRACT_IMAGES"),
|
||||||
)
|
)
|
||||||
elif self.engine == "docling" and self.kwargs.get("DOCLING_SERVER_URL"):
|
elif self.engine == "docling" and self.kwargs.get("DOCLING_SERVER_URL"):
|
||||||
if self._is_text_file(file_ext, file_content_type):
|
if self._is_text_file(file_ext, file_content_type):
|
||||||
|
|||||||
@@ -62,12 +62,17 @@ class YoutubeLoader:
|
|||||||
_video_id = _parse_video_id(video_id)
|
_video_id = _parse_video_id(video_id)
|
||||||
self.video_id = _video_id if _video_id is not None else video_id
|
self.video_id = _video_id if _video_id is not None else video_id
|
||||||
self._metadata = {"source": video_id}
|
self._metadata = {"source": video_id}
|
||||||
self.language = language
|
|
||||||
self.proxy_url = proxy_url
|
self.proxy_url = proxy_url
|
||||||
|
|
||||||
|
# Ensure language is a list
|
||||||
if isinstance(language, str):
|
if isinstance(language, str):
|
||||||
self.language = [language]
|
self.language = [language]
|
||||||
else:
|
else:
|
||||||
self.language = language
|
self.language = list(language)
|
||||||
|
|
||||||
|
# Add English as fallback if not already in the list
|
||||||
|
if "en" not in self.language:
|
||||||
|
self.language.append("en")
|
||||||
|
|
||||||
def load(self) -> List[Document]:
|
def load(self) -> List[Document]:
|
||||||
"""Load YouTube transcripts into `Document` objects."""
|
"""Load YouTube transcripts into `Document` objects."""
|
||||||
@@ -101,17 +106,31 @@ class YoutubeLoader:
|
|||||||
log.exception("Loading YouTube transcript failed")
|
log.exception("Loading YouTube transcript failed")
|
||||||
return []
|
return []
|
||||||
|
|
||||||
try:
|
# Try each language in order of priority
|
||||||
transcript = transcript_list.find_transcript(self.language)
|
for lang in self.language:
|
||||||
except NoTranscriptFound:
|
try:
|
||||||
transcript = transcript_list.find_transcript(["en"])
|
transcript = transcript_list.find_transcript([lang])
|
||||||
|
log.debug(f"Found transcript for language '{lang}'")
|
||||||
|
transcript_pieces: List[Dict[str, Any]] = transcript.fetch()
|
||||||
|
transcript_text = " ".join(
|
||||||
|
map(
|
||||||
|
lambda transcript_piece: transcript_piece.text.strip(" "),
|
||||||
|
transcript_pieces,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return [Document(page_content=transcript_text, metadata=self._metadata)]
|
||||||
|
except NoTranscriptFound:
|
||||||
|
log.debug(f"No transcript found for language '{lang}'")
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
log.info(f"Error finding transcript for language '{lang}'")
|
||||||
|
raise e
|
||||||
|
|
||||||
transcript_pieces: List[Dict[str, Any]] = transcript.fetch()
|
# If we get here, all languages failed
|
||||||
|
languages_tried = ", ".join(self.language)
|
||||||
transcript = " ".join(
|
log.warning(
|
||||||
map(
|
f"No transcript found for any of the specified languages: {languages_tried}. Verify if the video has transcripts, add more languages if needed."
|
||||||
lambda transcript_piece: transcript_piece.text.strip(" "),
|
)
|
||||||
transcript_pieces,
|
raise NoTranscriptFound(
|
||||||
)
|
f"No transcript found for any supported language. Verify if the video has transcripts, add more languages if needed."
|
||||||
)
|
)
|
||||||
return [Document(page_content=transcript, metadata=self._metadata)]
|
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
import logging
|
||||||
|
import requests
|
||||||
|
from typing import Optional, List, Tuple
|
||||||
|
|
||||||
|
from open_webui.env import SRC_LOG_LEVELS
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
log.setLevel(SRC_LOG_LEVELS["RAG"])
|
||||||
|
|
||||||
|
|
||||||
|
class ExternalReranker:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
api_key: str,
|
||||||
|
url: str = "http://localhost:8080/v1/rerank",
|
||||||
|
model: str = "reranker",
|
||||||
|
):
|
||||||
|
self.api_key = api_key
|
||||||
|
self.url = url
|
||||||
|
self.model = model
|
||||||
|
|
||||||
|
def predict(self, sentences: List[Tuple[str, str]]) -> Optional[List[float]]:
|
||||||
|
query = sentences[0][0]
|
||||||
|
docs = [i[1] for i in sentences]
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
"model": self.model,
|
||||||
|
"query": query,
|
||||||
|
"documents": docs,
|
||||||
|
"top_n": len(docs),
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
log.info(f"ExternalReranker:predict:model {self.model}")
|
||||||
|
log.info(f"ExternalReranker:predict:query {query}")
|
||||||
|
|
||||||
|
r = requests.post(
|
||||||
|
f"{self.url}",
|
||||||
|
headers={
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Authorization": f"Bearer {self.api_key}",
|
||||||
|
},
|
||||||
|
json=payload,
|
||||||
|
)
|
||||||
|
|
||||||
|
r.raise_for_status()
|
||||||
|
data = r.json()
|
||||||
|
|
||||||
|
if "results" in data:
|
||||||
|
sorted_results = sorted(data["results"], key=lambda x: x["index"])
|
||||||
|
return [result["relevance_score"] for result in sorted_results]
|
||||||
|
else:
|
||||||
|
log.error("No results found in external reranking response")
|
||||||
|
return None
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
log.exception(f"Error in external reranking: {e}")
|
||||||
|
return None
|
||||||
@@ -818,7 +818,9 @@ class RerankCompressor(BaseDocumentCompressor):
|
|||||||
)
|
)
|
||||||
scores = util.cos_sim(query_embedding, document_embedding)[0]
|
scores = util.cos_sim(query_embedding, document_embedding)[0]
|
||||||
|
|
||||||
docs_with_scores = list(zip(documents, scores.tolist()))
|
docs_with_scores = list(
|
||||||
|
zip(documents, scores.tolist() if not isinstance(scores, list) else scores)
|
||||||
|
)
|
||||||
if self.r_score:
|
if self.r_score:
|
||||||
docs_with_scores = [
|
docs_with_scores = [
|
||||||
(d, s) for d, s in docs_with_scores if s >= self.r_score
|
(d, s) for d, s in docs_with_scores if s >= self.r_score
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ from pymilvus import FieldSchema, DataType
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from open_webui.retrieval.vector.main import (
|
from open_webui.retrieval.vector.main import (
|
||||||
VectorDBBase,
|
VectorDBBase,
|
||||||
VectorItem,
|
VectorItem,
|
||||||
@@ -14,6 +13,11 @@ from open_webui.config import (
|
|||||||
MILVUS_URI,
|
MILVUS_URI,
|
||||||
MILVUS_DB,
|
MILVUS_DB,
|
||||||
MILVUS_TOKEN,
|
MILVUS_TOKEN,
|
||||||
|
MILVUS_INDEX_TYPE,
|
||||||
|
MILVUS_METRIC_TYPE,
|
||||||
|
MILVUS_HNSW_M,
|
||||||
|
MILVUS_HNSW_EFCONSTRUCTION,
|
||||||
|
MILVUS_IVF_FLAT_NLIST,
|
||||||
)
|
)
|
||||||
from open_webui.env import SRC_LOG_LEVELS
|
from open_webui.env import SRC_LOG_LEVELS
|
||||||
|
|
||||||
@@ -33,7 +37,6 @@ class MilvusClient(VectorDBBase):
|
|||||||
ids = []
|
ids = []
|
||||||
documents = []
|
documents = []
|
||||||
metadatas = []
|
metadatas = []
|
||||||
|
|
||||||
for match in result:
|
for match in result:
|
||||||
_ids = []
|
_ids = []
|
||||||
_documents = []
|
_documents = []
|
||||||
@@ -42,11 +45,9 @@ class MilvusClient(VectorDBBase):
|
|||||||
_ids.append(item.get("id"))
|
_ids.append(item.get("id"))
|
||||||
_documents.append(item.get("data", {}).get("text"))
|
_documents.append(item.get("data", {}).get("text"))
|
||||||
_metadatas.append(item.get("metadata"))
|
_metadatas.append(item.get("metadata"))
|
||||||
|
|
||||||
ids.append(_ids)
|
ids.append(_ids)
|
||||||
documents.append(_documents)
|
documents.append(_documents)
|
||||||
metadatas.append(_metadatas)
|
metadatas.append(_metadatas)
|
||||||
|
|
||||||
return GetResult(
|
return GetResult(
|
||||||
**{
|
**{
|
||||||
"ids": ids,
|
"ids": ids,
|
||||||
@@ -60,13 +61,11 @@ class MilvusClient(VectorDBBase):
|
|||||||
distances = []
|
distances = []
|
||||||
documents = []
|
documents = []
|
||||||
metadatas = []
|
metadatas = []
|
||||||
|
|
||||||
for match in result:
|
for match in result:
|
||||||
_ids = []
|
_ids = []
|
||||||
_distances = []
|
_distances = []
|
||||||
_documents = []
|
_documents = []
|
||||||
_metadatas = []
|
_metadatas = []
|
||||||
|
|
||||||
for item in match:
|
for item in match:
|
||||||
_ids.append(item.get("id"))
|
_ids.append(item.get("id"))
|
||||||
# normalize milvus score from [-1, 1] to [0, 1] range
|
# normalize milvus score from [-1, 1] to [0, 1] range
|
||||||
@@ -75,12 +74,10 @@ class MilvusClient(VectorDBBase):
|
|||||||
_distances.append(_dist)
|
_distances.append(_dist)
|
||||||
_documents.append(item.get("entity", {}).get("data", {}).get("text"))
|
_documents.append(item.get("entity", {}).get("data", {}).get("text"))
|
||||||
_metadatas.append(item.get("entity", {}).get("metadata"))
|
_metadatas.append(item.get("entity", {}).get("metadata"))
|
||||||
|
|
||||||
ids.append(_ids)
|
ids.append(_ids)
|
||||||
distances.append(_distances)
|
distances.append(_distances)
|
||||||
documents.append(_documents)
|
documents.append(_documents)
|
||||||
metadatas.append(_metadatas)
|
metadatas.append(_metadatas)
|
||||||
|
|
||||||
return SearchResult(
|
return SearchResult(
|
||||||
**{
|
**{
|
||||||
"ids": ids,
|
"ids": ids,
|
||||||
@@ -113,11 +110,39 @@ class MilvusClient(VectorDBBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
index_params = self.client.prepare_index_params()
|
index_params = self.client.prepare_index_params()
|
||||||
|
|
||||||
|
# Use configurations from config.py
|
||||||
|
index_type = MILVUS_INDEX_TYPE.upper()
|
||||||
|
metric_type = MILVUS_METRIC_TYPE.upper()
|
||||||
|
|
||||||
|
log.info(f"Using Milvus index type: {index_type}, metric type: {metric_type}")
|
||||||
|
|
||||||
|
index_creation_params = {}
|
||||||
|
if index_type == "HNSW":
|
||||||
|
index_creation_params = {
|
||||||
|
"M": MILVUS_HNSW_M,
|
||||||
|
"efConstruction": MILVUS_HNSW_EFCONSTRUCTION,
|
||||||
|
}
|
||||||
|
log.info(f"HNSW params: {index_creation_params}")
|
||||||
|
elif index_type == "IVF_FLAT":
|
||||||
|
index_creation_params = {"nlist": MILVUS_IVF_FLAT_NLIST}
|
||||||
|
log.info(f"IVF_FLAT params: {index_creation_params}")
|
||||||
|
elif index_type in ["FLAT", "AUTOINDEX"]:
|
||||||
|
log.info(f"Using {index_type} index with no specific build-time params.")
|
||||||
|
else:
|
||||||
|
log.warning(
|
||||||
|
f"Unsupported MILVUS_INDEX_TYPE: '{index_type}'. "
|
||||||
|
f"Supported types: HNSW, IVF_FLAT, FLAT, AUTOINDEX. "
|
||||||
|
f"Milvus will use its default for the collection if this type is not directly supported for index creation."
|
||||||
|
)
|
||||||
|
# For unsupported types, pass the type directly to Milvus; it might handle it or use a default.
|
||||||
|
# If Milvus errors out, the user needs to correct the MILVUS_INDEX_TYPE env var.
|
||||||
|
|
||||||
index_params.add_index(
|
index_params.add_index(
|
||||||
field_name="vector",
|
field_name="vector",
|
||||||
index_type="HNSW",
|
index_type=index_type,
|
||||||
metric_type="COSINE",
|
metric_type=metric_type,
|
||||||
params={"M": 16, "efConstruction": 100},
|
params=index_creation_params,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.client.create_collection(
|
self.client.create_collection(
|
||||||
@@ -125,6 +150,9 @@ class MilvusClient(VectorDBBase):
|
|||||||
schema=schema,
|
schema=schema,
|
||||||
index_params=index_params,
|
index_params=index_params,
|
||||||
)
|
)
|
||||||
|
log.info(
|
||||||
|
f"Successfully created collection '{self.collection_prefix}_{collection_name}' with index type '{index_type}' and metric '{metric_type}'."
|
||||||
|
)
|
||||||
|
|
||||||
def has_collection(self, collection_name: str) -> bool:
|
def has_collection(self, collection_name: str) -> bool:
|
||||||
# Check if the collection exists based on the collection name.
|
# Check if the collection exists based on the collection name.
|
||||||
@@ -145,84 +173,113 @@ class MilvusClient(VectorDBBase):
|
|||||||
) -> Optional[SearchResult]:
|
) -> Optional[SearchResult]:
|
||||||
# Search for the nearest neighbor items based on the vectors and return 'limit' number of results.
|
# Search for the nearest neighbor items based on the vectors and return 'limit' number of results.
|
||||||
collection_name = collection_name.replace("-", "_")
|
collection_name = collection_name.replace("-", "_")
|
||||||
|
# For some index types like IVF_FLAT, search params like nprobe can be set.
|
||||||
|
# Example: search_params = {"nprobe": 10} if using IVF_FLAT
|
||||||
|
# For simplicity, not adding configurable search_params here, but could be extended.
|
||||||
result = self.client.search(
|
result = self.client.search(
|
||||||
collection_name=f"{self.collection_prefix}_{collection_name}",
|
collection_name=f"{self.collection_prefix}_{collection_name}",
|
||||||
data=vectors,
|
data=vectors,
|
||||||
limit=limit,
|
limit=limit,
|
||||||
output_fields=["data", "metadata"],
|
output_fields=["data", "metadata"],
|
||||||
|
# search_params=search_params # Potentially add later if needed
|
||||||
)
|
)
|
||||||
|
|
||||||
return self._result_to_search_result(result)
|
return self._result_to_search_result(result)
|
||||||
|
|
||||||
def query(self, collection_name: str, filter: dict, limit: Optional[int] = None):
|
def query(self, collection_name: str, filter: dict, limit: Optional[int] = None):
|
||||||
# Construct the filter string for querying
|
# Construct the filter string for querying
|
||||||
collection_name = collection_name.replace("-", "_")
|
collection_name = collection_name.replace("-", "_")
|
||||||
if not self.has_collection(collection_name):
|
if not self.has_collection(collection_name):
|
||||||
|
log.warning(
|
||||||
|
f"Query attempted on non-existent collection: {self.collection_prefix}_{collection_name}"
|
||||||
|
)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
filter_string = " && ".join(
|
filter_string = " && ".join(
|
||||||
[
|
[
|
||||||
f'metadata["{key}"] == {json.dumps(value)}'
|
f'metadata["{key}"] == {json.dumps(value)}'
|
||||||
for key, value in filter.items()
|
for key, value in filter.items()
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
max_limit = 16383 # The maximum number of records per request
|
max_limit = 16383 # The maximum number of records per request
|
||||||
all_results = []
|
all_results = []
|
||||||
|
|
||||||
if limit is None:
|
if limit is None:
|
||||||
limit = float("inf") # Use infinity as a placeholder for no limit
|
# Milvus default limit for query if not specified is 16384, but docs mention iteration.
|
||||||
|
# Let's set a practical high number if "all" is intended, or handle true pagination.
|
||||||
|
# For now, if limit is None, we'll fetch in batches up to a very large number.
|
||||||
|
# This part could be refined based on expected use cases for "get all".
|
||||||
|
# For this function signature, None implies "as many as possible" up to Milvus limits.
|
||||||
|
limit = (
|
||||||
|
16384 * 10
|
||||||
|
) # A large number to signify fetching many, will be capped by actual data or max_limit per call.
|
||||||
|
log.info(
|
||||||
|
f"Limit not specified for query, fetching up to {limit} results in batches."
|
||||||
|
)
|
||||||
|
|
||||||
# Initialize offset and remaining to handle pagination
|
# Initialize offset and remaining to handle pagination
|
||||||
offset = 0
|
offset = 0
|
||||||
remaining = limit
|
remaining = limit
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
log.info(
|
||||||
|
f"Querying collection {self.collection_prefix}_{collection_name} with filter: '{filter_string}', limit: {limit}"
|
||||||
|
)
|
||||||
# Loop until there are no more items to fetch or the desired limit is reached
|
# Loop until there are no more items to fetch or the desired limit is reached
|
||||||
while remaining > 0:
|
while remaining > 0:
|
||||||
log.info(f"remaining: {remaining}")
|
|
||||||
current_fetch = min(
|
current_fetch = min(
|
||||||
max_limit, remaining
|
max_limit, remaining if isinstance(remaining, int) else max_limit
|
||||||
) # Determine how many items to fetch in this iteration
|
)
|
||||||
|
log.debug(
|
||||||
|
f"Querying with offset: {offset}, current_fetch: {current_fetch}"
|
||||||
|
)
|
||||||
|
|
||||||
results = self.client.query(
|
results = self.client.query(
|
||||||
collection_name=f"{self.collection_prefix}_{collection_name}",
|
collection_name=f"{self.collection_prefix}_{collection_name}",
|
||||||
filter=filter_string,
|
filter=filter_string,
|
||||||
output_fields=["*"],
|
output_fields=[
|
||||||
|
"id",
|
||||||
|
"data",
|
||||||
|
"metadata",
|
||||||
|
], # Explicitly list needed fields. Vector not usually needed in query.
|
||||||
limit=current_fetch,
|
limit=current_fetch,
|
||||||
offset=offset,
|
offset=offset,
|
||||||
)
|
)
|
||||||
|
|
||||||
if not results:
|
if not results:
|
||||||
|
log.debug("No more results from query.")
|
||||||
break
|
break
|
||||||
|
|
||||||
all_results.extend(results)
|
all_results.extend(results)
|
||||||
results_count = len(results)
|
results_count = len(results)
|
||||||
remaining -= (
|
log.debug(f"Fetched {results_count} results in this batch.")
|
||||||
results_count # Decrease remaining by the number of items fetched
|
|
||||||
)
|
if isinstance(remaining, int):
|
||||||
|
remaining -= results_count
|
||||||
|
|
||||||
offset += results_count
|
offset += results_count
|
||||||
|
|
||||||
# Break the loop if the results returned are less than the requested fetch count
|
# Break the loop if the results returned are less than the requested fetch count (means end of data)
|
||||||
if results_count < current_fetch:
|
if results_count < current_fetch:
|
||||||
|
log.debug(
|
||||||
|
"Fetched less than requested, assuming end of results for this query."
|
||||||
|
)
|
||||||
break
|
break
|
||||||
|
|
||||||
log.debug(all_results)
|
log.info(f"Total results from query: {len(all_results)}")
|
||||||
return self._result_to_get_result([all_results])
|
return self._result_to_get_result([all_results])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.exception(
|
log.exception(
|
||||||
f"Error querying collection {collection_name} with limit {limit}: {e}"
|
f"Error querying collection {self.collection_prefix}_{collection_name} with filter '{filter_string}' and limit {limit}: {e}"
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get(self, collection_name: str) -> Optional[GetResult]:
|
def get(self, collection_name: str) -> Optional[GetResult]:
|
||||||
# Get all the items in the collection.
|
# Get all the items in the collection. This can be very resource-intensive for large collections.
|
||||||
collection_name = collection_name.replace("-", "_")
|
collection_name = collection_name.replace("-", "_")
|
||||||
result = self.client.query(
|
log.warning(
|
||||||
collection_name=f"{self.collection_prefix}_{collection_name}",
|
f"Fetching ALL items from collection '{self.collection_prefix}_{collection_name}'. This might be slow for large collections."
|
||||||
filter='id != ""',
|
|
||||||
)
|
)
|
||||||
return self._result_to_get_result([result])
|
# Using query with a trivial filter to get all items.
|
||||||
|
# This will use the paginated query logic.
|
||||||
|
return self.query(collection_name=collection_name, filter={}, limit=None)
|
||||||
|
|
||||||
def insert(self, collection_name: str, items: list[VectorItem]):
|
def insert(self, collection_name: str, items: list[VectorItem]):
|
||||||
# Insert the items into the collection, if the collection does not exist, it will be created.
|
# Insert the items into the collection, if the collection does not exist, it will be created.
|
||||||
@@ -230,10 +287,23 @@ class MilvusClient(VectorDBBase):
|
|||||||
if not self.client.has_collection(
|
if not self.client.has_collection(
|
||||||
collection_name=f"{self.collection_prefix}_{collection_name}"
|
collection_name=f"{self.collection_prefix}_{collection_name}"
|
||||||
):
|
):
|
||||||
|
log.info(
|
||||||
|
f"Collection {self.collection_prefix}_{collection_name} does not exist. Creating now."
|
||||||
|
)
|
||||||
|
if not items:
|
||||||
|
log.error(
|
||||||
|
f"Cannot create collection {self.collection_prefix}_{collection_name} without items to determine dimension."
|
||||||
|
)
|
||||||
|
raise ValueError(
|
||||||
|
"Cannot create Milvus collection without items to determine vector dimension."
|
||||||
|
)
|
||||||
self._create_collection(
|
self._create_collection(
|
||||||
collection_name=collection_name, dimension=len(items[0]["vector"])
|
collection_name=collection_name, dimension=len(items[0]["vector"])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
log.info(
|
||||||
|
f"Inserting {len(items)} items into collection {self.collection_prefix}_{collection_name}."
|
||||||
|
)
|
||||||
return self.client.insert(
|
return self.client.insert(
|
||||||
collection_name=f"{self.collection_prefix}_{collection_name}",
|
collection_name=f"{self.collection_prefix}_{collection_name}",
|
||||||
data=[
|
data=[
|
||||||
@@ -253,10 +323,23 @@ class MilvusClient(VectorDBBase):
|
|||||||
if not self.client.has_collection(
|
if not self.client.has_collection(
|
||||||
collection_name=f"{self.collection_prefix}_{collection_name}"
|
collection_name=f"{self.collection_prefix}_{collection_name}"
|
||||||
):
|
):
|
||||||
|
log.info(
|
||||||
|
f"Collection {self.collection_prefix}_{collection_name} does not exist for upsert. Creating now."
|
||||||
|
)
|
||||||
|
if not items:
|
||||||
|
log.error(
|
||||||
|
f"Cannot create collection {self.collection_prefix}_{collection_name} for upsert without items to determine dimension."
|
||||||
|
)
|
||||||
|
raise ValueError(
|
||||||
|
"Cannot create Milvus collection for upsert without items to determine vector dimension."
|
||||||
|
)
|
||||||
self._create_collection(
|
self._create_collection(
|
||||||
collection_name=collection_name, dimension=len(items[0]["vector"])
|
collection_name=collection_name, dimension=len(items[0]["vector"])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
log.info(
|
||||||
|
f"Upserting {len(items)} items into collection {self.collection_prefix}_{collection_name}."
|
||||||
|
)
|
||||||
return self.client.upsert(
|
return self.client.upsert(
|
||||||
collection_name=f"{self.collection_prefix}_{collection_name}",
|
collection_name=f"{self.collection_prefix}_{collection_name}",
|
||||||
data=[
|
data=[
|
||||||
@@ -276,30 +359,55 @@ class MilvusClient(VectorDBBase):
|
|||||||
ids: Optional[list[str]] = None,
|
ids: Optional[list[str]] = None,
|
||||||
filter: Optional[dict] = None,
|
filter: Optional[dict] = None,
|
||||||
):
|
):
|
||||||
# Delete the items from the collection based on the ids.
|
# Delete the items from the collection based on the ids or filter.
|
||||||
collection_name = collection_name.replace("-", "_")
|
collection_name = collection_name.replace("-", "_")
|
||||||
|
if not self.has_collection(collection_name):
|
||||||
|
log.warning(
|
||||||
|
f"Delete attempted on non-existent collection: {self.collection_prefix}_{collection_name}"
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
|
||||||
if ids:
|
if ids:
|
||||||
|
log.info(
|
||||||
|
f"Deleting items by IDs from {self.collection_prefix}_{collection_name}. IDs: {ids}"
|
||||||
|
)
|
||||||
return self.client.delete(
|
return self.client.delete(
|
||||||
collection_name=f"{self.collection_prefix}_{collection_name}",
|
collection_name=f"{self.collection_prefix}_{collection_name}",
|
||||||
ids=ids,
|
ids=ids,
|
||||||
)
|
)
|
||||||
elif filter:
|
elif filter:
|
||||||
# Convert the filter dictionary to a string using JSON_CONTAINS.
|
|
||||||
filter_string = " && ".join(
|
filter_string = " && ".join(
|
||||||
[
|
[
|
||||||
f'metadata["{key}"] == {json.dumps(value)}'
|
f'metadata["{key}"] == {json.dumps(value)}'
|
||||||
for key, value in filter.items()
|
for key, value in filter.items()
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
log.info(
|
||||||
|
f"Deleting items by filter from {self.collection_prefix}_{collection_name}. Filter: {filter_string}"
|
||||||
|
)
|
||||||
return self.client.delete(
|
return self.client.delete(
|
||||||
collection_name=f"{self.collection_prefix}_{collection_name}",
|
collection_name=f"{self.collection_prefix}_{collection_name}",
|
||||||
filter=filter_string,
|
filter=filter_string,
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
log.warning(
|
||||||
|
f"Delete operation on {self.collection_prefix}_{collection_name} called without IDs or filter. No action taken."
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
# Resets the database. This will delete all collections and item entries.
|
# Resets the database. This will delete all collections and item entries that match the prefix.
|
||||||
|
log.warning(
|
||||||
|
f"Resetting Milvus: Deleting all collections with prefix '{self.collection_prefix}'."
|
||||||
|
)
|
||||||
collection_names = self.client.list_collections()
|
collection_names = self.client.list_collections()
|
||||||
for collection_name in collection_names:
|
deleted_collections = []
|
||||||
if collection_name.startswith(self.collection_prefix):
|
for collection_name_full in collection_names:
|
||||||
self.client.drop_collection(collection_name=collection_name)
|
if collection_name_full.startswith(self.collection_prefix):
|
||||||
|
try:
|
||||||
|
self.client.drop_collection(collection_name=collection_name_full)
|
||||||
|
deleted_collections.append(collection_name_full)
|
||||||
|
log.info(f"Deleted collection: {collection_name_full}")
|
||||||
|
except Exception as e:
|
||||||
|
log.error(f"Error deleting collection {collection_name_full}: {e}")
|
||||||
|
log.info(f"Milvus reset complete. Deleted collections: {deleted_collections}")
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
from typing import Optional, List, Dict, Any, Union
|
from typing import Optional, List, Dict, Any, Union
|
||||||
import logging
|
import logging
|
||||||
from pinecone import Pinecone, ServerlessSpec
|
import time # for measuring elapsed time
|
||||||
|
from pinecone import ServerlessSpec
|
||||||
|
|
||||||
|
import asyncio # for async upserts
|
||||||
|
import functools # for partial binding in async tasks
|
||||||
|
|
||||||
|
import concurrent.futures # for parallel batch upserts
|
||||||
|
from pinecone.grpc import PineconeGRPC # use gRPC client for faster upserts
|
||||||
|
|
||||||
from open_webui.retrieval.vector.main import (
|
from open_webui.retrieval.vector.main import (
|
||||||
VectorDBBase,
|
VectorDBBase,
|
||||||
@@ -40,8 +47,13 @@ class PineconeClient(VectorDBBase):
|
|||||||
self.metric = PINECONE_METRIC
|
self.metric = PINECONE_METRIC
|
||||||
self.cloud = PINECONE_CLOUD
|
self.cloud = PINECONE_CLOUD
|
||||||
|
|
||||||
# Initialize Pinecone client
|
# Initialize Pinecone gRPC client for improved performance
|
||||||
self.client = Pinecone(api_key=self.api_key)
|
self.client = PineconeGRPC(
|
||||||
|
api_key=self.api_key, environment=self.environment, cloud=self.cloud
|
||||||
|
)
|
||||||
|
|
||||||
|
# Persistent executor for batch operations
|
||||||
|
self._executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)
|
||||||
|
|
||||||
# Create index if it doesn't exist
|
# Create index if it doesn't exist
|
||||||
self._initialize_index()
|
self._initialize_index()
|
||||||
@@ -191,27 +203,29 @@ class PineconeClient(VectorDBBase):
|
|||||||
log.warning("No items to insert")
|
log.warning("No items to insert")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
collection_name_with_prefix = self._get_collection_name_with_prefix(
|
collection_name_with_prefix = self._get_collection_name_with_prefix(
|
||||||
collection_name
|
collection_name
|
||||||
)
|
)
|
||||||
points = self._create_points(items, collection_name_with_prefix)
|
points = self._create_points(items, collection_name_with_prefix)
|
||||||
|
|
||||||
# Insert in batches for better performance and reliability
|
# Parallelize batch inserts for performance
|
||||||
|
executor = self._executor
|
||||||
|
futures = []
|
||||||
for i in range(0, len(points), BATCH_SIZE):
|
for i in range(0, len(points), BATCH_SIZE):
|
||||||
batch = points[i : i + BATCH_SIZE]
|
batch = points[i : i + BATCH_SIZE]
|
||||||
|
futures.append(executor.submit(self.index.upsert, vectors=batch))
|
||||||
|
for future in concurrent.futures.as_completed(futures):
|
||||||
try:
|
try:
|
||||||
self.index.upsert(vectors=batch)
|
future.result()
|
||||||
log.debug(
|
|
||||||
f"Inserted batch of {len(batch)} vectors into '{collection_name_with_prefix}'"
|
|
||||||
)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(
|
log.error(f"Error inserting batch: {e}")
|
||||||
f"Error inserting batch into '{collection_name_with_prefix}': {e}"
|
|
||||||
)
|
|
||||||
raise
|
raise
|
||||||
|
elapsed = time.time() - start_time
|
||||||
|
log.debug(f"Insert of {len(points)} vectors took {elapsed:.2f} seconds")
|
||||||
log.info(
|
log.info(
|
||||||
f"Successfully inserted {len(items)} vectors into '{collection_name_with_prefix}'"
|
f"Successfully inserted {len(points)} vectors in parallel batches into '{collection_name_with_prefix}'"
|
||||||
)
|
)
|
||||||
|
|
||||||
def upsert(self, collection_name: str, items: List[VectorItem]) -> None:
|
def upsert(self, collection_name: str, items: List[VectorItem]) -> None:
|
||||||
@@ -220,29 +234,119 @@ class PineconeClient(VectorDBBase):
|
|||||||
log.warning("No items to upsert")
|
log.warning("No items to upsert")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
collection_name_with_prefix = self._get_collection_name_with_prefix(
|
||||||
|
collection_name
|
||||||
|
)
|
||||||
|
points = self._create_points(items, collection_name_with_prefix)
|
||||||
|
|
||||||
|
# Parallelize batch upserts for performance
|
||||||
|
executor = self._executor
|
||||||
|
futures = []
|
||||||
|
for i in range(0, len(points), BATCH_SIZE):
|
||||||
|
batch = points[i : i + BATCH_SIZE]
|
||||||
|
futures.append(executor.submit(self.index.upsert, vectors=batch))
|
||||||
|
for future in concurrent.futures.as_completed(futures):
|
||||||
|
try:
|
||||||
|
future.result()
|
||||||
|
except Exception as e:
|
||||||
|
log.error(f"Error upserting batch: {e}")
|
||||||
|
raise
|
||||||
|
elapsed = time.time() - start_time
|
||||||
|
log.debug(f"Upsert of {len(points)} vectors took {elapsed:.2f} seconds")
|
||||||
|
log.info(
|
||||||
|
f"Successfully upserted {len(points)} vectors in parallel batches into '{collection_name_with_prefix}'"
|
||||||
|
)
|
||||||
|
|
||||||
|
async def insert_async(self, collection_name: str, items: List[VectorItem]) -> None:
|
||||||
|
"""Async version of insert using asyncio and run_in_executor for improved performance."""
|
||||||
|
if not items:
|
||||||
|
log.warning("No items to insert")
|
||||||
|
return
|
||||||
|
|
||||||
|
collection_name_with_prefix = self._get_collection_name_with_prefix(
|
||||||
|
collection_name
|
||||||
|
)
|
||||||
|
points = self._create_points(items, collection_name_with_prefix)
|
||||||
|
|
||||||
|
# Create batches
|
||||||
|
batches = [
|
||||||
|
points[i : i + BATCH_SIZE] for i in range(0, len(points), BATCH_SIZE)
|
||||||
|
]
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
tasks = [
|
||||||
|
loop.run_in_executor(
|
||||||
|
None, functools.partial(self.index.upsert, vectors=batch)
|
||||||
|
)
|
||||||
|
for batch in batches
|
||||||
|
]
|
||||||
|
results = await asyncio.gather(*tasks, return_exceptions=True)
|
||||||
|
for result in results:
|
||||||
|
if isinstance(result, Exception):
|
||||||
|
log.error(f"Error in async insert batch: {result}")
|
||||||
|
raise result
|
||||||
|
log.info(
|
||||||
|
f"Successfully async inserted {len(points)} vectors in batches into '{collection_name_with_prefix}'"
|
||||||
|
)
|
||||||
|
|
||||||
|
async def upsert_async(self, collection_name: str, items: List[VectorItem]) -> None:
|
||||||
|
"""Async version of upsert using asyncio and run_in_executor for improved performance."""
|
||||||
|
if not items:
|
||||||
|
log.warning("No items to upsert")
|
||||||
|
return
|
||||||
|
|
||||||
collection_name_with_prefix = self._get_collection_name_with_prefix(
|
collection_name_with_prefix = self._get_collection_name_with_prefix(
|
||||||
collection_name
|
collection_name
|
||||||
)
|
)
|
||||||
points = self._create_points(items, collection_name_with_prefix)
|
points = self._create_points(items, collection_name_with_prefix)
|
||||||
|
|
||||||
# Upsert in batches
|
# Create batches
|
||||||
for i in range(0, len(points), BATCH_SIZE):
|
batches = [
|
||||||
batch = points[i : i + BATCH_SIZE]
|
points[i : i + BATCH_SIZE] for i in range(0, len(points), BATCH_SIZE)
|
||||||
try:
|
]
|
||||||
self.index.upsert(vectors=batch)
|
loop = asyncio.get_event_loop()
|
||||||
log.debug(
|
tasks = [
|
||||||
f"Upserted batch of {len(batch)} vectors into '{collection_name_with_prefix}'"
|
loop.run_in_executor(
|
||||||
)
|
None, functools.partial(self.index.upsert, vectors=batch)
|
||||||
except Exception as e:
|
)
|
||||||
log.error(
|
for batch in batches
|
||||||
f"Error upserting batch into '{collection_name_with_prefix}': {e}"
|
]
|
||||||
)
|
results = await asyncio.gather(*tasks, return_exceptions=True)
|
||||||
raise
|
for result in results:
|
||||||
|
if isinstance(result, Exception):
|
||||||
|
log.error(f"Error in async upsert batch: {result}")
|
||||||
|
raise result
|
||||||
log.info(
|
log.info(
|
||||||
f"Successfully upserted {len(items)} vectors into '{collection_name_with_prefix}'"
|
f"Successfully async upserted {len(points)} vectors in batches into '{collection_name_with_prefix}'"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def streaming_upsert(self, collection_name: str, items: List[VectorItem]) -> None:
|
||||||
|
"""Perform a streaming upsert over gRPC for performance testing."""
|
||||||
|
if not items:
|
||||||
|
log.warning("No items to upsert via streaming")
|
||||||
|
return
|
||||||
|
|
||||||
|
collection_name_with_prefix = self._get_collection_name_with_prefix(
|
||||||
|
collection_name
|
||||||
|
)
|
||||||
|
points = self._create_points(items, collection_name_with_prefix)
|
||||||
|
|
||||||
|
# Open a streaming upsert channel
|
||||||
|
stream = self.index.streaming_upsert()
|
||||||
|
try:
|
||||||
|
for point in points:
|
||||||
|
# send each point over the stream
|
||||||
|
stream.send(point)
|
||||||
|
# close the stream to finalize
|
||||||
|
stream.close()
|
||||||
|
log.info(
|
||||||
|
f"Successfully streamed upsert of {len(points)} vectors into '{collection_name_with_prefix}'"
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
log.error(f"Error during streaming upsert: {e}")
|
||||||
|
raise
|
||||||
|
|
||||||
def search(
|
def search(
|
||||||
self, collection_name: str, vectors: List[List[Union[float, int]]], limit: int
|
self, collection_name: str, vectors: List[List[Union[float, int]]], limit: int
|
||||||
) -> Optional[SearchResult]:
|
) -> Optional[SearchResult]:
|
||||||
@@ -410,3 +514,20 @@ class PineconeClient(VectorDBBase):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(f"Failed to reset Pinecone index: {e}")
|
log.error(f"Failed to reset Pinecone index: {e}")
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
"""Shut down the gRPC channel and thread pool."""
|
||||||
|
try:
|
||||||
|
self.client.close()
|
||||||
|
log.info("Pinecone gRPC channel closed.")
|
||||||
|
except Exception as e:
|
||||||
|
log.warning(f"Failed to close Pinecone gRPC channel: {e}")
|
||||||
|
self._executor.shutdown(wait=True)
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
"""Enter context manager."""
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||||
|
"""Exit context manager, ensuring resources are cleaned up."""
|
||||||
|
self.close()
|
||||||
|
|||||||
@@ -71,23 +71,27 @@ from pydub import AudioSegment
|
|||||||
from pydub.utils import mediainfo
|
from pydub.utils import mediainfo
|
||||||
|
|
||||||
|
|
||||||
def get_audio_format(file_path):
|
def get_audio_convert_format(file_path):
|
||||||
"""Check if the given file needs to be converted to a different format."""
|
"""Check if the given file needs to be converted to a different format."""
|
||||||
if not os.path.isfile(file_path):
|
if not os.path.isfile(file_path):
|
||||||
log.error(f"File not found: {file_path}")
|
log.error(f"File not found: {file_path}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
info = mediainfo(file_path)
|
try:
|
||||||
if (
|
info = mediainfo(file_path)
|
||||||
info.get("codec_name") == "aac"
|
|
||||||
and info.get("codec_type") == "audio"
|
if (
|
||||||
and info.get("codec_tag_string") == "mp4a"
|
info.get("codec_name") == "aac"
|
||||||
):
|
and info.get("codec_type") == "audio"
|
||||||
return "mp4"
|
and info.get("codec_tag_string") == "mp4a"
|
||||||
elif info.get("format_name") == "ogg":
|
):
|
||||||
return "ogg"
|
return "mp4"
|
||||||
elif info.get("format_name") == "matroska,webm":
|
elif info.get("format_name") == "ogg":
|
||||||
return "webm"
|
return "ogg"
|
||||||
|
except Exception as e:
|
||||||
|
log.error(f"Error getting audio format: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
@@ -138,6 +142,7 @@ class TTSConfigForm(BaseModel):
|
|||||||
VOICE: str
|
VOICE: str
|
||||||
SPLIT_ON: str
|
SPLIT_ON: str
|
||||||
AZURE_SPEECH_REGION: str
|
AZURE_SPEECH_REGION: str
|
||||||
|
AZURE_SPEECH_BASE_URL: str
|
||||||
AZURE_SPEECH_OUTPUT_FORMAT: str
|
AZURE_SPEECH_OUTPUT_FORMAT: str
|
||||||
|
|
||||||
|
|
||||||
@@ -172,6 +177,7 @@ async def get_audio_config(request: Request, user=Depends(get_admin_user)):
|
|||||||
"VOICE": request.app.state.config.TTS_VOICE,
|
"VOICE": request.app.state.config.TTS_VOICE,
|
||||||
"SPLIT_ON": request.app.state.config.TTS_SPLIT_ON,
|
"SPLIT_ON": request.app.state.config.TTS_SPLIT_ON,
|
||||||
"AZURE_SPEECH_REGION": request.app.state.config.TTS_AZURE_SPEECH_REGION,
|
"AZURE_SPEECH_REGION": request.app.state.config.TTS_AZURE_SPEECH_REGION,
|
||||||
|
"AZURE_SPEECH_BASE_URL": request.app.state.config.TTS_AZURE_SPEECH_BASE_URL,
|
||||||
"AZURE_SPEECH_OUTPUT_FORMAT": request.app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT,
|
"AZURE_SPEECH_OUTPUT_FORMAT": request.app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT,
|
||||||
},
|
},
|
||||||
"stt": {
|
"stt": {
|
||||||
@@ -202,6 +208,9 @@ async def update_audio_config(
|
|||||||
request.app.state.config.TTS_VOICE = form_data.tts.VOICE
|
request.app.state.config.TTS_VOICE = form_data.tts.VOICE
|
||||||
request.app.state.config.TTS_SPLIT_ON = form_data.tts.SPLIT_ON
|
request.app.state.config.TTS_SPLIT_ON = form_data.tts.SPLIT_ON
|
||||||
request.app.state.config.TTS_AZURE_SPEECH_REGION = form_data.tts.AZURE_SPEECH_REGION
|
request.app.state.config.TTS_AZURE_SPEECH_REGION = form_data.tts.AZURE_SPEECH_REGION
|
||||||
|
request.app.state.config.TTS_AZURE_SPEECH_BASE_URL = (
|
||||||
|
form_data.tts.AZURE_SPEECH_BASE_URL
|
||||||
|
)
|
||||||
request.app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT = (
|
request.app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT = (
|
||||||
form_data.tts.AZURE_SPEECH_OUTPUT_FORMAT
|
form_data.tts.AZURE_SPEECH_OUTPUT_FORMAT
|
||||||
)
|
)
|
||||||
@@ -235,6 +244,7 @@ async def update_audio_config(
|
|||||||
"VOICE": request.app.state.config.TTS_VOICE,
|
"VOICE": request.app.state.config.TTS_VOICE,
|
||||||
"SPLIT_ON": request.app.state.config.TTS_SPLIT_ON,
|
"SPLIT_ON": request.app.state.config.TTS_SPLIT_ON,
|
||||||
"AZURE_SPEECH_REGION": request.app.state.config.TTS_AZURE_SPEECH_REGION,
|
"AZURE_SPEECH_REGION": request.app.state.config.TTS_AZURE_SPEECH_REGION,
|
||||||
|
"AZURE_SPEECH_BASE_URL": request.app.state.config.TTS_AZURE_SPEECH_BASE_URL,
|
||||||
"AZURE_SPEECH_OUTPUT_FORMAT": request.app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT,
|
"AZURE_SPEECH_OUTPUT_FORMAT": request.app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT,
|
||||||
},
|
},
|
||||||
"stt": {
|
"stt": {
|
||||||
@@ -406,7 +416,8 @@ async def speech(request: Request, user=Depends(get_verified_user)):
|
|||||||
log.exception(e)
|
log.exception(e)
|
||||||
raise HTTPException(status_code=400, detail="Invalid JSON payload")
|
raise HTTPException(status_code=400, detail="Invalid JSON payload")
|
||||||
|
|
||||||
region = request.app.state.config.TTS_AZURE_SPEECH_REGION
|
region = request.app.state.config.TTS_AZURE_SPEECH_REGION or "eastus"
|
||||||
|
base_url = request.app.state.config.TTS_AZURE_SPEECH_BASE_URL
|
||||||
language = request.app.state.config.TTS_VOICE
|
language = request.app.state.config.TTS_VOICE
|
||||||
locale = "-".join(request.app.state.config.TTS_VOICE.split("-")[:1])
|
locale = "-".join(request.app.state.config.TTS_VOICE.split("-")[:1])
|
||||||
output_format = request.app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT
|
output_format = request.app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT
|
||||||
@@ -420,7 +431,8 @@ async def speech(request: Request, user=Depends(get_verified_user)):
|
|||||||
timeout=timeout, trust_env=True
|
timeout=timeout, trust_env=True
|
||||||
) as session:
|
) as session:
|
||||||
async with session.post(
|
async with session.post(
|
||||||
f"https://{region}.tts.speech.microsoft.com/cognitiveservices/v1",
|
(base_url or f"https://{region}.tts.speech.microsoft.com")
|
||||||
|
+ "/cognitiveservices/v1",
|
||||||
headers={
|
headers={
|
||||||
"Ocp-Apim-Subscription-Key": request.app.state.config.TTS_API_KEY,
|
"Ocp-Apim-Subscription-Key": request.app.state.config.TTS_API_KEY,
|
||||||
"Content-Type": "application/ssml+xml",
|
"Content-Type": "application/ssml+xml",
|
||||||
@@ -530,14 +542,17 @@ def transcribe(request: Request, file_path):
|
|||||||
log.debug(data)
|
log.debug(data)
|
||||||
return data
|
return data
|
||||||
elif request.app.state.config.STT_ENGINE == "openai":
|
elif request.app.state.config.STT_ENGINE == "openai":
|
||||||
audio_format = get_audio_format(file_path)
|
convert_format = get_audio_convert_format(file_path)
|
||||||
if audio_format:
|
|
||||||
os.rename(file_path, file_path.replace(".wav", f".{audio_format}"))
|
if convert_format:
|
||||||
|
ext = convert_format.split(".")[-1]
|
||||||
|
|
||||||
|
os.rename(file_path, file_path.replace(".{ext}", f".{convert_format}"))
|
||||||
# Convert unsupported audio file to WAV format
|
# Convert unsupported audio file to WAV format
|
||||||
convert_audio_to_wav(
|
convert_audio_to_wav(
|
||||||
file_path.replace(".wav", f".{audio_format}"),
|
file_path.replace(".{ext}", f".{convert_format}"),
|
||||||
file_path,
|
file_path,
|
||||||
audio_format,
|
convert_format,
|
||||||
)
|
)
|
||||||
|
|
||||||
r = None
|
r = None
|
||||||
@@ -651,10 +666,10 @@ def transcribe(request: Request, file_path):
|
|||||||
)
|
)
|
||||||
|
|
||||||
api_key = request.app.state.config.AUDIO_STT_AZURE_API_KEY
|
api_key = request.app.state.config.AUDIO_STT_AZURE_API_KEY
|
||||||
region = request.app.state.config.AUDIO_STT_AZURE_REGION
|
region = request.app.state.config.AUDIO_STT_AZURE_REGION or "eastus"
|
||||||
locales = request.app.state.config.AUDIO_STT_AZURE_LOCALES
|
locales = request.app.state.config.AUDIO_STT_AZURE_LOCALES
|
||||||
base_url = request.app.state.config.AUDIO_STT_AZURE_BASE_URL
|
base_url = request.app.state.config.AUDIO_STT_AZURE_BASE_URL
|
||||||
max_speakers = request.app.state.config.AUDIO_STT_AZURE_MAX_SPEAKERS
|
max_speakers = request.app.state.config.AUDIO_STT_AZURE_MAX_SPEAKERS or 3
|
||||||
|
|
||||||
# IF NO LOCALES, USE DEFAULTS
|
# IF NO LOCALES, USE DEFAULTS
|
||||||
if len(locales) < 2:
|
if len(locales) < 2:
|
||||||
@@ -681,12 +696,6 @@ def transcribe(request: Request, file_path):
|
|||||||
detail="Azure API key is required for Azure STT",
|
detail="Azure API key is required for Azure STT",
|
||||||
)
|
)
|
||||||
|
|
||||||
if not base_url and not region:
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=400,
|
|
||||||
detail="Azure region or base url is required for Azure STT",
|
|
||||||
)
|
|
||||||
|
|
||||||
r = None
|
r = None
|
||||||
try:
|
try:
|
||||||
# Prepare the request
|
# Prepare the request
|
||||||
@@ -702,9 +711,8 @@ def transcribe(request: Request, file_path):
|
|||||||
}
|
}
|
||||||
|
|
||||||
url = (
|
url = (
|
||||||
base_url
|
base_url or f"https://{region}.api.cognitive.microsoft.com"
|
||||||
or f"https://{region}.api.cognitive.microsoft.com/speechtotext/transcriptions:transcribe?api-version=2024-11-15"
|
) + "/speechtotext/transcriptions:transcribe?api-version=2024-11-15"
|
||||||
)
|
|
||||||
|
|
||||||
# Use context manager to ensure file is properly closed
|
# Use context manager to ensure file is properly closed
|
||||||
with open(file_path, "rb") as audio_file:
|
with open(file_path, "rb") as audio_file:
|
||||||
@@ -789,7 +797,13 @@ def transcription(
|
|||||||
):
|
):
|
||||||
log.info(f"file.content_type: {file.content_type}")
|
log.info(f"file.content_type: {file.content_type}")
|
||||||
|
|
||||||
supported_filetypes = ("audio/mpeg", "audio/wav", "audio/ogg", "audio/x-m4a")
|
supported_filetypes = (
|
||||||
|
"audio/mpeg",
|
||||||
|
"audio/wav",
|
||||||
|
"audio/ogg",
|
||||||
|
"audio/x-m4a",
|
||||||
|
"audio/webm",
|
||||||
|
)
|
||||||
|
|
||||||
if not file.content_type.startswith(supported_filetypes):
|
if not file.content_type.startswith(supported_filetypes):
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
@@ -933,7 +947,10 @@ def get_available_voices(request) -> dict:
|
|||||||
elif request.app.state.config.TTS_ENGINE == "azure":
|
elif request.app.state.config.TTS_ENGINE == "azure":
|
||||||
try:
|
try:
|
||||||
region = request.app.state.config.TTS_AZURE_SPEECH_REGION
|
region = request.app.state.config.TTS_AZURE_SPEECH_REGION
|
||||||
url = f"https://{region}.tts.speech.microsoft.com/cognitiveservices/voices/list"
|
base_url = request.app.state.config.TTS_AZURE_SPEECH_BASE_URL
|
||||||
|
url = (
|
||||||
|
base_url or f"https://{region}.tts.speech.microsoft.com"
|
||||||
|
) + "/cognitiveservices/voices/list"
|
||||||
headers = {
|
headers = {
|
||||||
"Ocp-Apim-Subscription-Key": request.app.state.config.TTS_API_KEY
|
"Ocp-Apim-Subscription-Key": request.app.state.config.TTS_API_KEY
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,28 +82,31 @@ async def get_session_user(
|
|||||||
token = auth_token.credentials
|
token = auth_token.credentials
|
||||||
data = decode_token(token)
|
data = decode_token(token)
|
||||||
|
|
||||||
expires_at = data.get("exp")
|
expires_at = None
|
||||||
|
|
||||||
if (expires_at is not None) and int(time.time()) > expires_at:
|
if data:
|
||||||
raise HTTPException(
|
expires_at = data.get("exp")
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
||||||
detail=ERROR_MESSAGES.INVALID_TOKEN,
|
if (expires_at is not None) and int(time.time()) > expires_at:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
|
detail=ERROR_MESSAGES.INVALID_TOKEN,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Set the cookie token
|
||||||
|
response.set_cookie(
|
||||||
|
key="token",
|
||||||
|
value=token,
|
||||||
|
expires=(
|
||||||
|
datetime.datetime.fromtimestamp(expires_at, datetime.timezone.utc)
|
||||||
|
if expires_at
|
||||||
|
else None
|
||||||
|
),
|
||||||
|
httponly=True, # Ensures the cookie is not accessible via JavaScript
|
||||||
|
samesite=WEBUI_AUTH_COOKIE_SAME_SITE,
|
||||||
|
secure=WEBUI_AUTH_COOKIE_SECURE,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Set the cookie token
|
|
||||||
response.set_cookie(
|
|
||||||
key="token",
|
|
||||||
value=token,
|
|
||||||
expires=(
|
|
||||||
datetime.datetime.fromtimestamp(expires_at, datetime.timezone.utc)
|
|
||||||
if expires_at
|
|
||||||
else None
|
|
||||||
),
|
|
||||||
httponly=True, # Ensures the cookie is not accessible via JavaScript
|
|
||||||
samesite=WEBUI_AUTH_COOKIE_SAME_SITE,
|
|
||||||
secure=WEBUI_AUTH_COOKIE_SECURE,
|
|
||||||
)
|
|
||||||
|
|
||||||
user_permissions = get_permissions(
|
user_permissions = get_permissions(
|
||||||
user.id, request.app.state.config.USER_PERMISSIONS
|
user.id, request.app.state.config.USER_PERMISSIONS
|
||||||
)
|
)
|
||||||
@@ -231,7 +234,7 @@ async def ldap_auth(request: Request, response: Response, form_data: LdapForm):
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
if not search_success:
|
if not search_success or not connection_app.entries:
|
||||||
raise HTTPException(400, detail="User not found in the LDAP server")
|
raise HTTPException(400, detail="User not found in the LDAP server")
|
||||||
|
|
||||||
entry = connection_app.entries[0]
|
entry = connection_app.entries[0]
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ def upload_file(
|
|||||||
"audio/ogg",
|
"audio/ogg",
|
||||||
"audio/x-m4a",
|
"audio/x-m4a",
|
||||||
"audio/webm",
|
"audio/webm",
|
||||||
|
"video/webm",
|
||||||
)
|
)
|
||||||
):
|
):
|
||||||
file_path = Storage.get_file(file_path)
|
file_path = Storage.get_file(file_path)
|
||||||
@@ -150,7 +151,6 @@ def upload_file(
|
|||||||
"video/mp4",
|
"video/mp4",
|
||||||
"video/ogg",
|
"video/ogg",
|
||||||
"video/quicktime",
|
"video/quicktime",
|
||||||
"video/webm",
|
|
||||||
]:
|
]:
|
||||||
process_file(request, ProcessFileForm(file_id=id), user=user)
|
process_file(request, ProcessFileForm(file_id=id), user=user)
|
||||||
|
|
||||||
|
|||||||
@@ -501,9 +501,9 @@ async def image_generations(
|
|||||||
else request.app.state.config.IMAGE_SIZE
|
else request.app.state.config.IMAGE_SIZE
|
||||||
),
|
),
|
||||||
**(
|
**(
|
||||||
{"response_format": "b64_json"}
|
{}
|
||||||
if "gpt-image-1" in request.app.state.config.IMAGE_GENERATION_MODEL
|
if "gpt-image-1" in request.app.state.config.IMAGE_GENERATION_MODEL
|
||||||
else {}
|
else {"response_format": "b64_json"}
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -623,7 +623,7 @@ async def image_generations(
|
|||||||
or request.app.state.config.IMAGE_GENERATION_ENGINE == ""
|
or request.app.state.config.IMAGE_GENERATION_ENGINE == ""
|
||||||
):
|
):
|
||||||
if form_data.model:
|
if form_data.model:
|
||||||
set_image_model(form_data.model)
|
set_image_model(request, form_data.model)
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"prompt": form_data.prompt,
|
"prompt": form_data.prompt,
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from open_webui.env import SRC_LOG_LEVELS
|
|||||||
|
|
||||||
|
|
||||||
from open_webui.utils.auth import get_admin_user, get_verified_user
|
from open_webui.utils.auth import get_admin_user, get_verified_user
|
||||||
from open_webui.utils.access_control import has_permission
|
from open_webui.utils.access_control import has_access, has_permission
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
log.setLevel(SRC_LOG_LEVELS["MODELS"])
|
log.setLevel(SRC_LOG_LEVELS["MODELS"])
|
||||||
@@ -124,8 +124,10 @@ async def get_note_by_id(request: Request, id: str, user=Depends(get_verified_us
|
|||||||
status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND
|
status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND
|
||||||
)
|
)
|
||||||
|
|
||||||
if user.role != "admin" and not has_access(
|
if (
|
||||||
user.id, type="read", access_control=note.access_control
|
user.role != "admin"
|
||||||
|
and user.id != note.user_id
|
||||||
|
and not has_access(user.id, type="read", access_control=note.access_control)
|
||||||
):
|
):
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT()
|
status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT()
|
||||||
@@ -157,8 +159,10 @@ async def update_note_by_id(
|
|||||||
status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND
|
status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND
|
||||||
)
|
)
|
||||||
|
|
||||||
if user.role != "admin" and not has_access(
|
if (
|
||||||
user.id, type="write", access_control=note.access_control
|
user.role != "admin"
|
||||||
|
and user.id != note.user_id
|
||||||
|
and not has_access(user.id, type="write", access_control=note.access_control)
|
||||||
):
|
):
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT()
|
status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT()
|
||||||
@@ -195,8 +199,10 @@ async def delete_note_by_id(request: Request, id: str, user=Depends(get_verified
|
|||||||
status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND
|
status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND
|
||||||
)
|
)
|
||||||
|
|
||||||
if user.role != "admin" and not has_access(
|
if (
|
||||||
user.id, type="write", access_control=note.access_control
|
user.role != "admin"
|
||||||
|
and user.id != note.user_id
|
||||||
|
and not has_access(user.id, type="write", access_control=note.access_control)
|
||||||
):
|
):
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT()
|
status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT()
|
||||||
|
|||||||
@@ -883,6 +883,10 @@ async def embed(
|
|||||||
)
|
)
|
||||||
|
|
||||||
url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
|
url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
|
||||||
|
api_config = request.app.state.config.OLLAMA_API_CONFIGS.get(
|
||||||
|
str(url_idx),
|
||||||
|
request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}), # Legacy support
|
||||||
|
)
|
||||||
key = get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS)
|
key = get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS)
|
||||||
|
|
||||||
prefix_id = api_config.get("prefix_id", None)
|
prefix_id = api_config.get("prefix_id", None)
|
||||||
@@ -966,6 +970,10 @@ async def embeddings(
|
|||||||
)
|
)
|
||||||
|
|
||||||
url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
|
url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
|
||||||
|
api_config = request.app.state.config.OLLAMA_API_CONFIGS.get(
|
||||||
|
str(url_idx),
|
||||||
|
request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}), # Legacy support
|
||||||
|
)
|
||||||
key = get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS)
|
key = get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS)
|
||||||
|
|
||||||
prefix_id = api_config.get("prefix_id", None)
|
prefix_id = api_config.get("prefix_id", None)
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import logging
|
|||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -135,7 +137,10 @@ def get_ef(
|
|||||||
|
|
||||||
|
|
||||||
def get_rf(
|
def get_rf(
|
||||||
|
engine: str = "",
|
||||||
reranking_model: Optional[str] = None,
|
reranking_model: Optional[str] = None,
|
||||||
|
external_reranker_url: str = "",
|
||||||
|
external_reranker_api_key: str = "",
|
||||||
auto_update: bool = False,
|
auto_update: bool = False,
|
||||||
):
|
):
|
||||||
rf = None
|
rf = None
|
||||||
@@ -153,19 +158,33 @@ def get_rf(
|
|||||||
log.error(f"ColBERT: {e}")
|
log.error(f"ColBERT: {e}")
|
||||||
raise Exception(ERROR_MESSAGES.DEFAULT(e))
|
raise Exception(ERROR_MESSAGES.DEFAULT(e))
|
||||||
else:
|
else:
|
||||||
import sentence_transformers
|
if engine == "external":
|
||||||
|
try:
|
||||||
|
from open_webui.retrieval.models.external import ExternalReranker
|
||||||
|
|
||||||
|
rf = ExternalReranker(
|
||||||
|
url=external_reranker_url,
|
||||||
|
api_key=external_reranker_api_key,
|
||||||
|
model=reranking_model,
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
log.error(f"ExternalReranking: {e}")
|
||||||
|
raise Exception(ERROR_MESSAGES.DEFAULT(e))
|
||||||
|
else:
|
||||||
|
import sentence_transformers
|
||||||
|
|
||||||
|
try:
|
||||||
|
rf = sentence_transformers.CrossEncoder(
|
||||||
|
get_model_path(reranking_model, auto_update),
|
||||||
|
device=DEVICE_TYPE,
|
||||||
|
trust_remote_code=RAG_RERANKING_MODEL_TRUST_REMOTE_CODE,
|
||||||
|
backend=SENTENCE_TRANSFORMERS_CROSS_ENCODER_BACKEND,
|
||||||
|
model_kwargs=SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS,
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
log.error(f"CrossEncoder: {e}")
|
||||||
|
raise Exception(ERROR_MESSAGES.DEFAULT("CrossEncoder error"))
|
||||||
|
|
||||||
try:
|
|
||||||
rf = sentence_transformers.CrossEncoder(
|
|
||||||
get_model_path(reranking_model, auto_update),
|
|
||||||
device=DEVICE_TYPE,
|
|
||||||
trust_remote_code=RAG_RERANKING_MODEL_TRUST_REMOTE_CODE,
|
|
||||||
backend=SENTENCE_TRANSFORMERS_CROSS_ENCODER_BACKEND,
|
|
||||||
model_kwargs=SENTENCE_TRANSFORMERS_CROSS_ENCODER_MODEL_KWARGS,
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
log.error(f"CrossEncoder: {e}")
|
|
||||||
raise Exception(ERROR_MESSAGES.DEFAULT("CrossEncoder error"))
|
|
||||||
return rf
|
return rf
|
||||||
|
|
||||||
|
|
||||||
@@ -188,7 +207,7 @@ class ProcessUrlForm(CollectionNameForm):
|
|||||||
|
|
||||||
|
|
||||||
class SearchForm(BaseModel):
|
class SearchForm(BaseModel):
|
||||||
query: str
|
queries: List[str]
|
||||||
|
|
||||||
|
|
||||||
@router.get("/")
|
@router.get("/")
|
||||||
@@ -223,14 +242,6 @@ async def get_embedding_config(request: Request, user=Depends(get_admin_user)):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@router.get("/reranking")
|
|
||||||
async def get_reraanking_config(request: Request, user=Depends(get_admin_user)):
|
|
||||||
return {
|
|
||||||
"status": True,
|
|
||||||
"reranking_model": request.app.state.config.RAG_RERANKING_MODEL,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class OpenAIConfigForm(BaseModel):
|
class OpenAIConfigForm(BaseModel):
|
||||||
url: str
|
url: str
|
||||||
key: str
|
key: str
|
||||||
@@ -325,41 +336,6 @@ async def update_embedding_config(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class RerankingModelUpdateForm(BaseModel):
|
|
||||||
reranking_model: str
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/reranking/update")
|
|
||||||
async def update_reranking_config(
|
|
||||||
request: Request, form_data: RerankingModelUpdateForm, user=Depends(get_admin_user)
|
|
||||||
):
|
|
||||||
log.info(
|
|
||||||
f"Updating reranking model: {request.app.state.config.RAG_RERANKING_MODEL} to {form_data.reranking_model}"
|
|
||||||
)
|
|
||||||
try:
|
|
||||||
request.app.state.config.RAG_RERANKING_MODEL = form_data.reranking_model
|
|
||||||
|
|
||||||
try:
|
|
||||||
request.app.state.rf = get_rf(
|
|
||||||
request.app.state.config.RAG_RERANKING_MODEL,
|
|
||||||
True,
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
log.error(f"Error loading reranking model: {e}")
|
|
||||||
request.app.state.config.ENABLE_RAG_HYBRID_SEARCH = False
|
|
||||||
|
|
||||||
return {
|
|
||||||
"status": True,
|
|
||||||
"reranking_model": request.app.state.config.RAG_RERANKING_MODEL,
|
|
||||||
}
|
|
||||||
except Exception as e:
|
|
||||||
log.exception(f"Problem updating reranking model: {e}")
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
||||||
detail=ERROR_MESSAGES.DEFAULT(e),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/config")
|
@router.get("/config")
|
||||||
async def get_rag_config(request: Request, user=Depends(get_admin_user)):
|
async def get_rag_config(request: Request, user=Depends(get_admin_user)):
|
||||||
return {
|
return {
|
||||||
@@ -383,6 +359,11 @@ async def get_rag_config(request: Request, user=Depends(get_admin_user)):
|
|||||||
"DOCUMENT_INTELLIGENCE_ENDPOINT": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
|
"DOCUMENT_INTELLIGENCE_ENDPOINT": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
|
||||||
"DOCUMENT_INTELLIGENCE_KEY": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,
|
"DOCUMENT_INTELLIGENCE_KEY": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,
|
||||||
"MISTRAL_OCR_API_KEY": request.app.state.config.MISTRAL_OCR_API_KEY,
|
"MISTRAL_OCR_API_KEY": request.app.state.config.MISTRAL_OCR_API_KEY,
|
||||||
|
# Reranking settings
|
||||||
|
"RAG_RERANKING_MODEL": request.app.state.config.RAG_RERANKING_MODEL,
|
||||||
|
"RAG_RERANKING_ENGINE": request.app.state.config.RAG_RERANKING_ENGINE,
|
||||||
|
"RAG_EXTERNAL_RERANKER_URL": request.app.state.config.RAG_EXTERNAL_RERANKER_URL,
|
||||||
|
"RAG_EXTERNAL_RERANKER_API_KEY": request.app.state.config.RAG_EXTERNAL_RERANKER_API_KEY,
|
||||||
# Chunking settings
|
# Chunking settings
|
||||||
"TEXT_SPLITTER": request.app.state.config.TEXT_SPLITTER,
|
"TEXT_SPLITTER": request.app.state.config.TEXT_SPLITTER,
|
||||||
"CHUNK_SIZE": request.app.state.config.CHUNK_SIZE,
|
"CHUNK_SIZE": request.app.state.config.CHUNK_SIZE,
|
||||||
@@ -519,6 +500,12 @@ class ConfigForm(BaseModel):
|
|||||||
DOCUMENT_INTELLIGENCE_KEY: Optional[str] = None
|
DOCUMENT_INTELLIGENCE_KEY: Optional[str] = None
|
||||||
MISTRAL_OCR_API_KEY: Optional[str] = None
|
MISTRAL_OCR_API_KEY: Optional[str] = None
|
||||||
|
|
||||||
|
# Reranking settings
|
||||||
|
RAG_RERANKING_MODEL: Optional[str] = None
|
||||||
|
RAG_RERANKING_ENGINE: Optional[str] = None
|
||||||
|
RAG_EXTERNAL_RERANKER_URL: Optional[str] = None
|
||||||
|
RAG_EXTERNAL_RERANKER_API_KEY: Optional[str] = None
|
||||||
|
|
||||||
# Chunking settings
|
# Chunking settings
|
||||||
TEXT_SPLITTER: Optional[str] = None
|
TEXT_SPLITTER: Optional[str] = None
|
||||||
CHUNK_SIZE: Optional[int] = None
|
CHUNK_SIZE: Optional[int] = None
|
||||||
@@ -630,6 +617,49 @@ async def update_rag_config(
|
|||||||
else request.app.state.config.MISTRAL_OCR_API_KEY
|
else request.app.state.config.MISTRAL_OCR_API_KEY
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Reranking settings
|
||||||
|
request.app.state.config.RAG_RERANKING_ENGINE = (
|
||||||
|
form_data.RAG_RERANKING_ENGINE
|
||||||
|
if form_data.RAG_RERANKING_ENGINE is not None
|
||||||
|
else request.app.state.config.RAG_RERANKING_ENGINE
|
||||||
|
)
|
||||||
|
|
||||||
|
request.app.state.config.RAG_EXTERNAL_RERANKER_URL = (
|
||||||
|
form_data.RAG_EXTERNAL_RERANKER_URL
|
||||||
|
if form_data.RAG_EXTERNAL_RERANKER_URL is not None
|
||||||
|
else request.app.state.config.RAG_EXTERNAL_RERANKER_URL
|
||||||
|
)
|
||||||
|
|
||||||
|
request.app.state.config.RAG_EXTERNAL_RERANKER_API_KEY = (
|
||||||
|
form_data.RAG_EXTERNAL_RERANKER_API_KEY
|
||||||
|
if form_data.RAG_EXTERNAL_RERANKER_API_KEY is not None
|
||||||
|
else request.app.state.config.RAG_EXTERNAL_RERANKER_API_KEY
|
||||||
|
)
|
||||||
|
|
||||||
|
log.info(
|
||||||
|
f"Updating reranking model: {request.app.state.config.RAG_RERANKING_MODEL} to {form_data.RAG_RERANKING_MODEL}"
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
request.app.state.config.RAG_RERANKING_MODEL = form_data.RAG_RERANKING_MODEL
|
||||||
|
|
||||||
|
try:
|
||||||
|
request.app.state.rf = get_rf(
|
||||||
|
request.app.state.config.RAG_RERANKING_ENGINE,
|
||||||
|
request.app.state.config.RAG_RERANKING_MODEL,
|
||||||
|
request.app.state.config.RAG_EXTERNAL_RERANKER_URL,
|
||||||
|
request.app.state.config.RAG_EXTERNAL_RERANKER_API_KEY,
|
||||||
|
True,
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
log.error(f"Error loading reranking model: {e}")
|
||||||
|
request.app.state.config.ENABLE_RAG_HYBRID_SEARCH = False
|
||||||
|
except Exception as e:
|
||||||
|
log.exception(f"Problem updating reranking model: {e}")
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||||
|
detail=ERROR_MESSAGES.DEFAULT(e),
|
||||||
|
)
|
||||||
|
|
||||||
# Chunking settings
|
# Chunking settings
|
||||||
request.app.state.config.TEXT_SPLITTER = (
|
request.app.state.config.TEXT_SPLITTER = (
|
||||||
form_data.TEXT_SPLITTER
|
form_data.TEXT_SPLITTER
|
||||||
@@ -786,6 +816,11 @@ async def update_rag_config(
|
|||||||
"DOCUMENT_INTELLIGENCE_ENDPOINT": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
|
"DOCUMENT_INTELLIGENCE_ENDPOINT": request.app.state.config.DOCUMENT_INTELLIGENCE_ENDPOINT,
|
||||||
"DOCUMENT_INTELLIGENCE_KEY": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,
|
"DOCUMENT_INTELLIGENCE_KEY": request.app.state.config.DOCUMENT_INTELLIGENCE_KEY,
|
||||||
"MISTRAL_OCR_API_KEY": request.app.state.config.MISTRAL_OCR_API_KEY,
|
"MISTRAL_OCR_API_KEY": request.app.state.config.MISTRAL_OCR_API_KEY,
|
||||||
|
# Reranking settings
|
||||||
|
"RAG_RERANKING_MODEL": request.app.state.config.RAG_RERANKING_MODEL,
|
||||||
|
"RAG_RERANKING_ENGINE": request.app.state.config.RAG_RERANKING_ENGINE,
|
||||||
|
"RAG_EXTERNAL_RERANKER_URL": request.app.state.config.RAG_EXTERNAL_RERANKER_URL,
|
||||||
|
"RAG_EXTERNAL_RERANKER_API_KEY": request.app.state.config.RAG_EXTERNAL_RERANKER_API_KEY,
|
||||||
# Chunking settings
|
# Chunking settings
|
||||||
"TEXT_SPLITTER": request.app.state.config.TEXT_SPLITTER,
|
"TEXT_SPLITTER": request.app.state.config.TEXT_SPLITTER,
|
||||||
"CHUNK_SIZE": request.app.state.config.CHUNK_SIZE,
|
"CHUNK_SIZE": request.app.state.config.CHUNK_SIZE,
|
||||||
@@ -1568,16 +1603,34 @@ def search_web(request: Request, engine: str, query: str) -> list[SearchResult]:
|
|||||||
async def process_web_search(
|
async def process_web_search(
|
||||||
request: Request, form_data: SearchForm, user=Depends(get_verified_user)
|
request: Request, form_data: SearchForm, user=Depends(get_verified_user)
|
||||||
):
|
):
|
||||||
|
|
||||||
|
urls = []
|
||||||
try:
|
try:
|
||||||
logging.info(
|
logging.info(
|
||||||
f"trying to web search with {request.app.state.config.WEB_SEARCH_ENGINE, form_data.query}"
|
f"trying to web search with {request.app.state.config.WEB_SEARCH_ENGINE, form_data.queries}"
|
||||||
)
|
|
||||||
web_results = await run_in_threadpool(
|
|
||||||
search_web,
|
|
||||||
request,
|
|
||||||
request.app.state.config.WEB_SEARCH_ENGINE,
|
|
||||||
form_data.query,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
search_tasks = [
|
||||||
|
run_in_threadpool(
|
||||||
|
search_web,
|
||||||
|
request,
|
||||||
|
request.app.state.config.WEB_SEARCH_ENGINE,
|
||||||
|
query,
|
||||||
|
)
|
||||||
|
for query in form_data.queries
|
||||||
|
]
|
||||||
|
|
||||||
|
search_results = await asyncio.gather(*search_tasks)
|
||||||
|
|
||||||
|
for result in search_results:
|
||||||
|
if result:
|
||||||
|
for item in result:
|
||||||
|
if item and item.link:
|
||||||
|
urls.append(item.link)
|
||||||
|
|
||||||
|
urls = list(dict.fromkeys(urls))
|
||||||
|
log.debug(f"urls: {urls}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.exception(e)
|
log.exception(e)
|
||||||
|
|
||||||
@@ -1586,10 +1639,7 @@ async def process_web_search(
|
|||||||
detail=ERROR_MESSAGES.WEB_SEARCH_ERROR(e),
|
detail=ERROR_MESSAGES.WEB_SEARCH_ERROR(e),
|
||||||
)
|
)
|
||||||
|
|
||||||
log.debug(f"web_results: {web_results}")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
urls = [result.link for result in web_results]
|
|
||||||
loader = get_web_loader(
|
loader = get_web_loader(
|
||||||
urls,
|
urls,
|
||||||
verify_ssl=request.app.state.config.ENABLE_WEB_LOADER_SSL_VERIFICATION,
|
verify_ssl=request.app.state.config.ENABLE_WEB_LOADER_SSL_VERIFICATION,
|
||||||
@@ -1599,7 +1649,7 @@ async def process_web_search(
|
|||||||
docs = await loader.aload()
|
docs = await loader.aload()
|
||||||
urls = [
|
urls = [
|
||||||
doc.metadata.get("source") for doc in docs if doc.metadata.get("source")
|
doc.metadata.get("source") for doc in docs if doc.metadata.get("source")
|
||||||
] # only keep URLs
|
] # only keep the urls returned by the loader
|
||||||
|
|
||||||
if request.app.state.config.BYPASS_WEB_SEARCH_EMBEDDING_AND_RETRIEVAL:
|
if request.app.state.config.BYPASS_WEB_SEARCH_EMBEDDING_AND_RETRIEVAL:
|
||||||
return {
|
return {
|
||||||
@@ -1616,29 +1666,28 @@ async def process_web_search(
|
|||||||
"loaded_count": len(docs),
|
"loaded_count": len(docs),
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
collection_names = []
|
# Create a single collection for all documents
|
||||||
for doc_idx, doc in enumerate(docs):
|
collection_name = (
|
||||||
if doc and doc.page_content:
|
f"web-search-{calculate_sha256_string('-'.join(form_data.queries))}"[
|
||||||
try:
|
:63
|
||||||
collection_name = f"web-search-{calculate_sha256_string(form_data.query + '-' + urls[doc_idx])}"[
|
]
|
||||||
:63
|
)
|
||||||
]
|
|
||||||
|
|
||||||
collection_names.append(collection_name)
|
try:
|
||||||
await run_in_threadpool(
|
await run_in_threadpool(
|
||||||
save_docs_to_vector_db,
|
save_docs_to_vector_db,
|
||||||
request,
|
request,
|
||||||
[doc],
|
docs,
|
||||||
collection_name,
|
collection_name,
|
||||||
overwrite=True,
|
overwrite=True,
|
||||||
user=user,
|
user=user,
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.debug(f"error saving doc {doc_idx}: {e}")
|
log.debug(f"error saving docs: {e}")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"status": True,
|
"status": True,
|
||||||
"collection_names": collection_names,
|
"collection_names": [collection_name],
|
||||||
"filenames": urls,
|
"filenames": urls,
|
||||||
"loaded_count": len(docs),
|
"loaded_count": len(docs),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -186,20 +186,9 @@ async def generate_title(
|
|||||||
else:
|
else:
|
||||||
template = DEFAULT_TITLE_GENERATION_PROMPT_TEMPLATE
|
template = DEFAULT_TITLE_GENERATION_PROMPT_TEMPLATE
|
||||||
|
|
||||||
messages = form_data["messages"]
|
|
||||||
|
|
||||||
# Remove reasoning details from the messages
|
|
||||||
for message in messages:
|
|
||||||
message["content"] = re.sub(
|
|
||||||
r"<details\s+type=\"reasoning\"[^>]*>.*?<\/details>",
|
|
||||||
"",
|
|
||||||
message["content"],
|
|
||||||
flags=re.S,
|
|
||||||
).strip()
|
|
||||||
|
|
||||||
content = title_generation_template(
|
content = title_generation_template(
|
||||||
template,
|
template,
|
||||||
messages,
|
form_data["messages"],
|
||||||
{
|
{
|
||||||
"name": user.name,
|
"name": user.name,
|
||||||
"location": user.info.get("location") if user.info else None,
|
"location": user.info.get("location") if user.info else None,
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from fastapi import APIRouter, Depends, HTTPException, Request, status
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from open_webui.utils.auth import get_admin_user, get_password_hash, get_verified_user
|
from open_webui.utils.auth import get_admin_user, get_password_hash, get_verified_user
|
||||||
from open_webui.utils.access_control import get_permissions
|
from open_webui.utils.access_control import get_permissions, has_permission
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@@ -34,7 +34,7 @@ router = APIRouter()
|
|||||||
############################
|
############################
|
||||||
|
|
||||||
|
|
||||||
PAGE_ITEM_COUNT = 10
|
PAGE_ITEM_COUNT = 30
|
||||||
|
|
||||||
|
|
||||||
@router.get("/", response_model=UserListResponse)
|
@router.get("/", response_model=UserListResponse)
|
||||||
@@ -205,9 +205,22 @@ async def get_user_settings_by_session_user(user=Depends(get_verified_user)):
|
|||||||
|
|
||||||
@router.post("/user/settings/update", response_model=UserSettings)
|
@router.post("/user/settings/update", response_model=UserSettings)
|
||||||
async def update_user_settings_by_session_user(
|
async def update_user_settings_by_session_user(
|
||||||
form_data: UserSettings, user=Depends(get_verified_user)
|
request: Request, form_data: UserSettings, user=Depends(get_verified_user)
|
||||||
):
|
):
|
||||||
user = Users.update_user_settings_by_id(user.id, form_data.model_dump())
|
updated_user_settings = form_data.model_dump()
|
||||||
|
if (
|
||||||
|
user.role != "admin"
|
||||||
|
and "toolServers" in updated_user_settings.get("ui").keys()
|
||||||
|
and not has_permission(
|
||||||
|
user.id,
|
||||||
|
"features.direct_tool_servers",
|
||||||
|
request.app.state.config.USER_PERMISSIONS,
|
||||||
|
)
|
||||||
|
):
|
||||||
|
# If the user is not an admin and does not have permission to use tool servers, remove the key
|
||||||
|
updated_user_settings["ui"].pop("toolServers", None)
|
||||||
|
|
||||||
|
user = Users.update_user_settings_by_id(user.id, updated_user_settings)
|
||||||
if user:
|
if user:
|
||||||
return user.settings
|
return user.settings
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -159,18 +159,19 @@ def get_models_in_use():
|
|||||||
|
|
||||||
@sio.on("usage")
|
@sio.on("usage")
|
||||||
async def usage(sid, data):
|
async def usage(sid, data):
|
||||||
model_id = data["model"]
|
if sid in SESSION_POOL:
|
||||||
# Record the timestamp for the last update
|
model_id = data["model"]
|
||||||
current_time = int(time.time())
|
# Record the timestamp for the last update
|
||||||
|
current_time = int(time.time())
|
||||||
|
|
||||||
# Store the new usage data and task
|
# Store the new usage data and task
|
||||||
USAGE_POOL[model_id] = {
|
USAGE_POOL[model_id] = {
|
||||||
**(USAGE_POOL[model_id] if model_id in USAGE_POOL else {}),
|
**(USAGE_POOL[model_id] if model_id in USAGE_POOL else {}),
|
||||||
sid: {"updated_at": current_time},
|
sid: {"updated_at": current_time},
|
||||||
}
|
}
|
||||||
|
|
||||||
# Broadcast the usage data to all clients
|
# Broadcast the usage data to all clients
|
||||||
await sio.emit("usage", {"models": get_models_in_use()})
|
await sio.emit("usage", {"models": get_models_in_use()})
|
||||||
|
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
@@ -192,9 +193,6 @@ async def connect(sid, environ, auth):
|
|||||||
# print(f"user {user.name}({user.id}) connected with session ID {sid}")
|
# print(f"user {user.name}({user.id}) connected with session ID {sid}")
|
||||||
await sio.emit("user-list", {"user_ids": list(USER_POOL.keys())})
|
await sio.emit("user-list", {"user_ids": list(USER_POOL.keys())})
|
||||||
await sio.emit("usage", {"models": get_models_in_use()})
|
await sio.emit("usage", {"models": get_models_in_use()})
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
@sio.on("user-join")
|
@sio.on("user-join")
|
||||||
@@ -281,7 +279,8 @@ async def channel_events(sid, data):
|
|||||||
|
|
||||||
@sio.on("user-list")
|
@sio.on("user-list")
|
||||||
async def user_list(sid):
|
async def user_list(sid):
|
||||||
await sio.emit("user-list", {"user_ids": list(USER_POOL.keys())})
|
if sid in SESSION_POOL:
|
||||||
|
await sio.emit("user-list", {"user_ids": list(USER_POOL.keys())})
|
||||||
|
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ from open_webui.config import (
|
|||||||
S3_SECRET_ACCESS_KEY,
|
S3_SECRET_ACCESS_KEY,
|
||||||
S3_USE_ACCELERATE_ENDPOINT,
|
S3_USE_ACCELERATE_ENDPOINT,
|
||||||
S3_ADDRESSING_STYLE,
|
S3_ADDRESSING_STYLE,
|
||||||
|
S3_ENABLE_TAGGING,
|
||||||
GCS_BUCKET_NAME,
|
GCS_BUCKET_NAME,
|
||||||
GOOGLE_APPLICATION_CREDENTIALS_JSON,
|
GOOGLE_APPLICATION_CREDENTIALS_JSON,
|
||||||
AZURE_STORAGE_ENDPOINT,
|
AZURE_STORAGE_ENDPOINT,
|
||||||
@@ -140,18 +141,19 @@ class S3StorageProvider(StorageProvider):
|
|||||||
) -> Tuple[bytes, str]:
|
) -> Tuple[bytes, str]:
|
||||||
"""Handles uploading of the file to S3 storage."""
|
"""Handles uploading of the file to S3 storage."""
|
||||||
_, file_path = LocalStorageProvider.upload_file(file, filename, tags)
|
_, file_path = LocalStorageProvider.upload_file(file, filename, tags)
|
||||||
tagging = {"TagSet": [{"Key": k, "Value": v} for k, v in tags.items()]}
|
s3_key = os.path.join(self.key_prefix, filename)
|
||||||
try:
|
try:
|
||||||
s3_key = os.path.join(self.key_prefix, filename)
|
|
||||||
self.s3_client.upload_file(file_path, self.bucket_name, s3_key)
|
self.s3_client.upload_file(file_path, self.bucket_name, s3_key)
|
||||||
self.s3_client.put_object_tagging(
|
if S3_ENABLE_TAGGING and tags:
|
||||||
Bucket=self.bucket_name,
|
tagging = {"TagSet": [{"Key": k, "Value": v} for k, v in tags.items()]}
|
||||||
Key=s3_key,
|
self.s3_client.put_object_tagging(
|
||||||
Tagging=tagging,
|
Bucket=self.bucket_name,
|
||||||
)
|
Key=s3_key,
|
||||||
|
Tagging=tagging,
|
||||||
|
)
|
||||||
return (
|
return (
|
||||||
open(file_path, "rb").read(),
|
open(file_path, "rb").read(),
|
||||||
"s3://" + self.bucket_name + "/" + s3_key,
|
f"s3://{self.bucket_name}/{s3_key}",
|
||||||
)
|
)
|
||||||
except ClientError as e:
|
except ClientError as e:
|
||||||
raise RuntimeError(f"Error uploading file to S3: {e}")
|
raise RuntimeError(f"Error uploading file to S3: {e}")
|
||||||
|
|||||||
@@ -44,12 +44,14 @@ class JupyterCodeExecuter:
|
|||||||
:param password: Jupyter password (optional)
|
:param password: Jupyter password (optional)
|
||||||
:param timeout: WebSocket timeout in seconds (default: 60s)
|
:param timeout: WebSocket timeout in seconds (default: 60s)
|
||||||
"""
|
"""
|
||||||
self.base_url = base_url.rstrip("/")
|
self.base_url = base_url
|
||||||
self.code = code
|
self.code = code
|
||||||
self.token = token
|
self.token = token
|
||||||
self.password = password
|
self.password = password
|
||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
self.kernel_id = ""
|
self.kernel_id = ""
|
||||||
|
if self.base_url[-1] != "/":
|
||||||
|
self.base_url += "/"
|
||||||
self.session = aiohttp.ClientSession(trust_env=True, base_url=self.base_url)
|
self.session = aiohttp.ClientSession(trust_env=True, base_url=self.base_url)
|
||||||
self.params = {}
|
self.params = {}
|
||||||
self.result = ResultModel()
|
self.result = ResultModel()
|
||||||
@@ -61,7 +63,7 @@ class JupyterCodeExecuter:
|
|||||||
if self.kernel_id:
|
if self.kernel_id:
|
||||||
try:
|
try:
|
||||||
async with self.session.delete(
|
async with self.session.delete(
|
||||||
f"/api/kernels/{self.kernel_id}", params=self.params
|
f"api/kernels/{self.kernel_id}", params=self.params
|
||||||
) as response:
|
) as response:
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
@@ -81,7 +83,7 @@ class JupyterCodeExecuter:
|
|||||||
async def sign_in(self) -> None:
|
async def sign_in(self) -> None:
|
||||||
# password authentication
|
# password authentication
|
||||||
if self.password and not self.token:
|
if self.password and not self.token:
|
||||||
async with self.session.get("/login") as response:
|
async with self.session.get("login") as response:
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
xsrf_token = response.cookies["_xsrf"].value
|
xsrf_token = response.cookies["_xsrf"].value
|
||||||
if not xsrf_token:
|
if not xsrf_token:
|
||||||
@@ -89,7 +91,7 @@ class JupyterCodeExecuter:
|
|||||||
self.session.cookie_jar.update_cookies(response.cookies)
|
self.session.cookie_jar.update_cookies(response.cookies)
|
||||||
self.session.headers.update({"X-XSRFToken": xsrf_token})
|
self.session.headers.update({"X-XSRFToken": xsrf_token})
|
||||||
async with self.session.post(
|
async with self.session.post(
|
||||||
"/login",
|
"login",
|
||||||
data={"_xsrf": xsrf_token, "password": self.password},
|
data={"_xsrf": xsrf_token, "password": self.password},
|
||||||
allow_redirects=False,
|
allow_redirects=False,
|
||||||
) as response:
|
) as response:
|
||||||
@@ -101,17 +103,15 @@ class JupyterCodeExecuter:
|
|||||||
self.params.update({"token": self.token})
|
self.params.update({"token": self.token})
|
||||||
|
|
||||||
async def init_kernel(self) -> None:
|
async def init_kernel(self) -> None:
|
||||||
async with self.session.post(
|
async with self.session.post(url="api/kernels", params=self.params) as response:
|
||||||
url="/api/kernels", params=self.params
|
|
||||||
) as response:
|
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
kernel_data = await response.json()
|
kernel_data = await response.json()
|
||||||
self.kernel_id = kernel_data["id"]
|
self.kernel_id = kernel_data["id"]
|
||||||
|
|
||||||
def init_ws(self) -> (str, dict):
|
def init_ws(self) -> (str, dict):
|
||||||
ws_base = self.base_url.replace("http", "ws")
|
ws_base = self.base_url.replace("http", "ws", 1)
|
||||||
ws_params = "?" + "&".join([f"{key}={val}" for key, val in self.params.items()])
|
ws_params = "?" + "&".join([f"{key}={val}" for key, val in self.params.items()])
|
||||||
websocket_url = f"{ws_base}/api/kernels/{self.kernel_id}/channels{ws_params if len(ws_params) > 1 else ''}"
|
websocket_url = f"{ws_base}api/kernels/{self.kernel_id}/channels{ws_params if len(ws_params) > 1 else ''}"
|
||||||
ws_headers = {}
|
ws_headers = {}
|
||||||
if self.password and not self.token:
|
if self.password and not self.token:
|
||||||
ws_headers = {
|
ws_headers = {
|
||||||
|
|||||||
@@ -353,8 +353,6 @@ async def chat_web_search_handler(
|
|||||||
)
|
)
|
||||||
return form_data
|
return form_data
|
||||||
|
|
||||||
all_results = []
|
|
||||||
|
|
||||||
await event_emitter(
|
await event_emitter(
|
||||||
{
|
{
|
||||||
"type": "status",
|
"type": "status",
|
||||||
@@ -366,106 +364,75 @@ async def chat_web_search_handler(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
gathered_results = await asyncio.gather(
|
try:
|
||||||
*(
|
results = await process_web_search(
|
||||||
process_web_search(
|
request,
|
||||||
request,
|
SearchForm(queries=queries),
|
||||||
SearchForm(**{"query": searchQuery}),
|
user=user,
|
||||||
user=user,
|
)
|
||||||
)
|
|
||||||
for searchQuery in queries
|
|
||||||
),
|
|
||||||
return_exceptions=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
for searchQuery, results in zip(queries, gathered_results):
|
if results:
|
||||||
try:
|
files = form_data.get("files", [])
|
||||||
if isinstance(results, Exception):
|
|
||||||
raise Exception(f"Error searching {searchQuery}: {str(results)}")
|
|
||||||
|
|
||||||
if results:
|
if results.get("collection_names"):
|
||||||
all_results.append(results)
|
for col_idx, collection_name in enumerate(
|
||||||
files = form_data.get("files", [])
|
results.get("collection_names")
|
||||||
|
):
|
||||||
|
files.append(
|
||||||
|
{
|
||||||
|
"collection_name": collection_name,
|
||||||
|
"name": ", ".join(queries),
|
||||||
|
"type": "web_search",
|
||||||
|
"urls": results["filenames"],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
elif results.get("docs"):
|
||||||
|
# Invoked when bypass embedding and retrieval is set to True
|
||||||
|
docs = results["docs"]
|
||||||
|
files.append(
|
||||||
|
{
|
||||||
|
"docs": docs,
|
||||||
|
"name": ", ".join(queries),
|
||||||
|
"type": "web_search",
|
||||||
|
"urls": results["filenames"],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if results.get("collection_names"):
|
form_data["files"] = files
|
||||||
for col_idx, collection_name in enumerate(
|
|
||||||
results.get("collection_names")
|
|
||||||
):
|
|
||||||
files.append(
|
|
||||||
{
|
|
||||||
"collection_name": collection_name,
|
|
||||||
"name": searchQuery,
|
|
||||||
"type": "web_search",
|
|
||||||
"urls": [results["filenames"][col_idx]],
|
|
||||||
}
|
|
||||||
)
|
|
||||||
elif results.get("docs"):
|
|
||||||
# Invoked when bypass embedding and retrieval is set to True
|
|
||||||
docs = results["docs"]
|
|
||||||
|
|
||||||
if len(docs) == len(results["filenames"]):
|
|
||||||
# the number of docs and filenames (urls) should be the same
|
|
||||||
for doc_idx, doc in enumerate(docs):
|
|
||||||
files.append(
|
|
||||||
{
|
|
||||||
"docs": [doc],
|
|
||||||
"name": searchQuery,
|
|
||||||
"type": "web_search",
|
|
||||||
"urls": [results["filenames"][doc_idx]],
|
|
||||||
}
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
# edge case when the number of docs and filenames (urls) are not the same
|
|
||||||
# this should not happen, but if it does, we will just append the docs
|
|
||||||
files.append(
|
|
||||||
{
|
|
||||||
"docs": results.get("docs", []),
|
|
||||||
"name": searchQuery,
|
|
||||||
"type": "web_search",
|
|
||||||
"urls": results["filenames"],
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
form_data["files"] = files
|
|
||||||
except Exception as e:
|
|
||||||
log.exception(e)
|
|
||||||
await event_emitter(
|
await event_emitter(
|
||||||
{
|
{
|
||||||
"type": "status",
|
"type": "status",
|
||||||
"data": {
|
"data": {
|
||||||
"action": "web_search",
|
"action": "web_search",
|
||||||
"description": 'Error searching "{{searchQuery}}"',
|
"description": "Searched {{count}} sites",
|
||||||
"query": searchQuery,
|
"urls": results["filenames"],
|
||||||
|
"done": True,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
await event_emitter(
|
||||||
|
{
|
||||||
|
"type": "status",
|
||||||
|
"data": {
|
||||||
|
"action": "web_search",
|
||||||
|
"description": "No search results found",
|
||||||
"done": True,
|
"done": True,
|
||||||
"error": True,
|
"error": True,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
if all_results:
|
except Exception as e:
|
||||||
urls = []
|
log.exception(e)
|
||||||
for results in all_results:
|
|
||||||
if "filenames" in results:
|
|
||||||
urls.extend(results["filenames"])
|
|
||||||
|
|
||||||
await event_emitter(
|
await event_emitter(
|
||||||
{
|
{
|
||||||
"type": "status",
|
"type": "status",
|
||||||
"data": {
|
"data": {
|
||||||
"action": "web_search",
|
"action": "web_search",
|
||||||
"description": "Searched {{count}} sites",
|
"description": "An error occurred while searching the web",
|
||||||
"urls": urls,
|
"queries": queries,
|
||||||
"done": True,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
await event_emitter(
|
|
||||||
{
|
|
||||||
"type": "status",
|
|
||||||
"data": {
|
|
||||||
"action": "web_search",
|
|
||||||
"description": "No search results found",
|
|
||||||
"done": True,
|
"done": True,
|
||||||
"error": True,
|
"error": True,
|
||||||
},
|
},
|
||||||
@@ -672,6 +639,9 @@ def apply_params_to_form_data(form_data, model):
|
|||||||
if "frequency_penalty" in params and params["frequency_penalty"] is not None:
|
if "frequency_penalty" in params and params["frequency_penalty"] is not None:
|
||||||
form_data["frequency_penalty"] = params["frequency_penalty"]
|
form_data["frequency_penalty"] = params["frequency_penalty"]
|
||||||
|
|
||||||
|
if "presence_penalty" in params and params["presence_penalty"] is not None:
|
||||||
|
form_data["presence_penalty"] = params["presence_penalty"]
|
||||||
|
|
||||||
if "reasoning_effort" in params and params["reasoning_effort"] is not None:
|
if "reasoning_effort" in params and params["reasoning_effort"] is not None:
|
||||||
form_data["reasoning_effort"] = params["reasoning_effort"]
|
form_data["reasoning_effort"] = params["reasoning_effort"]
|
||||||
|
|
||||||
@@ -974,6 +944,20 @@ async def process_chat_response(
|
|||||||
if message:
|
if message:
|
||||||
messages = get_message_list(message_map, message.get("id"))
|
messages = get_message_list(message_map, message.get("id"))
|
||||||
|
|
||||||
|
# Remove reasoning details and files from the messages.
|
||||||
|
# as get_message_list creates a new list, it does not affect
|
||||||
|
# the original messages outside of this handler
|
||||||
|
for message in messages:
|
||||||
|
message["content"] = re.sub(
|
||||||
|
r"<details\s+type=\"reasoning\"[^>]*>.*?<\/details>",
|
||||||
|
"",
|
||||||
|
message["content"],
|
||||||
|
flags=re.S,
|
||||||
|
).strip()
|
||||||
|
|
||||||
|
if message.get("files"):
|
||||||
|
message["files"] = []
|
||||||
|
|
||||||
if tasks and messages:
|
if tasks and messages:
|
||||||
if TASKS.TITLE_GENERATION in tasks:
|
if TASKS.TITLE_GENERATION in tasks:
|
||||||
if tasks[TASKS.TITLE_GENERATION]:
|
if tasks[TASKS.TITLE_GENERATION]:
|
||||||
@@ -1430,11 +1414,12 @@ async def process_chat_response(
|
|||||||
|
|
||||||
if after_tag:
|
if after_tag:
|
||||||
content_blocks[-1]["content"] = after_tag
|
content_blocks[-1]["content"] = after_tag
|
||||||
|
tag_content_handler(
|
||||||
|
content_type, tags, after_tag, content_blocks
|
||||||
|
)
|
||||||
|
|
||||||
content = after_tag
|
|
||||||
break
|
break
|
||||||
|
elif content_blocks[-1]["type"] == content_type:
|
||||||
if content and content_blocks[-1]["type"] == content_type:
|
|
||||||
start_tag = content_blocks[-1]["start_tag"]
|
start_tag = content_blocks[-1]["start_tag"]
|
||||||
end_tag = content_blocks[-1]["end_tag"]
|
end_tag = content_blocks[-1]["end_tag"]
|
||||||
# Match end tag e.g., </tag>
|
# Match end tag e.g., </tag>
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ from open_webui.config import (
|
|||||||
OAUTH_ALLOWED_ROLES,
|
OAUTH_ALLOWED_ROLES,
|
||||||
OAUTH_ADMIN_ROLES,
|
OAUTH_ADMIN_ROLES,
|
||||||
OAUTH_ALLOWED_DOMAINS,
|
OAUTH_ALLOWED_DOMAINS,
|
||||||
|
OAUTH_UPDATE_PICTURE_ON_LOGIN,
|
||||||
WEBHOOK_URL,
|
WEBHOOK_URL,
|
||||||
JWT_EXPIRES_IN,
|
JWT_EXPIRES_IN,
|
||||||
AppConfig,
|
AppConfig,
|
||||||
@@ -72,6 +73,7 @@ auth_manager_config.OAUTH_ADMIN_ROLES = OAUTH_ADMIN_ROLES
|
|||||||
auth_manager_config.OAUTH_ALLOWED_DOMAINS = OAUTH_ALLOWED_DOMAINS
|
auth_manager_config.OAUTH_ALLOWED_DOMAINS = OAUTH_ALLOWED_DOMAINS
|
||||||
auth_manager_config.WEBHOOK_URL = WEBHOOK_URL
|
auth_manager_config.WEBHOOK_URL = WEBHOOK_URL
|
||||||
auth_manager_config.JWT_EXPIRES_IN = JWT_EXPIRES_IN
|
auth_manager_config.JWT_EXPIRES_IN = JWT_EXPIRES_IN
|
||||||
|
auth_manager_config.OAUTH_UPDATE_PICTURE_ON_LOGIN = OAUTH_UPDATE_PICTURE_ON_LOGIN
|
||||||
|
|
||||||
|
|
||||||
class OAuthManager:
|
class OAuthManager:
|
||||||
@@ -158,7 +160,13 @@ class OAuthManager:
|
|||||||
nested_claims = oauth_claim.split(".")
|
nested_claims = oauth_claim.split(".")
|
||||||
for nested_claim in nested_claims:
|
for nested_claim in nested_claims:
|
||||||
claim_data = claim_data.get(nested_claim, {})
|
claim_data = claim_data.get(nested_claim, {})
|
||||||
user_oauth_groups = claim_data if isinstance(claim_data, list) else []
|
|
||||||
|
if isinstance(claim_data, list):
|
||||||
|
user_oauth_groups = claim_data
|
||||||
|
elif isinstance(claim_data, str):
|
||||||
|
user_oauth_groups = [claim_data]
|
||||||
|
else:
|
||||||
|
user_oauth_groups = []
|
||||||
|
|
||||||
user_current_groups: list[GroupModel] = Groups.get_groups_by_member_id(user.id)
|
user_current_groups: list[GroupModel] = Groups.get_groups_by_member_id(user.id)
|
||||||
all_available_groups: list[GroupModel] = Groups.get_groups()
|
all_available_groups: list[GroupModel] = Groups.get_groups()
|
||||||
@@ -169,7 +177,7 @@ class OAuthManager:
|
|||||||
all_group_names = {g.name for g in all_available_groups}
|
all_group_names = {g.name for g in all_available_groups}
|
||||||
groups_created = False
|
groups_created = False
|
||||||
# Determine creator ID: Prefer admin, fallback to current user if no admin exists
|
# Determine creator ID: Prefer admin, fallback to current user if no admin exists
|
||||||
admin_user = Users.get_admin_user()
|
admin_user = Users.get_super_admin_user()
|
||||||
creator_id = admin_user.id if admin_user else user.id
|
creator_id = admin_user.id if admin_user else user.id
|
||||||
log.debug(f"Using creator ID {creator_id} for potential group creation.")
|
log.debug(f"Using creator ID {creator_id} for potential group creation.")
|
||||||
|
|
||||||
@@ -276,6 +284,49 @@ class OAuthManager:
|
|||||||
id=group_model.id, form_data=update_form, overwrite=False
|
id=group_model.id, form_data=update_form, overwrite=False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def _process_picture_url(
|
||||||
|
self, picture_url: str, access_token: str = None
|
||||||
|
) -> str:
|
||||||
|
"""Process a picture URL and return a base64 encoded data URL.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
picture_url: The URL of the picture to process
|
||||||
|
access_token: Optional OAuth access token for authenticated requests
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A data URL containing the base64 encoded picture, or "/user.png" if processing fails
|
||||||
|
"""
|
||||||
|
if not picture_url:
|
||||||
|
return "/user.png"
|
||||||
|
|
||||||
|
try:
|
||||||
|
get_kwargs = {}
|
||||||
|
if access_token:
|
||||||
|
get_kwargs["headers"] = {
|
||||||
|
"Authorization": f"Bearer {access_token}",
|
||||||
|
}
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
async with session.get(picture_url, **get_kwargs) as resp:
|
||||||
|
if resp.ok:
|
||||||
|
picture = await resp.read()
|
||||||
|
base64_encoded_picture = base64.b64encode(picture).decode(
|
||||||
|
"utf-8"
|
||||||
|
)
|
||||||
|
guessed_mime_type = mimetypes.guess_type(picture_url)[0]
|
||||||
|
if guessed_mime_type is None:
|
||||||
|
guessed_mime_type = "image/jpeg"
|
||||||
|
return (
|
||||||
|
f"data:{guessed_mime_type};base64,{base64_encoded_picture}"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
log.warning(
|
||||||
|
f"Failed to fetch profile picture from {picture_url}"
|
||||||
|
)
|
||||||
|
return "/user.png"
|
||||||
|
except Exception as e:
|
||||||
|
log.error(f"Error processing profile picture '{picture_url}': {e}")
|
||||||
|
return "/user.png"
|
||||||
|
|
||||||
async def handle_login(self, request, provider):
|
async def handle_login(self, request, provider):
|
||||||
if provider not in OAUTH_PROVIDERS:
|
if provider not in OAUTH_PROVIDERS:
|
||||||
raise HTTPException(404)
|
raise HTTPException(404)
|
||||||
@@ -376,6 +427,22 @@ class OAuthManager:
|
|||||||
if user.role != determined_role:
|
if user.role != determined_role:
|
||||||
Users.update_user_role_by_id(user.id, determined_role)
|
Users.update_user_role_by_id(user.id, determined_role)
|
||||||
|
|
||||||
|
# Update profile picture if enabled and different from current
|
||||||
|
if auth_manager_config.OAUTH_UPDATE_PICTURE_ON_LOGIN:
|
||||||
|
picture_claim = auth_manager_config.OAUTH_PICTURE_CLAIM
|
||||||
|
if picture_claim:
|
||||||
|
new_picture_url = user_data.get(
|
||||||
|
picture_claim, OAUTH_PROVIDERS[provider].get("picture_url", "")
|
||||||
|
)
|
||||||
|
processed_picture_url = await self._process_picture_url(
|
||||||
|
new_picture_url, token.get("access_token")
|
||||||
|
)
|
||||||
|
if processed_picture_url != user.profile_image_url:
|
||||||
|
Users.update_user_profile_image_url_by_id(
|
||||||
|
user.id, processed_picture_url
|
||||||
|
)
|
||||||
|
log.debug(f"Updated profile picture for user {user.email}")
|
||||||
|
|
||||||
if not user:
|
if not user:
|
||||||
user_count = Users.get_num_users()
|
user_count = Users.get_num_users()
|
||||||
|
|
||||||
@@ -391,40 +458,9 @@ class OAuthManager:
|
|||||||
picture_url = user_data.get(
|
picture_url = user_data.get(
|
||||||
picture_claim, OAUTH_PROVIDERS[provider].get("picture_url", "")
|
picture_claim, OAUTH_PROVIDERS[provider].get("picture_url", "")
|
||||||
)
|
)
|
||||||
if picture_url:
|
picture_url = await self._process_picture_url(
|
||||||
# Download the profile image into a base64 string
|
picture_url, token.get("access_token")
|
||||||
try:
|
)
|
||||||
access_token = token.get("access_token")
|
|
||||||
get_kwargs = {}
|
|
||||||
if access_token:
|
|
||||||
get_kwargs["headers"] = {
|
|
||||||
"Authorization": f"Bearer {access_token}",
|
|
||||||
}
|
|
||||||
async with aiohttp.ClientSession(trust_env=True) as session:
|
|
||||||
async with session.get(
|
|
||||||
picture_url, **get_kwargs
|
|
||||||
) as resp:
|
|
||||||
if resp.ok:
|
|
||||||
picture = await resp.read()
|
|
||||||
base64_encoded_picture = base64.b64encode(
|
|
||||||
picture
|
|
||||||
).decode("utf-8")
|
|
||||||
guessed_mime_type = mimetypes.guess_type(
|
|
||||||
picture_url
|
|
||||||
)[0]
|
|
||||||
if guessed_mime_type is None:
|
|
||||||
# assume JPG, browsers are tolerant enough of image formats
|
|
||||||
guessed_mime_type = "image/jpeg"
|
|
||||||
picture_url = f"data:{guessed_mime_type};base64,{base64_encoded_picture}"
|
|
||||||
else:
|
|
||||||
picture_url = "/user.png"
|
|
||||||
except Exception as e:
|
|
||||||
log.error(
|
|
||||||
f"Error downloading profile image '{picture_url}': {e}"
|
|
||||||
)
|
|
||||||
picture_url = "/user.png"
|
|
||||||
if not picture_url:
|
|
||||||
picture_url = "/user.png"
|
|
||||||
else:
|
else:
|
||||||
picture_url = "/user.png"
|
picture_url = "/user.png"
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ def apply_model_params_to_body_openai(params: dict, form_data: dict) -> dict:
|
|||||||
"top_p": float,
|
"top_p": float,
|
||||||
"max_tokens": int,
|
"max_tokens": int,
|
||||||
"frequency_penalty": float,
|
"frequency_penalty": float,
|
||||||
|
"presence_penalty": float,
|
||||||
"reasoning_effort": str,
|
"reasoning_effort": str,
|
||||||
"seed": lambda x: x,
|
"seed": lambda x: x,
|
||||||
"stop": lambda x: [bytes(s, "utf-8").decode("unicode_escape") for s in x],
|
"stop": lambda x: [bytes(s, "utf-8").decode("unicode_escape") for s in x],
|
||||||
|
|||||||
+3
-1
@@ -65,4 +65,6 @@ if [ -n "$SPACE_ID" ]; then
|
|||||||
export WEBUI_URL=${SPACE_HOST}
|
export WEBUI_URL=${SPACE_HOST}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
WEBUI_SECRET_KEY="$WEBUI_SECRET_KEY" exec uvicorn open_webui.main:app --host "$HOST" --port "$PORT" --forwarded-allow-ips '*' --workers "${UVICORN_WORKERS:-1}"
|
PYTHON_CMD=$(command -v python3 || command -v python)
|
||||||
|
|
||||||
|
WEBUI_SECRET_KEY="$WEBUI_SECRET_KEY" exec "$PYTHON_CMD" -m uvicorn open_webui.main:app --host "$HOST" --port "$PORT" --forwarded-allow-ips '*' --workers "${UVICORN_WORKERS:-1}"
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
|
CONFIG_FILE_EXTENSIONS = (".json", ".yml", ".yaml", ".ini", ".conf", ".toml")
|
||||||
|
|
||||||
|
|
||||||
|
def is_text_file(filepath):
|
||||||
|
# Check for binary file by scanning for null bytes.
|
||||||
|
try:
|
||||||
|
with open(filepath, "rb") as f:
|
||||||
|
chunk = f.read(4096)
|
||||||
|
if b"\0" in chunk:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def should_skip_file(path):
|
||||||
|
base = os.path.basename(path)
|
||||||
|
# Skip dotfiles and dotdirs
|
||||||
|
if base.startswith("."):
|
||||||
|
return True
|
||||||
|
# Skip config files by extension
|
||||||
|
if base.lower().endswith(CONFIG_FILE_EXTENSIONS):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def get_tracked_files():
|
||||||
|
try:
|
||||||
|
output = subprocess.check_output(["git", "ls-files"], text=True)
|
||||||
|
files = output.strip().split("\n")
|
||||||
|
files = [f for f in files if f and os.path.isfile(f)]
|
||||||
|
return files
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
print("Error: Are you in a git repository?")
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
files = get_tracked_files()
|
||||||
|
email_counter = Counter()
|
||||||
|
total_lines = 0
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
if should_skip_file(file):
|
||||||
|
continue
|
||||||
|
if not is_text_file(file):
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
blame = subprocess.check_output(
|
||||||
|
["git", "blame", "-e", file], text=True, errors="replace"
|
||||||
|
)
|
||||||
|
for line in blame.splitlines():
|
||||||
|
# The email always inside <>
|
||||||
|
if "<" in line and ">" in line:
|
||||||
|
try:
|
||||||
|
email = line.split("<")[1].split(">")[0].strip()
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
email_counter[email] += 1
|
||||||
|
total_lines += 1
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
for email, lines in email_counter.most_common():
|
||||||
|
percent = (lines / total_lines * 100) if total_lines else 0
|
||||||
|
print(f"{email}: {lines}/{total_lines} {percent:.2f}%")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Generated
+7
-5
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "open-webui",
|
"name": "open-webui",
|
||||||
"version": "0.6.6",
|
"version": "0.6.9",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "open-webui",
|
"name": "open-webui",
|
||||||
"version": "0.6.6",
|
"version": "0.6.9",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@azure/msal-browser": "^4.5.0",
|
"@azure/msal-browser": "^4.5.0",
|
||||||
"@codemirror/lang-javascript": "^6.2.2",
|
"@codemirror/lang-javascript": "^6.2.2",
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
"dompurify": "^3.2.5",
|
"dompurify": "^3.2.5",
|
||||||
"eventsource-parser": "^1.1.2",
|
"eventsource-parser": "^1.1.2",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
|
"focus-trap": "^7.6.4",
|
||||||
"fuse.js": "^7.0.0",
|
"fuse.js": "^7.0.0",
|
||||||
"highlight.js": "^11.9.0",
|
"highlight.js": "^11.9.0",
|
||||||
"html-entities": "^2.5.3",
|
"html-entities": "^2.5.3",
|
||||||
@@ -6801,9 +6802,10 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/focus-trap": {
|
"node_modules/focus-trap": {
|
||||||
"version": "7.5.4",
|
"version": "7.6.4",
|
||||||
"resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz",
|
"resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz",
|
||||||
"integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==",
|
"integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tabbable": "^6.2.0"
|
"tabbable": "^6.2.0"
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "open-webui",
|
"name": "open-webui",
|
||||||
"version": "0.6.6",
|
"version": "0.6.9",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "npm run pyodide:fetch && vite dev --host",
|
"dev": "npm run pyodide:fetch && vite dev --host",
|
||||||
@@ -79,6 +79,7 @@
|
|||||||
"dompurify": "^3.2.5",
|
"dompurify": "^3.2.5",
|
||||||
"eventsource-parser": "^1.1.2",
|
"eventsource-parser": "^1.1.2",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
|
"focus-trap": "^7.6.4",
|
||||||
"fuse.js": "^7.0.0",
|
"fuse.js": "^7.0.0",
|
||||||
"highlight.js": "^11.9.0",
|
"highlight.js": "^11.9.0",
|
||||||
"html-entities": "^2.5.3",
|
"html-entities": "^2.5.3",
|
||||||
|
|||||||
@@ -24,6 +24,12 @@
|
|||||||
font-display: swap;
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Vazirmatn';
|
||||||
|
src: url('/assets/fonts/Vazirmatn-Variable.ttf');
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
class="w-5 h-5"
|
class="w-5 h-5"
|
||||||
>
|
>
|
||||||
|
<p class="sr-only">{$i18n.t('Close')}</p>
|
||||||
<path
|
<path
|
||||||
d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
|
d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -87,6 +87,7 @@
|
|||||||
<div class="flex justify-center mt-8">
|
<div class="flex justify-center mt-8">
|
||||||
<div class="flex flex-col justify-center items-center">
|
<div class="flex flex-col justify-center items-center">
|
||||||
<button
|
<button
|
||||||
|
aria-labelledby="get-started"
|
||||||
class="relative z-20 flex p-1 rounded-full bg-white/5 hover:bg-white/10 transition font-medium text-sm"
|
class="relative z-20 flex p-1 rounded-full bg-white/5 hover:bg-white/10 transition font-medium text-sm"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
getStartedHandler();
|
getStartedHandler();
|
||||||
@@ -94,12 +95,12 @@
|
|||||||
>
|
>
|
||||||
<ArrowRightCircle className="size-6" />
|
<ArrowRightCircle className="size-6" />
|
||||||
</button>
|
</button>
|
||||||
<div class="mt-1.5 font-primary text-base font-medium">{$i18n.t(`Get started`)}</div>
|
<div id="get-started" class="mt-1.5 font-primary text-base font-medium">
|
||||||
|
{$i18n.t(`Get started`)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <div class="absolute bottom-12 left-0 right-0 w-full"></div> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
let TTS_VOICE = '';
|
let TTS_VOICE = '';
|
||||||
let TTS_SPLIT_ON: TTS_RESPONSE_SPLIT = TTS_RESPONSE_SPLIT.PUNCTUATION;
|
let TTS_SPLIT_ON: TTS_RESPONSE_SPLIT = TTS_RESPONSE_SPLIT.PUNCTUATION;
|
||||||
let TTS_AZURE_SPEECH_REGION = '';
|
let TTS_AZURE_SPEECH_REGION = '';
|
||||||
|
let TTS_AZURE_SPEECH_BASE_URL = '';
|
||||||
let TTS_AZURE_SPEECH_OUTPUT_FORMAT = '';
|
let TTS_AZURE_SPEECH_OUTPUT_FORMAT = '';
|
||||||
|
|
||||||
let STT_OPENAI_API_BASE_URL = '';
|
let STT_OPENAI_API_BASE_URL = '';
|
||||||
@@ -105,6 +106,7 @@
|
|||||||
VOICE: TTS_VOICE,
|
VOICE: TTS_VOICE,
|
||||||
SPLIT_ON: TTS_SPLIT_ON,
|
SPLIT_ON: TTS_SPLIT_ON,
|
||||||
AZURE_SPEECH_REGION: TTS_AZURE_SPEECH_REGION,
|
AZURE_SPEECH_REGION: TTS_AZURE_SPEECH_REGION,
|
||||||
|
AZURE_SPEECH_BASE_URL: TTS_AZURE_SPEECH_BASE_URL,
|
||||||
AZURE_SPEECH_OUTPUT_FORMAT: TTS_AZURE_SPEECH_OUTPUT_FORMAT
|
AZURE_SPEECH_OUTPUT_FORMAT: TTS_AZURE_SPEECH_OUTPUT_FORMAT
|
||||||
},
|
},
|
||||||
stt: {
|
stt: {
|
||||||
@@ -149,8 +151,9 @@
|
|||||||
|
|
||||||
TTS_SPLIT_ON = res.tts.SPLIT_ON || TTS_RESPONSE_SPLIT.PUNCTUATION;
|
TTS_SPLIT_ON = res.tts.SPLIT_ON || TTS_RESPONSE_SPLIT.PUNCTUATION;
|
||||||
|
|
||||||
TTS_AZURE_SPEECH_OUTPUT_FORMAT = res.tts.AZURE_SPEECH_OUTPUT_FORMAT;
|
|
||||||
TTS_AZURE_SPEECH_REGION = res.tts.AZURE_SPEECH_REGION;
|
TTS_AZURE_SPEECH_REGION = res.tts.AZURE_SPEECH_REGION;
|
||||||
|
TTS_AZURE_SPEECH_BASE_URL = res.tts.AZURE_SPEECH_BASE_URL;
|
||||||
|
TTS_AZURE_SPEECH_OUTPUT_FORMAT = res.tts.AZURE_SPEECH_OUTPUT_FORMAT;
|
||||||
|
|
||||||
STT_OPENAI_API_BASE_URL = res.stt.OPENAI_API_BASE_URL;
|
STT_OPENAI_API_BASE_URL = res.stt.OPENAI_API_BASE_URL;
|
||||||
STT_OPENAI_API_KEY = res.stt.OPENAI_API_KEY;
|
STT_OPENAI_API_KEY = res.stt.OPENAI_API_KEY;
|
||||||
@@ -272,16 +275,23 @@
|
|||||||
bind:value={STT_AZURE_API_KEY}
|
bind:value={STT_AZURE_API_KEY}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
<input
|
|
||||||
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
|
||||||
placeholder={$i18n.t('Azure Region')}
|
|
||||||
bind:value={STT_AZURE_REGION}
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr class="border-gray-100 dark:border-gray-850 my-2" />
|
<hr class="border-gray-100 dark:border-gray-850 my-2" />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Azure Region')}</div>
|
||||||
|
<div class="flex w-full">
|
||||||
|
<div class="flex-1">
|
||||||
|
<input
|
||||||
|
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||||
|
bind:value={STT_AZURE_REGION}
|
||||||
|
placeholder={$i18n.t('e.g., westus (leave blank for eastus)')}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Language Locales')}</div>
|
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Language Locales')}</div>
|
||||||
<div class="flex w-full">
|
<div class="flex w-full">
|
||||||
@@ -296,13 +306,13 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Base URL')}</div>
|
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Endpoint URL')}</div>
|
||||||
<div class="flex w-full">
|
<div class="flex w-full">
|
||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<input
|
<input
|
||||||
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||||
bind:value={STT_AZURE_BASE_URL}
|
bind:value={STT_AZURE_BASE_URL}
|
||||||
placeholder={$i18n.t('(leave blank for Azure Commercial URL auto-generation)')}
|
placeholder={$i18n.t('(leave blank for to use commercial endpoint)')}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -468,18 +478,35 @@
|
|||||||
{:else if TTS_ENGINE === 'azure'}
|
{:else if TTS_ENGINE === 'azure'}
|
||||||
<div>
|
<div>
|
||||||
<div class="mt-1 flex gap-2 mb-1">
|
<div class="mt-1 flex gap-2 mb-1">
|
||||||
<input
|
<SensitiveInput placeholder={$i18n.t('API Key')} bind:value={TTS_API_KEY} required />
|
||||||
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
</div>
|
||||||
placeholder={$i18n.t('API Key')}
|
|
||||||
bind:value={TTS_API_KEY}
|
<hr class="border-gray-100 dark:border-gray-850 my-2" />
|
||||||
required
|
|
||||||
/>
|
<div>
|
||||||
<input
|
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Azure Region')}</div>
|
||||||
class="flex-1 w-full rounded-lg py-2 pl-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
<div class="flex w-full">
|
||||||
placeholder={$i18n.t('Azure Region')}
|
<div class="flex-1">
|
||||||
bind:value={TTS_AZURE_SPEECH_REGION}
|
<input
|
||||||
required
|
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||||
/>
|
bind:value={TTS_AZURE_SPEECH_REGION}
|
||||||
|
placeholder={$i18n.t('e.g., westus (leave blank for eastus)')}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div class=" mb-1.5 text-sm font-medium">{$i18n.t('Endpoint URL')}</div>
|
||||||
|
<div class="flex w-full">
|
||||||
|
<div class="flex-1">
|
||||||
|
<input
|
||||||
|
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||||
|
bind:value={TTS_AZURE_SPEECH_BASE_URL}
|
||||||
|
placeholder={$i18n.t('(leave blank for to use commercial endpoint)')}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -123,35 +123,6 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const rerankingModelUpdateHandler = async () => {
|
|
||||||
console.log('Update reranking model attempt:', rerankingModel);
|
|
||||||
|
|
||||||
updateRerankingModelLoading = true;
|
|
||||||
const res = await updateRerankingConfig(localStorage.token, {
|
|
||||||
reranking_model: rerankingModel
|
|
||||||
}).catch(async (error) => {
|
|
||||||
toast.error(`${error}`);
|
|
||||||
await setRerankingConfig();
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
updateRerankingModelLoading = false;
|
|
||||||
|
|
||||||
if (res) {
|
|
||||||
console.log('rerankingModelUpdateHandler:', res);
|
|
||||||
if (res.status === true) {
|
|
||||||
if (rerankingModel === '') {
|
|
||||||
toast.success($i18n.t('Reranking model disabled', res), {
|
|
||||||
duration: 1000 * 10
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
toast.success($i18n.t('Reranking model set to "{{reranking_model}}"', res), {
|
|
||||||
duration: 1000 * 10
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const submitHandler = async () => {
|
const submitHandler = async () => {
|
||||||
if (RAGConfig.CONTENT_EXTRACTION_ENGINE === 'tika' && RAGConfig.TIKA_SERVER_URL === '') {
|
if (RAGConfig.CONTENT_EXTRACTION_ENGINE === 'tika' && RAGConfig.TIKA_SERVER_URL === '') {
|
||||||
toast.error($i18n.t('Tika Server URL required.'));
|
toast.error($i18n.t('Tika Server URL required.'));
|
||||||
@@ -190,10 +161,6 @@
|
|||||||
|
|
||||||
if (!RAGConfig.BYPASS_EMBEDDING_AND_RETRIEVAL) {
|
if (!RAGConfig.BYPASS_EMBEDDING_AND_RETRIEVAL) {
|
||||||
await embeddingModelUpdateHandler();
|
await embeddingModelUpdateHandler();
|
||||||
|
|
||||||
if (RAGConfig.ENABLE_RAG_HYBRID_SEARCH) {
|
|
||||||
await rerankingModelUpdateHandler();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const res = await updateRAGConfig(localStorage.token, RAGConfig);
|
const res = await updateRAGConfig(localStorage.token, RAGConfig);
|
||||||
@@ -215,18 +182,8 @@
|
|||||||
OllamaUrl = embeddingConfig.ollama_config.url;
|
OllamaUrl = embeddingConfig.ollama_config.url;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const setRerankingConfig = async () => {
|
|
||||||
const rerankingConfig = await getRerankingConfig(localStorage.token);
|
|
||||||
|
|
||||||
if (rerankingConfig) {
|
|
||||||
rerankingModel = rerankingConfig.reranking_model;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
await setEmbeddingConfig();
|
await setEmbeddingConfig();
|
||||||
await setRerankingConfig();
|
|
||||||
|
|
||||||
RAGConfig = await getRAGConfig(localStorage.token);
|
RAGConfig = await getRAGConfig(localStorage.token);
|
||||||
});
|
});
|
||||||
@@ -655,6 +612,48 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#if RAGConfig.ENABLE_RAG_HYBRID_SEARCH === true}
|
{#if RAGConfig.ENABLE_RAG_HYBRID_SEARCH === true}
|
||||||
|
<div class=" mb-2.5 flex flex-col w-full justify-between">
|
||||||
|
<div class="flex w-full justify-between">
|
||||||
|
<div class=" self-center text-xs font-medium">
|
||||||
|
{$i18n.t('Reranking Engine')}
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center relative">
|
||||||
|
<select
|
||||||
|
class="dark:bg-gray-900 w-fit pr-8 rounded-sm px-2 p-1 text-xs bg-transparent outline-hidden text-right"
|
||||||
|
bind:value={RAGConfig.RAG_RERANKING_ENGINE}
|
||||||
|
placeholder="Select a reranking model engine"
|
||||||
|
on:change={(e) => {
|
||||||
|
if (e.target.value === 'external') {
|
||||||
|
RAGConfig.RAG_RERANKING_MODEL = '';
|
||||||
|
} else if (e.target.value === '') {
|
||||||
|
RAGConfig.RAG_RERANKING_MODEL = 'BAAI/bge-reranker-v2-m3';
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<option value="">{$i18n.t('Default (SentenceTransformers)')}</option>
|
||||||
|
<option value="external">{$i18n.t('External')}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{#if RAGConfig.RAG_RERANKING_ENGINE === 'external'}
|
||||||
|
<div class="my-0.5 flex gap-2 pr-2">
|
||||||
|
<input
|
||||||
|
class="flex-1 w-full rounded-lg text-sm bg-transparent outline-hidden"
|
||||||
|
placeholder={$i18n.t('API Base URL')}
|
||||||
|
bind:value={RAGConfig.RAG_EXTERNAL_RERANKER_URL}
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
|
||||||
|
<SensitiveInput
|
||||||
|
placeholder={$i18n.t('API Key')}
|
||||||
|
bind:value={RAGConfig.RAG_EXTERNAL_RERANKER_API_KEY}
|
||||||
|
required={false}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class=" mb-2.5 flex flex-col w-full">
|
<div class=" mb-2.5 flex flex-col w-full">
|
||||||
<div class=" mb-1 text-xs font-medium">{$i18n.t('Reranking Model')}</div>
|
<div class=" mb-1 text-xs font-medium">{$i18n.t('Reranking Model')}</div>
|
||||||
|
|
||||||
@@ -666,62 +665,9 @@
|
|||||||
placeholder={$i18n.t('Set reranking model (e.g. {{model}})', {
|
placeholder={$i18n.t('Set reranking model (e.g. {{model}})', {
|
||||||
model: 'BAAI/bge-reranker-v2-m3'
|
model: 'BAAI/bge-reranker-v2-m3'
|
||||||
})}
|
})}
|
||||||
bind:value={rerankingModel}
|
bind:value={RAGConfig.RAG_RERANKING_MODEL}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<button
|
|
||||||
class="px-2.5 bg-transparent text-gray-800 dark:bg-transparent dark:text-gray-100 rounded-lg transition"
|
|
||||||
on:click={() => {
|
|
||||||
rerankingModelUpdateHandler();
|
|
||||||
}}
|
|
||||||
disabled={updateRerankingModelLoading}
|
|
||||||
>
|
|
||||||
{#if updateRerankingModelLoading}
|
|
||||||
<div class="self-center">
|
|
||||||
<svg
|
|
||||||
class=" w-4 h-4"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="currentColor"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
>
|
|
||||||
<style>
|
|
||||||
.spinner_ajPY {
|
|
||||||
transform-origin: center;
|
|
||||||
animation: spinner_AtaB 0.75s infinite linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes spinner_AtaB {
|
|
||||||
100% {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<path
|
|
||||||
d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"
|
|
||||||
opacity=".25"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
d="M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z"
|
|
||||||
class="spinner_ajPY"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
{:else}
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 16 16"
|
|
||||||
fill="currentColor"
|
|
||||||
class="w-4 h-4"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="M8.75 2.75a.75.75 0 0 0-1.5 0v5.69L5.03 6.22a.75.75 0 0 0-1.06 1.06l3.5 3.5a.75.75 0 0 0 1.06 0l3.5-3.5a.75.75 0 0 0-1.06-1.06L8.75 8.44V2.75Z"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
d="M3.5 9.75a.75.75 0 0 0-1.5 0v1.5A2.75 2.75 0 0 0 4.75 14h6.5A2.75 2.75 0 0 0 14 11.25v-1.5a.75.75 0 0 0-1.5 0v1.5c0 .69-.56 1.25-1.25 1.25h-6.5c-.69 0-1.25-.56-1.25-1.25v-1.5Z"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
{/if}
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
import { toast } from 'svelte-sonner';
|
import { toast } from 'svelte-sonner';
|
||||||
|
|
||||||
import { getBackendConfig, getTaskConfig, updateTaskConfig } from '$lib/apis';
|
import { getBackendConfig, getModels, getTaskConfig, updateTaskConfig } from '$lib/apis';
|
||||||
import { setDefaultPromptSuggestions } from '$lib/apis/configs';
|
import { setDefaultPromptSuggestions } from '$lib/apis/configs';
|
||||||
import { config, models, settings, user } from '$lib/stores';
|
import { config, settings, user } from '$lib/stores';
|
||||||
import { createEventDispatcher, onMount, getContext } from 'svelte';
|
import { createEventDispatcher, onMount, getContext } from 'svelte';
|
||||||
|
|
||||||
import { banners as _banners } from '$lib/stores';
|
import { banners as _banners } from '$lib/stores';
|
||||||
@@ -15,6 +15,8 @@
|
|||||||
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
||||||
import Switch from '$lib/components/common/Switch.svelte';
|
import Switch from '$lib/components/common/Switch.svelte';
|
||||||
import Textarea from '$lib/components/common/Textarea.svelte';
|
import Textarea from '$lib/components/common/Textarea.svelte';
|
||||||
|
import Spinner from '$lib/components/common/Spinner.svelte';
|
||||||
|
import { getBaseModels } from '$lib/apis/models';
|
||||||
|
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
@@ -49,6 +51,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
|
await init();
|
||||||
taskConfig = await getTaskConfig(localStorage.token);
|
taskConfig = await getTaskConfig(localStorage.token);
|
||||||
|
|
||||||
promptSuggestions = $config?.default_prompt_suggestions ?? [];
|
promptSuggestions = $config?.default_prompt_suggestions ?? [];
|
||||||
@@ -58,9 +61,40 @@
|
|||||||
const updateBanners = async () => {
|
const updateBanners = async () => {
|
||||||
_banners.set(await setBanners(localStorage.token, banners));
|
_banners.set(await setBanners(localStorage.token, banners));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let workspaceModels = null;
|
||||||
|
let baseModels = null;
|
||||||
|
|
||||||
|
let models = null;
|
||||||
|
|
||||||
|
const init = async () => {
|
||||||
|
workspaceModels = await getBaseModels(localStorage.token);
|
||||||
|
baseModels = await getModels(localStorage.token, null, true);
|
||||||
|
|
||||||
|
models = baseModels.map((m) => {
|
||||||
|
const workspaceModel = workspaceModels.find((wm) => wm.id === m.id);
|
||||||
|
|
||||||
|
if (workspaceModel) {
|
||||||
|
return {
|
||||||
|
...m,
|
||||||
|
...workspaceModel
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
...m,
|
||||||
|
id: m.id,
|
||||||
|
name: m.name,
|
||||||
|
|
||||||
|
is_active: true
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('models', models);
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if taskConfig}
|
{#if models !== null && taskConfig}
|
||||||
<form
|
<form
|
||||||
class="flex flex-col h-full justify-between space-y-3 text-sm"
|
class="flex flex-col h-full justify-between space-y-3 text-sm"
|
||||||
on:submit|preventDefault={() => {
|
on:submit|preventDefault={() => {
|
||||||
@@ -105,9 +139,27 @@
|
|||||||
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||||
bind:value={taskConfig.TASK_MODEL}
|
bind:value={taskConfig.TASK_MODEL}
|
||||||
placeholder={$i18n.t('Select a model')}
|
placeholder={$i18n.t('Select a model')}
|
||||||
|
on:change={() => {
|
||||||
|
if (taskConfig.TASK_MODEL) {
|
||||||
|
const model = models.find((m) => m.id === taskConfig.TASK_MODEL);
|
||||||
|
if (model) {
|
||||||
|
if (model?.access_control !== null) {
|
||||||
|
toast.error(
|
||||||
|
$i18n.t(
|
||||||
|
'This model is not publicly available. Please select another model.'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
taskConfig.TASK_MODEL = model.id;
|
||||||
|
} else {
|
||||||
|
taskConfig.TASK_MODEL = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<option value="" selected>{$i18n.t('Current Model')}</option>
|
<option value="" selected>{$i18n.t('Current Model')}</option>
|
||||||
{#each $models.filter((m) => m.owned_by === 'ollama') as model}
|
{#each models.filter((m) => m.owned_by === 'ollama') as model}
|
||||||
<option value={model.id} class="bg-gray-100 dark:bg-gray-700">
|
<option value={model.id} class="bg-gray-100 dark:bg-gray-700">
|
||||||
{model.name}
|
{model.name}
|
||||||
</option>
|
</option>
|
||||||
@@ -121,9 +173,27 @@
|
|||||||
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
class="w-full rounded-lg py-2 px-4 text-sm bg-gray-50 dark:text-gray-300 dark:bg-gray-850 outline-hidden"
|
||||||
bind:value={taskConfig.TASK_MODEL_EXTERNAL}
|
bind:value={taskConfig.TASK_MODEL_EXTERNAL}
|
||||||
placeholder={$i18n.t('Select a model')}
|
placeholder={$i18n.t('Select a model')}
|
||||||
|
on:change={() => {
|
||||||
|
if (taskConfig.TASK_MODEL_EXTERNAL) {
|
||||||
|
const model = models.find((m) => m.id === taskConfig.TASK_MODEL_EXTERNAL);
|
||||||
|
if (model) {
|
||||||
|
if (model?.access_control !== null) {
|
||||||
|
toast.error(
|
||||||
|
$i18n.t(
|
||||||
|
'This model is not publicly available. Please select another model.'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
taskConfig.TASK_MODEL_EXTERNAL = model.id;
|
||||||
|
} else {
|
||||||
|
taskConfig.TASK_MODEL_EXTERNAL = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<option value="" selected>{$i18n.t('Current Model')}</option>
|
<option value="" selected>{$i18n.t('Current Model')}</option>
|
||||||
{#each $models as model}
|
{#each models as model}
|
||||||
<option value={model.id} class="bg-gray-100 dark:bg-gray-700">
|
<option value={model.id} class="bg-gray-100 dark:bg-gray-700">
|
||||||
{model.name}
|
{model.name}
|
||||||
</option>
|
</option>
|
||||||
@@ -480,4 +550,8 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
{:else}
|
||||||
|
<div class=" h-full w-full flex justify-center items-center">
|
||||||
|
<Spinner />
|
||||||
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -32,13 +32,14 @@
|
|||||||
import About from '$lib/components/chat/Settings/About.svelte';
|
import About from '$lib/components/chat/Settings/About.svelte';
|
||||||
import Banner from '$lib/components/common/Banner.svelte';
|
import Banner from '$lib/components/common/Banner.svelte';
|
||||||
import Markdown from '$lib/components/chat/Messages/Markdown.svelte';
|
import Markdown from '$lib/components/chat/Messages/Markdown.svelte';
|
||||||
|
import Spinner from '$lib/components/common/Spinner.svelte';
|
||||||
|
|
||||||
const i18n = getContext('i18n');
|
const i18n = getContext('i18n');
|
||||||
|
|
||||||
let page = 1;
|
let page = 1;
|
||||||
|
|
||||||
let users = [];
|
let users = null;
|
||||||
let total = 0;
|
let total = null;
|
||||||
|
|
||||||
let query = '';
|
let query = '';
|
||||||
let orderBy = 'created_at'; // default sort key
|
let orderBy = 'created_at'; // default sort key
|
||||||
@@ -181,314 +182,293 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="mt-0.5 mb-2 gap-1 flex flex-col md:flex-row justify-between">
|
{#if users === null || total === null}
|
||||||
<div class="flex md:self-center text-lg font-medium px-0.5">
|
<div class="my-10">
|
||||||
<div class="flex-shrink-0">
|
<Spinner />
|
||||||
{$i18n.t('Users')}
|
</div>
|
||||||
</div>
|
{:else}
|
||||||
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 dark:bg-gray-850" />
|
<div class="mt-0.5 mb-2 gap-1 flex flex-col md:flex-row justify-between">
|
||||||
|
<div class="flex md:self-center text-lg font-medium px-0.5">
|
||||||
|
<div class="flex-shrink-0">
|
||||||
|
{$i18n.t('Users')}
|
||||||
|
</div>
|
||||||
|
<div class="flex self-center w-[1px] h-6 mx-2.5 bg-gray-50 dark:bg-gray-850" />
|
||||||
|
|
||||||
{#if ($config?.license_metadata?.seats ?? null) !== null}
|
{#if ($config?.license_metadata?.seats ?? null) !== null}
|
||||||
{#if total > $config?.license_metadata?.seats}
|
{#if total > $config?.license_metadata?.seats}
|
||||||
<span class="text-lg font-medium text-red-500"
|
<span class="text-lg font-medium text-red-500"
|
||||||
>{total} of {$config?.license_metadata?.seats}
|
>{total} of {$config?.license_metadata?.seats}
|
||||||
<span class="text-sm font-normal">available users</span></span
|
<span class="text-sm font-normal">available users</span></span
|
||||||
>
|
>
|
||||||
|
{:else}
|
||||||
|
<span class="text-lg font-medium text-gray-500 dark:text-gray-300"
|
||||||
|
>{total} of {$config?.license_metadata?.seats}
|
||||||
|
<span class="text-sm font-normal">available users</span></span
|
||||||
|
>
|
||||||
|
{/if}
|
||||||
{:else}
|
{:else}
|
||||||
<span class="text-lg font-medium text-gray-500 dark:text-gray-300"
|
<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{total}</span>
|
||||||
>{total} of {$config?.license_metadata?.seats}
|
|
||||||
<span class="text-sm font-normal">available users</span></span
|
|
||||||
>
|
|
||||||
{/if}
|
{/if}
|
||||||
{:else}
|
|
||||||
<span class="text-lg font-medium text-gray-500 dark:text-gray-300">{total}</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex gap-1">
|
|
||||||
<div class=" flex w-full space-x-2">
|
|
||||||
<div class="flex flex-1">
|
|
||||||
<div class=" self-center ml-1 mr-3">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 20 20"
|
|
||||||
fill="currentColor"
|
|
||||||
class="w-4 h-4"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
fill-rule="evenodd"
|
|
||||||
d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<input
|
|
||||||
class=" w-full text-sm pr-4 py-1 rounded-r-xl outline-hidden bg-transparent"
|
|
||||||
bind:value={query}
|
|
||||||
placeholder={$i18n.t('Search')}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<Tooltip content={$i18n.t('Add User')}>
|
|
||||||
<button
|
|
||||||
class=" p-2 rounded-xl hover:bg-gray-100 dark:bg-gray-900 dark:hover:bg-gray-850 transition font-medium text-sm flex items-center space-x-1"
|
|
||||||
on:click={() => {
|
|
||||||
showAddUserModal = !showAddUserModal;
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Plus className="size-3.5" />
|
|
||||||
</button>
|
|
||||||
</Tooltip>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
<div class="flex gap-1">
|
||||||
class="scrollbar-hidden relative whitespace-nowrap overflow-x-auto max-w-full rounded-sm pt-0.5"
|
<div class=" flex w-full space-x-2">
|
||||||
>
|
<div class="flex flex-1">
|
||||||
<table
|
<div class=" self-center ml-1 mr-3">
|
||||||
class="w-full text-sm text-left text-gray-500 dark:text-gray-400 table-auto max-w-full rounded-sm"
|
<svg
|
||||||
>
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
<thead
|
viewBox="0 0 20 20"
|
||||||
class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-850 dark:text-gray-400 -translate-y-0.5"
|
fill="currentColor"
|
||||||
>
|
class="w-4 h-4"
|
||||||
<tr class="">
|
>
|
||||||
<th
|
<path
|
||||||
scope="col"
|
fill-rule="evenodd"
|
||||||
class="px-3 py-1.5 cursor-pointer select-none"
|
d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z"
|
||||||
on:click={() => setSortKey('role')}
|
clip-rule="evenodd"
|
||||||
>
|
/>
|
||||||
<div class="flex gap-1.5 items-center">
|
</svg>
|
||||||
{$i18n.t('Role')}
|
|
||||||
|
|
||||||
{#if orderBy === 'role'}
|
|
||||||
<span class="font-normal"
|
|
||||||
>{#if direction === 'asc'}
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
{:else}
|
|
||||||
<ChevronDown className="size-2" />
|
|
||||||
{/if}
|
|
||||||
</span>
|
|
||||||
{:else}
|
|
||||||
<span class="invisible">
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
</div>
|
||||||
</th>
|
<input
|
||||||
<th
|
class=" w-full text-sm pr-4 py-1 rounded-r-xl outline-hidden bg-transparent"
|
||||||
scope="col"
|
bind:value={query}
|
||||||
class="px-3 py-1.5 cursor-pointer select-none"
|
placeholder={$i18n.t('Search')}
|
||||||
on:click={() => setSortKey('name')}
|
/>
|
||||||
>
|
</div>
|
||||||
<div class="flex gap-1.5 items-center">
|
|
||||||
{$i18n.t('Name')}
|
|
||||||
|
|
||||||
{#if orderBy === 'name'}
|
<div>
|
||||||
<span class="font-normal"
|
<Tooltip content={$i18n.t('Add User')}>
|
||||||
>{#if direction === 'asc'}
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
{:else}
|
|
||||||
<ChevronDown className="size-2" />
|
|
||||||
{/if}
|
|
||||||
</span>
|
|
||||||
{:else}
|
|
||||||
<span class="invisible">
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<th
|
|
||||||
scope="col"
|
|
||||||
class="px-3 py-1.5 cursor-pointer select-none"
|
|
||||||
on:click={() => setSortKey('email')}
|
|
||||||
>
|
|
||||||
<div class="flex gap-1.5 items-center">
|
|
||||||
{$i18n.t('Email')}
|
|
||||||
|
|
||||||
{#if orderBy === 'email'}
|
|
||||||
<span class="font-normal"
|
|
||||||
>{#if direction === 'asc'}
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
{:else}
|
|
||||||
<ChevronDown className="size-2" />
|
|
||||||
{/if}
|
|
||||||
</span>
|
|
||||||
{:else}
|
|
||||||
<span class="invisible">
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th
|
|
||||||
scope="col"
|
|
||||||
class="px-3 py-1.5 cursor-pointer select-none"
|
|
||||||
on:click={() => setSortKey('last_active_at')}
|
|
||||||
>
|
|
||||||
<div class="flex gap-1.5 items-center">
|
|
||||||
{$i18n.t('Last Active')}
|
|
||||||
|
|
||||||
{#if orderBy === 'last_active_at'}
|
|
||||||
<span class="font-normal"
|
|
||||||
>{#if direction === 'asc'}
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
{:else}
|
|
||||||
<ChevronDown className="size-2" />
|
|
||||||
{/if}
|
|
||||||
</span>
|
|
||||||
{:else}
|
|
||||||
<span class="invisible">
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<th
|
|
||||||
scope="col"
|
|
||||||
class="px-3 py-1.5 cursor-pointer select-none"
|
|
||||||
on:click={() => setSortKey('created_at')}
|
|
||||||
>
|
|
||||||
<div class="flex gap-1.5 items-center">
|
|
||||||
{$i18n.t('Created at')}
|
|
||||||
{#if orderBy === 'created_at'}
|
|
||||||
<span class="font-normal"
|
|
||||||
>{#if direction === 'asc'}
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
{:else}
|
|
||||||
<ChevronDown className="size-2" />
|
|
||||||
{/if}
|
|
||||||
</span>
|
|
||||||
{:else}
|
|
||||||
<span class="invisible">
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th
|
|
||||||
scope="col"
|
|
||||||
class="px-3 py-1.5 cursor-pointer select-none"
|
|
||||||
on:click={() => setSortKey('oauth_sub')}
|
|
||||||
>
|
|
||||||
<div class="flex gap-1.5 items-center">
|
|
||||||
{$i18n.t('OAuth ID')}
|
|
||||||
|
|
||||||
{#if orderBy === 'oauth_sub'}
|
|
||||||
<span class="font-normal"
|
|
||||||
>{#if direction === 'asc'}
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
{:else}
|
|
||||||
<ChevronDown className="size-2" />
|
|
||||||
{/if}
|
|
||||||
</span>
|
|
||||||
{:else}
|
|
||||||
<span class="invisible">
|
|
||||||
<ChevronUp className="size-2" />
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th scope="col" class="px-3 py-2 text-right" />
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody class="">
|
|
||||||
{#each users as user, userIdx}
|
|
||||||
<tr class="bg-white dark:bg-gray-900 dark:border-gray-850 text-xs">
|
|
||||||
<td class="px-3 py-1 min-w-[7rem] w-28">
|
|
||||||
<button
|
<button
|
||||||
class=" translate-y-0.5"
|
class=" p-2 rounded-xl hover:bg-gray-100 dark:bg-gray-900 dark:hover:bg-gray-850 transition font-medium text-sm flex items-center space-x-1"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
selectedUser = user;
|
showAddUserModal = !showAddUserModal;
|
||||||
showUpdateRoleModal = true;
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Badge
|
<Plus className="size-3.5" />
|
||||||
type={user.role === 'admin' ? 'info' : user.role === 'user' ? 'success' : 'muted'}
|
|
||||||
content={$i18n.t(user.role)}
|
|
||||||
/>
|
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</Tooltip>
|
||||||
<td class="px-3 py-1 font-medium text-gray-900 dark:text-white w-max">
|
</div>
|
||||||
<div class="flex flex-row w-max">
|
</div>
|
||||||
<img
|
</div>
|
||||||
class=" rounded-full w-6 h-6 object-cover mr-2.5"
|
</div>
|
||||||
src={user.profile_image_url.startsWith(WEBUI_BASE_URL) ||
|
|
||||||
user.profile_image_url.startsWith('https://www.gravatar.com/avatar/') ||
|
|
||||||
user.profile_image_url.startsWith('data:')
|
|
||||||
? user.profile_image_url
|
|
||||||
: `/user.png`}
|
|
||||||
alt="user"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<div class=" font-medium self-center">{user.name}</div>
|
<div
|
||||||
</div>
|
class="scrollbar-hidden relative whitespace-nowrap overflow-x-auto max-w-full rounded-sm pt-0.5"
|
||||||
</td>
|
>
|
||||||
<td class=" px-3 py-1"> {user.email} </td>
|
<table
|
||||||
|
class="w-full text-sm text-left text-gray-500 dark:text-gray-400 table-auto max-w-full rounded-sm"
|
||||||
|
>
|
||||||
|
<thead
|
||||||
|
class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-850 dark:text-gray-400 -translate-y-0.5"
|
||||||
|
>
|
||||||
|
<tr class="">
|
||||||
|
<th
|
||||||
|
scope="col"
|
||||||
|
class="px-3 py-1.5 cursor-pointer select-none"
|
||||||
|
on:click={() => setSortKey('role')}
|
||||||
|
>
|
||||||
|
<div class="flex gap-1.5 items-center">
|
||||||
|
{$i18n.t('Role')}
|
||||||
|
|
||||||
<td class=" px-3 py-1">
|
{#if orderBy === 'role'}
|
||||||
{dayjs(user.last_active_at * 1000).fromNow()}
|
<span class="font-normal"
|
||||||
</td>
|
>{#if direction === 'asc'}
|
||||||
|
<ChevronUp className="size-2" />
|
||||||
<td class=" px-3 py-1">
|
{:else}
|
||||||
{dayjs(user.created_at * 1000).format('LL')}
|
<ChevronDown className="size-2" />
|
||||||
</td>
|
{/if}
|
||||||
|
</span>
|
||||||
<td class=" px-3 py-1"> {user.oauth_sub ?? ''} </td>
|
{:else}
|
||||||
|
<span class="invisible">
|
||||||
<td class="px-3 py-1 text-right">
|
<ChevronUp className="size-2" />
|
||||||
<div class="flex justify-end w-full">
|
</span>
|
||||||
{#if $config.features.enable_admin_chat_access && user.role !== 'admin'}
|
|
||||||
<Tooltip content={$i18n.t('Chats')}>
|
|
||||||
<button
|
|
||||||
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
|
||||||
on:click={async () => {
|
|
||||||
showUserChatsModal = !showUserChatsModal;
|
|
||||||
selectedUser = user;
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<ChatBubbles />
|
|
||||||
</button>
|
|
||||||
</Tooltip>
|
|
||||||
{/if}
|
{/if}
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th
|
||||||
|
scope="col"
|
||||||
|
class="px-3 py-1.5 cursor-pointer select-none"
|
||||||
|
on:click={() => setSortKey('name')}
|
||||||
|
>
|
||||||
|
<div class="flex gap-1.5 items-center">
|
||||||
|
{$i18n.t('Name')}
|
||||||
|
|
||||||
<Tooltip content={$i18n.t('Edit User')}>
|
{#if orderBy === 'name'}
|
||||||
<button
|
<span class="font-normal"
|
||||||
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
>{#if direction === 'asc'}
|
||||||
on:click={async () => {
|
<ChevronUp className="size-2" />
|
||||||
showEditUserModal = !showEditUserModal;
|
{:else}
|
||||||
selectedUser = user;
|
<ChevronDown className="size-2" />
|
||||||
}}
|
{/if}
|
||||||
>
|
</span>
|
||||||
<svg
|
{:else}
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
<span class="invisible">
|
||||||
fill="none"
|
<ChevronUp className="size-2" />
|
||||||
viewBox="0 0 24 24"
|
</span>
|
||||||
stroke-width="1.5"
|
{/if}
|
||||||
stroke="currentColor"
|
</div>
|
||||||
class="w-4 h-4"
|
</th>
|
||||||
>
|
<th
|
||||||
<path
|
scope="col"
|
||||||
stroke-linecap="round"
|
class="px-3 py-1.5 cursor-pointer select-none"
|
||||||
stroke-linejoin="round"
|
on:click={() => setSortKey('email')}
|
||||||
d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125"
|
>
|
||||||
/>
|
<div class="flex gap-1.5 items-center">
|
||||||
</svg>
|
{$i18n.t('Email')}
|
||||||
</button>
|
|
||||||
</Tooltip>
|
|
||||||
|
|
||||||
{#if user.role !== 'admin'}
|
{#if orderBy === 'email'}
|
||||||
<Tooltip content={$i18n.t('Delete User')}>
|
<span class="font-normal"
|
||||||
|
>{#if direction === 'asc'}
|
||||||
|
<ChevronUp className="size-2" />
|
||||||
|
{:else}
|
||||||
|
<ChevronDown className="size-2" />
|
||||||
|
{/if}
|
||||||
|
</span>
|
||||||
|
{:else}
|
||||||
|
<span class="invisible">
|
||||||
|
<ChevronUp className="size-2" />
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th
|
||||||
|
scope="col"
|
||||||
|
class="px-3 py-1.5 cursor-pointer select-none"
|
||||||
|
on:click={() => setSortKey('last_active_at')}
|
||||||
|
>
|
||||||
|
<div class="flex gap-1.5 items-center">
|
||||||
|
{$i18n.t('Last Active')}
|
||||||
|
|
||||||
|
{#if orderBy === 'last_active_at'}
|
||||||
|
<span class="font-normal"
|
||||||
|
>{#if direction === 'asc'}
|
||||||
|
<ChevronUp className="size-2" />
|
||||||
|
{:else}
|
||||||
|
<ChevronDown className="size-2" />
|
||||||
|
{/if}
|
||||||
|
</span>
|
||||||
|
{:else}
|
||||||
|
<span class="invisible">
|
||||||
|
<ChevronUp className="size-2" />
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th
|
||||||
|
scope="col"
|
||||||
|
class="px-3 py-1.5 cursor-pointer select-none"
|
||||||
|
on:click={() => setSortKey('created_at')}
|
||||||
|
>
|
||||||
|
<div class="flex gap-1.5 items-center">
|
||||||
|
{$i18n.t('Created at')}
|
||||||
|
{#if orderBy === 'created_at'}
|
||||||
|
<span class="font-normal"
|
||||||
|
>{#if direction === 'asc'}
|
||||||
|
<ChevronUp className="size-2" />
|
||||||
|
{:else}
|
||||||
|
<ChevronDown className="size-2" />
|
||||||
|
{/if}
|
||||||
|
</span>
|
||||||
|
{:else}
|
||||||
|
<span class="invisible">
|
||||||
|
<ChevronUp className="size-2" />
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th
|
||||||
|
scope="col"
|
||||||
|
class="px-3 py-1.5 cursor-pointer select-none"
|
||||||
|
on:click={() => setSortKey('oauth_sub')}
|
||||||
|
>
|
||||||
|
<div class="flex gap-1.5 items-center">
|
||||||
|
{$i18n.t('OAuth ID')}
|
||||||
|
|
||||||
|
{#if orderBy === 'oauth_sub'}
|
||||||
|
<span class="font-normal"
|
||||||
|
>{#if direction === 'asc'}
|
||||||
|
<ChevronUp className="size-2" />
|
||||||
|
{:else}
|
||||||
|
<ChevronDown className="size-2" />
|
||||||
|
{/if}
|
||||||
|
</span>
|
||||||
|
{:else}
|
||||||
|
<span class="invisible">
|
||||||
|
<ChevronUp className="size-2" />
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th scope="col" class="px-3 py-2 text-right" />
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="">
|
||||||
|
{#each users as user, userIdx}
|
||||||
|
<tr class="bg-white dark:bg-gray-900 dark:border-gray-850 text-xs">
|
||||||
|
<td class="px-3 py-1 min-w-[7rem] w-28">
|
||||||
|
<button
|
||||||
|
class=" translate-y-0.5"
|
||||||
|
on:click={() => {
|
||||||
|
selectedUser = user;
|
||||||
|
showUpdateRoleModal = true;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Badge
|
||||||
|
type={user.role === 'admin' ? 'info' : user.role === 'user' ? 'success' : 'muted'}
|
||||||
|
content={$i18n.t(user.role)}
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
<td class="px-3 py-1 font-medium text-gray-900 dark:text-white w-max">
|
||||||
|
<div class="flex flex-row w-max">
|
||||||
|
<img
|
||||||
|
class=" rounded-full w-6 h-6 object-cover mr-2.5"
|
||||||
|
src={user.profile_image_url.startsWith(WEBUI_BASE_URL) ||
|
||||||
|
user.profile_image_url.startsWith('https://www.gravatar.com/avatar/') ||
|
||||||
|
user.profile_image_url.startsWith('data:')
|
||||||
|
? user.profile_image_url
|
||||||
|
: `/user.png`}
|
||||||
|
alt="user"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class=" font-medium self-center">{user.name}</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td class=" px-3 py-1"> {user.email} </td>
|
||||||
|
|
||||||
|
<td class=" px-3 py-1">
|
||||||
|
{dayjs(user.last_active_at * 1000).fromNow()}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class=" px-3 py-1">
|
||||||
|
{dayjs(user.created_at * 1000).format('LL')}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class=" px-3 py-1"> {user.oauth_sub ?? ''} </td>
|
||||||
|
|
||||||
|
<td class="px-3 py-1 text-right">
|
||||||
|
<div class="flex justify-end w-full">
|
||||||
|
{#if $config.features.enable_admin_chat_access && user.role !== 'admin'}
|
||||||
|
<Tooltip content={$i18n.t('Chats')}>
|
||||||
|
<button
|
||||||
|
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
||||||
|
on:click={async () => {
|
||||||
|
showUserChatsModal = !showUserChatsModal;
|
||||||
|
selectedUser = user;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<ChatBubbles />
|
||||||
|
</button>
|
||||||
|
</Tooltip>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<Tooltip content={$i18n.t('Edit User')}>
|
||||||
<button
|
<button
|
||||||
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
||||||
on:click={async () => {
|
on:click={async () => {
|
||||||
showDeleteConfirmDialog = true;
|
showEditUserModal = !showEditUserModal;
|
||||||
selectedUser = user;
|
selectedUser = user;
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -503,25 +483,52 @@
|
|||||||
<path
|
<path
|
||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
|
d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125"
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{/each}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class=" text-gray-500 text-xs mt-1.5 text-right">
|
{#if user.role !== 'admin'}
|
||||||
ⓘ {$i18n.t("Click on the user role button to change a user's role.")}
|
<Tooltip content={$i18n.t('Delete User')}>
|
||||||
</div>
|
<button
|
||||||
|
class="self-center w-fit text-sm px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5 rounded-xl"
|
||||||
|
on:click={async () => {
|
||||||
|
showDeleteConfirmDialog = true;
|
||||||
|
selectedUser = user;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="w-4 h-4"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</Tooltip>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{/each}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
<Pagination bind:page count={total} perPage={10} />
|
<div class=" text-gray-500 text-xs mt-1.5 text-right">
|
||||||
|
ⓘ {$i18n.t("Click on the user role button to change a user's role.")}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Pagination bind:page count={total} perPage={30} />
|
||||||
|
{/if}
|
||||||
|
|
||||||
{#if !$config?.license_metadata}
|
{#if !$config?.license_metadata}
|
||||||
{#if total > 50}
|
{#if total > 50}
|
||||||
|
|||||||
@@ -91,7 +91,7 @@
|
|||||||
|
|
||||||
export let chatIdProp = '';
|
export let chatIdProp = '';
|
||||||
|
|
||||||
let loading = false;
|
let loading = true;
|
||||||
|
|
||||||
const eventTarget = new EventTarget();
|
const eventTarget = new EventTarget();
|
||||||
let controlPane;
|
let controlPane;
|
||||||
@@ -142,7 +142,6 @@
|
|||||||
$: if (chatIdProp) {
|
$: if (chatIdProp) {
|
||||||
(async () => {
|
(async () => {
|
||||||
loading = true;
|
loading = true;
|
||||||
console.log(chatIdProp);
|
|
||||||
|
|
||||||
prompt = '';
|
prompt = '';
|
||||||
files = [];
|
files = [];
|
||||||
@@ -150,22 +149,26 @@
|
|||||||
webSearchEnabled = false;
|
webSearchEnabled = false;
|
||||||
imageGenerationEnabled = false;
|
imageGenerationEnabled = false;
|
||||||
|
|
||||||
if (chatIdProp && (await loadChat())) {
|
if (localStorage.getItem(`chat-input${chatIdProp ? `-${chatIdProp}` : ''}`)) {
|
||||||
await tick();
|
try {
|
||||||
loading = false;
|
const input = JSON.parse(
|
||||||
|
localStorage.getItem(`chat-input${chatIdProp ? `-${chatIdProp}` : ''}`)
|
||||||
if (localStorage.getItem(`chat-input-${chatIdProp}`)) {
|
);
|
||||||
try {
|
|
||||||
const input = JSON.parse(localStorage.getItem(`chat-input-${chatIdProp}`));
|
|
||||||
|
|
||||||
|
if (!$temporaryChatEnabled) {
|
||||||
prompt = input.prompt;
|
prompt = input.prompt;
|
||||||
files = input.files;
|
files = input.files;
|
||||||
selectedToolIds = input.selectedToolIds;
|
selectedToolIds = input.selectedToolIds;
|
||||||
webSearchEnabled = input.webSearchEnabled;
|
webSearchEnabled = input.webSearchEnabled;
|
||||||
imageGenerationEnabled = input.imageGenerationEnabled;
|
imageGenerationEnabled = input.imageGenerationEnabled;
|
||||||
} catch (e) {}
|
codeInterpreterEnabled = input.codeInterpreterEnabled;
|
||||||
}
|
}
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chatIdProp && (await loadChat())) {
|
||||||
|
await tick();
|
||||||
|
loading = false;
|
||||||
window.setTimeout(() => scrollToBottom(), 0);
|
window.setTimeout(() => scrollToBottom(), 0);
|
||||||
const chatInput = document.getElementById('chat-input');
|
const chatInput = document.getElementById('chat-input');
|
||||||
chatInput?.focus();
|
chatInput?.focus();
|
||||||
@@ -399,6 +402,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
|
loading = true;
|
||||||
console.log('mounted');
|
console.log('mounted');
|
||||||
window.addEventListener('message', onMessageHandler);
|
window.addEventListener('message', onMessageHandler);
|
||||||
$socket?.on('chat-events', chatEventHandler);
|
$socket?.on('chat-events', chatEventHandler);
|
||||||
@@ -416,21 +420,33 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (localStorage.getItem(`chat-input-${chatIdProp}`)) {
|
if (localStorage.getItem(`chat-input${chatIdProp ? `-${chatIdProp}` : ''}`)) {
|
||||||
|
prompt = '';
|
||||||
|
files = [];
|
||||||
|
selectedToolIds = [];
|
||||||
|
webSearchEnabled = false;
|
||||||
|
imageGenerationEnabled = false;
|
||||||
|
codeInterpreterEnabled = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const input = JSON.parse(localStorage.getItem(`chat-input-${chatIdProp}`));
|
const input = JSON.parse(
|
||||||
prompt = input.prompt;
|
localStorage.getItem(`chat-input${chatIdProp ? `-${chatIdProp}` : ''}`)
|
||||||
files = input.files;
|
);
|
||||||
selectedToolIds = input.selectedToolIds;
|
|
||||||
webSearchEnabled = input.webSearchEnabled;
|
if (!$temporaryChatEnabled) {
|
||||||
imageGenerationEnabled = input.imageGenerationEnabled;
|
prompt = input.prompt;
|
||||||
} catch (e) {
|
files = input.files;
|
||||||
prompt = '';
|
selectedToolIds = input.selectedToolIds;
|
||||||
files = [];
|
webSearchEnabled = input.webSearchEnabled;
|
||||||
selectedToolIds = [];
|
imageGenerationEnabled = input.imageGenerationEnabled;
|
||||||
webSearchEnabled = false;
|
codeInterpreterEnabled = input.codeInterpreterEnabled;
|
||||||
imageGenerationEnabled = false;
|
}
|
||||||
}
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!chatIdProp) {
|
||||||
|
loading = false;
|
||||||
|
await tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
showControls.subscribe(async (value) => {
|
showControls.subscribe(async (value) => {
|
||||||
@@ -1484,9 +1500,20 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
const sendPromptSocket = async (_history, model, responseMessageId, _chatId) => {
|
const sendPromptSocket = async (_history, model, responseMessageId, _chatId) => {
|
||||||
|
const chatMessages = createMessagesList(history, history.currentId);
|
||||||
const responseMessage = _history.messages[responseMessageId];
|
const responseMessage = _history.messages[responseMessageId];
|
||||||
const userMessage = _history.messages[responseMessage.parentId];
|
const userMessage = _history.messages[responseMessage.parentId];
|
||||||
|
|
||||||
|
const chatMessageFiles = chatMessages
|
||||||
|
.filter((message) => message.files)
|
||||||
|
.flatMap((message) => message.files);
|
||||||
|
|
||||||
|
// Filter chatFiles to only include files that are in the chatMessageFiles
|
||||||
|
chatFiles = chatFiles.filter((item) => {
|
||||||
|
const fileExists = chatMessageFiles.some((messageFile) => messageFile.id === item.id);
|
||||||
|
return fileExists;
|
||||||
|
});
|
||||||
|
|
||||||
let files = JSON.parse(JSON.stringify(chatFiles));
|
let files = JSON.parse(JSON.stringify(chatFiles));
|
||||||
files.push(
|
files.push(
|
||||||
...(userMessage?.files ?? []).filter((item) =>
|
...(userMessage?.files ?? []).filter((item) =>
|
||||||
@@ -2041,9 +2068,12 @@
|
|||||||
{createMessagePair}
|
{createMessagePair}
|
||||||
onChange={(input) => {
|
onChange={(input) => {
|
||||||
if (input.prompt !== null) {
|
if (input.prompt !== null) {
|
||||||
localStorage.setItem(`chat-input-${$chatId}`, JSON.stringify(input));
|
localStorage.setItem(
|
||||||
|
`chat-input${$chatId ? `-${$chatId}` : ''}`,
|
||||||
|
JSON.stringify(input)
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
localStorage.removeItem(`chat-input-${$chatId}`);
|
localStorage.removeItem(`chat-input${$chatId ? `-${$chatId}` : ''}`);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
on:upload={async (e) => {
|
on:upload={async (e) => {
|
||||||
|
|||||||
@@ -86,10 +86,11 @@
|
|||||||
|
|
||||||
$: onChange({
|
$: onChange({
|
||||||
prompt,
|
prompt,
|
||||||
files,
|
files: files.filter((file) => file.type !== 'image'),
|
||||||
selectedToolIds,
|
selectedToolIds,
|
||||||
imageGenerationEnabled,
|
imageGenerationEnabled,
|
||||||
webSearchEnabled
|
webSearchEnabled,
|
||||||
|
codeInterpreterEnabled
|
||||||
});
|
});
|
||||||
|
|
||||||
let showTools = false;
|
let showTools = false;
|
||||||
@@ -603,7 +604,7 @@
|
|||||||
<div class="px-2.5">
|
<div class="px-2.5">
|
||||||
{#if $settings?.richTextInput ?? true}
|
{#if $settings?.richTextInput ?? true}
|
||||||
<div
|
<div
|
||||||
class="scrollbar-hidden text-left bg-transparent dark:text-gray-100 outline-hidden w-full pt-3 px-1 resize-none h-fit max-h-80 overflow-auto"
|
class="scrollbar-hidden rtl:text-right ltr:text-left bg-transparent dark:text-gray-100 outline-hidden w-full pt-3 px-1 resize-none h-fit max-h-80 overflow-auto"
|
||||||
id="chat-input-container"
|
id="chat-input-container"
|
||||||
>
|
>
|
||||||
<RichTextInput
|
<RichTextInput
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
let tools = {};
|
let tools = {};
|
||||||
let show = false;
|
let show = false;
|
||||||
|
let showAllTools = false;
|
||||||
|
|
||||||
$: if (show) {
|
$: if (show) {
|
||||||
init();
|
init();
|
||||||
@@ -102,7 +103,7 @@
|
|||||||
transition={flyAndScale}
|
transition={flyAndScale}
|
||||||
>
|
>
|
||||||
{#if Object.keys(tools).length > 0}
|
{#if Object.keys(tools).length > 0}
|
||||||
<div class=" max-h-28 overflow-y-auto scrollbar-hidden">
|
<div class="{showAllTools ? '' : 'max-h-28'} overflow-y-auto scrollbar-thin">
|
||||||
{#each Object.keys(tools) as toolId}
|
{#each Object.keys(tools) as toolId}
|
||||||
<button
|
<button
|
||||||
class="flex w-full justify-between gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer rounded-xl"
|
class="flex w-full justify-between gap-2 items-center px-3 py-2 text-sm font-medium cursor-pointer rounded-xl"
|
||||||
@@ -141,7 +142,29 @@
|
|||||||
</button>
|
</button>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
{#if Object.keys(tools).length > 3}
|
||||||
|
<button
|
||||||
|
class="flex w-full justify-center items-center text-sm font-medium cursor-pointer rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800"
|
||||||
|
on:click={() => {
|
||||||
|
showAllTools = !showAllTools;
|
||||||
|
}}
|
||||||
|
title={showAllTools ? $i18n.t('Show Less') : $i18n.t('Show All')}
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="2.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="size-3 transition-transform duration-200 {showAllTools
|
||||||
|
? 'rotate-180'
|
||||||
|
: ''} text-gray-300 dark:text-gray-600"
|
||||||
|
>
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"
|
||||||
|
></path>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
<hr class="border-black/5 dark:border-white/5 my-1" />
|
<hr class="border-black/5 dark:border-white/5 my-1" />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
|||||||
@@ -255,7 +255,7 @@
|
|||||||
await updateChat();
|
await updateChat();
|
||||||
};
|
};
|
||||||
|
|
||||||
const editMessage = async (messageId, content, submit = true) => {
|
const editMessage = async (messageId, { content, files }, submit = true) => {
|
||||||
if (history.messages[messageId].role === 'user') {
|
if (history.messages[messageId].role === 'user') {
|
||||||
if (submit) {
|
if (submit) {
|
||||||
// New user message
|
// New user message
|
||||||
@@ -268,7 +268,7 @@
|
|||||||
childrenIds: [],
|
childrenIds: [],
|
||||||
role: 'user',
|
role: 'user',
|
||||||
content: userPrompt,
|
content: userPrompt,
|
||||||
...(history.messages[messageId].files && { files: history.messages[messageId].files }),
|
...(files && { files: files }),
|
||||||
models: selectedModels,
|
models: selectedModels,
|
||||||
timestamp: Math.floor(Date.now() / 1000) // Unix epoch
|
timestamp: Math.floor(Date.now() / 1000) // Unix epoch
|
||||||
};
|
};
|
||||||
@@ -290,6 +290,7 @@
|
|||||||
} else {
|
} else {
|
||||||
// Edit user message
|
// Edit user message
|
||||||
history.messages[messageId].content = content;
|
history.messages[messageId].content = content;
|
||||||
|
history.messages[messageId].files = files;
|
||||||
await updateChat();
|
await updateChat();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
title="Video player"
|
title="Video player"
|
||||||
frameborder="0"
|
frameborder="0"
|
||||||
referrerpolicy="strict-origin-when-cross-origin"
|
referrerpolicy="strict-origin-when-cross-origin"
|
||||||
|
controls
|
||||||
allowfullscreen
|
allowfullscreen
|
||||||
></video>
|
></video>
|
||||||
{:else}
|
{:else}
|
||||||
|
|||||||
@@ -377,7 +377,7 @@
|
|||||||
|
|
||||||
const editMessageConfirmHandler = async () => {
|
const editMessageConfirmHandler = async () => {
|
||||||
const messageContent = postprocessAfterEditing(editedContent ? editedContent : '');
|
const messageContent = postprocessAfterEditing(editedContent ? editedContent : '');
|
||||||
editMessage(message.id, messageContent, false);
|
editMessage(message.id, { content: messageContent }, false);
|
||||||
|
|
||||||
edit = false;
|
edit = false;
|
||||||
editedContent = '';
|
editedContent = '';
|
||||||
@@ -388,7 +388,7 @@
|
|||||||
const saveAsCopyHandler = async () => {
|
const saveAsCopyHandler = async () => {
|
||||||
const messageContent = postprocessAfterEditing(editedContent ? editedContent : '');
|
const messageContent = postprocessAfterEditing(editedContent ? editedContent : '');
|
||||||
|
|
||||||
editMessage(message.id, messageContent);
|
editMessage(message.id, { content: messageContent });
|
||||||
|
|
||||||
edit = false;
|
edit = false;
|
||||||
editedContent = '';
|
editedContent = '';
|
||||||
|
|||||||
@@ -43,6 +43,8 @@
|
|||||||
|
|
||||||
let edit = false;
|
let edit = false;
|
||||||
let editedContent = '';
|
let editedContent = '';
|
||||||
|
let editedFiles = [];
|
||||||
|
|
||||||
let messageEditTextAreaElement: HTMLTextAreaElement;
|
let messageEditTextAreaElement: HTMLTextAreaElement;
|
||||||
|
|
||||||
let message = JSON.parse(JSON.stringify(history.messages[messageId]));
|
let message = JSON.parse(JSON.stringify(history.messages[messageId]));
|
||||||
@@ -62,6 +64,7 @@
|
|||||||
const editMessageHandler = async () => {
|
const editMessageHandler = async () => {
|
||||||
edit = true;
|
edit = true;
|
||||||
editedContent = message.content;
|
editedContent = message.content;
|
||||||
|
editedFiles = message.files;
|
||||||
|
|
||||||
await tick();
|
await tick();
|
||||||
|
|
||||||
@@ -74,15 +77,17 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
const editMessageConfirmHandler = async (submit = true) => {
|
const editMessageConfirmHandler = async (submit = true) => {
|
||||||
editMessage(message.id, editedContent, submit);
|
editMessage(message.id, { content: editedContent, files: editedFiles }, submit);
|
||||||
|
|
||||||
edit = false;
|
edit = false;
|
||||||
editedContent = '';
|
editedContent = '';
|
||||||
|
editedFiles = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
const cancelEditMessage = () => {
|
const cancelEditMessage = () => {
|
||||||
edit = false;
|
edit = false;
|
||||||
editedContent = '';
|
editedContent = '';
|
||||||
|
editedFiles = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
const deleteMessageHandler = async () => {
|
const deleteMessageHandler = async () => {
|
||||||
@@ -141,30 +146,90 @@
|
|||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="chat-{message.role} w-full min-w-full markdown-prose">
|
<div class="chat-{message.role} w-full min-w-full markdown-prose">
|
||||||
{#if message.files}
|
{#if edit !== true}
|
||||||
<div class="mt-2.5 mb-1 w-full flex flex-col justify-end overflow-x-auto gap-1 flex-wrap">
|
{#if message.files}
|
||||||
{#each message.files as file}
|
<div class="mt-2.5 mb-1 w-full flex flex-col justify-end overflow-x-auto gap-1 flex-wrap">
|
||||||
<div class={($settings?.chatBubble ?? true) ? 'self-end' : ''}>
|
{#each message.files as file}
|
||||||
{#if file.type === 'image'}
|
<div class={($settings?.chatBubble ?? true) ? 'self-end' : ''}>
|
||||||
<Image src={file.url} imageClassName=" max-h-96 rounded-lg" />
|
{#if file.type === 'image'}
|
||||||
{:else}
|
<Image src={file.url} imageClassName=" max-h-96 rounded-lg" />
|
||||||
<FileItem
|
{:else}
|
||||||
item={file}
|
<FileItem
|
||||||
url={file.url}
|
item={file}
|
||||||
name={file.name}
|
url={file.url}
|
||||||
type={file.type}
|
name={file.name}
|
||||||
size={file?.size}
|
type={file.type}
|
||||||
colorClassName="bg-white dark:bg-gray-850 "
|
size={file?.size}
|
||||||
/>
|
colorClassName="bg-white dark:bg-gray-850 "
|
||||||
{/if}
|
/>
|
||||||
</div>
|
{/if}
|
||||||
{/each}
|
</div>
|
||||||
</div>
|
{/each}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if message.content !== ''}
|
{#if message.content !== ''}
|
||||||
{#if edit === true}
|
{#if edit === true}
|
||||||
<div class=" w-full bg-gray-50 dark:bg-gray-800 rounded-3xl px-5 py-3 mb-2">
|
<div class=" w-full bg-gray-50 dark:bg-gray-800 rounded-3xl px-5 py-3 mb-2">
|
||||||
|
{#if (editedFiles ?? []).length > 0}
|
||||||
|
<div class="flex items-center flex-wrap gap-2 -mx-2 mb-1">
|
||||||
|
{#each editedFiles as file, fileIdx}
|
||||||
|
{#if file.type === 'image'}
|
||||||
|
<div class=" relative group">
|
||||||
|
<div class="relative flex items-center">
|
||||||
|
<Image
|
||||||
|
src={file.url}
|
||||||
|
alt="input"
|
||||||
|
imageClassName=" size-14 rounded-xl object-cover"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class=" absolute -top-1 -right-1">
|
||||||
|
<button
|
||||||
|
class=" bg-white text-black border border-white rounded-full group-hover:visible invisible transition"
|
||||||
|
type="button"
|
||||||
|
on:click={() => {
|
||||||
|
editedFiles.splice(fileIdx, 1);
|
||||||
|
|
||||||
|
editedFiles = editedFiles;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 20 20"
|
||||||
|
fill="currentColor"
|
||||||
|
class="size-4"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{:else}
|
||||||
|
<FileItem
|
||||||
|
item={file}
|
||||||
|
name={file.name}
|
||||||
|
type={file.type}
|
||||||
|
size={file?.size}
|
||||||
|
loading={file.status === 'uploading'}
|
||||||
|
dismissible={true}
|
||||||
|
edit={true}
|
||||||
|
on:dismiss={async () => {
|
||||||
|
editedFiles.splice(fileIdx, 1);
|
||||||
|
|
||||||
|
editedFiles = editedFiles;
|
||||||
|
}}
|
||||||
|
on:click={() => {
|
||||||
|
console.log(file);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<div class="max-h-96 overflow-auto">
|
<div class="max-h-96 overflow-auto">
|
||||||
<textarea
|
<textarea
|
||||||
id="message-edit-{message.id}"
|
id="message-edit-{message.id}"
|
||||||
|
|||||||
@@ -201,6 +201,13 @@
|
|||||||
{stopResponse}
|
{stopResponse}
|
||||||
{createMessagePair}
|
{createMessagePair}
|
||||||
placeholder={$i18n.t('How can I help you today?')}
|
placeholder={$i18n.t('How can I help you today?')}
|
||||||
|
onChange={(input) => {
|
||||||
|
if (input.prompt !== null) {
|
||||||
|
localStorage.setItem(`chat-input`, JSON.stringify(input));
|
||||||
|
} else {
|
||||||
|
localStorage.removeItem(`chat-input`);
|
||||||
|
}
|
||||||
|
}}
|
||||||
on:upload={(e) => {
|
on:upload={(e) => {
|
||||||
dispatch('upload', e.detail);
|
dispatch('upload', e.detail);
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -54,6 +54,9 @@
|
|||||||
height: ''
|
height: ''
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// chat export
|
||||||
|
let stylizedPdfExport = true;
|
||||||
|
|
||||||
// Admin - Show Update Available Toast
|
// Admin - Show Update Available Toast
|
||||||
let showUpdateToast = true;
|
let showUpdateToast = true;
|
||||||
let showChangelog = true;
|
let showChangelog = true;
|
||||||
@@ -152,6 +155,11 @@
|
|||||||
saveSettings({ hapticFeedback: hapticFeedback });
|
saveSettings({ hapticFeedback: hapticFeedback });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const toggleStylizedPdfExport = async () => {
|
||||||
|
stylizedPdfExport = !stylizedPdfExport;
|
||||||
|
saveSettings({ stylizedPdfExport: stylizedPdfExport });
|
||||||
|
};
|
||||||
|
|
||||||
const toggleUserLocation = async () => {
|
const toggleUserLocation = async () => {
|
||||||
userLocation = !userLocation;
|
userLocation = !userLocation;
|
||||||
|
|
||||||
@@ -302,6 +310,11 @@
|
|||||||
notificationSound = $settings?.notificationSound ?? true;
|
notificationSound = $settings?.notificationSound ?? true;
|
||||||
notificationSoundAlways = $settings?.notificationSoundAlways ?? false;
|
notificationSoundAlways = $settings?.notificationSoundAlways ?? false;
|
||||||
|
|
||||||
|
iframeSandboxAllowSameOrigin = $settings?.iframeSandboxAllowSameOrigin ?? false;
|
||||||
|
iframeSandboxAllowForms = $settings?.iframeSandboxAllowForms ?? false;
|
||||||
|
|
||||||
|
stylizedPdfExport = $settings?.stylizedPdfExport ?? true;
|
||||||
|
|
||||||
hapticFeedback = $settings.hapticFeedback ?? false;
|
hapticFeedback = $settings.hapticFeedback ?? false;
|
||||||
ctrlEnterToSend = $settings.ctrlEnterToSend ?? false;
|
ctrlEnterToSend = $settings.ctrlEnterToSend ?? false;
|
||||||
|
|
||||||
@@ -964,6 +977,28 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div class=" py-0.5 flex w-full justify-between">
|
||||||
|
<div class=" self-center text-xs">
|
||||||
|
{$i18n.t('Stylized PDF Export')}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button
|
||||||
|
class="p-1 px-3 text-xs flex rounded-sm transition"
|
||||||
|
on:click={() => {
|
||||||
|
toggleStylizedPdfExport();
|
||||||
|
}}
|
||||||
|
type="button"
|
||||||
|
>
|
||||||
|
{#if stylizedPdfExport === true}
|
||||||
|
<span class="ml-2 self-center">{$i18n.t('On')}</span>
|
||||||
|
{:else}
|
||||||
|
<span class="ml-2 self-center">{$i18n.t('Off')}</span>
|
||||||
|
{/if}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class=" my-1.5 text-sm font-medium">{$i18n.t('Voice')}</div>
|
<div class=" my-1.5 text-sm font-medium">{$i18n.t('Voice')}</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -123,16 +123,28 @@
|
|||||||
'alwaysonwebsearch'
|
'alwaysonwebsearch'
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
...($user?.role === 'admin' ||
|
||||||
id: 'connections',
|
($user?.role === 'user' && $config?.features?.enable_direct_connections)
|
||||||
title: 'Connections',
|
? [
|
||||||
keywords: []
|
{
|
||||||
},
|
id: 'connections',
|
||||||
{
|
title: 'Connections',
|
||||||
id: 'tools',
|
keywords: []
|
||||||
title: 'Tools',
|
}
|
||||||
keywords: []
|
]
|
||||||
},
|
: []),
|
||||||
|
|
||||||
|
...($user?.role === 'admin' ||
|
||||||
|
($user?.role === 'user' && $user?.permissions?.features?.direct_tool_servers)
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
id: 'tools',
|
||||||
|
title: 'Tools',
|
||||||
|
keywords: []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
|
||||||
{
|
{
|
||||||
id: 'personalization',
|
id: 'personalization',
|
||||||
title: 'Personalization',
|
title: 'Personalization',
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import Fuse from 'fuse.js';
|
import Fuse from 'fuse.js';
|
||||||
import Bolt from '$lib/components/icons/Bolt.svelte';
|
import Bolt from '$lib/components/icons/Bolt.svelte';
|
||||||
import { onMount, getContext, createEventDispatcher } from 'svelte';
|
import { onMount, getContext, createEventDispatcher } from 'svelte';
|
||||||
import { WEBUI_NAME } from '$lib/stores';
|
import { settings, WEBUI_NAME } from '$lib/stores';
|
||||||
import { WEBUI_VERSION } from '$lib/constants';
|
import { WEBUI_VERSION } from '$lib/constants';
|
||||||
|
|
||||||
const i18n = getContext('i18n');
|
const i18n = getContext('i18n');
|
||||||
@@ -72,7 +72,9 @@
|
|||||||
<!-- Keine Vorschläge -->
|
<!-- Keine Vorschläge -->
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="flex w-full text-center items-center justify-center self-start text-gray-400 dark:text-gray-600"
|
class="flex w-full {$settings?.landingPageMode === 'chat'
|
||||||
|
? ' -mt-1'
|
||||||
|
: 'text-center items-center justify-center'} self-start text-gray-400 dark:text-gray-600"
|
||||||
>
|
>
|
||||||
{$WEBUI_NAME} ‧ v{WEBUI_VERSION}
|
{$WEBUI_NAME} ‧ v{WEBUI_VERSION}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import DOMPurify from 'dompurify';
|
import DOMPurify from 'dompurify';
|
||||||
|
|
||||||
import { onMount, getContext, createEventDispatcher } from 'svelte';
|
import { onMount, getContext, createEventDispatcher, onDestroy } from 'svelte';
|
||||||
|
import * as FocusTrap from 'focus-trap';
|
||||||
|
|
||||||
const i18n = getContext('i18n');
|
const i18n = getContext('i18n');
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
@@ -26,6 +28,8 @@
|
|||||||
let modalElement = null;
|
let modalElement = null;
|
||||||
let mounted = false;
|
let mounted = false;
|
||||||
|
|
||||||
|
let focusTrap: FocusTrap.FocusTrap | null = null;
|
||||||
|
|
||||||
const handleKeyDown = (event: KeyboardEvent) => {
|
const handleKeyDown = (event: KeyboardEvent) => {
|
||||||
if (event.key === 'Escape') {
|
if (event.key === 'Escape') {
|
||||||
console.log('Escape');
|
console.log('Escape');
|
||||||
@@ -51,16 +55,30 @@
|
|||||||
$: if (mounted) {
|
$: if (mounted) {
|
||||||
if (show && modalElement) {
|
if (show && modalElement) {
|
||||||
document.body.appendChild(modalElement);
|
document.body.appendChild(modalElement);
|
||||||
|
focusTrap = FocusTrap.createFocusTrap(modalElement);
|
||||||
|
focusTrap.activate();
|
||||||
|
|
||||||
window.addEventListener('keydown', handleKeyDown);
|
window.addEventListener('keydown', handleKeyDown);
|
||||||
document.body.style.overflow = 'hidden';
|
document.body.style.overflow = 'hidden';
|
||||||
} else if (modalElement) {
|
} else if (modalElement) {
|
||||||
|
focusTrap.deactivate();
|
||||||
|
|
||||||
window.removeEventListener('keydown', handleKeyDown);
|
window.removeEventListener('keydown', handleKeyDown);
|
||||||
document.body.removeChild(modalElement);
|
document.body.removeChild(modalElement);
|
||||||
|
|
||||||
document.body.style.overflow = 'unset';
|
document.body.style.overflow = 'unset';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onDestroy(() => {
|
||||||
|
show = false;
|
||||||
|
if (focusTrap) {
|
||||||
|
focusTrap.deactivate();
|
||||||
|
}
|
||||||
|
if (modalElement) {
|
||||||
|
document.body.removeChild(modalElement);
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if show}
|
{#if show}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { fade } from 'svelte/transition';
|
import { fade } from 'svelte/transition';
|
||||||
|
|
||||||
import { flyAndScale } from '$lib/utils/transitions';
|
import { flyAndScale } from '$lib/utils/transitions';
|
||||||
|
import * as FocusTrap from 'focus-trap';
|
||||||
export let show = true;
|
export let show = true;
|
||||||
export let size = 'md';
|
export let size = 'md';
|
||||||
export let containerClassName = 'p-3';
|
export let containerClassName = 'p-3';
|
||||||
@@ -11,6 +11,10 @@
|
|||||||
|
|
||||||
let modalElement = null;
|
let modalElement = null;
|
||||||
let mounted = false;
|
let mounted = false;
|
||||||
|
// Create focus trap to trap user tabs inside modal
|
||||||
|
// https://www.w3.org/WAI/WCAG21/Understanding/focus-order.html
|
||||||
|
// https://www.w3.org/WAI/WCAG21/Understanding/keyboard.html
|
||||||
|
let focusTrap: FocusTrap.FocusTrap | null = null;
|
||||||
|
|
||||||
const sizeToWidth = (size) => {
|
const sizeToWidth = (size) => {
|
||||||
if (size === 'full') {
|
if (size === 'full') {
|
||||||
@@ -45,9 +49,12 @@
|
|||||||
|
|
||||||
$: if (show && modalElement) {
|
$: if (show && modalElement) {
|
||||||
document.body.appendChild(modalElement);
|
document.body.appendChild(modalElement);
|
||||||
|
focusTrap = FocusTrap.createFocusTrap(modalElement);
|
||||||
|
focusTrap.activate();
|
||||||
window.addEventListener('keydown', handleKeyDown);
|
window.addEventListener('keydown', handleKeyDown);
|
||||||
document.body.style.overflow = 'hidden';
|
document.body.style.overflow = 'hidden';
|
||||||
} else if (modalElement) {
|
} else if (modalElement) {
|
||||||
|
focusTrap.deactivate();
|
||||||
window.removeEventListener('keydown', handleKeyDown);
|
window.removeEventListener('keydown', handleKeyDown);
|
||||||
document.body.removeChild(modalElement);
|
document.body.removeChild(modalElement);
|
||||||
document.body.style.overflow = 'unset';
|
document.body.style.overflow = 'unset';
|
||||||
@@ -55,6 +62,9 @@
|
|||||||
|
|
||||||
onDestroy(() => {
|
onDestroy(() => {
|
||||||
show = false;
|
show = false;
|
||||||
|
if (focusTrap) {
|
||||||
|
focusTrap.deactivate();
|
||||||
|
}
|
||||||
if (modalElement) {
|
if (modalElement) {
|
||||||
document.body.removeChild(modalElement);
|
document.body.removeChild(modalElement);
|
||||||
}
|
}
|
||||||
@@ -66,6 +76,8 @@
|
|||||||
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
||||||
<div
|
<div
|
||||||
bind:this={modalElement}
|
bind:this={modalElement}
|
||||||
|
aria-modal="true"
|
||||||
|
role="dialog"
|
||||||
class="modal fixed top-0 right-0 left-0 bottom-0 bg-black/60 w-full h-screen max-h-[100dvh] {containerClassName} flex justify-center z-9999 overflow-y-auto overscroll-contain"
|
class="modal fixed top-0 right-0 left-0 bottom-0 bg-black/60 w-full h-screen max-h-[100dvh] {containerClassName} flex justify-center z-9999 overflow-y-auto overscroll-contain"
|
||||||
in:fade={{ duration: 10 }}
|
in:fade={{ duration: 10 }}
|
||||||
on:mousedown={() => {
|
on:mousedown={() => {
|
||||||
|
|||||||
@@ -19,7 +19,8 @@
|
|||||||
mobile,
|
mobile,
|
||||||
temporaryChatEnabled,
|
temporaryChatEnabled,
|
||||||
theme,
|
theme,
|
||||||
user
|
user,
|
||||||
|
settings
|
||||||
} from '$lib/stores';
|
} from '$lib/stores';
|
||||||
import { flyAndScale } from '$lib/utils/transitions';
|
import { flyAndScale } from '$lib/utils/transitions';
|
||||||
|
|
||||||
@@ -63,75 +64,124 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
const downloadPdf = async () => {
|
const downloadPdf = async () => {
|
||||||
const containerElement = document.getElementById('messages-container');
|
if ($settings?.stylizedPdfExport ?? true) {
|
||||||
|
const containerElement = document.getElementById('messages-container');
|
||||||
|
|
||||||
if (containerElement) {
|
if (containerElement) {
|
||||||
try {
|
try {
|
||||||
const isDarkMode = document.documentElement.classList.contains('dark');
|
const isDarkMode = document.documentElement.classList.contains('dark');
|
||||||
|
const virtualWidth = 800; // Fixed width in px
|
||||||
|
const pagePixelHeight = 1200; // Each slice height (adjust to avoid canvas bugs; generally 2–4k is safe)
|
||||||
|
|
||||||
console.log('isDarkMode', isDarkMode);
|
// Clone & style once
|
||||||
|
const clonedElement = containerElement.cloneNode(true);
|
||||||
|
clonedElement.classList.add('text-black');
|
||||||
|
clonedElement.classList.add('dark:text-white');
|
||||||
|
clonedElement.style.width = `${virtualWidth}px`;
|
||||||
|
clonedElement.style.position = 'absolute';
|
||||||
|
clonedElement.style.left = '-9999px'; // Offscreen
|
||||||
|
clonedElement.style.height = 'auto';
|
||||||
|
document.body.appendChild(clonedElement);
|
||||||
|
|
||||||
// Define a fixed virtual screen size
|
// Get total height after attached to DOM
|
||||||
const virtualWidth = 800; // Fixed width (adjust as needed)
|
const totalHeight = clonedElement.scrollHeight;
|
||||||
// Clone the container to avoid layout shifts
|
let offsetY = 0;
|
||||||
const clonedElement = containerElement.cloneNode(true);
|
let page = 0;
|
||||||
clonedElement.classList.add('text-black');
|
|
||||||
clonedElement.classList.add('dark:text-white');
|
|
||||||
clonedElement.style.width = `${virtualWidth}px`; // Apply fixed width
|
|
||||||
clonedElement.style.height = 'auto'; // Allow content to expand
|
|
||||||
|
|
||||||
document.body.appendChild(clonedElement); // Temporarily add to DOM
|
// Prepare PDF
|
||||||
|
const pdf = new jsPDF('p', 'mm', 'a4');
|
||||||
|
const imgWidth = 210; // A4 mm
|
||||||
|
const pageHeight = 297; // A4 mm
|
||||||
|
|
||||||
// Render to canvas with predefined width
|
while (offsetY < totalHeight) {
|
||||||
const canvas = await html2canvas(clonedElement, {
|
// For each slice, adjust scrollTop to show desired part
|
||||||
backgroundColor: isDarkMode ? '#000' : '#fff',
|
clonedElement.scrollTop = offsetY;
|
||||||
useCORS: true,
|
|
||||||
scale: 2, // Keep at 1x to avoid unexpected enlargements
|
|
||||||
width: virtualWidth, // Set fixed virtual screen width
|
|
||||||
windowWidth: virtualWidth // Ensure consistent rendering
|
|
||||||
});
|
|
||||||
|
|
||||||
document.body.removeChild(clonedElement); // Clean up temp element
|
// Optionally: mask/hide overflowing content via CSS if needed
|
||||||
|
clonedElement.style.maxHeight = `${pagePixelHeight}px`;
|
||||||
|
// Only render the visible part
|
||||||
|
const canvas = await html2canvas(clonedElement, {
|
||||||
|
backgroundColor: isDarkMode ? '#000' : '#fff',
|
||||||
|
useCORS: true,
|
||||||
|
scale: 2,
|
||||||
|
width: virtualWidth,
|
||||||
|
height: Math.min(pagePixelHeight, totalHeight - offsetY),
|
||||||
|
// Optionally: y offset for correct region?
|
||||||
|
windowWidth: virtualWidth
|
||||||
|
//windowHeight: pagePixelHeight,
|
||||||
|
});
|
||||||
|
const imgData = canvas.toDataURL('image/png');
|
||||||
|
// Maintain aspect ratio
|
||||||
|
const imgHeight = (canvas.height * imgWidth) / canvas.width;
|
||||||
|
const position = 0; // Always first line, since we've clipped vertically
|
||||||
|
|
||||||
const imgData = canvas.toDataURL('image/png');
|
if (page > 0) pdf.addPage();
|
||||||
|
|
||||||
// A4 page settings
|
// Set page background for dark mode
|
||||||
const pdf = new jsPDF('p', 'mm', 'a4');
|
if (isDarkMode) {
|
||||||
const imgWidth = 210; // A4 width in mm
|
pdf.setFillColor(0, 0, 0);
|
||||||
const pageHeight = 297; // A4 height in mm
|
pdf.rect(0, 0, imgWidth, pageHeight, 'F'); // black bg
|
||||||
|
}
|
||||||
|
|
||||||
// Maintain aspect ratio
|
pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
|
||||||
const imgHeight = (canvas.height * imgWidth) / canvas.width;
|
|
||||||
let heightLeft = imgHeight;
|
|
||||||
let position = 0;
|
|
||||||
|
|
||||||
// Set page background for dark mode
|
offsetY += pagePixelHeight;
|
||||||
if (isDarkMode) {
|
page++;
|
||||||
pdf.setFillColor(0, 0, 0);
|
|
||||||
pdf.rect(0, 0, imgWidth, pageHeight, 'F'); // Apply black bg
|
|
||||||
}
|
|
||||||
|
|
||||||
pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
|
|
||||||
heightLeft -= pageHeight;
|
|
||||||
|
|
||||||
// Handle additional pages
|
|
||||||
while (heightLeft > 0) {
|
|
||||||
position -= pageHeight;
|
|
||||||
pdf.addPage();
|
|
||||||
|
|
||||||
if (isDarkMode) {
|
|
||||||
pdf.setFillColor(0, 0, 0);
|
|
||||||
pdf.rect(0, 0, imgWidth, pageHeight, 'F');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
|
document.body.removeChild(clonedElement);
|
||||||
heightLeft -= pageHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
pdf.save(`chat-${chat.chat.title}.pdf`);
|
pdf.save(`chat-${chat.chat.title}.pdf`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error generating PDF', error);
|
console.error('Error generating PDF', error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
console.log('Downloading PDF');
|
||||||
|
|
||||||
|
const chatText = await getChatAsText();
|
||||||
|
|
||||||
|
const doc = new jsPDF();
|
||||||
|
|
||||||
|
// Margins
|
||||||
|
const left = 15;
|
||||||
|
const top = 20;
|
||||||
|
const right = 15;
|
||||||
|
const bottom = 20;
|
||||||
|
|
||||||
|
const pageWidth = doc.internal.pageSize.getWidth();
|
||||||
|
const pageHeight = doc.internal.pageSize.getHeight();
|
||||||
|
const usableWidth = pageWidth - left - right;
|
||||||
|
const usableHeight = pageHeight - top - bottom;
|
||||||
|
|
||||||
|
// Font size and line height
|
||||||
|
const fontSize = 8;
|
||||||
|
doc.setFontSize(fontSize);
|
||||||
|
const lineHeight = fontSize * 1; // adjust if needed
|
||||||
|
|
||||||
|
// Split the markdown into lines (handles \n)
|
||||||
|
const paragraphs = chatText.split('\n');
|
||||||
|
|
||||||
|
let y = top;
|
||||||
|
|
||||||
|
for (let paragraph of paragraphs) {
|
||||||
|
// Wrap each paragraph to fit the width
|
||||||
|
const lines = doc.splitTextToSize(paragraph, usableWidth);
|
||||||
|
|
||||||
|
for (let line of lines) {
|
||||||
|
// If the line would overflow the bottom, add a new page
|
||||||
|
if (y + lineHeight > pageHeight - bottom) {
|
||||||
|
doc.addPage();
|
||||||
|
y = top;
|
||||||
|
}
|
||||||
|
doc.text(line, left, y);
|
||||||
|
y += lineHeight * 0.5;
|
||||||
|
}
|
||||||
|
// Add empty line at paragraph breaks
|
||||||
|
y += lineHeight * 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
doc.save(`chat-${chat.chat.title}.pdf`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -256,7 +256,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
confirmEdit = false;
|
confirmEdit = false;
|
||||||
|
} else {
|
||||||
|
chatTitle = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
generating = false;
|
generating = false;
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
getChatPinnedStatusById,
|
getChatPinnedStatusById,
|
||||||
toggleChatPinnedStatusById
|
toggleChatPinnedStatusById
|
||||||
} from '$lib/apis/chats';
|
} from '$lib/apis/chats';
|
||||||
import { chats, theme, user } from '$lib/stores';
|
import { chats, settings, theme, user } from '$lib/stores';
|
||||||
import { createMessagesList } from '$lib/utils';
|
import { createMessagesList } from '$lib/utils';
|
||||||
import { downloadChatAsPDF } from '$lib/apis/utils';
|
import { downloadChatAsPDF } from '$lib/apis/utils';
|
||||||
import Download from '$lib/components/icons/Download.svelte';
|
import Download from '$lib/components/icons/Download.svelte';
|
||||||
@@ -81,74 +81,124 @@
|
|||||||
const downloadPdf = async () => {
|
const downloadPdf = async () => {
|
||||||
const chat = await getChatById(localStorage.token, chatId);
|
const chat = await getChatById(localStorage.token, chatId);
|
||||||
|
|
||||||
const containerElement = document.getElementById('messages-container');
|
if ($settings?.stylizedPdfExport ?? true) {
|
||||||
|
const containerElement = document.getElementById('messages-container');
|
||||||
|
|
||||||
if (containerElement) {
|
if (containerElement) {
|
||||||
try {
|
try {
|
||||||
const isDarkMode = $theme.includes('dark'); // Check theme mode
|
const isDarkMode = document.documentElement.classList.contains('dark');
|
||||||
|
const virtualWidth = 800; // Fixed width in px
|
||||||
|
const pagePixelHeight = 1200; // Each slice height (adjust to avoid canvas bugs; generally 2–4k is safe)
|
||||||
|
|
||||||
// Define a fixed virtual screen size
|
// Clone & style once
|
||||||
const virtualWidth = 1024; // Fixed width (adjust as needed)
|
const clonedElement = containerElement.cloneNode(true);
|
||||||
const virtualHeight = 1400; // Fixed height (adjust as needed)
|
clonedElement.classList.add('text-black');
|
||||||
|
clonedElement.classList.add('dark:text-white');
|
||||||
|
clonedElement.style.width = `${virtualWidth}px`;
|
||||||
|
clonedElement.style.position = 'absolute';
|
||||||
|
clonedElement.style.left = '-9999px'; // Offscreen
|
||||||
|
clonedElement.style.height = 'auto';
|
||||||
|
document.body.appendChild(clonedElement);
|
||||||
|
|
||||||
// Clone the container to avoid layout shifts
|
// Get total height after attached to DOM
|
||||||
const clonedElement = containerElement.cloneNode(true);
|
const totalHeight = clonedElement.scrollHeight;
|
||||||
clonedElement.style.width = `${virtualWidth}px`; // Apply fixed width
|
let offsetY = 0;
|
||||||
clonedElement.style.height = 'auto'; // Allow content to expand
|
let page = 0;
|
||||||
|
|
||||||
document.body.appendChild(clonedElement); // Temporarily add to DOM
|
// Prepare PDF
|
||||||
|
const pdf = new jsPDF('p', 'mm', 'a4');
|
||||||
|
const imgWidth = 210; // A4 mm
|
||||||
|
const pageHeight = 297; // A4 mm
|
||||||
|
|
||||||
// Render to canvas with predefined width
|
while (offsetY < totalHeight) {
|
||||||
const canvas = await html2canvas(clonedElement, {
|
// For each slice, adjust scrollTop to show desired part
|
||||||
backgroundColor: isDarkMode ? '#000' : '#fff',
|
clonedElement.scrollTop = offsetY;
|
||||||
useCORS: true,
|
|
||||||
scale: 2, // Keep at 1x to avoid unexpected enlargements
|
|
||||||
width: virtualWidth, // Set fixed virtual screen width
|
|
||||||
windowWidth: virtualWidth, // Ensure consistent rendering
|
|
||||||
windowHeight: virtualHeight
|
|
||||||
});
|
|
||||||
|
|
||||||
document.body.removeChild(clonedElement); // Clean up temp element
|
// Optionally: mask/hide overflowing content via CSS if needed
|
||||||
|
clonedElement.style.maxHeight = `${pagePixelHeight}px`;
|
||||||
|
// Only render the visible part
|
||||||
|
const canvas = await html2canvas(clonedElement, {
|
||||||
|
backgroundColor: isDarkMode ? '#000' : '#fff',
|
||||||
|
useCORS: true,
|
||||||
|
scale: 2,
|
||||||
|
width: virtualWidth,
|
||||||
|
height: Math.min(pagePixelHeight, totalHeight - offsetY),
|
||||||
|
// Optionally: y offset for correct region?
|
||||||
|
windowWidth: virtualWidth
|
||||||
|
//windowHeight: pagePixelHeight,
|
||||||
|
});
|
||||||
|
const imgData = canvas.toDataURL('image/png');
|
||||||
|
// Maintain aspect ratio
|
||||||
|
const imgHeight = (canvas.height * imgWidth) / canvas.width;
|
||||||
|
const position = 0; // Always first line, since we've clipped vertically
|
||||||
|
|
||||||
const imgData = canvas.toDataURL('image/png');
|
if (page > 0) pdf.addPage();
|
||||||
|
|
||||||
// A4 page settings
|
// Set page background for dark mode
|
||||||
const pdf = new jsPDF('p', 'mm', 'a4');
|
if (isDarkMode) {
|
||||||
const imgWidth = 210; // A4 width in mm
|
pdf.setFillColor(0, 0, 0);
|
||||||
const pageHeight = 297; // A4 height in mm
|
pdf.rect(0, 0, imgWidth, pageHeight, 'F'); // black bg
|
||||||
|
}
|
||||||
|
|
||||||
// Maintain aspect ratio
|
pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
|
||||||
const imgHeight = (canvas.height * imgWidth) / canvas.width;
|
|
||||||
let heightLeft = imgHeight;
|
|
||||||
let position = 0;
|
|
||||||
|
|
||||||
// Set page background for dark mode
|
offsetY += pagePixelHeight;
|
||||||
if (isDarkMode) {
|
page++;
|
||||||
pdf.setFillColor(0, 0, 0);
|
|
||||||
pdf.rect(0, 0, imgWidth, pageHeight, 'F'); // Apply black bg
|
|
||||||
}
|
|
||||||
|
|
||||||
pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
|
|
||||||
heightLeft -= pageHeight;
|
|
||||||
|
|
||||||
// Handle additional pages
|
|
||||||
while (heightLeft > 0) {
|
|
||||||
position -= pageHeight;
|
|
||||||
pdf.addPage();
|
|
||||||
|
|
||||||
if (isDarkMode) {
|
|
||||||
pdf.setFillColor(0, 0, 0);
|
|
||||||
pdf.rect(0, 0, imgWidth, pageHeight, 'F');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
|
document.body.removeChild(clonedElement);
|
||||||
heightLeft -= pageHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
pdf.save(`chat-${chat.chat.title}.pdf`);
|
pdf.save(`chat-${chat.chat.title}.pdf`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error generating PDF', error);
|
console.error('Error generating PDF', error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
console.log('Downloading PDF');
|
||||||
|
|
||||||
|
const chatText = await getChatAsText(chat);
|
||||||
|
|
||||||
|
const doc = new jsPDF();
|
||||||
|
|
||||||
|
// Margins
|
||||||
|
const left = 15;
|
||||||
|
const top = 20;
|
||||||
|
const right = 15;
|
||||||
|
const bottom = 20;
|
||||||
|
|
||||||
|
const pageWidth = doc.internal.pageSize.getWidth();
|
||||||
|
const pageHeight = doc.internal.pageSize.getHeight();
|
||||||
|
const usableWidth = pageWidth - left - right;
|
||||||
|
const usableHeight = pageHeight - top - bottom;
|
||||||
|
|
||||||
|
// Font size and line height
|
||||||
|
const fontSize = 8;
|
||||||
|
doc.setFontSize(fontSize);
|
||||||
|
const lineHeight = fontSize * 1; // adjust if needed
|
||||||
|
|
||||||
|
// Split the markdown into lines (handles \n)
|
||||||
|
const paragraphs = chatText.split('\n');
|
||||||
|
|
||||||
|
let y = top;
|
||||||
|
|
||||||
|
for (let paragraph of paragraphs) {
|
||||||
|
// Wrap each paragraph to fit the width
|
||||||
|
const lines = doc.splitTextToSize(paragraph, usableWidth);
|
||||||
|
|
||||||
|
for (let line of lines) {
|
||||||
|
// If the line would overflow the bottom, add a new page
|
||||||
|
if (y + lineHeight > pageHeight - bottom) {
|
||||||
|
doc.addPage();
|
||||||
|
y = top;
|
||||||
|
}
|
||||||
|
doc.text(line, left, y);
|
||||||
|
y += lineHeight;
|
||||||
|
}
|
||||||
|
// Add empty line at paragraph breaks
|
||||||
|
y += lineHeight * 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
doc.save(`chat-${chat.chat.title}.pdf`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -180,7 +180,10 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const model = $models.find((model) => model.id === selectedModelId);
|
const model = $models
|
||||||
|
.filter((model) => model.id === selectedModelId && !(model?.info?.meta?.hidden ?? false))
|
||||||
|
.find((model) => model.id === selectedModelId);
|
||||||
|
|
||||||
if (!model) {
|
if (!model) {
|
||||||
selectedModelId = '';
|
selectedModelId = '';
|
||||||
return;
|
return;
|
||||||
@@ -599,6 +602,16 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
|||||||
selectedModelId = '';
|
selectedModelId = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (selectedModelId) {
|
||||||
|
const model = $models
|
||||||
|
.filter((model) => model.id === selectedModelId && !(model?.info?.meta?.hidden ?? false))
|
||||||
|
.find((model) => model.id === selectedModelId);
|
||||||
|
|
||||||
|
if (!model) {
|
||||||
|
selectedModelId = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const dropzoneElement = document.getElementById('note-editor');
|
const dropzoneElement = document.getElementById('note-editor');
|
||||||
|
|
||||||
dropzoneElement?.addEventListener('dragover', onDragOver);
|
dropzoneElement?.addEventListener('dragover', onDragOver);
|
||||||
@@ -660,7 +673,10 @@ Provide the enhanced notes in markdown format. Use markdown syntax for headings,
|
|||||||
class="w-full bg-transparent text-sm outline-hidden"
|
class="w-full bg-transparent text-sm outline-hidden"
|
||||||
bind:value={selectedModelId}
|
bind:value={selectedModelId}
|
||||||
>
|
>
|
||||||
{#each $models as model}
|
<option value="" class="bg-gray-50 dark:bg-gray-700" disabled>
|
||||||
|
{$i18n.t('Select a model')}
|
||||||
|
</option>
|
||||||
|
{#each $models.filter((model) => !(model?.info?.meta?.hidden ?? false)) as model}
|
||||||
<option value={model.id} class="bg-gray-50 dark:bg-gray-700">{model.name}</option>
|
<option value={model.id} class="bg-gray-50 dark:bg-gray-700">{model.name}</option>
|
||||||
{/each}
|
{/each}
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
@@ -764,7 +764,7 @@
|
|||||||
className="input-prose-sm"
|
className="input-prose-sm"
|
||||||
bind:value={selectedFileContent}
|
bind:value={selectedFileContent}
|
||||||
placeholder={$i18n.t('Add content here')}
|
placeholder={$i18n.t('Add content here')}
|
||||||
preserveBreaks={true}
|
preserveBreaks={false}
|
||||||
/>
|
/>
|
||||||
{/key}
|
{/key}
|
||||||
</div>
|
</div>
|
||||||
@@ -822,7 +822,7 @@
|
|||||||
className="input-prose-sm"
|
className="input-prose-sm"
|
||||||
bind:value={selectedFileContent}
|
bind:value={selectedFileContent}
|
||||||
placeholder={$i18n.t('Add content here')}
|
placeholder={$i18n.t('Add content here')}
|
||||||
preserveBreaks={true}
|
preserveBreaks={false}
|
||||||
/>
|
/>
|
||||||
{/key}
|
{/key}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "( `sh webui.sh --api`مثال)",
|
"(e.g. `sh webui.sh --api`)": "( `sh webui.sh --api`مثال)",
|
||||||
"(latest)": "(الأخير)",
|
"(latest)": "(الأخير)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ نماذج }}",
|
"{{ models }}": "{{ نماذج }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "استجابة خطاء",
|
"Bad Response": "استجابة خطاء",
|
||||||
"Banners": "لافتات",
|
"Banners": "لافتات",
|
||||||
"Base Model (From)": "النموذج الأساسي (من)",
|
"Base Model (From)": "النموذج الأساسي (من)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "قبل",
|
"before": "قبل",
|
||||||
"Being lazy": "كون كسول",
|
"Being lazy": "كون كسول",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "تعديل",
|
"Edit": "تعديل",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
|
"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "وضع الطلب",
|
"Request Mode": "وضع الطلب",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "إعادة تقييم النموذج",
|
"Reranking Model": "إعادة تقييم النموذج",
|
||||||
"Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "تم ضبط نموذج إعادة الترتيب على \"{{reranking_model}}\"",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "عرض",
|
"Show": "عرض",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "إظهار الاختصارات",
|
"Show shortcuts": "إظهار الاختصارات",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "STT اعدادات",
|
"STT Settings": "STT اعدادات",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "(e.g. about the Roman Empire) الترجمة",
|
"Subtitle (e.g. about the Roman Empire)": "(e.g. about the Roman Empire) الترجمة",
|
||||||
"Success": "نجاح",
|
"Success": "نجاح",
|
||||||
"Successfully updated.": "تم التحديث بنجاح",
|
"Successfully updated.": "تم التحديث بنجاح",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "وهذا يضمن حفظ محادثاتك القيمة بشكل آمن في قاعدة بياناتك الخلفية. شكرًا لك!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "وهذا يضمن حفظ محادثاتك القيمة بشكل آمن في قاعدة بياناتك الخلفية. شكرًا لك!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(مثال: `sh webui.sh --api --api-auth اسم_المستخدم_كلمة_المرور`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(مثال: `sh webui.sh --api --api-auth اسم_المستخدم_كلمة_المرور`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(مثال: تشغيل الأمر: `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(مثال: تشغيل الأمر: `sh webui.sh --api`)",
|
||||||
"(latest)": "(أحدث)",
|
"(latest)": "(أحدث)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "النماذج: {{ models }}",
|
"{{ models }}": "النماذج: {{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "رد سيئ",
|
"Bad Response": "رد سيئ",
|
||||||
"Banners": "لافتات",
|
"Banners": "لافتات",
|
||||||
"Base Model (From)": "النموذج الأساسي (من)",
|
"Base Model (From)": "النموذج الأساسي (من)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "حجم الدفعة (num_batch)",
|
"Batch Size (num_batch)": "حجم الدفعة (num_batch)",
|
||||||
"before": "قبل",
|
"before": "قبل",
|
||||||
"Being lazy": "كونك كسولاً",
|
"Being lazy": "كونك كسولاً",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "مثال: أدوات لتنفيذ عمليات متنوعة",
|
"e.g. Tools for performing various operations": "مثال: أدوات لتنفيذ عمليات متنوعة",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "تعديل",
|
"Edit": "تعديل",
|
||||||
"Edit Arena Model": "تعديل نموذج Arena",
|
"Edit Arena Model": "تعديل نموذج Arena",
|
||||||
"Edit Channel": "تعديل القناة",
|
"Edit Channel": "تعديل القناة",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "تفعيل أخذ عينات Mirostat للتحكم في درجة التعقيد.",
|
"Enable Mirostat sampling for controlling perplexity.": "تفعيل أخذ عينات Mirostat للتحكم في درجة التعقيد.",
|
||||||
"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
|
"Enable New Sign Ups": "تفعيل عمليات التسجيل الجديدة",
|
||||||
"Enabled": "مفعل",
|
"Enabled": "مفعل",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "تأكد من أن ملف CSV الخاص بك يتضمن 4 أعمدة بهذا الترتيب: Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "عقوبة التكرار (Ollama)",
|
"Repeat Penalty (Ollama)": "عقوبة التكرار (Ollama)",
|
||||||
"Reply in Thread": "الرد داخل سلسلة الرسائل",
|
"Reply in Thread": "الرد داخل سلسلة الرسائل",
|
||||||
"Request Mode": "وضع الطلب",
|
"Request Mode": "وضع الطلب",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "إعادة تقييم النموذج",
|
"Reranking Model": "إعادة تقييم النموذج",
|
||||||
"Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "تم ضبط نموذج إعادة الترتيب على \"{{reranking_model}}\"",
|
|
||||||
"Reset": "إعادة تعيين",
|
"Reset": "إعادة تعيين",
|
||||||
"Reset All Models": "إعادة تعيين جميع النماذج",
|
"Reset All Models": "إعادة تعيين جميع النماذج",
|
||||||
"Reset Upload Directory": "إعادة تعيين مجلد التحميل",
|
"Reset Upload Directory": "إعادة تعيين مجلد التحميل",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "عرض",
|
"Show": "عرض",
|
||||||
"Show \"What's New\" modal on login": "عرض نافذة \"ما الجديد\" عند تسجيل الدخول",
|
"Show \"What's New\" modal on login": "عرض نافذة \"ما الجديد\" عند تسجيل الدخول",
|
||||||
"Show Admin Details in Account Pending Overlay": "عرض تفاصيل المشرف في نافذة \"الحساب قيد الانتظار\"",
|
"Show Admin Details in Account Pending Overlay": "عرض تفاصيل المشرف في نافذة \"الحساب قيد الانتظار\"",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "إظهار الاختصارات",
|
"Show shortcuts": "إظهار الاختصارات",
|
||||||
"Show your support!": "أظهر دعمك!",
|
"Show your support!": "أظهر دعمك!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "بث استجابة الدردشة",
|
"Stream Chat Response": "بث استجابة الدردشة",
|
||||||
"STT Model": "نموذج تحويل الصوت إلى نص (STT)",
|
"STT Model": "نموذج تحويل الصوت إلى نص (STT)",
|
||||||
"STT Settings": "STT اعدادات",
|
"STT Settings": "STT اعدادات",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "(e.g. about the Roman Empire) الترجمة",
|
"Subtitle (e.g. about the Roman Empire)": "(e.g. about the Roman Empire) الترجمة",
|
||||||
"Success": "نجاح",
|
"Success": "نجاح",
|
||||||
"Successfully updated.": "تم التحديث بنجاح",
|
"Successfully updated.": "تم التحديث بنجاح",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "وهذا يضمن حفظ محادثاتك القيمة بشكل آمن في قاعدة بياناتك الخلفية. شكرًا لك!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "وهذا يضمن حفظ محادثاتك القيمة بشكل آمن في قاعدة بياناتك الخلفية. شكرًا لك!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "هذه ميزة تجريبية، وقد لا تعمل كما هو متوقع وقد تتغير في أي وقت.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "هذه ميزة تجريبية، وقد لا تعمل كما هو متوقع وقد تتغير في أي وقت.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "هذا الخيار يحدد عدد الرموز التي يتم الاحتفاظ بها عند تحديث السياق. مثلاً، إذا تم ضبطه على 2، سيتم الاحتفاظ بآخر رمزين من السياق. الحفاظ على السياق يساعد في استمرارية المحادثة، لكنه قد يحد من التفاعل مع مواضيع جديدة.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "هذا الخيار يحدد عدد الرموز التي يتم الاحتفاظ بها عند تحديث السياق. مثلاً، إذا تم ضبطه على 2، سيتم الاحتفاظ بآخر رمزين من السياق. الحفاظ على السياق يساعد في استمرارية المحادثة، لكنه قد يحد من التفاعل مع مواضيع جديدة.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "يحدد هذا الخيار الحد الأقصى لعدد الرموز التي يمكن للنموذج توليدها في الرد. زيادته تتيح للنموذج تقديم إجابات أطول، لكنها قد تزيد من احتمالية توليد محتوى غير مفيد أو غير ذي صلة.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "يحدد هذا الخيار الحد الأقصى لعدد الرموز التي يمكن للنموذج توليدها في الرد. زيادته تتيح للنموذج تقديم إجابات أطول، لكنها قد تزيد من احتمالية توليد محتوى غير مفيد أو غير ذي صلة.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "سيؤدي هذا الخيار إلى حذف جميع الملفات الحالية في المجموعة واستبدالها بالملفات التي تم تحميلها حديثًا.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "سيؤدي هذا الخيار إلى حذف جميع الملفات الحالية في المجموعة واستبدالها بالملفات التي تم تحميلها حديثًا.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(напр. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(напр. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(напр. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(напр. `sh webui.sh --api`)",
|
||||||
"(latest)": "(последна)",
|
"(latest)": "(последна)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Невалиден отговор от API",
|
"Bad Response": "Невалиден отговор от API",
|
||||||
"Banners": "Банери",
|
"Banners": "Банери",
|
||||||
"Base Model (From)": "Базов модел (от)",
|
"Base Model (From)": "Базов модел (от)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Размер на партидата (num_batch)",
|
"Batch Size (num_batch)": "Размер на партидата (num_batch)",
|
||||||
"before": "преди",
|
"before": "преди",
|
||||||
"Being lazy": "Да бъдеш мързелив",
|
"Being lazy": "Да бъдеш мързелив",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "напр. Инструменти за извършване на различни операции",
|
"e.g. Tools for performing various operations": "напр. Инструменти за извършване на различни операции",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Редактиране",
|
"Edit": "Редактиране",
|
||||||
"Edit Arena Model": "Редактиране на Arena модел",
|
"Edit Arena Model": "Редактиране на Arena модел",
|
||||||
"Edit Channel": "Редактиране на канал",
|
"Edit Channel": "Редактиране на канал",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Включване на нови регистрации",
|
"Enable New Sign Ups": "Включване на нови регистрации",
|
||||||
"Enabled": "Активирано",
|
"Enabled": "Активирано",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверете се, че вашият CSV файл включва 4 колони в следния ред: Име, Имейл, Парола, Роля.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Наказание за повторение (Ollama)",
|
"Repeat Penalty (Ollama)": "Наказание за повторение (Ollama)",
|
||||||
"Reply in Thread": "Отговори в тред",
|
"Reply in Thread": "Отговори в тред",
|
||||||
"Request Mode": "Режим на заявка",
|
"Request Mode": "Режим на заявка",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Модел за преподреждане",
|
"Reranking Model": "Модел за преподреждане",
|
||||||
"Reranking model disabled": "Моделът за преподреждане е деактивиран",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Моделът за преподреждане е зададен на \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Нулиране",
|
"Reset": "Нулиране",
|
||||||
"Reset All Models": "Нулиране на всички модели",
|
"Reset All Models": "Нулиране на всички модели",
|
||||||
"Reset Upload Directory": "Нулиране на директорията за качване",
|
"Reset Upload Directory": "Нулиране на директорията за качване",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Покажи",
|
"Show": "Покажи",
|
||||||
"Show \"What's New\" modal on login": "Покажи модалния прозорец \"Какво е ново\" при вписване",
|
"Show \"What's New\" modal on login": "Покажи модалния прозорец \"Какво е ново\" при вписване",
|
||||||
"Show Admin Details in Account Pending Overlay": "Покажи детайлите на администратора в наслагването на изчакващ акаунт",
|
"Show Admin Details in Account Pending Overlay": "Покажи детайлите на администратора в наслагването на изчакващ акаунт",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Покажи преки пътища",
|
"Show shortcuts": "Покажи преки пътища",
|
||||||
"Show your support!": "Покажете вашата подкрепа!",
|
"Show your support!": "Покажете вашата подкрепа!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Поточен чат отговор",
|
"Stream Chat Response": "Поточен чат отговор",
|
||||||
"STT Model": "STT Модел",
|
"STT Model": "STT Модел",
|
||||||
"STT Settings": "STT Настройки",
|
"STT Settings": "STT Настройки",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Подтитул (напр. за Римска империя)",
|
"Subtitle (e.g. about the Roman Empire)": "Подтитул (напр. за Римска империя)",
|
||||||
"Success": "Успех",
|
"Success": "Успех",
|
||||||
"Successfully updated.": "Успешно обновено.",
|
"Successfully updated.": "Успешно обновено.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Това гарантира, че ценните ви разговори се запазват сигурно във вашата бекенд база данни. Благодарим ви!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Това гарантира, че ценните ви разговори се запазват сигурно във вашата бекенд база данни. Благодарим ви!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Това е експериментална функция, може да не работи според очакванията и подлежи на промяна по всяко време.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Това е експериментална функция, може да не работи според очакванията и подлежи на промяна по всяко време.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Тази опция ще изтрие всички съществуващи файлове в колекцията и ще ги замени с новокачени файлове.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Тази опция ще изтрие всички съществуващи файлове в колекцията и ще ги замени с новокачени файлове.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "(যেমন `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(যেমন `sh webui.sh --api`)",
|
||||||
"(latest)": "(সর্বশেষ)",
|
"(latest)": "(সর্বশেষ)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ মডেল}}",
|
"{{ models }}": "{{ মডেল}}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "খারাপ প্রতিক্রিয়া",
|
"Bad Response": "খারাপ প্রতিক্রিয়া",
|
||||||
"Banners": "ব্যানার",
|
"Banners": "ব্যানার",
|
||||||
"Base Model (From)": "বেস মডেল (থেকে)",
|
"Base Model (From)": "বেস মডেল (থেকে)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "পূর্ববর্তী",
|
"before": "পূর্ববর্তী",
|
||||||
"Being lazy": "অলস হওয়া",
|
"Being lazy": "অলস হওয়া",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "এডিট করুন",
|
"Edit": "এডিট করুন",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "নতুন সাইনআপ চালু করুন",
|
"Enable New Sign Ups": "নতুন সাইনআপ চালু করুন",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "আপনার সিএসভি ফাইলটিতে এই ক্রমে 4 টি কলাম অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন: নাম, ইমেল, পাসওয়ার্ড, ভূমিকা।.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "আপনার সিএসভি ফাইলটিতে এই ক্রমে 4 টি কলাম অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন: নাম, ইমেল, পাসওয়ার্ড, ভূমিকা।.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "রিকোয়েস্ট মোড",
|
"Request Mode": "রিকোয়েস্ট মোড",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "রির্যাক্টিং মডেল",
|
"Reranking Model": "রির্যাক্টিং মডেল",
|
||||||
"Reranking model disabled": "রির্যাক্টিং মডেল নিষ্ক্রিয় করা",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "রির ্যাঙ্কিং মডেল \"{{reranking_model}}\" -এ সেট করা আছে",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "দেখান",
|
"Show": "দেখান",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "শর্টকাটগুলো দেখান",
|
"Show shortcuts": "শর্টকাটগুলো দেখান",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "STT সেটিংস",
|
"STT Settings": "STT সেটিংস",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "সাবটাইটল (রোমান ইম্পার্টের সম্পর্কে)",
|
"Subtitle (e.g. about the Roman Empire)": "সাবটাইটল (রোমান ইম্পার্টের সম্পর্কে)",
|
||||||
"Success": "সফল",
|
"Success": "সফল",
|
||||||
"Successfully updated.": "সফলভাবে আপডেট হয়েছে",
|
"Successfully updated.": "সফলভাবে আপডেট হয়েছে",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "এটা নিশ্চিত করে যে, আপনার গুরুত্বপূর্ণ আলোচনা নিরাপদে আপনার ব্যাকএন্ড ডেটাবেজে সংরক্ষিত আছে। ধন্যবাদ!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "এটা নিশ্চিত করে যে, আপনার গুরুত্বপূর্ণ আলোচনা নিরাপদে আপনার ব্যাকএন্ড ডেটাবেজে সংরক্ষিত আছে। ধন্যবাদ!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(དཔེར་ན། `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(དཔེར་ན། `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(དཔེར་ན། `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(དཔེར་ན། `sh webui.sh --api`)",
|
||||||
"(latest)": "(ཆེས་གསར།)",
|
"(latest)": "(ཆེས་གསར།)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "(Ollama)",
|
"(Ollama)": "(Ollama)",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "ལན་ངན་པ།",
|
"Bad Response": "ལན་ངན་པ།",
|
||||||
"Banners": "དར་ཆ།",
|
"Banners": "དར་ཆ།",
|
||||||
"Base Model (From)": "གཞི་རྩའི་དཔེ་དབྱིབས། (ནས།)",
|
"Base Model (From)": "གཞི་རྩའི་དཔེ་དབྱིབས། (ནས།)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "ཚན་ཆུང་ཆེ་ཆུང་། (num_batch)",
|
"Batch Size (num_batch)": "ཚན་ཆུང་ཆེ་ཆུང་། (num_batch)",
|
||||||
"before": "སྔོན།",
|
"before": "སྔོན།",
|
||||||
"Being lazy": "ལེ་ལོ་བྱེད་པ།",
|
"Being lazy": "ལེ་ལོ་བྱེད་པ།",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "དཔེར་ན། ལས་ཀ་སྣ་ཚོགས་སྒྲུབ་བྱེད་ཀྱི་ལག་ཆ།",
|
"e.g. Tools for performing various operations": "དཔེར་ན། ལས་ཀ་སྣ་ཚོགས་སྒྲུབ་བྱེད་ཀྱི་ལག་ཆ།",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "ཞུ་དག",
|
"Edit": "ཞུ་དག",
|
||||||
"Edit Arena Model": "Arena དཔེ་དབྱིབས་ཞུ་དག",
|
"Edit Arena Model": "Arena དཔེ་དབྱིབས་ཞུ་དག",
|
||||||
"Edit Channel": "བགྲོ་གླེང་ཞུ་དག",
|
"Edit Channel": "བགྲོ་གླེང་ཞུ་དག",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "རྙོག་འཛིང་ཚད་ཚོད་འཛིན་གྱི་ཆེད་དུ་ Mirostat མ་དཔེ་འདེམས་པ་སྒུལ་བསྐྱོད་བྱེད་པ།",
|
"Enable Mirostat sampling for controlling perplexity.": "རྙོག་འཛིང་ཚད་ཚོད་འཛིན་གྱི་ཆེད་དུ་ Mirostat མ་དཔེ་འདེམས་པ་སྒུལ་བསྐྱོད་བྱེད་པ།",
|
||||||
"Enable New Sign Ups": "ཐོ་འགོད་གསར་པ་སྒུལ་བསྐྱོད་བྱེད་པ།",
|
"Enable New Sign Ups": "ཐོ་འགོད་གསར་པ་སྒུལ་བསྐྱོད་བྱེད་པ།",
|
||||||
"Enabled": "སྒུལ་བསྐྱོད་བྱས་ཡོད།",
|
"Enabled": "སྒུལ་བསྐྱོད་བྱས་ཡོད།",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "གནས་སྐབས་ཁ་བརྡ་བཙན་བཀོལ་བྱེད་པ།",
|
"Enforce Temporary Chat": "གནས་སྐབས་ཁ་བརྡ་བཙན་བཀོལ་བྱེད་པ།",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ཁྱེད་ཀྱི་ CSV ཡིག་ཆར་གོ་རིམ་འདི་ལྟར། མིང་། ཡིག་ཟམ། གསང་གྲངས། གནས་ཚད། སྟར་པ་ ༤ ཚུད་ཡོད་པ་ཁག་ཐེག་བྱེད་རོགས།",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ཁྱེད་ཀྱི་ CSV ཡིག་ཆར་གོ་རིམ་འདི་ལྟར། མིང་། ཡིག་ཟམ། གསང་གྲངས། གནས་ཚད། སྟར་པ་ ༤ ཚུད་ཡོད་པ་ཁག་ཐེག་བྱེད་རོགས།",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "བསྐྱར་ཟློས་ཀྱི་ཆད་པ། (Ollama)",
|
"Repeat Penalty (Ollama)": "བསྐྱར་ཟློས་ཀྱི་ཆད་པ། (Ollama)",
|
||||||
"Reply in Thread": "བརྗོད་གཞིའི་ནང་ལན་འདེབས།",
|
"Reply in Thread": "བརྗོད་གཞིའི་ནང་ལན་འདེབས།",
|
||||||
"Request Mode": "རེ་ཞུའི་མ་དཔེ།",
|
"Request Mode": "རེ་ཞུའི་མ་དཔེ།",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "བསྐྱར་སྒྲིག་དཔེ་དབྱིབས།",
|
"Reranking Model": "བསྐྱར་སྒྲིག་དཔེ་དབྱིབས།",
|
||||||
"Reranking model disabled": "བསྐྱར་སྒྲིག་དཔེ་དབྱིབས་ནུས་མེད་བཏང་།",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "བསྐྱར་སྒྲིག་དཔེ་དབྱིབས་ \"{{reranking_model}}\" ལ་བཀོད་སྒྲིག་བྱས།",
|
|
||||||
"Reset": "སླར་སྒྲིག",
|
"Reset": "སླར་སྒྲིག",
|
||||||
"Reset All Models": "དཔེ་དབྱིབས་ཡོངས་རྫོགས་སླར་སྒྲིག",
|
"Reset All Models": "དཔེ་དབྱིབས་ཡོངས་རྫོགས་སླར་སྒྲིག",
|
||||||
"Reset Upload Directory": "སྤར་བའི་ཐོ་འཚོལ་སླར་སྒྲིག",
|
"Reset Upload Directory": "སྤར་བའི་ཐོ་འཚོལ་སླར་སྒྲིག",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "སྟོན་པ།",
|
"Show": "སྟོན་པ།",
|
||||||
"Show \"What's New\" modal on login": "ནང་འཛུལ་སྐབས་ \"གསར་པ་ཅི་ཡོད\" modal སྟོན་པ།",
|
"Show \"What's New\" modal on login": "ནང་འཛུལ་སྐབས་ \"གསར་པ་ཅི་ཡོད\" modal སྟོན་པ།",
|
||||||
"Show Admin Details in Account Pending Overlay": "རྩིས་ཁྲ་སྒུག་བཞིན་པའི་གཏོགས་ངོས་སུ་དོ་དམ་པའི་ཞིབ་ཕྲ་སྟོན་པ།",
|
"Show Admin Details in Account Pending Overlay": "རྩིས་ཁྲ་སྒུག་བཞིན་པའི་གཏོགས་ངོས་སུ་དོ་དམ་པའི་ཞིབ་ཕྲ་སྟོན་པ།",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "དཔེ་དབྱིབས་སྟོན་པ།",
|
"Show Model": "དཔེ་དབྱིབས་སྟོན་པ།",
|
||||||
"Show shortcuts": "མྱུར་ལམ་སྟོན་པ།",
|
"Show shortcuts": "མྱུར་ལམ་སྟོན་པ།",
|
||||||
"Show your support!": "ཁྱེད་ཀྱི་རྒྱབ་སྐྱོར་སྟོན་པ།",
|
"Show your support!": "ཁྱེད་ཀྱི་རྒྱབ་སྐྱོར་སྟོན་པ།",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "ཁ་བརྡའི་ལན་རྒྱུག་པ།",
|
"Stream Chat Response": "ཁ་བརྡའི་ལན་རྒྱུག་པ།",
|
||||||
"STT Model": "STT དཔེ་དབྱིབས།",
|
"STT Model": "STT དཔེ་དབྱིབས།",
|
||||||
"STT Settings": "STT སྒྲིག་འགོད།",
|
"STT Settings": "STT སྒྲིག་འགོད།",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "ཁ་བྱང་ཕལ་པ། (དཔེར་ན། རོམ་མའི་གོང་མའི་རྒྱལ་ཁབ་སྐོར།)",
|
"Subtitle (e.g. about the Roman Empire)": "ཁ་བྱང་ཕལ་པ། (དཔེར་ན། རོམ་མའི་གོང་མའི་རྒྱལ་ཁབ་སྐོར།)",
|
||||||
"Success": "ལེགས་འགྲུབ།",
|
"Success": "ལེགས་འགྲུབ།",
|
||||||
"Successfully updated.": "ལེགས་པར་གསར་སྒྱུར་བྱས།",
|
"Successfully updated.": "ལེགས་པར་གསར་སྒྱུར་བྱས།",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "འདིས་ཁྱེད་ཀྱི་རྩ་ཆེའི་ཁ་བརྡ་དག་བདེ་འཇགས་ངང་ཁྱེད་ཀྱི་རྒྱབ་སྣེ་གནས་ཚུལ་མཛོད་དུ་ཉར་ཚགས་བྱེད་པ་ཁག་ཐེག་བྱེད། ཐུགས་རྗེ་ཆེ།",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "འདིས་ཁྱེད་ཀྱི་རྩ་ཆེའི་ཁ་བརྡ་དག་བདེ་འཇགས་ངང་ཁྱེད་ཀྱི་རྒྱབ་སྣེ་གནས་ཚུལ་མཛོད་དུ་ཉར་ཚགས་བྱེད་པ་ཁག་ཐེག་བྱེད། ཐུགས་རྗེ་ཆེ།",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "འདི་ནི་ཚོད་ལྟའི་རང་བཞིན་གྱི་ཁྱད་ཆོས་ཤིག་ཡིན། དེ་རེ་སྒུག་ལྟར་ལས་ཀ་བྱེད་མི་སྲིད། དེ་མིན་དུས་ཚོད་གང་རུང་ལ་འགྱུར་བ་འགྲོ་སྲིད།",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "འདི་ནི་ཚོད་ལྟའི་རང་བཞིན་གྱི་ཁྱད་ཆོས་ཤིག་ཡིན། དེ་རེ་སྒུག་ལྟར་ལས་ཀ་བྱེད་མི་སྲིད། དེ་མིན་དུས་ཚོད་གང་རུང་ལ་འགྱུར་བ་འགྲོ་སྲིད།",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "འདེམས་ཀ་འདིས་ནང་དོན་གསར་སྒྱུར་བྱེད་སྐབས་ཊོཀ་ཀེན་ག་ཚོད་ཉར་ཚགས་བྱེད་དགོས་ཚོད་འཛིན་བྱེད། དཔེར་ན། གལ་ཏེ་ ༢ ལ་བཀོད་སྒྲིག་བྱས་ན། ཁ་བརྡའི་ནང་དོན་གྱི་ཊོཀ་ཀེན་མཐའ་མ་ ༢ ཉར་ཚགས་བྱེད་ངེས། ནང་དོན་ཉར་ཚགས་བྱས་ན་ཁ་བརྡའི་རྒྱུན་མཐུད་རང་བཞིན་རྒྱུན་སྲུང་བྱེད་པར་རོགས་པ་བྱེད་ཐུབ། འོན་ཀྱང་དེས་བརྗོད་གཞི་གསར་པར་ལན་འདེབས་བྱེད་པའི་ནུས་པ་ཉུང་དུ་གཏོང་སྲིད།",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "འདེམས་ཀ་འདིས་ནང་དོན་གསར་སྒྱུར་བྱེད་སྐབས་ཊོཀ་ཀེན་ག་ཚོད་ཉར་ཚགས་བྱེད་དགོས་ཚོད་འཛིན་བྱེད། དཔེར་ན། གལ་ཏེ་ ༢ ལ་བཀོད་སྒྲིག་བྱས་ན། ཁ་བརྡའི་ནང་དོན་གྱི་ཊོཀ་ཀེན་མཐའ་མ་ ༢ ཉར་ཚགས་བྱེད་ངེས། ནང་དོན་ཉར་ཚགས་བྱས་ན་ཁ་བརྡའི་རྒྱུན་མཐུད་རང་བཞིན་རྒྱུན་སྲུང་བྱེད་པར་རོགས་པ་བྱེད་ཐུབ། འོན་ཀྱང་དེས་བརྗོད་གཞི་གསར་པར་ལན་འདེབས་བྱེད་པའི་ནུས་པ་ཉུང་དུ་གཏོང་སྲིད།",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "འདེམས་ཀ་འདིས་དཔེ་དབྱིབས་ཀྱིས་དེའི་ལན་ནང་བཟོ་ཐུབ་པའི་ཊོཀ་ཀེན་གྱི་གྲངས་མང་ཤོས་འཇོག་པ། ཚད་བཀག་འདི་མང་དུ་བཏང་ན་དཔེ་དབྱིབས་ཀྱིས་ལན་རིང་བ་སྤྲོད་པར་གནང་བ་སྤྲོད། འོན་ཀྱང་དེས་ཕན་ཐོགས་མེད་པའམ་འབྲེལ་མེད་ཀྱི་ནང་དོན་བཟོ་བའི་ཆགས་ཚུལ་མང་དུ་གཏོང་སྲིད།",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "འདེམས་ཀ་འདིས་དཔེ་དབྱིབས་ཀྱིས་དེའི་ལན་ནང་བཟོ་ཐུབ་པའི་ཊོཀ་ཀེན་གྱི་གྲངས་མང་ཤོས་འཇོག་པ། ཚད་བཀག་འདི་མང་དུ་བཏང་ན་དཔེ་དབྱིབས་ཀྱིས་ལན་རིང་བ་སྤྲོད་པར་གནང་བ་སྤྲོད། འོན་ཀྱང་དེས་ཕན་ཐོགས་མེད་པའམ་འབྲེལ་མེད་ཀྱི་ནང་དོན་བཟོ་བའི་ཆགས་ཚུལ་མང་དུ་གཏོང་སྲིད།",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "འདེམས་ཀ་འདིས་བསྡུ་གསོག་ནང་གི་ཡོད་པའི་ཡིག་ཆ་ཡོངས་རྫོགས་བསུབ་ནས་དེ་དག་གསར་དུ་སྤར་བའི་ཡིག་ཆས་ཚབ་བྱེད་ངེས།",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "འདེམས་ཀ་འདིས་བསྡུ་གསོག་ནང་གི་ཡོད་པའི་ཡིག་ཆ་ཡོངས་རྫོགས་བསུབ་ནས་དེ་དག་གསར་དུ་སྤར་བའི་ཡིག་ཆས་ཚབ་བྱེད་ངེས།",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(p. ex. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(p. ex. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(p. ex. `sh webui.sh --api`)",
|
||||||
"(latest)": "(últim)",
|
"(latest)": "(últim)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "(Ollama)",
|
"(Ollama)": "(Ollama)",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "{{COUNT}} eines disponibles",
|
"{{COUNT}} Available Tools": "{{COUNT}} eines disponibles",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Resposta errònia",
|
"Bad Response": "Resposta errònia",
|
||||||
"Banners": "Banners",
|
"Banners": "Banners",
|
||||||
"Base Model (From)": "Model base (des de)",
|
"Base Model (From)": "Model base (des de)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Mida del lot (num_batch)",
|
"Batch Size (num_batch)": "Mida del lot (num_batch)",
|
||||||
"before": "abans",
|
"before": "abans",
|
||||||
"Being lazy": "Essent mandrós",
|
"Being lazy": "Essent mandrós",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "p. ex. Eines per dur a terme operacions",
|
"e.g. Tools for performing various operations": "p. ex. Eines per dur a terme operacions",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "p. ex. en-US, ja-JP, ca-ES (deixa-ho en blanc per detecció automàtica)",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "p. ex. en-US, ja-JP, ca-ES (deixa-ho en blanc per detecció automàtica)",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Editar",
|
"Edit": "Editar",
|
||||||
"Edit Arena Model": "Editar model de l'Arena",
|
"Edit Arena Model": "Editar model de l'Arena",
|
||||||
"Edit Channel": "Editar el canal",
|
"Edit Channel": "Editar el canal",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "Permetre el mostreig de Mirostat per controlar la perplexitat",
|
"Enable Mirostat sampling for controlling perplexity.": "Permetre el mostreig de Mirostat per controlar la perplexitat",
|
||||||
"Enable New Sign Ups": "Permetre nous registres",
|
"Enable New Sign Ups": "Permetre nous registres",
|
||||||
"Enabled": "Habilitat",
|
"Enabled": "Habilitat",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "Forçar els xats temporals",
|
"Enforce Temporary Chat": "Forçar els xats temporals",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que els teus fitxers CSV inclouen 4 columnes en aquest ordre: Nom, Correu electrònic, Contrasenya, Rol.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Assegura't que els teus fitxers CSV inclouen 4 columnes en aquest ordre: Nom, Correu electrònic, Contrasenya, Rol.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Penalització per repetició (Ollama)",
|
"Repeat Penalty (Ollama)": "Penalització per repetició (Ollama)",
|
||||||
"Reply in Thread": "Respondre al fil",
|
"Reply in Thread": "Respondre al fil",
|
||||||
"Request Mode": "Mode de sol·licitud",
|
"Request Mode": "Mode de sol·licitud",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Model de reavaluació",
|
"Reranking Model": "Model de reavaluació",
|
||||||
"Reranking model disabled": "Model de reavaluació desactivat",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Model de reavaluació establert a \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Restableix",
|
"Reset": "Restableix",
|
||||||
"Reset All Models": "Restablir tots els models",
|
"Reset All Models": "Restablir tots els models",
|
||||||
"Reset Upload Directory": "Restableix el directori de pujades",
|
"Reset Upload Directory": "Restableix el directori de pujades",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Mostrar",
|
"Show": "Mostrar",
|
||||||
"Show \"What's New\" modal on login": "Veure 'Què hi ha de nou' a l'entrada",
|
"Show \"What's New\" modal on login": "Veure 'Què hi ha de nou' a l'entrada",
|
||||||
"Show Admin Details in Account Pending Overlay": "Mostrar els detalls de l'administrador a la superposició del compte pendent",
|
"Show Admin Details in Account Pending Overlay": "Mostrar els detalls de l'administrador a la superposició del compte pendent",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "Mostrar el model",
|
"Show Model": "Mostrar el model",
|
||||||
"Show shortcuts": "Mostrar dreceres",
|
"Show shortcuts": "Mostrar dreceres",
|
||||||
"Show your support!": "Mostra el teu suport!",
|
"Show your support!": "Mostra el teu suport!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Fer streaming de la resposta del xat",
|
"Stream Chat Response": "Fer streaming de la resposta del xat",
|
||||||
"STT Model": "Model SST",
|
"STT Model": "Model SST",
|
||||||
"STT Settings": "Preferències de STT",
|
"STT Settings": "Preferències de STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Subtítol (per exemple, sobre l'Imperi Romà)",
|
"Subtitle (e.g. about the Roman Empire)": "Subtítol (per exemple, sobre l'Imperi Romà)",
|
||||||
"Success": "Èxit",
|
"Success": "Èxit",
|
||||||
"Successfully updated.": "Actualitzat correctament.",
|
"Successfully updated.": "Actualitzat correctament.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "Aquest xat no apareixerà a l'historial i els teus missatges no es desaran.",
|
"This chat won’t appear in history and your messages will not be saved.": "Aquest xat no apareixerà a l'historial i els teus missatges no es desaran.",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Això assegura que les teves converses valuoses queden desades de manera segura a la teva base de dades. Gràcies!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Això assegura que les teves converses valuoses queden desades de manera segura a la teva base de dades. Gràcies!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Aquesta és una funció experimental, és possible que no funcioni com s'espera i està subjecta a canvis en qualsevol moment.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Aquesta és una funció experimental, és possible que no funcioni com s'espera i està subjecta a canvis en qualsevol moment.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Aquesta opció controla quants tokens es conserven en actualitzar el context. Per exemple, si s'estableix en 2, es conservaran els darrers 2 tokens del context de conversa. Preservar el context pot ajudar a mantenir la continuïtat d'una conversa, però pot reduir la capacitat de respondre a nous temes.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Aquesta opció controla quants tokens es conserven en actualitzar el context. Per exemple, si s'estableix en 2, es conservaran els darrers 2 tokens del context de conversa. Preservar el context pot ajudar a mantenir la continuïtat d'una conversa, però pot reduir la capacitat de respondre a nous temes.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Aquesta opció estableix el nombre màxim de tokens que el model pot generar en la seva resposta. Augmentar aquest límit permet que el model proporcioni respostes més llargues, però també pot augmentar la probabilitat que es generi contingut poc útil o irrellevant.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Aquesta opció estableix el nombre màxim de tokens que el model pot generar en la seva resposta. Augmentar aquest límit permet que el model proporcioni respostes més llargues, però també pot augmentar la probabilitat que es generi contingut poc útil o irrellevant.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Aquesta opció eliminarà tots els fitxers existents de la col·lecció i els substituirà per fitxers recentment penjats.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Aquesta opció eliminarà tots els fitxers existents de la col·lecció i els substituirà per fitxers recentment penjats.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "(pananglitan `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(pananglitan `sh webui.sh --api`)",
|
||||||
"(latest)": "",
|
"(latest)": "",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "",
|
"{{ models }}": "",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "",
|
"Bad Response": "",
|
||||||
"Banners": "",
|
"Banners": "",
|
||||||
"Base Model (From)": "",
|
"Base Model (From)": "",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "",
|
"before": "",
|
||||||
"Being lazy": "",
|
"Being lazy": "",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "",
|
"Edit": "",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "I-enable ang bag-ong mga rehistro",
|
"Enable New Sign Ups": "I-enable ang bag-ong mga rehistro",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Query mode",
|
"Request Mode": "Query mode",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "",
|
"Reranking Model": "",
|
||||||
"Reranking model disabled": "",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Pagpakita",
|
"Show": "Pagpakita",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Ipakita ang mga shortcut",
|
"Show shortcuts": "Ipakita ang mga shortcut",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "Mga setting sa STT",
|
"STT Settings": "Mga setting sa STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "",
|
"Subtitle (e.g. about the Roman Empire)": "",
|
||||||
"Success": "Kalampusan",
|
"Success": "Kalampusan",
|
||||||
"Successfully updated.": "Malampuson nga na-update.",
|
"Successfully updated.": "Malampuson nga na-update.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Kini nagsiguro nga ang imong bililhon nga mga panag-istoryahanay luwas nga natipig sa imong backend database. ",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Kini nagsiguro nga ang imong bililhon nga mga panag-istoryahanay luwas nga natipig sa imong backend database. ",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(např. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(např. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(např. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(např. `sh webui.sh --api`)",
|
||||||
"(latest)": "Nejnovější",
|
"(latest)": "Nejnovější",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Špatná odezva",
|
"Bad Response": "Špatná odezva",
|
||||||
"Banners": "Bannery",
|
"Banners": "Bannery",
|
||||||
"Base Model (From)": "Základní model (z)",
|
"Base Model (From)": "Základní model (z)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Batch size (num_batch)",
|
"Batch Size (num_batch)": "Batch size (num_batch)",
|
||||||
"before": "před",
|
"before": "před",
|
||||||
"Being lazy": "",
|
"Being lazy": "",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Upravit",
|
"Edit": "Upravit",
|
||||||
"Edit Arena Model": "Upravit Arena Model",
|
"Edit Arena Model": "Upravit Arena Model",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Povolit nové registrace",
|
"Enable New Sign Ups": "Povolit nové registrace",
|
||||||
"Enabled": "Povoleno",
|
"Enabled": "Povoleno",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Ujistěte se, že váš CSV soubor obsahuje 4 sloupce v tomto pořadí: Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Ujistěte se, že váš CSV soubor obsahuje 4 sloupce v tomto pořadí: Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Režim žádosti",
|
"Request Mode": "Režim žádosti",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Model pro přehodnocení pořadí",
|
"Reranking Model": "Model pro přehodnocení pořadí",
|
||||||
"Reranking model disabled": "Přeřazovací model je deaktivován",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Model pro přeřazení nastaven na \"{{reranking_model}}\"",
|
|
||||||
"Reset": "režim Reset",
|
"Reset": "režim Reset",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Resetovat adresář nahrávání",
|
"Reset Upload Directory": "Resetovat adresář nahrávání",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Zobrazit",
|
"Show": "Zobrazit",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "Zobrazit podrobnosti administrátora v překryvném okně s čekajícím účtem",
|
"Show Admin Details in Account Pending Overlay": "Zobrazit podrobnosti administrátora v překryvném okně s čekajícím účtem",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Zobrazit klávesové zkratky",
|
"Show shortcuts": "Zobrazit klávesové zkratky",
|
||||||
"Show your support!": "Vyjadřete svou podporu!",
|
"Show your support!": "Vyjadřete svou podporu!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Odezva chatu Stream",
|
"Stream Chat Response": "Odezva chatu Stream",
|
||||||
"STT Model": "Model rozpoznávání řeči na text (STT)",
|
"STT Model": "Model rozpoznávání řeči na text (STT)",
|
||||||
"STT Settings": "Nastavení STT (Rozpoznávání řeči)",
|
"STT Settings": "Nastavení STT (Rozpoznávání řeči)",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Titulky (např. o Římské říši)",
|
"Subtitle (e.g. about the Roman Empire)": "Titulky (např. o Římské říši)",
|
||||||
"Success": "Úspěch",
|
"Success": "Úspěch",
|
||||||
"Successfully updated.": "Úspěšně aktualizováno.",
|
"Successfully updated.": "Úspěšně aktualizováno.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "To zajišťuje, že vaše cenné konverzace jsou bezpečně uloženy ve vaší backendové databázi. Děkujeme!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "To zajišťuje, že vaše cenné konverzace jsou bezpečně uloženy ve vaší backendové databázi. Děkujeme!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Jedná se o experimentální funkci, nemusí fungovat podle očekávání a může být kdykoliv změněna.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Jedná se o experimentální funkci, nemusí fungovat podle očekávání a může být kdykoliv změněna.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Tato volba odstraní všechny existující soubory ve sbírce a nahradí je nově nahranými soubory.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Tato volba odstraní všechny existující soubory ve sbírce a nahradí je nově nahranými soubory.",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(z. B. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(z. B. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(z. B. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(z. B. `sh webui.sh --api`)",
|
||||||
"(latest)": "(neueste)",
|
"(latest)": "(neueste)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ Modelle }}",
|
"{{ models }}": "{{ Modelle }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -63,8 +63,8 @@
|
|||||||
"Allow Chat Delete": "Löschen von Chats erlauben",
|
"Allow Chat Delete": "Löschen von Chats erlauben",
|
||||||
"Allow Chat Deletion": "Löschen von Chats erlauben",
|
"Allow Chat Deletion": "Löschen von Chats erlauben",
|
||||||
"Allow Chat Edit": "Bearbeiten von Chats erlauben",
|
"Allow Chat Edit": "Bearbeiten von Chats erlauben",
|
||||||
"Allow Chat Export": "",
|
"Allow Chat Export": "Erlaube Chat Export",
|
||||||
"Allow Chat Share": "",
|
"Allow Chat Share": "Erlaube Chat teilen",
|
||||||
"Allow File Upload": "Hochladen von Dateien erlauben",
|
"Allow File Upload": "Hochladen von Dateien erlauben",
|
||||||
"Allow Multiple Models in Chat": "Multiple Modelle in Chat erlauben",
|
"Allow Multiple Models in Chat": "Multiple Modelle in Chat erlauben",
|
||||||
"Allow non-local voices": "Nicht-lokale Stimmen erlauben",
|
"Allow non-local voices": "Nicht-lokale Stimmen erlauben",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Schlechte Antwort",
|
"Bad Response": "Schlechte Antwort",
|
||||||
"Banners": "Banner",
|
"Banners": "Banner",
|
||||||
"Base Model (From)": "Basismodell (From)",
|
"Base Model (From)": "Basismodell (From)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Stapelgröße (num_batch)",
|
"Batch Size (num_batch)": "Stapelgröße (num_batch)",
|
||||||
"before": "bereits geteilt",
|
"before": "bereits geteilt",
|
||||||
"Being lazy": "Faulheit",
|
"Being lazy": "Faulheit",
|
||||||
@@ -270,7 +269,7 @@
|
|||||||
"Create Knowledge": "Wissen erstellen",
|
"Create Knowledge": "Wissen erstellen",
|
||||||
"Create new key": "Neuen Schlüssel erstellen",
|
"Create new key": "Neuen Schlüssel erstellen",
|
||||||
"Create new secret key": "Neuen API-Schlüssel erstellen",
|
"Create new secret key": "Neuen API-Schlüssel erstellen",
|
||||||
"Create Note": "",
|
"Create Note": "Notiz erstellen",
|
||||||
"Create your first note by clicking on the plus button below.": "",
|
"Create your first note by clicking on the plus button below.": "",
|
||||||
"Created at": "Erstellt am",
|
"Created at": "Erstellt am",
|
||||||
"Created At": "Erstellt am",
|
"Created At": "Erstellt am",
|
||||||
@@ -309,7 +308,7 @@
|
|||||||
"Delete function?": "Funktion löschen?",
|
"Delete function?": "Funktion löschen?",
|
||||||
"Delete Message": "Nachricht löschen",
|
"Delete Message": "Nachricht löschen",
|
||||||
"Delete message?": "Nachricht löschen?",
|
"Delete message?": "Nachricht löschen?",
|
||||||
"Delete note?": "",
|
"Delete note?": "Notiz löschen?",
|
||||||
"Delete prompt?": "Prompt löschen?",
|
"Delete prompt?": "Prompt löschen?",
|
||||||
"delete this link": "diesen Link löschen",
|
"delete this link": "diesen Link löschen",
|
||||||
"Delete tool?": "Werkzeug löschen?",
|
"Delete tool?": "Werkzeug löschen?",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "z. B. Werkzeuge für verschiedene Operationen",
|
"e.g. Tools for performing various operations": "z. B. Werkzeuge für verschiedene Operationen",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "z. B. en-US,de-DE (freilassen für automatische Erkennung)",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "z. B. en-US,de-DE (freilassen für automatische Erkennung)",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Bearbeiten",
|
"Edit": "Bearbeiten",
|
||||||
"Edit Arena Model": "Arena-Modell bearbeiten",
|
"Edit Arena Model": "Arena-Modell bearbeiten",
|
||||||
"Edit Channel": "Kanal bearbeiten",
|
"Edit Channel": "Kanal bearbeiten",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Registrierung erlauben",
|
"Enable New Sign Ups": "Registrierung erlauben",
|
||||||
"Enabled": "Aktiviert",
|
"Enabled": "Aktiviert",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "Temporären Chat erzwingen",
|
"Enforce Temporary Chat": "Temporären Chat erzwingen",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Stellen Sie sicher, dass Ihre CSV-Datei 4 Spalten in dieser Reihenfolge enthält: Name, E-Mail, Passwort, Rolle.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Stellen Sie sicher, dass Ihre CSV-Datei 4 Spalten in dieser Reihenfolge enthält: Name, E-Mail, Passwort, Rolle.",
|
||||||
@@ -598,7 +599,7 @@
|
|||||||
"Functions": "Funktionen",
|
"Functions": "Funktionen",
|
||||||
"Functions allow arbitrary code execution.": "Funktionen ermöglichen die Ausführung beliebigen Codes.",
|
"Functions allow arbitrary code execution.": "Funktionen ermöglichen die Ausführung beliebigen Codes.",
|
||||||
"Functions imported successfully": "Funktionen erfolgreich importiert",
|
"Functions imported successfully": "Funktionen erfolgreich importiert",
|
||||||
"Gemini": "",
|
"Gemini": "Gemini",
|
||||||
"Gemini API Config": "Gemini API-Konfiguration",
|
"Gemini API Config": "Gemini API-Konfiguration",
|
||||||
"Gemini API Key is required.": "Gemini API-Schlüssel ist erforderlich.",
|
"Gemini API Key is required.": "Gemini API-Schlüssel ist erforderlich.",
|
||||||
"General": "Allgemein",
|
"General": "Allgemein",
|
||||||
@@ -607,7 +608,7 @@
|
|||||||
"Generate Image": "Bild erzeugen",
|
"Generate Image": "Bild erzeugen",
|
||||||
"Generate prompt pair": "",
|
"Generate prompt pair": "",
|
||||||
"Generating search query": "Suchanfrage wird erstellt",
|
"Generating search query": "Suchanfrage wird erstellt",
|
||||||
"Generating...": "",
|
"Generating...": "Generiere...",
|
||||||
"Get started": "Loslegen",
|
"Get started": "Loslegen",
|
||||||
"Get started with {{WEBUI_NAME}}": "Loslegen mit {{WEBUI_NAME}}",
|
"Get started with {{WEBUI_NAME}}": "Loslegen mit {{WEBUI_NAME}}",
|
||||||
"Global": "Global",
|
"Global": "Global",
|
||||||
@@ -792,16 +793,16 @@
|
|||||||
"Mojeek Search API Key": "Mojeek Search API-Schlüssel",
|
"Mojeek Search API Key": "Mojeek Search API-Schlüssel",
|
||||||
"more": "mehr",
|
"more": "mehr",
|
||||||
"More": "Mehr",
|
"More": "Mehr",
|
||||||
"My Notes": "",
|
"My Notes": "Meine Notizen",
|
||||||
"Name": "Name",
|
"Name": "Name",
|
||||||
"Name your knowledge base": "Benennen Sie Ihren Wissensspeicher",
|
"Name your knowledge base": "Benennen Sie Ihren Wissensspeicher",
|
||||||
"Native": "Nativ",
|
"Native": "Nativ",
|
||||||
"New Chat": "Neuer Chat",
|
"New Chat": "Neuer Chat",
|
||||||
"New Folder": "Neuer Ordner",
|
"New Folder": "Neuer Ordner",
|
||||||
"New Note": "",
|
"New Note": "Neue Notiz",
|
||||||
"New Password": "Neues Passwort",
|
"New Password": "Neues Passwort",
|
||||||
"new-channel": "neuer-kanal",
|
"new-channel": "neuer-kanal",
|
||||||
"No content": "",
|
"No content": "Kein Inhalt",
|
||||||
"No content found": "Kein Inhalt gefunden",
|
"No content found": "Kein Inhalt gefunden",
|
||||||
"No content found in file.": "",
|
"No content found in file.": "",
|
||||||
"No content to speak": "Kein Inhalt zum Vorlesen",
|
"No content to speak": "Kein Inhalt zum Vorlesen",
|
||||||
@@ -816,7 +817,7 @@
|
|||||||
"No model IDs": "Keine Modell-IDs",
|
"No model IDs": "Keine Modell-IDs",
|
||||||
"No models found": "Keine Modelle gefunden",
|
"No models found": "Keine Modelle gefunden",
|
||||||
"No models selected": "Keine Modelle ausgewählt",
|
"No models selected": "Keine Modelle ausgewählt",
|
||||||
"No Notes": "",
|
"No Notes": "Keine Notizen",
|
||||||
"No results found": "Keine Ergebnisse gefunden",
|
"No results found": "Keine Ergebnisse gefunden",
|
||||||
"No search query generated": "Keine Suchanfrage generiert",
|
"No search query generated": "Keine Suchanfrage generiert",
|
||||||
"No source available": "Keine Quelle verfügbar",
|
"No source available": "Keine Quelle verfügbar",
|
||||||
@@ -937,7 +938,7 @@
|
|||||||
"Read": "Lesen",
|
"Read": "Lesen",
|
||||||
"Read Aloud": "Vorlesen",
|
"Read Aloud": "Vorlesen",
|
||||||
"Reasoning Effort": "Schlussfolgerungsaufwand",
|
"Reasoning Effort": "Schlussfolgerungsaufwand",
|
||||||
"Record": "",
|
"Record": "Aufzeichnen",
|
||||||
"Record voice": "Stimme aufnehmen",
|
"Record voice": "Stimme aufnehmen",
|
||||||
"Redirecting you to Open WebUI Community": "Sie werden zur OpenWebUI-Community weitergeleitet",
|
"Redirecting you to Open WebUI Community": "Sie werden zur OpenWebUI-Community weitergeleitet",
|
||||||
"Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "",
|
"Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Wiederholungsstrafe (Ollama)",
|
"Repeat Penalty (Ollama)": "Wiederholungsstrafe (Ollama)",
|
||||||
"Reply in Thread": "Im Thread antworten",
|
"Reply in Thread": "Im Thread antworten",
|
||||||
"Request Mode": "Anforderungsmodus",
|
"Request Mode": "Anforderungsmodus",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Reranking-Modell",
|
"Reranking Model": "Reranking-Modell",
|
||||||
"Reranking model disabled": "Reranking-Modell deaktiviert",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Reranking-Modell \"{{reranking_model}}\" fesgelegt",
|
|
||||||
"Reset": "Zurücksetzen",
|
"Reset": "Zurücksetzen",
|
||||||
"Reset All Models": "Alle Modelle zurücksetzen",
|
"Reset All Models": "Alle Modelle zurücksetzen",
|
||||||
"Reset Upload Directory": "Upload-Verzeichnis zurücksetzen",
|
"Reset Upload Directory": "Upload-Verzeichnis zurücksetzen",
|
||||||
@@ -1007,7 +1007,7 @@
|
|||||||
"Searched {{count}} sites": "{{count}} Websites durchsucht",
|
"Searched {{count}} sites": "{{count}} Websites durchsucht",
|
||||||
"Searching \"{{searchQuery}}\"": "Suche nach \"{{searchQuery}}\"",
|
"Searching \"{{searchQuery}}\"": "Suche nach \"{{searchQuery}}\"",
|
||||||
"Searching Knowledge for \"{{searchQuery}}\"": "Suche im Wissen nach \"{{searchQuery}}\"",
|
"Searching Knowledge for \"{{searchQuery}}\"": "Suche im Wissen nach \"{{searchQuery}}\"",
|
||||||
"Searching the web...": "",
|
"Searching the web...": "Durchsuche das Web...",
|
||||||
"Searxng Query URL": "Searxng-Abfrage-URL",
|
"Searxng Query URL": "Searxng-Abfrage-URL",
|
||||||
"See readme.md for instructions": "Anleitung in readme.md anzeigen",
|
"See readme.md for instructions": "Anleitung in readme.md anzeigen",
|
||||||
"See what's new": "Entdecken Sie die Neuigkeiten",
|
"See what's new": "Entdecken Sie die Neuigkeiten",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Anzeigen",
|
"Show": "Anzeigen",
|
||||||
"Show \"What's New\" modal on login": "\"Was gibt's Neues\"-Modal beim Anmelden anzeigen",
|
"Show \"What's New\" modal on login": "\"Was gibt's Neues\"-Modal beim Anmelden anzeigen",
|
||||||
"Show Admin Details in Account Pending Overlay": "Admin-Details im Account-Pending-Overlay anzeigen",
|
"Show Admin Details in Account Pending Overlay": "Admin-Details im Account-Pending-Overlay anzeigen",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "Modell anzeigen",
|
"Show Model": "Modell anzeigen",
|
||||||
"Show shortcuts": "Verknüpfungen anzeigen",
|
"Show shortcuts": "Verknüpfungen anzeigen",
|
||||||
"Show your support!": "Zeigen Sie Ihre Unterstützung!",
|
"Show your support!": "Zeigen Sie Ihre Unterstützung!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Chat-Antwort streamen",
|
"Stream Chat Response": "Chat-Antwort streamen",
|
||||||
"STT Model": "STT-Modell",
|
"STT Model": "STT-Modell",
|
||||||
"STT Settings": "STT-Einstellungen",
|
"STT Settings": "STT-Einstellungen",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Untertitel (z. B. über das Römische Reich)",
|
"Subtitle (e.g. about the Roman Empire)": "Untertitel (z. B. über das Römische Reich)",
|
||||||
"Success": "Erfolg",
|
"Success": "Erfolg",
|
||||||
"Successfully updated.": "Erfolgreich aktualisiert.",
|
"Successfully updated.": "Erfolgreich aktualisiert.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "Diese Unterhaltung erscheint nicht in deinem Chat-Verlauf. Alle Nachrichten sind privat und werden nicht gespeichert.",
|
"This chat won’t appear in history and your messages will not be saved.": "Diese Unterhaltung erscheint nicht in deinem Chat-Verlauf. Alle Nachrichten sind privat und werden nicht gespeichert.",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dies stellt sicher, dass Ihre wertvollen Chats sicher in Ihrer Backend-Datenbank gespeichert werden. Vielen Dank!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dies stellt sicher, dass Ihre wertvollen Chats sicher in Ihrer Backend-Datenbank gespeichert werden. Vielen Dank!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Dies ist eine experimentelle Funktion, sie funktioniert möglicherweise nicht wie erwartet und kann jederzeit geändert werden.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Dies ist eine experimentelle Funktion, sie funktioniert möglicherweise nicht wie erwartet und kann jederzeit geändert werden.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Diese Option löscht alle vorhandenen Dateien in der Sammlung und ersetzt sie durch neu hochgeladene Dateien.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Diese Option löscht alle vorhandenen Dateien in der Sammlung und ersetzt sie durch neu hochgeladene Dateien.",
|
||||||
@@ -1210,7 +1214,7 @@
|
|||||||
"Unpin": "Lösen",
|
"Unpin": "Lösen",
|
||||||
"Unravel secrets": "Geheimnisse lüften",
|
"Unravel secrets": "Geheimnisse lüften",
|
||||||
"Untagged": "Ungetaggt",
|
"Untagged": "Ungetaggt",
|
||||||
"Untitled": "",
|
"Untitled": "Unbenannt",
|
||||||
"Update": "Aktualisieren",
|
"Update": "Aktualisieren",
|
||||||
"Update and Copy Link": "Aktualisieren und Link kopieren",
|
"Update and Copy Link": "Aktualisieren und Link kopieren",
|
||||||
"Update for the latest features and improvements.": "Aktualisieren Sie für die neuesten Funktionen und Verbesserungen.",
|
"Update for the latest features and improvements.": "Aktualisieren Sie für die neuesten Funktionen und Verbesserungen.",
|
||||||
@@ -1252,7 +1256,7 @@
|
|||||||
"variable": "Variable",
|
"variable": "Variable",
|
||||||
"variable to have them replaced with clipboard content.": "Variable, um den Inhalt der Zwischenablage beim Nutzen des Prompts zu ersetzen.",
|
"variable to have them replaced with clipboard content.": "Variable, um den Inhalt der Zwischenablage beim Nutzen des Prompts zu ersetzen.",
|
||||||
"Verify Connection": "Verbindung verifizieren",
|
"Verify Connection": "Verbindung verifizieren",
|
||||||
"Verify SSL Certificate": "",
|
"Verify SSL Certificate": "SSL Zertifikat prüfen",
|
||||||
"Version": "Version",
|
"Version": "Version",
|
||||||
"Version {{selectedVersion}} of {{totalVersions}}": "Version {{selectedVersion}} von {{totalVersions}}",
|
"Version {{selectedVersion}} of {{totalVersions}}": "Version {{selectedVersion}} von {{totalVersions}}",
|
||||||
"View Replies": "Antworten anzeigen",
|
"View Replies": "Antworten anzeigen",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "(such e.g. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(such e.g. `sh webui.sh --api`)",
|
||||||
"(latest)": "(much latest)",
|
"(latest)": "(much latest)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "",
|
"{{ models }}": "",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "",
|
"Bad Response": "",
|
||||||
"Banners": "",
|
"Banners": "",
|
||||||
"Base Model (From)": "",
|
"Base Model (From)": "",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "",
|
"before": "",
|
||||||
"Being lazy": "",
|
"Being lazy": "",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "",
|
"Edit": "",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Enable New Bark Ups",
|
"Enable New Sign Ups": "Enable New Bark Ups",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Request Bark",
|
"Request Mode": "Request Bark",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "",
|
"Reranking Model": "",
|
||||||
"Reranking model disabled": "",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Show much show",
|
"Show": "Show much show",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Show shortcuts much shortcut",
|
"Show shortcuts": "Show shortcuts much shortcut",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "STT Settings very settings",
|
"STT Settings": "STT Settings very settings",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "",
|
"Subtitle (e.g. about the Roman Empire)": "",
|
||||||
"Success": "Success very success",
|
"Success": "Success very success",
|
||||||
"Successfully updated.": "Successfully updated. Very updated.",
|
"Successfully updated.": "Successfully updated. Very updated.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "This ensures that your valuable conversations are securely saved to your backend database. Thank you! Much secure!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "This ensures that your valuable conversations are securely saved to your backend database. Thank you! Much secure!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(π.χ. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(π.χ. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(π.χ. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(π.χ. `sh webui.sh --api`)",
|
||||||
"(latest)": "(τελευταίο)",
|
"(latest)": "(τελευταίο)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Κακή Απάντηση",
|
"Bad Response": "Κακή Απάντηση",
|
||||||
"Banners": "Προβολές",
|
"Banners": "Προβολές",
|
||||||
"Base Model (From)": "Βασικό Μοντέλο (Από)",
|
"Base Model (From)": "Βασικό Μοντέλο (Από)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Μέγεθος Παρτίδας (num_batch)",
|
"Batch Size (num_batch)": "Μέγεθος Παρτίδας (num_batch)",
|
||||||
"before": "πριν",
|
"before": "πριν",
|
||||||
"Being lazy": "Τρώλακας",
|
"Being lazy": "Τρώλακας",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "π.χ. Εργαλεία για την εκτέλεση διάφορων λειτουργιών",
|
"e.g. Tools for performing various operations": "π.χ. Εργαλεία για την εκτέλεση διάφορων λειτουργιών",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Επεξεργασία",
|
"Edit": "Επεξεργασία",
|
||||||
"Edit Arena Model": "Επεξεργασία Μοντέλου Arena",
|
"Edit Arena Model": "Επεξεργασία Μοντέλου Arena",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Ενεργοποίηση Νέων Εγγραφών",
|
"Enable New Sign Ups": "Ενεργοποίηση Νέων Εγγραφών",
|
||||||
"Enabled": "Ενεργοποιημένο",
|
"Enabled": "Ενεργοποιημένο",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Βεβαιωθείτε ότι το αρχείο CSV σας περιλαμβάνει 4 στήλες με αυτή τη σειρά: Όνομα, Email, Κωδικός, Ρόλος.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Βεβαιωθείτε ότι το αρχείο CSV σας περιλαμβάνει 4 στήλες με αυτή τη σειρά: Όνομα, Email, Κωδικός, Ρόλος.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Λειτουργία Αιτήματος",
|
"Request Mode": "Λειτουργία Αιτήματος",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Μοντέλο Επαναταξινόμησης",
|
"Reranking Model": "Μοντέλο Επαναταξινόμησης",
|
||||||
"Reranking model disabled": "Το μοντέλο επαναταξινόμησης απενεργοποιήθηκε",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Το μοντέλο επαναταξινόμησης ορίστηκε σε \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Επαναφορά",
|
"Reset": "Επαναφορά",
|
||||||
"Reset All Models": "Επαναφορά Όλων των Μοντέλων",
|
"Reset All Models": "Επαναφορά Όλων των Μοντέλων",
|
||||||
"Reset Upload Directory": "Επαναφορά Καταλόγου Ανεβάσματος",
|
"Reset Upload Directory": "Επαναφορά Καταλόγου Ανεβάσματος",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Εμφάνιση",
|
"Show": "Εμφάνιση",
|
||||||
"Show \"What's New\" modal on login": "Εμφάνιση του παράθυρου \"Τι νέο υπάρχει\" κατά την είσοδο",
|
"Show \"What's New\" modal on login": "Εμφάνιση του παράθυρου \"Τι νέο υπάρχει\" κατά την είσοδο",
|
||||||
"Show Admin Details in Account Pending Overlay": "Εμφάνιση Λεπτομερειών Διαχειριστή στο Υπέρθεση Εκκρεμής Λογαριασμού",
|
"Show Admin Details in Account Pending Overlay": "Εμφάνιση Λεπτομερειών Διαχειριστή στο Υπέρθεση Εκκρεμής Λογαριασμού",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Εμφάνιση συντομεύσεων",
|
"Show shortcuts": "Εμφάνιση συντομεύσεων",
|
||||||
"Show your support!": "Δείξτε την υποστήριξή σας!",
|
"Show your support!": "Δείξτε την υποστήριξή σας!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Συνομιλία Ροής Απάντησης",
|
"Stream Chat Response": "Συνομιλία Ροής Απάντησης",
|
||||||
"STT Model": "Μοντέλο STT",
|
"STT Model": "Μοντέλο STT",
|
||||||
"STT Settings": "Ρυθμίσεις STT",
|
"STT Settings": "Ρυθμίσεις STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Υπότιτλος (π.χ. για την Ρωμαϊκή Αυτοκρατορία)",
|
"Subtitle (e.g. about the Roman Empire)": "Υπότιτλος (π.χ. για την Ρωμαϊκή Αυτοκρατορία)",
|
||||||
"Success": "Επιτυχία",
|
"Success": "Επιτυχία",
|
||||||
"Successfully updated.": "Επιτυχώς ενημερώθηκε.",
|
"Successfully updated.": "Επιτυχώς ενημερώθηκε.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Αυτό διασφαλίζει ότι οι πολύτιμες συνομιλίες σας αποθηκεύονται με ασφάλεια στη βάση δεδομένων backend σας. Ευχαριστούμε!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Αυτό διασφαλίζει ότι οι πολύτιμες συνομιλίες σας αποθηκεύονται με ασφάλεια στη βάση δεδομένων backend σας. Ευχαριστούμε!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Αυτή είναι μια πειραματική λειτουργία, μπορεί να μην λειτουργεί όπως αναμένεται και υπόκειται σε αλλαγές οποιαδήποτε στιγμή.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Αυτή είναι μια πειραματική λειτουργία, μπορεί να μην λειτουργεί όπως αναμένεται και υπόκειται σε αλλαγές οποιαδήποτε στιγμή.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Αυτή η επιλογή θα διαγράψει όλα τα υπάρχοντα αρχεία στη συλλογή και θα τα αντικαταστήσει με νέα ανεβασμένα αρχεία.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Αυτή η επιλογή θα διαγράψει όλα τα υπάρχοντα αρχεία στη συλλογή και θα τα αντικαταστήσει με νέα ανεβασμένα αρχεία.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "",
|
"(e.g. `sh webui.sh --api`)": "",
|
||||||
"(latest)": "",
|
"(latest)": "",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "",
|
"{{ models }}": "",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "",
|
"Bad Response": "",
|
||||||
"Banners": "",
|
"Banners": "",
|
||||||
"Base Model (From)": "",
|
"Base Model (From)": "",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "",
|
"before": "",
|
||||||
"Being lazy": "",
|
"Being lazy": "",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "",
|
"Edit": "",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "",
|
"Enable New Sign Ups": "",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "",
|
"Request Mode": "",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "",
|
"Reranking Model": "",
|
||||||
"Reranking model disabled": "",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "",
|
"Show": "",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "",
|
"Show shortcuts": "",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "",
|
"STT Settings": "",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "",
|
"Subtitle (e.g. about the Roman Empire)": "",
|
||||||
"Success": "",
|
"Success": "",
|
||||||
"Successfully updated.": "",
|
"Successfully updated.": "",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "",
|
"(e.g. `sh webui.sh --api`)": "",
|
||||||
"(latest)": "",
|
"(latest)": "",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "",
|
"{{ models }}": "",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "",
|
"Bad Response": "",
|
||||||
"Banners": "",
|
"Banners": "",
|
||||||
"Base Model (From)": "",
|
"Base Model (From)": "",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "",
|
"before": "",
|
||||||
"Being lazy": "",
|
"Being lazy": "",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "",
|
"Edit": "",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "",
|
"Enable New Sign Ups": "",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "",
|
"Request Mode": "",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "",
|
"Reranking Model": "",
|
||||||
"Reranking model disabled": "",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "",
|
"Show": "",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "",
|
"Show shortcuts": "",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "",
|
"STT Settings": "",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "",
|
"Subtitle (e.g. about the Roman Empire)": "",
|
||||||
"Success": "",
|
"Success": "",
|
||||||
"Successfully updated.": "",
|
"Successfully updated.": "",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(p.ej. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(p.ej. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(p.ej. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(p.ej. `sh webui.sh --api`)",
|
||||||
"(latest)": "(último)",
|
"(latest)": "(último)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "(Ollama)",
|
"(Ollama)": "(Ollama)",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Mala Respuesta",
|
"Bad Response": "Mala Respuesta",
|
||||||
"Banners": "Banners",
|
"Banners": "Banners",
|
||||||
"Base Model (From)": "Modelo Base (desde)",
|
"Base Model (From)": "Modelo Base (desde)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Tamaño de Lote (num_batch)",
|
"Batch Size (num_batch)": "Tamaño de Lote (num_batch)",
|
||||||
"before": "antes",
|
"before": "antes",
|
||||||
"Being lazy": "Ser perezoso",
|
"Being lazy": "Ser perezoso",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "p.ej. Herramientas para realizar varias operaciones",
|
"e.g. Tools for performing various operations": "p.ej. Herramientas para realizar varias operaciones",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "p. ej., en-US,ja-JP (dejar en blanco para detectar automáticamente)",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "p. ej., en-US,ja-JP (dejar en blanco para detectar automáticamente)",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Editar",
|
"Edit": "Editar",
|
||||||
"Edit Arena Model": "Editar Modelo en Arena",
|
"Edit Arena Model": "Editar Modelo en Arena",
|
||||||
"Edit Channel": "Editar Canal",
|
"Edit Channel": "Editar Canal",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "Algoritmo de decodificación de texto neuronal que controla activamente el proceso generativo para mantener la perplejidad del texto generado en un valor deseado. Previene las trampas de aburrimiento (por excesivas repeticiones) y de incoherencia (por generación de excesivo texto).",
|
"Enable Mirostat sampling for controlling perplexity.": "Algoritmo de decodificación de texto neuronal que controla activamente el proceso generativo para mantener la perplejidad del texto generado en un valor deseado. Previene las trampas de aburrimiento (por excesivas repeticiones) y de incoherencia (por generación de excesivo texto).",
|
||||||
"Enable New Sign Ups": "Habilitar Registros de Nuevos Usuarios",
|
"Enable New Sign Ups": "Habilitar Registros de Nuevos Usuarios",
|
||||||
"Enabled": "Habilitado",
|
"Enabled": "Habilitado",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "Forzar el uso de Chat Temporal",
|
"Enforce Temporary Chat": "Forzar el uso de Chat Temporal",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Asegúrese de que su archivo CSV incluya 4 columnas en este orden: Nombre, Correo Electrónico, Contraseña, Rol.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Asegúrese de que su archivo CSV incluya 4 columnas en este orden: Nombre, Correo Electrónico, Contraseña, Rol.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Penalización Repetición (Ollama)",
|
"Repeat Penalty (Ollama)": "Penalización Repetición (Ollama)",
|
||||||
"Reply in Thread": "Responder en Hilo",
|
"Reply in Thread": "Responder en Hilo",
|
||||||
"Request Mode": "Modo de Petición",
|
"Request Mode": "Modo de Petición",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Modelo de Reclasificación",
|
"Reranking Model": "Modelo de Reclasificación",
|
||||||
"Reranking model disabled": "Modelo de reclasificacioń deshabilitado",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Modelo de reclasificación establecido a \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Reiniciar",
|
"Reset": "Reiniciar",
|
||||||
"Reset All Models": "Reiniciar Todos los Modelos",
|
"Reset All Models": "Reiniciar Todos los Modelos",
|
||||||
"Reset Upload Directory": "Reiniciar Directorio de Subidas",
|
"Reset Upload Directory": "Reiniciar Directorio de Subidas",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Mostrar",
|
"Show": "Mostrar",
|
||||||
"Show \"What's New\" modal on login": "Mostrar modal \"Qué hay de Nuevo\" al iniciar sesión",
|
"Show \"What's New\" modal on login": "Mostrar modal \"Qué hay de Nuevo\" al iniciar sesión",
|
||||||
"Show Admin Details in Account Pending Overlay": "Mostrar Detalles Admin en la sobrecapa de 'Cuenta Pendiente'",
|
"Show Admin Details in Account Pending Overlay": "Mostrar Detalles Admin en la sobrecapa de 'Cuenta Pendiente'",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "Mostrar Modelo",
|
"Show Model": "Mostrar Modelo",
|
||||||
"Show shortcuts": "Mostrar Atajos",
|
"Show shortcuts": "Mostrar Atajos",
|
||||||
"Show your support!": "¡Muestra tu apoyo!",
|
"Show your support!": "¡Muestra tu apoyo!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Transmisión Directa de la Respuesta del Chat",
|
"Stream Chat Response": "Transmisión Directa de la Respuesta del Chat",
|
||||||
"STT Model": "Modelo STT",
|
"STT Model": "Modelo STT",
|
||||||
"STT Settings": "Ajustes Voz a Texto (STT)",
|
"STT Settings": "Ajustes Voz a Texto (STT)",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Subtítulo (p.ej. sobre el Imperio Romano)",
|
"Subtitle (e.g. about the Roman Empire)": "Subtítulo (p.ej. sobre el Imperio Romano)",
|
||||||
"Success": "Correcto",
|
"Success": "Correcto",
|
||||||
"Successfully updated.": "Actualizado correctamente.",
|
"Successfully updated.": "Actualizado correctamente.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "Este chat no aparecerá en el historial y los mensajes no se guardarán.",
|
"This chat won’t appear in history and your messages will not be saved.": "Este chat no aparecerá en el historial y los mensajes no se guardarán.",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Esto garantiza que sus valiosas conversaciones se guardan de forma segura en tu base de datos del servidor trasero (backend). ¡Gracias!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Esto garantiza que sus valiosas conversaciones se guardan de forma segura en tu base de datos del servidor trasero (backend). ¡Gracias!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Esta es una característica experimental, por lo que puede no funcionar como se esperaba y está sujeta a cambios en cualquier momento.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Esta es una característica experimental, por lo que puede no funcionar como se esperaba y está sujeta a cambios en cualquier momento.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Esta opción controla cuántos tokens se conservan cuando se actualiza el contexto. Por ejemplo, si se establece en 2, se conservarán los primeros 2 tokens del contexto de la conversación. Conservar el contexto puede ayudar a mantener la continuidad de una conversación, pero puede reducir la habilidad para responder a nuevos temas.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Esta opción controla cuántos tokens se conservan cuando se actualiza el contexto. Por ejemplo, si se establece en 2, se conservarán los primeros 2 tokens del contexto de la conversación. Conservar el contexto puede ayudar a mantener la continuidad de una conversación, pero puede reducir la habilidad para responder a nuevos temas.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Esta opción establece el número máximo de tokens que el modelo puede generar en sus respuestas. Aumentar este límite permite al modelo proporcionar respuestas más largas, pero también puede aumentar la probabilidad de que se genere contenido inútil o irrelevante.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Esta opción establece el número máximo de tokens que el modelo puede generar en sus respuestas. Aumentar este límite permite al modelo proporcionar respuestas más largas, pero también puede aumentar la probabilidad de que se genere contenido inútil o irrelevante.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Esta opción eliminará todos los archivos existentes en la colección y los reemplazará con los nuevos archivos subidos.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Esta opción eliminará todos los archivos existentes en la colección y los reemplazará con los nuevos archivos subidos.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(nt `sh webui.sh --api --api-auth kasutajanimi_parool`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(nt `sh webui.sh --api --api-auth kasutajanimi_parool`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(nt `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(nt `sh webui.sh --api`)",
|
||||||
"(latest)": "(uusim)",
|
"(latest)": "(uusim)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ mudelid }}",
|
"{{ models }}": "{{ mudelid }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Halb vastus",
|
"Bad Response": "Halb vastus",
|
||||||
"Banners": "Bännerid",
|
"Banners": "Bännerid",
|
||||||
"Base Model (From)": "Baas mudel (Allikas)",
|
"Base Model (From)": "Baas mudel (Allikas)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Partii suurus (num_batch)",
|
"Batch Size (num_batch)": "Partii suurus (num_batch)",
|
||||||
"before": "enne",
|
"before": "enne",
|
||||||
"Being lazy": "Laisklemine",
|
"Being lazy": "Laisklemine",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "nt tööriistad mitmesuguste operatsioonide teostamiseks",
|
"e.g. Tools for performing various operations": "nt tööriistad mitmesuguste operatsioonide teostamiseks",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Muuda",
|
"Edit": "Muuda",
|
||||||
"Edit Arena Model": "Muuda Areena mudelit",
|
"Edit Arena Model": "Muuda Areena mudelit",
|
||||||
"Edit Channel": "Muuda kanalit",
|
"Edit Channel": "Muuda kanalit",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "Luba Mirostat'i valim perplekssuse juhtimiseks.",
|
"Enable Mirostat sampling for controlling perplexity.": "Luba Mirostat'i valim perplekssuse juhtimiseks.",
|
||||||
"Enable New Sign Ups": "Luba uued registreerimised",
|
"Enable New Sign Ups": "Luba uued registreerimised",
|
||||||
"Enabled": "Lubatud",
|
"Enabled": "Lubatud",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Veenduge, et teie CSV-fail sisaldab 4 veergu selles järjekorras: Nimi, E-post, Parool, Roll.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Veenduge, et teie CSV-fail sisaldab 4 veergu selles järjekorras: Nimi, E-post, Parool, Roll.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Korduse karistus (Ollama)",
|
"Repeat Penalty (Ollama)": "Korduse karistus (Ollama)",
|
||||||
"Reply in Thread": "Vasta lõimes",
|
"Reply in Thread": "Vasta lõimes",
|
||||||
"Request Mode": "Päringu režiim",
|
"Request Mode": "Päringu režiim",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Ümberjärjestamise mudel",
|
"Reranking Model": "Ümberjärjestamise mudel",
|
||||||
"Reranking model disabled": "Ümberjärjestamise mudel keelatud",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Ümberjärjestamise mudel määratud kui \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Lähtesta",
|
"Reset": "Lähtesta",
|
||||||
"Reset All Models": "Lähtesta kõik mudelid",
|
"Reset All Models": "Lähtesta kõik mudelid",
|
||||||
"Reset Upload Directory": "Lähtesta üleslaadimiste kataloog",
|
"Reset Upload Directory": "Lähtesta üleslaadimiste kataloog",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Näita",
|
"Show": "Näita",
|
||||||
"Show \"What's New\" modal on login": "Näita \"Mis on uut\" modaalakent sisselogimisel",
|
"Show \"What's New\" modal on login": "Näita \"Mis on uut\" modaalakent sisselogimisel",
|
||||||
"Show Admin Details in Account Pending Overlay": "Näita administraatori üksikasju konto ootel kattekihil",
|
"Show Admin Details in Account Pending Overlay": "Näita administraatori üksikasju konto ootel kattekihil",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Näita otseteid",
|
"Show shortcuts": "Näita otseteid",
|
||||||
"Show your support!": "Näita oma toetust!",
|
"Show your support!": "Näita oma toetust!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Voogedasta vestluse vastust",
|
"Stream Chat Response": "Voogedasta vestluse vastust",
|
||||||
"STT Model": "STT mudel",
|
"STT Model": "STT mudel",
|
||||||
"STT Settings": "STT seaded",
|
"STT Settings": "STT seaded",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Alampealkiri (nt Rooma impeeriumi kohta)",
|
"Subtitle (e.g. about the Roman Empire)": "Alampealkiri (nt Rooma impeeriumi kohta)",
|
||||||
"Success": "Õnnestus",
|
"Success": "Õnnestus",
|
||||||
"Successfully updated.": "Edukalt uuendatud.",
|
"Successfully updated.": "Edukalt uuendatud.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "See tagab, et teie väärtuslikud vestlused salvestatakse turvaliselt teie tagarakenduse andmebaasi. Täname!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "See tagab, et teie väärtuslikud vestlused salvestatakse turvaliselt teie tagarakenduse andmebaasi. Täname!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "See on katsetuslik funktsioon, see ei pruugi toimida ootuspäraselt ja võib igal ajal muutuda.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "See on katsetuslik funktsioon, see ei pruugi toimida ootuspäraselt ja võib igal ajal muutuda.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "See valik kontrollib, mitu tokenit säilitatakse konteksti värskendamisel. Näiteks kui see on määratud 2-le, säilitatakse vestluse konteksti viimased 2 tokenit. Konteksti säilitamine võib aidata säilitada vestluse järjepidevust, kuid võib vähendada võimet reageerida uutele teemadele.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "See valik kontrollib, mitu tokenit säilitatakse konteksti värskendamisel. Näiteks kui see on määratud 2-le, säilitatakse vestluse konteksti viimased 2 tokenit. Konteksti säilitamine võib aidata säilitada vestluse järjepidevust, kuid võib vähendada võimet reageerida uutele teemadele.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "See valik määrab maksimaalse tokenite arvu, mida mudel saab oma vastuses genereerida. Selle piirmäära suurendamine võimaldab mudelil anda pikemaid vastuseid, kuid võib suurendada ka ebavajaliku või ebaolulise sisu genereerimise tõenäosust.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "See valik määrab maksimaalse tokenite arvu, mida mudel saab oma vastuses genereerida. Selle piirmäära suurendamine võimaldab mudelil anda pikemaid vastuseid, kuid võib suurendada ka ebavajaliku või ebaolulise sisu genereerimise tõenäosust.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "See valik kustutab kõik olemasolevad failid kogust ja asendab need äsja üleslaaditud failidega.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "See valik kustutab kõik olemasolevad failid kogust ja asendab need äsja üleslaaditud failidega.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(adib. `sh webui.sh --api --api-auth erabiltzaile_pasahitza`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(adib. `sh webui.sh --api --api-auth erabiltzaile_pasahitza`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(adib. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(adib. `sh webui.sh --api`)",
|
||||||
"(latest)": "(azkena)",
|
"(latest)": "(azkena)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Erantzun Txarra",
|
"Bad Response": "Erantzun Txarra",
|
||||||
"Banners": "Bannerrak",
|
"Banners": "Bannerrak",
|
||||||
"Base Model (From)": "Oinarrizko Eredua (Nondik)",
|
"Base Model (From)": "Oinarrizko Eredua (Nondik)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Batch Tamaina (num_batch)",
|
"Batch Size (num_batch)": "Batch Tamaina (num_batch)",
|
||||||
"before": "aurretik",
|
"before": "aurretik",
|
||||||
"Being lazy": "Alferra izatea",
|
"Being lazy": "Alferra izatea",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "adib. Hainbat eragiketa egiteko tresnak",
|
"e.g. Tools for performing various operations": "adib. Hainbat eragiketa egiteko tresnak",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Editatu",
|
"Edit": "Editatu",
|
||||||
"Edit Arena Model": "Editatu Arena Eredua",
|
"Edit Arena Model": "Editatu Arena Eredua",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Gaitu Izena Emate Berriak",
|
"Enable New Sign Ups": "Gaitu Izena Emate Berriak",
|
||||||
"Enabled": "Gaituta",
|
"Enabled": "Gaituta",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Ziurtatu zure CSV fitxategiak 4 zutabe dituela ordena honetan: Izena, Posta elektronikoa, Pasahitza, Rola.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Ziurtatu zure CSV fitxategiak 4 zutabe dituela ordena honetan: Izena, Posta elektronikoa, Pasahitza, Rola.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Eskaera modua",
|
"Request Mode": "Eskaera modua",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Berrantolatze modeloa",
|
"Reranking Model": "Berrantolatze modeloa",
|
||||||
"Reranking model disabled": "Berrantolatze modeloa desgaituta",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Berrantolatze modeloa \"{{reranking_model}}\"-era ezarrita",
|
|
||||||
"Reset": "Berrezarri",
|
"Reset": "Berrezarri",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Berrezarri karga direktorioa",
|
"Reset Upload Directory": "Berrezarri karga direktorioa",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Erakutsi",
|
"Show": "Erakutsi",
|
||||||
"Show \"What's New\" modal on login": "Erakutsi \"Berritasunak\" modala saioa hastean",
|
"Show \"What's New\" modal on login": "Erakutsi \"Berritasunak\" modala saioa hastean",
|
||||||
"Show Admin Details in Account Pending Overlay": "Erakutsi administratzaile xehetasunak kontu zain geruzan",
|
"Show Admin Details in Account Pending Overlay": "Erakutsi administratzaile xehetasunak kontu zain geruzan",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Erakutsi lasterbideak",
|
"Show shortcuts": "Erakutsi lasterbideak",
|
||||||
"Show your support!": "Erakutsi zure babesa!",
|
"Show your support!": "Erakutsi zure babesa!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Transmititu txat erantzuna",
|
"Stream Chat Response": "Transmititu txat erantzuna",
|
||||||
"STT Model": "STT modeloa",
|
"STT Model": "STT modeloa",
|
||||||
"STT Settings": "STT ezarpenak",
|
"STT Settings": "STT ezarpenak",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Azpititulua (adib. Erromatar Inperioari buruz)",
|
"Subtitle (e.g. about the Roman Empire)": "Azpititulua (adib. Erromatar Inperioari buruz)",
|
||||||
"Success": "Arrakasta",
|
"Success": "Arrakasta",
|
||||||
"Successfully updated.": "Ongi eguneratu da.",
|
"Successfully updated.": "Ongi eguneratu da.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Honek zure elkarrizketa baliotsuak modu seguruan zure backend datu-basean gordeko direla ziurtatzen du. Eskerrik asko!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Honek zure elkarrizketa baliotsuak modu seguruan zure backend datu-basean gordeko direla ziurtatzen du. Eskerrik asko!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Hau funtzionalitate esperimental bat da, baliteke espero bezala ez funtzionatzea eta edozein unetan aldaketak izatea.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Hau funtzionalitate esperimental bat da, baliteke espero bezala ez funtzionatzea eta edozein unetan aldaketak izatea.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Aukera honek bilduman dauden fitxategi guztiak ezabatuko ditu eta berriki kargatutako fitxategiekin ordezkatuko ditu.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Aukera honek bilduman dauden fitxategi guztiak ezabatuko ditu eta berriki kargatutako fitxategiekin ordezkatuko ditu.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(مثال: `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(مثال: `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)",
|
||||||
"(latest)": "(آخرین)",
|
"(latest)": "(آخرین)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "(ollama)",
|
"(Ollama)": "(ollama)",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "{{COUNT}} ابزار موجود",
|
"{{COUNT}} Available Tools": "{{COUNT}} ابزار موجود",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "پاسخ خوب نیست",
|
"Bad Response": "پاسخ خوب نیست",
|
||||||
"Banners": "بنر",
|
"Banners": "بنر",
|
||||||
"Base Model (From)": "مدل پایه (از)",
|
"Base Model (From)": "مدل پایه (از)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "اندازه دسته (num_batch)",
|
"Batch Size (num_batch)": "اندازه دسته (num_batch)",
|
||||||
"before": "قبل",
|
"before": "قبل",
|
||||||
"Being lazy": "حالت سازنده",
|
"Being lazy": "حالت سازنده",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "مثلا ابزارهایی برای انجام عملیات مختلف",
|
"e.g. Tools for performing various operations": "مثلا ابزارهایی برای انجام عملیات مختلف",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "مثلا en-US,ja-JP (برای تشخیص خودکار خالی بگذارید)",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "مثلا en-US,ja-JP (برای تشخیص خودکار خالی بگذارید)",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "ویرایش",
|
"Edit": "ویرایش",
|
||||||
"Edit Arena Model": "ویرایش مدل آرنا",
|
"Edit Arena Model": "ویرایش مدل آرنا",
|
||||||
"Edit Channel": "ویرایش کانال",
|
"Edit Channel": "ویرایش کانال",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "فعال\u200cسازی نمونه\u200cبرداری میروستات برای کنترل سردرگمی",
|
"Enable Mirostat sampling for controlling perplexity.": "فعال\u200cسازی نمونه\u200cبرداری میروستات برای کنترل سردرگمی",
|
||||||
"Enable New Sign Ups": "فعال کردن ثبت نام\u200cهای جدید",
|
"Enable New Sign Ups": "فعال کردن ثبت نام\u200cهای جدید",
|
||||||
"Enabled": "فعال شده",
|
"Enabled": "فعال شده",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "اجبار چت موقت",
|
"Enforce Temporary Chat": "اجبار چت موقت",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "اطمینان حاصل کنید که فایل CSV شما شامل چهار ستون در این ترتیب است: نام، ایمیل، رمز عبور، نقش.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "اطمینان حاصل کنید که فایل CSV شما شامل چهار ستون در این ترتیب است: نام، ایمیل، رمز عبور، نقش.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "جریمه تکرار (ollama)",
|
"Repeat Penalty (Ollama)": "جریمه تکرار (ollama)",
|
||||||
"Reply in Thread": "پاسخ در رشته",
|
"Reply in Thread": "پاسخ در رشته",
|
||||||
"Request Mode": "حالت درخواست",
|
"Request Mode": "حالت درخواست",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "مدل ری\u200cشناسی مجدد غیرفعال است",
|
"Reranking Model": "مدل ری\u200cشناسی مجدد غیرفعال است",
|
||||||
"Reranking model disabled": "مدل ری\u200cشناسی مجدد غیرفعال است",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "مدل ری\u200cشناسی مجدد به \"{{reranking_model}}\" تنظیم شده است",
|
|
||||||
"Reset": "بازنشانی",
|
"Reset": "بازنشانی",
|
||||||
"Reset All Models": "بازنشانی همه مدل\u200cها",
|
"Reset All Models": "بازنشانی همه مدل\u200cها",
|
||||||
"Reset Upload Directory": "بازنشانی پوشه آپلود",
|
"Reset Upload Directory": "بازنشانی پوشه آپلود",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "نمایش",
|
"Show": "نمایش",
|
||||||
"Show \"What's New\" modal on login": "نمایش مودال \"موارد جدید\" هنگام ورود",
|
"Show \"What's New\" modal on login": "نمایش مودال \"موارد جدید\" هنگام ورود",
|
||||||
"Show Admin Details in Account Pending Overlay": "نمایش جزئیات مدیر در پوشش حساب در انتظار",
|
"Show Admin Details in Account Pending Overlay": "نمایش جزئیات مدیر در پوشش حساب در انتظار",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "نمایش مدل",
|
"Show Model": "نمایش مدل",
|
||||||
"Show shortcuts": "نمایش میانبرها",
|
"Show shortcuts": "نمایش میانبرها",
|
||||||
"Show your support!": "حمایت خود را نشان دهید!",
|
"Show your support!": "حمایت خود را نشان دهید!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "پاسخ چت جریانی",
|
"Stream Chat Response": "پاسخ چت جریانی",
|
||||||
"STT Model": "مدل تبدیل صدا به متن",
|
"STT Model": "مدل تبدیل صدا به متن",
|
||||||
"STT Settings": "تنظیمات تبدیل صدا به متن",
|
"STT Settings": "تنظیمات تبدیل صدا به متن",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "زیرنویس (برای مثال: درباره رمانی)",
|
"Subtitle (e.g. about the Roman Empire)": "زیرنویس (برای مثال: درباره رمانی)",
|
||||||
"Success": "موفقیت",
|
"Success": "موفقیت",
|
||||||
"Successfully updated.": "با موفقیت به\u200cروز شد",
|
"Successfully updated.": "با موفقیت به\u200cروز شد",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "این اطمینان می\u200cدهد که مکالمات ارزشمند شما به طور امن در پایگاه داده پشتیبان ذخیره می\u200cشوند. متشکریم!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "این اطمینان می\u200cدهد که مکالمات ارزشمند شما به طور امن در پایگاه داده پشتیبان ذخیره می\u200cشوند. متشکریم!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "این یک ویژگی آزمایشی است، ممکن است طبق انتظار کار نکند و در هر زمان ممکن است تغییر کند.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "این یک ویژگی آزمایشی است، ممکن است طبق انتظار کار نکند و در هر زمان ممکن است تغییر کند.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "این گزینه کنترل می\u200cکند که هنگام تازه\u200cسازی متن، چند توکن حفظ شوند. برای مثال، اگر روی 2 تنظیم شود، 2 توکن آخر متن مکالمه حفظ خواهند شد. حفظ متن می\u200cتواند به حفظ پیوستگی مکالمه کمک کند، اما ممکن است توانایی پاسخ به موضوعات جدید را کاهش دهد.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "این گزینه کنترل می\u200cکند که هنگام تازه\u200cسازی متن، چند توکن حفظ شوند. برای مثال، اگر روی 2 تنظیم شود، 2 توکن آخر متن مکالمه حفظ خواهند شد. حفظ متن می\u200cتواند به حفظ پیوستگی مکالمه کمک کند، اما ممکن است توانایی پاسخ به موضوعات جدید را کاهش دهد.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "این گزینه حداکثر تعداد توکن\u200cهایی را که مدل می\u200cتواند در پاسخ خود تولید کند تنظیم می\u200cکند. افزایش این محدودیت به مدل اجازه می\u200cدهد پاسخ\u200cهای طولانی\u200cتری ارائه دهد، اما ممکن است احتمال تولید محتوای بی\u200cفایده یا نامربوط را نیز افزایش دهد.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "این گزینه حداکثر تعداد توکن\u200cهایی را که مدل می\u200cتواند در پاسخ خود تولید کند تنظیم می\u200cکند. افزایش این محدودیت به مدل اجازه می\u200cدهد پاسخ\u200cهای طولانی\u200cتری ارائه دهد، اما ممکن است احتمال تولید محتوای بی\u200cفایده یا نامربوط را نیز افزایش دهد.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "این گزینه تمام فایل\u200cهای موجود در مجموعه را حذف کرده و با فایل\u200cهای جدید آپلود شده جایگزین می\u200cکند.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "این گزینه تمام فایل\u200cهای موجود در مجموعه را حذف کرده و با فایل\u200cهای جدید آپلود شده جایگزین می\u200cکند.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(esim. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(esim. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(esim. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(esim. `sh webui.sh --api`)",
|
||||||
"(latest)": "(uusin)",
|
"(latest)": "(uusin)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "(Ollama)",
|
"(Ollama)": "(Ollama)",
|
||||||
"{{ models }}": "{{ mallit }}",
|
"{{ models }}": "{{ mallit }}",
|
||||||
"{{COUNT}} Available Tools": "{{COUNT}} työkalua saatavilla",
|
"{{COUNT}} Available Tools": "{{COUNT}} työkalua saatavilla",
|
||||||
@@ -63,8 +63,8 @@
|
|||||||
"Allow Chat Delete": "Salli keskustelujen poisto",
|
"Allow Chat Delete": "Salli keskustelujen poisto",
|
||||||
"Allow Chat Deletion": "Salli keskustelujen poisto",
|
"Allow Chat Deletion": "Salli keskustelujen poisto",
|
||||||
"Allow Chat Edit": "Salli keskustelujen muokkaus",
|
"Allow Chat Edit": "Salli keskustelujen muokkaus",
|
||||||
"Allow Chat Export": "",
|
"Allow Chat Export": "Salli keskustelujen vienti",
|
||||||
"Allow Chat Share": "",
|
"Allow Chat Share": "Salli keskustelujen jako",
|
||||||
"Allow File Upload": "Salli tiedostojen lataus",
|
"Allow File Upload": "Salli tiedostojen lataus",
|
||||||
"Allow Multiple Models in Chat": "Salli useampi malli keskustelussa",
|
"Allow Multiple Models in Chat": "Salli useampi malli keskustelussa",
|
||||||
"Allow non-local voices": "Salli ei-paikalliset äänet",
|
"Allow non-local voices": "Salli ei-paikalliset äänet",
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
"Always": "Aina",
|
"Always": "Aina",
|
||||||
"Always Collapse Code Blocks": "Pienennä aina koodilohkot",
|
"Always Collapse Code Blocks": "Pienennä aina koodilohkot",
|
||||||
"Always Expand Details": "Laajenna aina tiedot",
|
"Always Expand Details": "Laajenna aina tiedot",
|
||||||
"Always Play Notification Sound": "",
|
"Always Play Notification Sound": "Toista aina ilmoitusääni",
|
||||||
"Amazing": "Hämmästyttävä",
|
"Amazing": "Hämmästyttävä",
|
||||||
"an assistant": "avustaja",
|
"an assistant": "avustaja",
|
||||||
"Analyzed": "Analysoitu",
|
"Analyzed": "Analysoitu",
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
"Are you sure you want to delete this channel?": "Haluatko varmasti poistaa tämän kanavan?",
|
"Are you sure you want to delete this channel?": "Haluatko varmasti poistaa tämän kanavan?",
|
||||||
"Are you sure you want to delete this message?": "Haluatko varmasti poistaa tämän viestin?",
|
"Are you sure you want to delete this message?": "Haluatko varmasti poistaa tämän viestin?",
|
||||||
"Are you sure you want to unarchive all archived chats?": "Haluatko varmasti purkaa kaikkien arkistoitujen keskustelujen arkistoinnin?",
|
"Are you sure you want to unarchive all archived chats?": "Haluatko varmasti purkaa kaikkien arkistoitujen keskustelujen arkistoinnin?",
|
||||||
"Are you sure you want to update this user's role to **{{ROLE}}**?": "",
|
"Are you sure you want to update this user's role to **{{ROLE}}**?": "Haluatko varmasti päivittää tämän käyttäjän roolin **{{ROLE}}** tähän?",
|
||||||
"Are you sure?": "Oletko varma?",
|
"Are you sure?": "Oletko varma?",
|
||||||
"Arena Models": "Arena-mallit",
|
"Arena Models": "Arena-mallit",
|
||||||
"Artifacts": "Artefaktit",
|
"Artifacts": "Artefaktit",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Huono vastaus",
|
"Bad Response": "Huono vastaus",
|
||||||
"Banners": "Bannerit",
|
"Banners": "Bannerit",
|
||||||
"Base Model (From)": "Perusmalli (alkaen)",
|
"Base Model (From)": "Perusmalli (alkaen)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Erän koko (num_batch)",
|
"Batch Size (num_batch)": "Erän koko (num_batch)",
|
||||||
"before": "ennen",
|
"before": "ennen",
|
||||||
"Being lazy": "Oli laiska",
|
"Being lazy": "Oli laiska",
|
||||||
@@ -160,7 +159,7 @@
|
|||||||
"Cancel": "Peruuta",
|
"Cancel": "Peruuta",
|
||||||
"Capabilities": "Ominaisuuksia",
|
"Capabilities": "Ominaisuuksia",
|
||||||
"Capture": "Näyttökuva",
|
"Capture": "Näyttökuva",
|
||||||
"Capture Audio": "",
|
"Capture Audio": "Kaappaa ääntä",
|
||||||
"Certificate Path": "Varmennepolku",
|
"Certificate Path": "Varmennepolku",
|
||||||
"Change Password": "Vaihda salasana",
|
"Change Password": "Vaihda salasana",
|
||||||
"Channel Name": "Kanavan nimi",
|
"Channel Name": "Kanavan nimi",
|
||||||
@@ -270,8 +269,8 @@
|
|||||||
"Create Knowledge": "Luo tietoa",
|
"Create Knowledge": "Luo tietoa",
|
||||||
"Create new key": "Luo uusi avain",
|
"Create new key": "Luo uusi avain",
|
||||||
"Create new secret key": "Luo uusi salainen avain",
|
"Create new secret key": "Luo uusi salainen avain",
|
||||||
"Create Note": "",
|
"Create Note": "Luo muistiinpano",
|
||||||
"Create your first note by clicking on the plus button below.": "",
|
"Create your first note by clicking on the plus button below.": "Luo ensimmäinen muistiinpanosi painamalla alla olevaa plus painiketta.",
|
||||||
"Created at": "Luotu",
|
"Created at": "Luotu",
|
||||||
"Created At": "Luotu",
|
"Created At": "Luotu",
|
||||||
"Created by": "Luonut",
|
"Created by": "Luonut",
|
||||||
@@ -309,7 +308,7 @@
|
|||||||
"Delete function?": "Haluatko varmasti poistaa tämän toiminnon?",
|
"Delete function?": "Haluatko varmasti poistaa tämän toiminnon?",
|
||||||
"Delete Message": "Poista viesti",
|
"Delete Message": "Poista viesti",
|
||||||
"Delete message?": "Poista viesti?",
|
"Delete message?": "Poista viesti?",
|
||||||
"Delete note?": "",
|
"Delete note?": "Poista muistiinpano?",
|
||||||
"Delete prompt?": "Haluatko varmasti poistaa tämän kehotteen?",
|
"Delete prompt?": "Haluatko varmasti poistaa tämän kehotteen?",
|
||||||
"delete this link": "poista tämä linkki",
|
"delete this link": "poista tämä linkki",
|
||||||
"Delete tool?": "Haluatko varmasti poistaa tämän työkalun?",
|
"Delete tool?": "Haluatko varmasti poistaa tämän työkalun?",
|
||||||
@@ -365,7 +364,7 @@
|
|||||||
"Download Database": "Lataa tietokanta",
|
"Download Database": "Lataa tietokanta",
|
||||||
"Drag and drop a file to upload or select a file to view": "Raahaa ja pudota tiedosto ladattavaksi tai valitse tiedosto katseltavaksi",
|
"Drag and drop a file to upload or select a file to view": "Raahaa ja pudota tiedosto ladattavaksi tai valitse tiedosto katseltavaksi",
|
||||||
"Draw": "Piirros",
|
"Draw": "Piirros",
|
||||||
"Drop any files here to upload": "",
|
"Drop any files here to upload": "Pudota tähän ladattavat tiedostot",
|
||||||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "esim. '30s', '10m'. Kelpoiset aikayksiköt ovat 's', 'm', 'h'.",
|
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "esim. '30s', '10m'. Kelpoiset aikayksiköt ovat 's', 'm', 'h'.",
|
||||||
"e.g. \"json\" or a JSON schema": "esim. \"json\" tai JSON kaava",
|
"e.g. \"json\" or a JSON schema": "esim. \"json\" tai JSON kaava",
|
||||||
"e.g. 60": "esim. 60",
|
"e.g. 60": "esim. 60",
|
||||||
@@ -375,8 +374,9 @@
|
|||||||
"e.g. my_filter": "esim. oma_suodatin",
|
"e.g. my_filter": "esim. oma_suodatin",
|
||||||
"e.g. my_tools": "esim. omat_työkalut",
|
"e.g. my_tools": "esim. omat_työkalut",
|
||||||
"e.g. Tools for performing various operations": "esim. työkaluja erilaisten toimenpiteiden suorittamiseen",
|
"e.g. Tools for performing various operations": "esim. työkaluja erilaisten toimenpiteiden suorittamiseen",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "esim. 3, 4, 5 (jätä tyhjäksi, jos haluat oletusarvon)",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "esim. en-US,ja-JP (Tyhjäksi jättämällä, automaattinen tunnistus)",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "esim. en-US,ja-JP (Tyhjäksi jättämällä, automaattinen tunnistus)",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Muokkaa",
|
"Edit": "Muokkaa",
|
||||||
"Edit Arena Model": "Muokkaa Arena-mallia",
|
"Edit Arena Model": "Muokkaa Arena-mallia",
|
||||||
"Edit Channel": "Muokkaa kanavaa",
|
"Edit Channel": "Muokkaa kanavaa",
|
||||||
@@ -404,8 +404,9 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Salli uudet rekisteröitymiset",
|
"Enable New Sign Ups": "Salli uudet rekisteröitymiset",
|
||||||
"Enabled": "Käytössä",
|
"Enabled": "Käytössä",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "Pakota väliaikaiset keskustelut",
|
"Enforce Temporary Chat": "Pakota väliaikaiset keskustelut",
|
||||||
"Enhance": "",
|
"Enhance": "Paranna",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Varmista, että CSV-tiedostossasi on 4 saraketta tässä järjestyksessä: Nimi, Sähköposti, Salasana, Rooli.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Varmista, että CSV-tiedostossasi on 4 saraketta tässä järjestyksessä: Nimi, Sähköposti, Salasana, Rooli.",
|
||||||
"Enter {{role}} message here": "Kirjoita {{role}}-viesti tähän",
|
"Enter {{role}} message here": "Kirjoita {{role}}-viesti tähän",
|
||||||
"Enter a detail about yourself for your LLMs to recall": "Kirjoita yksityiskohta itsestäsi, jonka LLM-ohjelmat voivat muistaa",
|
"Enter a detail about yourself for your LLMs to recall": "Kirjoita yksityiskohta itsestäsi, jonka LLM-ohjelmat voivat muistaa",
|
||||||
@@ -422,8 +423,8 @@
|
|||||||
"Enter Chunk Size": "Syötä osien koko",
|
"Enter Chunk Size": "Syötä osien koko",
|
||||||
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Syötä pilkulla erottaen \"token:bias_value\" parit (esim. 5432:100, 413:-100)",
|
"Enter comma-separated \"token:bias_value\" pairs (example: 5432:100, 413:-100)": "Syötä pilkulla erottaen \"token:bias_value\" parit (esim. 5432:100, 413:-100)",
|
||||||
"Enter description": "Kirjoita kuvaus",
|
"Enter description": "Kirjoita kuvaus",
|
||||||
"Enter Docling OCR Engine": "",
|
"Enter Docling OCR Engine": "Kirjoita Docling OCR moottori",
|
||||||
"Enter Docling OCR Language(s)": "",
|
"Enter Docling OCR Language(s)": "Kirjoita Docling OCR kieli(ä)",
|
||||||
"Enter Docling Server URL": "Kirjoita Docling palvelimen verkko-osoite",
|
"Enter Docling Server URL": "Kirjoita Docling palvelimen verkko-osoite",
|
||||||
"Enter Document Intelligence Endpoint": "Kirjoita asiakirja tiedustelun päätepiste",
|
"Enter Document Intelligence Endpoint": "Kirjoita asiakirja tiedustelun päätepiste",
|
||||||
"Enter Document Intelligence Key": "Kirjoiuta asiakirja tiedustelun avain",
|
"Enter Document Intelligence Key": "Kirjoiuta asiakirja tiedustelun avain",
|
||||||
@@ -450,7 +451,7 @@
|
|||||||
"Enter Model ID": "Kirjoita mallitunnus",
|
"Enter Model ID": "Kirjoita mallitunnus",
|
||||||
"Enter model tag (e.g. {{modelTag}})": "Kirjoita mallitagi (esim. {{modelTag}})",
|
"Enter model tag (e.g. {{modelTag}})": "Kirjoita mallitagi (esim. {{modelTag}})",
|
||||||
"Enter Mojeek Search API Key": "Kirjoita Mojeek Search API -avain",
|
"Enter Mojeek Search API Key": "Kirjoita Mojeek Search API -avain",
|
||||||
"Enter New Password": "",
|
"Enter New Password": "Kirjoita uusi salasana",
|
||||||
"Enter Number of Steps (e.g. 50)": "Kirjoita askelten määrä (esim. 50)",
|
"Enter Number of Steps (e.g. 50)": "Kirjoita askelten määrä (esim. 50)",
|
||||||
"Enter Perplexity API Key": "Aseta Perplexity API-avain",
|
"Enter Perplexity API Key": "Aseta Perplexity API-avain",
|
||||||
"Enter Playwright Timeout": "Aseta Playwright aikakatkaisu",
|
"Enter Playwright Timeout": "Aseta Playwright aikakatkaisu",
|
||||||
@@ -472,8 +473,8 @@
|
|||||||
"Enter server host": "Kirjoita palvelimen isäntänimi",
|
"Enter server host": "Kirjoita palvelimen isäntänimi",
|
||||||
"Enter server label": "Kirjoita palvelimen tunniste",
|
"Enter server label": "Kirjoita palvelimen tunniste",
|
||||||
"Enter server port": "Kirjoita palvelimen portti",
|
"Enter server port": "Kirjoita palvelimen portti",
|
||||||
"Enter Sougou Search API sID": "",
|
"Enter Sougou Search API sID": "Kirjoita Sougou Search API sID",
|
||||||
"Enter Sougou Search API SK": "",
|
"Enter Sougou Search API SK": "Kirjoita Sougou Search API SK",
|
||||||
"Enter stop sequence": "Kirjoita lopetussekvenssi",
|
"Enter stop sequence": "Kirjoita lopetussekvenssi",
|
||||||
"Enter system prompt": "Kirjoita järjestelmäkehote",
|
"Enter system prompt": "Kirjoita järjestelmäkehote",
|
||||||
"Enter system prompt here": "Kirjoita järjestelmäkehote tähän",
|
"Enter system prompt here": "Kirjoita järjestelmäkehote tähän",
|
||||||
@@ -487,15 +488,15 @@
|
|||||||
"Enter Top K Reranker": "Kirjoita Top K uudelleen sijoittaja",
|
"Enter Top K Reranker": "Kirjoita Top K uudelleen sijoittaja",
|
||||||
"Enter URL (e.g. http://127.0.0.1:7860/)": "Kirjoita verkko-osoite (esim. http://127.0.0.1:7860/)",
|
"Enter URL (e.g. http://127.0.0.1:7860/)": "Kirjoita verkko-osoite (esim. http://127.0.0.1:7860/)",
|
||||||
"Enter URL (e.g. http://localhost:11434)": "Kirjoita verkko-osoite (esim. http://localhost:11434)",
|
"Enter URL (e.g. http://localhost:11434)": "Kirjoita verkko-osoite (esim. http://localhost:11434)",
|
||||||
"Enter Yacy Password": "",
|
"Enter Yacy Password": "Kirjoita Yacy salasana",
|
||||||
"Enter Yacy URL (e.g. http://yacy.example.com:8090)": "",
|
"Enter Yacy URL (e.g. http://yacy.example.com:8090)": "Kirjoita Yacy verkko-osoite (esim. http://yacy.example.com:8090)",
|
||||||
"Enter Yacy Username": "",
|
"Enter Yacy Username": "Kirjoita Yacy käyttäjänimi",
|
||||||
"Enter your current password": "Kirjoita nykyinen salasanasi",
|
"Enter your current password": "Kirjoita nykyinen salasanasi",
|
||||||
"Enter Your Email": "Kirjoita sähköpostiosoitteesi",
|
"Enter Your Email": "Kirjoita sähköpostiosoitteesi",
|
||||||
"Enter Your Full Name": "Kirjoita koko nimesi",
|
"Enter Your Full Name": "Kirjoita koko nimesi",
|
||||||
"Enter your message": "Kirjoita viestisi",
|
"Enter your message": "Kirjoita viestisi",
|
||||||
"Enter your name": "Kirjoita nimesi tähän",
|
"Enter your name": "Kirjoita nimesi tähän",
|
||||||
"Enter Your Name": "",
|
"Enter Your Name": "Kirjoita nimesi",
|
||||||
"Enter your new password": "Kirjoita uusi salasanasi",
|
"Enter your new password": "Kirjoita uusi salasanasi",
|
||||||
"Enter Your Password": "Kirjoita salasanasi",
|
"Enter Your Password": "Kirjoita salasanasi",
|
||||||
"Enter Your Role": "Kirjoita roolisi",
|
"Enter Your Role": "Kirjoita roolisi",
|
||||||
@@ -504,8 +505,8 @@
|
|||||||
"Error": "Virhe",
|
"Error": "Virhe",
|
||||||
"ERROR": "VIRHE",
|
"ERROR": "VIRHE",
|
||||||
"Error accessing Google Drive: {{error}}": "Virhe yhdistäessä Google Drive: {{error}}",
|
"Error accessing Google Drive: {{error}}": "Virhe yhdistäessä Google Drive: {{error}}",
|
||||||
"Error accessing media devices.": "",
|
"Error accessing media devices.": "Virhe medialaitteita käytettäessä.",
|
||||||
"Error starting recording.": "",
|
"Error starting recording.": "Virhe nauhoitusta aloittaessa.",
|
||||||
"Error uploading file: {{error}}": "Virhe ladattaessa tiedostoa: {{error}}",
|
"Error uploading file: {{error}}": "Virhe ladattaessa tiedostoa: {{error}}",
|
||||||
"Evaluations": "Arvioinnit",
|
"Evaluations": "Arvioinnit",
|
||||||
"Exa API Key": "Exa API -avain",
|
"Exa API Key": "Exa API -avain",
|
||||||
@@ -544,9 +545,9 @@
|
|||||||
"Failed to add file.": "Tiedoston lisääminen epäonnistui.",
|
"Failed to add file.": "Tiedoston lisääminen epäonnistui.",
|
||||||
"Failed to connect to {{URL}} OpenAPI tool server": "Yhdistäminen {{URL}} OpenAPI työkalu palvelimeen epäonnistui",
|
"Failed to connect to {{URL}} OpenAPI tool server": "Yhdistäminen {{URL}} OpenAPI työkalu palvelimeen epäonnistui",
|
||||||
"Failed to create API Key.": "API-avaimen luonti epäonnistui.",
|
"Failed to create API Key.": "API-avaimen luonti epäonnistui.",
|
||||||
"Failed to delete note": "",
|
"Failed to delete note": "Muistiinpanon poistaminen epäonnistui",
|
||||||
"Failed to fetch models": "Mallien hakeminen epäonnistui",
|
"Failed to fetch models": "Mallien hakeminen epäonnistui",
|
||||||
"Failed to load file content.": "",
|
"Failed to load file content.": "Tiedoston sisällön lataaminen epäonnistui.",
|
||||||
"Failed to read clipboard contents": "Leikepöydän sisällön lukeminen epäonnistui",
|
"Failed to read clipboard contents": "Leikepöydän sisällön lukeminen epäonnistui",
|
||||||
"Failed to save connections": "Yhteyksien tallentaminen epäonnistui",
|
"Failed to save connections": "Yhteyksien tallentaminen epäonnistui",
|
||||||
"Failed to save models configuration": "Mallien määrityksen tallentaminen epäonnistui",
|
"Failed to save models configuration": "Mallien määrityksen tallentaminen epäonnistui",
|
||||||
@@ -602,12 +603,12 @@
|
|||||||
"Gemini API Config": "Gemini API konfiguraatio",
|
"Gemini API Config": "Gemini API konfiguraatio",
|
||||||
"Gemini API Key is required.": "Gemini API -avain on vaaditaan.",
|
"Gemini API Key is required.": "Gemini API -avain on vaaditaan.",
|
||||||
"General": "Yleinen",
|
"General": "Yleinen",
|
||||||
"Generate": "",
|
"Generate": "Luo",
|
||||||
"Generate an image": "Luo kuva",
|
"Generate an image": "Luo kuva",
|
||||||
"Generate Image": "Luo kuva",
|
"Generate Image": "Luo kuva",
|
||||||
"Generate prompt pair": "Luo kehotepari",
|
"Generate prompt pair": "Luo kehotepari",
|
||||||
"Generating search query": "Luodaan hakukyselyä",
|
"Generating search query": "Luodaan hakukyselyä",
|
||||||
"Generating...": "",
|
"Generating...": "Luodaan...",
|
||||||
"Get started": "Aloita",
|
"Get started": "Aloita",
|
||||||
"Get started with {{WEBUI_NAME}}": "Aloita käyttämään {{WEBUI_NAME}}:iä",
|
"Get started with {{WEBUI_NAME}}": "Aloita käyttämään {{WEBUI_NAME}}:iä",
|
||||||
"Global": "Yleinen",
|
"Global": "Yleinen",
|
||||||
@@ -654,7 +655,7 @@
|
|||||||
"Import Config from JSON File": "Tuo asetukset JSON-tiedostosta",
|
"Import Config from JSON File": "Tuo asetukset JSON-tiedostosta",
|
||||||
"Import Functions": "Tuo toiminnot",
|
"Import Functions": "Tuo toiminnot",
|
||||||
"Import Models": "Tuo malleja",
|
"Import Models": "Tuo malleja",
|
||||||
"Import Notes": "",
|
"Import Notes": "Tuo muistiinpanoja",
|
||||||
"Import Presets": "Tuo esiasetuksia",
|
"Import Presets": "Tuo esiasetuksia",
|
||||||
"Import Prompts": "Tuo kehotteet",
|
"Import Prompts": "Tuo kehotteet",
|
||||||
"Import Tools": "Tuo työkalut",
|
"Import Tools": "Tuo työkalut",
|
||||||
@@ -669,7 +670,7 @@
|
|||||||
"Instant Auto-Send After Voice Transcription": "Heti automaattinen lähetys äänitunnistuksen jälkeen",
|
"Instant Auto-Send After Voice Transcription": "Heti automaattinen lähetys äänitunnistuksen jälkeen",
|
||||||
"Integration": "Integrointi",
|
"Integration": "Integrointi",
|
||||||
"Interface": "Käyttöliittymä",
|
"Interface": "Käyttöliittymä",
|
||||||
"Invalid file content": "",
|
"Invalid file content": "Virheellinen tiedostosisältö",
|
||||||
"Invalid file format.": "Virheellinen tiedostomuoto.",
|
"Invalid file format.": "Virheellinen tiedostomuoto.",
|
||||||
"Invalid JSON schema": "Virheellinen JSON kaava",
|
"Invalid JSON schema": "Virheellinen JSON kaava",
|
||||||
"Invalid Tag": "Virheellinen tagi",
|
"Invalid Tag": "Virheellinen tagi",
|
||||||
@@ -740,7 +741,7 @@
|
|||||||
"Manage Pipelines": "Hallitse putkia",
|
"Manage Pipelines": "Hallitse putkia",
|
||||||
"Manage Tool Servers": "Hallitse työkalu palvelimia",
|
"Manage Tool Servers": "Hallitse työkalu palvelimia",
|
||||||
"March": "maaliskuu",
|
"March": "maaliskuu",
|
||||||
"Max Speakers": "",
|
"Max Speakers": "Puhujien enimmäismäärä",
|
||||||
"Max Tokens (num_predict)": "Tokenien enimmäismäärä (num_predict)",
|
"Max Tokens (num_predict)": "Tokenien enimmäismäärä (num_predict)",
|
||||||
"Max Upload Count": "Latausten enimmäismäärä",
|
"Max Upload Count": "Latausten enimmäismäärä",
|
||||||
"Max Upload Size": "Latausten enimmäiskoko",
|
"Max Upload Size": "Latausten enimmäiskoko",
|
||||||
@@ -792,18 +793,18 @@
|
|||||||
"Mojeek Search API Key": "Mojeek Search API -avain",
|
"Mojeek Search API Key": "Mojeek Search API -avain",
|
||||||
"more": "lisää",
|
"more": "lisää",
|
||||||
"More": "Lisää",
|
"More": "Lisää",
|
||||||
"My Notes": "",
|
"My Notes": "Minun muistiinpanot",
|
||||||
"Name": "Nimi",
|
"Name": "Nimi",
|
||||||
"Name your knowledge base": "Anna tietokannalle nimi",
|
"Name your knowledge base": "Anna tietokannalle nimi",
|
||||||
"Native": "Natiivi",
|
"Native": "Natiivi",
|
||||||
"New Chat": "Uusi keskustelu",
|
"New Chat": "Uusi keskustelu",
|
||||||
"New Folder": "Uusi kansio",
|
"New Folder": "Uusi kansio",
|
||||||
"New Note": "",
|
"New Note": "Uusi muistiinpano",
|
||||||
"New Password": "Uusi salasana",
|
"New Password": "Uusi salasana",
|
||||||
"new-channel": "uusi-kanava",
|
"new-channel": "uusi-kanava",
|
||||||
"No content": "",
|
"No content": "Ei sisältöä",
|
||||||
"No content found": "Sisältöä ei löytynyt",
|
"No content found": "Sisältöä ei löytynyt",
|
||||||
"No content found in file.": "",
|
"No content found in file.": "Sisältöä ei löytynyt tiedostosta.",
|
||||||
"No content to speak": "Ei puhuttavaa sisältöä",
|
"No content to speak": "Ei puhuttavaa sisältöä",
|
||||||
"No distance available": "Etäisyyttä ei saatavilla",
|
"No distance available": "Etäisyyttä ei saatavilla",
|
||||||
"No feedbacks found": "Palautteita ei löytynyt",
|
"No feedbacks found": "Palautteita ei löytynyt",
|
||||||
@@ -816,7 +817,7 @@
|
|||||||
"No model IDs": "Ei mallitunnuksia",
|
"No model IDs": "Ei mallitunnuksia",
|
||||||
"No models found": "Malleja ei löytynyt",
|
"No models found": "Malleja ei löytynyt",
|
||||||
"No models selected": "Malleja ei ole valittu",
|
"No models selected": "Malleja ei ole valittu",
|
||||||
"No Notes": "",
|
"No Notes": "Ei muistiinpanoja",
|
||||||
"No results found": "Ei tuloksia",
|
"No results found": "Ei tuloksia",
|
||||||
"No search query generated": "Hakukyselyä ei luotu",
|
"No search query generated": "Hakukyselyä ei luotu",
|
||||||
"No source available": "Lähdettä ei saatavilla",
|
"No source available": "Lähdettä ei saatavilla",
|
||||||
@@ -825,7 +826,7 @@
|
|||||||
"None": "Ei mikään",
|
"None": "Ei mikään",
|
||||||
"Not factually correct": "Ei faktuaalisesti oikein",
|
"Not factually correct": "Ei faktuaalisesti oikein",
|
||||||
"Not helpful": "Ei hyödyllinen",
|
"Not helpful": "Ei hyödyllinen",
|
||||||
"Note deleted successfully": "",
|
"Note deleted successfully": "Muistiinpano poistettiin onnistuneesti",
|
||||||
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Huomautus: Jos asetat vähimmäispistemäärän, haku palauttaa vain sellaiset asiakirjat, joiden pistemäärä on vähintään vähimmäismäärä.",
|
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Huomautus: Jos asetat vähimmäispistemäärän, haku palauttaa vain sellaiset asiakirjat, joiden pistemäärä on vähintään vähimmäismäärä.",
|
||||||
"Notes": "Muistiinpanot",
|
"Notes": "Muistiinpanot",
|
||||||
"Notification Sound": "Ilmoitusääni",
|
"Notification Sound": "Ilmoitusääni",
|
||||||
@@ -848,7 +849,7 @@
|
|||||||
"Only alphanumeric characters and hyphens are allowed": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja",
|
"Only alphanumeric characters and hyphens are allowed": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja",
|
||||||
"Only alphanumeric characters and hyphens are allowed in the command string.": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja komentosarjassa.",
|
"Only alphanumeric characters and hyphens are allowed in the command string.": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja komentosarjassa.",
|
||||||
"Only collections can be edited, create a new knowledge base to edit/add documents.": "Vain kokoelmia voi muokata, luo uusi tietokanta muokataksesi/lisätäksesi asiakirjoja.",
|
"Only collections can be edited, create a new knowledge base to edit/add documents.": "Vain kokoelmia voi muokata, luo uusi tietokanta muokataksesi/lisätäksesi asiakirjoja.",
|
||||||
"Only markdown files are allowed": "",
|
"Only markdown files are allowed": "Vain markdown tiedostot ovat sallittuja",
|
||||||
"Only select users and groups with permission can access": "Vain valitut käyttäjät ja ryhmät, joilla on käyttöoikeus, pääsevät käyttämään",
|
"Only select users and groups with permission can access": "Vain valitut käyttäjät ja ryhmät, joilla on käyttöoikeus, pääsevät käyttämään",
|
||||||
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Hups! Näyttää siltä, että verkko-osoite on virheellinen. Tarkista se ja yritä uudelleen.",
|
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Hups! Näyttää siltä, että verkko-osoite on virheellinen. Tarkista se ja yritä uudelleen.",
|
||||||
"Oops! There are files still uploading. Please wait for the upload to complete.": "Hups! Tiedostoja on vielä ladattavana. Odota, että lataus on valmis.",
|
"Oops! There are files still uploading. Please wait for the upload to complete.": "Hups! Tiedostoja on vielä ladattavana. Odota, että lataus on valmis.",
|
||||||
@@ -894,7 +895,7 @@
|
|||||||
"Pipelines": "Putkistot",
|
"Pipelines": "Putkistot",
|
||||||
"Pipelines Not Detected": "Putkistoja ei havaittu",
|
"Pipelines Not Detected": "Putkistoja ei havaittu",
|
||||||
"Pipelines Valves": "Putkistojen venttiilit",
|
"Pipelines Valves": "Putkistojen venttiilit",
|
||||||
"Plain text (.md)": "",
|
"Plain text (.md)": "Pelkkä teksti (.md)",
|
||||||
"Plain text (.txt)": "Pelkkä teksti (.txt)",
|
"Plain text (.txt)": "Pelkkä teksti (.txt)",
|
||||||
"Playground": "Leikkipaikka",
|
"Playground": "Leikkipaikka",
|
||||||
"Playwright Timeout (ms)": "Playwright aikakatkaisu (ms)",
|
"Playwright Timeout (ms)": "Playwright aikakatkaisu (ms)",
|
||||||
@@ -937,7 +938,7 @@
|
|||||||
"Read": "Lue",
|
"Read": "Lue",
|
||||||
"Read Aloud": "Lue ääneen",
|
"Read Aloud": "Lue ääneen",
|
||||||
"Reasoning Effort": "",
|
"Reasoning Effort": "",
|
||||||
"Record": "",
|
"Record": "Nauhoita",
|
||||||
"Record voice": "Nauhoita ääntä",
|
"Record voice": "Nauhoita ääntä",
|
||||||
"Redirecting you to Open WebUI Community": "Ohjataan sinut OpenWebUI-yhteisöön",
|
"Redirecting you to Open WebUI Community": "Ohjataan sinut OpenWebUI-yhteisöön",
|
||||||
"Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "",
|
"Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Toisto rangaistus (Ollama)",
|
"Repeat Penalty (Ollama)": "Toisto rangaistus (Ollama)",
|
||||||
"Reply in Thread": "Vastauksia ",
|
"Reply in Thread": "Vastauksia ",
|
||||||
"Request Mode": "Pyyntötila",
|
"Request Mode": "Pyyntötila",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Uudelleenpisteytymismalli",
|
"Reranking Model": "Uudelleenpisteytymismalli",
|
||||||
"Reranking model disabled": "Uudelleenpisteytymismalli poistettu käytöstä",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "\"{{reranking_model}}\" valittu uudelleenpisteytysmalliksi",
|
|
||||||
"Reset": "Palauta",
|
"Reset": "Palauta",
|
||||||
"Reset All Models": "Palauta kaikki mallit",
|
"Reset All Models": "Palauta kaikki mallit",
|
||||||
"Reset Upload Directory": "Palauta latauspolku",
|
"Reset Upload Directory": "Palauta latauspolku",
|
||||||
@@ -1007,7 +1007,7 @@
|
|||||||
"Searched {{count}} sites": "Etsitty {{count}} sivulta",
|
"Searched {{count}} sites": "Etsitty {{count}} sivulta",
|
||||||
"Searching \"{{searchQuery}}\"": "Haetaan \"{{searchQuery}}\"",
|
"Searching \"{{searchQuery}}\"": "Haetaan \"{{searchQuery}}\"",
|
||||||
"Searching Knowledge for \"{{searchQuery}}\"": "Haetaan tietämystä \"{{searchQuery}}\"",
|
"Searching Knowledge for \"{{searchQuery}}\"": "Haetaan tietämystä \"{{searchQuery}}\"",
|
||||||
"Searching the web...": "",
|
"Searching the web...": "Haetaan verkosta...",
|
||||||
"Searxng Query URL": "Searxng-kyselyn verkko-osoite",
|
"Searxng Query URL": "Searxng-kyselyn verkko-osoite",
|
||||||
"See readme.md for instructions": "Katso ohjeet readme.md-tiedostosta",
|
"See readme.md for instructions": "Katso ohjeet readme.md-tiedostosta",
|
||||||
"See what's new": "Katso, mitä uutta",
|
"See what's new": "Katso, mitä uutta",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Näytä",
|
"Show": "Näytä",
|
||||||
"Show \"What's New\" modal on login": "Näytä \"Mitä uutta\" -modaali kirjautumisen yhteydessä",
|
"Show \"What's New\" modal on login": "Näytä \"Mitä uutta\" -modaali kirjautumisen yhteydessä",
|
||||||
"Show Admin Details in Account Pending Overlay": "Näytä ylläpitäjän tiedot odottavan tilin päällä",
|
"Show Admin Details in Account Pending Overlay": "Näytä ylläpitäjän tiedot odottavan tilin päällä",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "Näytä malli",
|
"Show Model": "Näytä malli",
|
||||||
"Show shortcuts": "Näytä pikanäppäimet",
|
"Show shortcuts": "Näytä pikanäppäimet",
|
||||||
"Show your support!": "Osoita tukesi!",
|
"Show your support!": "Osoita tukesi!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Streamaa keskusteluvastaus",
|
"Stream Chat Response": "Streamaa keskusteluvastaus",
|
||||||
"STT Model": "Puheentunnistusmalli",
|
"STT Model": "Puheentunnistusmalli",
|
||||||
"STT Settings": "Puheentunnistuksen asetukset",
|
"STT Settings": "Puheentunnistuksen asetukset",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Alaotsikko (esim. Rooman valtakunta)",
|
"Subtitle (e.g. about the Roman Empire)": "Alaotsikko (esim. Rooman valtakunta)",
|
||||||
"Success": "Onnistui",
|
"Success": "Onnistui",
|
||||||
"Successfully updated.": "Päivitetty onnistuneesti.",
|
"Successfully updated.": "Päivitetty onnistuneesti.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "Tämä keskustelu ei näy historiassa, eikä viestejäsi tallenneta.",
|
"This chat won’t appear in history and your messages will not be saved.": "Tämä keskustelu ei näy historiassa, eikä viestejäsi tallenneta.",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Tämä varmistaa, että arvokkaat keskustelusi tallennetaan turvallisesti backend-tietokantaasi. Kiitos!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Tämä varmistaa, että arvokkaat keskustelusi tallennetaan turvallisesti backend-tietokantaasi. Kiitos!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Tämä on kokeellinen ominaisuus, se ei välttämättä toimi odotetulla tavalla ja se voi muuttua milloin tahansa.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Tämä on kokeellinen ominaisuus, se ei välttämättä toimi odotetulla tavalla ja se voi muuttua milloin tahansa.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Tämä vaihtoehto poistaa kaikki kokoelman nykyiset tiedostot ja korvaa ne uusilla ladatuilla tiedostoilla.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Tämä vaihtoehto poistaa kaikki kokoelman nykyiset tiedostot ja korvaa ne uusilla ladatuilla tiedostoilla.",
|
||||||
@@ -1210,7 +1214,7 @@
|
|||||||
"Unpin": "Irrota kiinnitys",
|
"Unpin": "Irrota kiinnitys",
|
||||||
"Unravel secrets": "Avaa salaisuuksia",
|
"Unravel secrets": "Avaa salaisuuksia",
|
||||||
"Untagged": "Ei tageja",
|
"Untagged": "Ei tageja",
|
||||||
"Untitled": "",
|
"Untitled": "Nimetön",
|
||||||
"Update": "Päivitä",
|
"Update": "Päivitä",
|
||||||
"Update and Copy Link": "Päivitä ja kopioi linkki",
|
"Update and Copy Link": "Päivitä ja kopioi linkki",
|
||||||
"Update for the latest features and improvements.": "Päivitä uusimpiin ominaisuuksiin ja parannuksiin.",
|
"Update for the latest features and improvements.": "Päivitä uusimpiin ominaisuuksiin ja parannuksiin.",
|
||||||
@@ -1221,8 +1225,8 @@
|
|||||||
"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "Päivitä lisenssi saadaksesi parempia ominaisuuksia, mukaan lukien mukautetun teeman ja brändäyksen sekä yksilöllistä tukea.",
|
"Upgrade to a licensed plan for enhanced capabilities, including custom theming and branding, and dedicated support.": "Päivitä lisenssi saadaksesi parempia ominaisuuksia, mukaan lukien mukautetun teeman ja brändäyksen sekä yksilöllistä tukea.",
|
||||||
"Upload": "Lataa",
|
"Upload": "Lataa",
|
||||||
"Upload a GGUF model": "Lataa GGUF-malli",
|
"Upload a GGUF model": "Lataa GGUF-malli",
|
||||||
"Upload Audio": "",
|
"Upload Audio": "Lataa äänitiedosto",
|
||||||
"Upload directory": "Latauksen hakemisto",
|
"Upload directory": "Lataa hakemisto",
|
||||||
"Upload files": "Lataa tiedostoja",
|
"Upload files": "Lataa tiedostoja",
|
||||||
"Upload Files": "Lataa tiedostoja",
|
"Upload Files": "Lataa tiedostoja",
|
||||||
"Upload Pipeline": "Lataa putki",
|
"Upload Pipeline": "Lataa putki",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(par ex. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(par ex. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(par exemple `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(par exemple `sh webui.sh --api`)",
|
||||||
"(latest)": "(dernier)",
|
"(latest)": "(dernier)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ modèles }}",
|
"{{ models }}": "{{ modèles }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Mauvaise réponse",
|
"Bad Response": "Mauvaise réponse",
|
||||||
"Banners": "Banniers",
|
"Banners": "Banniers",
|
||||||
"Base Model (From)": "Modèle de base (à partir de)",
|
"Base Model (From)": "Modèle de base (à partir de)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Taille du lot (num_batch)",
|
"Batch Size (num_batch)": "Taille du lot (num_batch)",
|
||||||
"before": "avant",
|
"before": "avant",
|
||||||
"Being lazy": "Être fainéant",
|
"Being lazy": "Être fainéant",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Modifier",
|
"Edit": "Modifier",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Activer les nouvelles inscriptions",
|
"Enable New Sign Ups": "Activer les nouvelles inscriptions",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Mode de Requête",
|
"Request Mode": "Mode de Requête",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Modèle de ré-ranking",
|
"Reranking Model": "Modèle de ré-ranking",
|
||||||
"Reranking model disabled": "Modèle de ré-ranking désactivé",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Modèle de ré-ranking défini sur « {{reranking_model}} »",
|
|
||||||
"Reset": "Réinitialiser",
|
"Reset": "Réinitialiser",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Répertoire de téléchargement réinitialisé",
|
"Reset Upload Directory": "Répertoire de téléchargement réinitialisé",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Montrer",
|
"Show": "Montrer",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "Afficher les détails de l'administrateur dans la superposition en attente du compte",
|
"Show Admin Details in Account Pending Overlay": "Afficher les détails de l'administrateur dans la superposition en attente du compte",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Afficher les raccourcis",
|
"Show shortcuts": "Afficher les raccourcis",
|
||||||
"Show your support!": "Montre ton soutien !",
|
"Show your support!": "Montre ton soutien !",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "Modèle de STT",
|
"STT Model": "Modèle de STT",
|
||||||
"STT Settings": "Paramètres de STT",
|
"STT Settings": "Paramètres de STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Sous-titres (par ex. sur l'Empire romain)",
|
"Subtitle (e.g. about the Roman Empire)": "Sous-titres (par ex. sur l'Empire romain)",
|
||||||
"Success": "Réussite",
|
"Success": "Réussite",
|
||||||
"Successfully updated.": "Mise à jour réussie.",
|
"Successfully updated.": "Mise à jour réussie.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cela garantit que vos conversations précieuses soient sauvegardées en toute sécurité dans votre base de données backend. Merci !",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cela garantit que vos conversations précieuses soient sauvegardées en toute sécurité dans votre base de données backend. Merci !",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Il s'agit d'une fonctionnalité expérimentale, elle peut ne pas fonctionner comme prévu et est sujette à modification à tout moment.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Il s'agit d'une fonctionnalité expérimentale, elle peut ne pas fonctionner comme prévu et est sujette à modification à tout moment.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(par ex. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(par ex. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(par exemple `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(par exemple `sh webui.sh --api`)",
|
||||||
"(latest)": "(dernière version)",
|
"(latest)": "(dernière version)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "(Ollama)",
|
"(Ollama)": "(Ollama)",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "Nombre d'outils disponibles {{COUNT}}",
|
"{{COUNT}} Available Tools": "Nombre d'outils disponibles {{COUNT}}",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Mauvaise réponse",
|
"Bad Response": "Mauvaise réponse",
|
||||||
"Banners": "Bannières",
|
"Banners": "Bannières",
|
||||||
"Base Model (From)": "Modèle de base (à partir de)",
|
"Base Model (From)": "Modèle de base (à partir de)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Batch Size (num_batch)",
|
"Batch Size (num_batch)": "Batch Size (num_batch)",
|
||||||
"before": "avant",
|
"before": "avant",
|
||||||
"Being lazy": "Être fainéant",
|
"Being lazy": "Être fainéant",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "par ex. Outils pour effectuer diverses opérations",
|
"e.g. Tools for performing various operations": "par ex. Outils pour effectuer diverses opérations",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "par ex., en-US, ja-JP (laisser vide pour détection automatique)",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "par ex., en-US, ja-JP (laisser vide pour détection automatique)",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Modifier",
|
"Edit": "Modifier",
|
||||||
"Edit Arena Model": "Modifier le modèle d'arène",
|
"Edit Arena Model": "Modifier le modèle d'arène",
|
||||||
"Edit Channel": "Modifier le canal",
|
"Edit Channel": "Modifier le canal",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "Activer l'échantillonnage Mirostat pour contrôler Perplexité.",
|
"Enable Mirostat sampling for controlling perplexity.": "Activer l'échantillonnage Mirostat pour contrôler Perplexité.",
|
||||||
"Enable New Sign Ups": "Activer les nouvelles inscriptions",
|
"Enable New Sign Ups": "Activer les nouvelles inscriptions",
|
||||||
"Enabled": "Activé",
|
"Enabled": "Activé",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "Imposer les discussions temporaires",
|
"Enforce Temporary Chat": "Imposer les discussions temporaires",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Vérifiez que votre fichier CSV comprenne les 4 colonnes dans cet ordre : Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Pénalité de répétition (Ollama)",
|
"Repeat Penalty (Ollama)": "Pénalité de répétition (Ollama)",
|
||||||
"Reply in Thread": "Répondre dans le fil de discussion",
|
"Reply in Thread": "Répondre dans le fil de discussion",
|
||||||
"Request Mode": "Mode de requête",
|
"Request Mode": "Mode de requête",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Modèle de ré-ranking",
|
"Reranking Model": "Modèle de ré-ranking",
|
||||||
"Reranking model disabled": "Modèle de ré-ranking désactivé",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Modèle de ré-ranking défini sur « {{reranking_model}} »",
|
|
||||||
"Reset": "Réinitialiser",
|
"Reset": "Réinitialiser",
|
||||||
"Reset All Models": "Réinitialiser tous les modèles",
|
"Reset All Models": "Réinitialiser tous les modèles",
|
||||||
"Reset Upload Directory": "Réinitialiser le répertoire de téléchargement",
|
"Reset Upload Directory": "Réinitialiser le répertoire de téléchargement",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Afficher",
|
"Show": "Afficher",
|
||||||
"Show \"What's New\" modal on login": "Afficher la fenêtre modale \"Quoi de neuf\" lors de la connexion",
|
"Show \"What's New\" modal on login": "Afficher la fenêtre modale \"Quoi de neuf\" lors de la connexion",
|
||||||
"Show Admin Details in Account Pending Overlay": "Afficher les coordonnées de l'administrateur aux comptes en attente",
|
"Show Admin Details in Account Pending Overlay": "Afficher les coordonnées de l'administrateur aux comptes en attente",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "Afficher le model",
|
"Show Model": "Afficher le model",
|
||||||
"Show shortcuts": "Afficher les raccourcis",
|
"Show shortcuts": "Afficher les raccourcis",
|
||||||
"Show your support!": "Montrez votre soutien !",
|
"Show your support!": "Montrez votre soutien !",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Streamer la réponse de la conversation",
|
"Stream Chat Response": "Streamer la réponse de la conversation",
|
||||||
"STT Model": "Modèle de Speech-to-Text",
|
"STT Model": "Modèle de Speech-to-Text",
|
||||||
"STT Settings": "Paramètres de Speech-to-Text",
|
"STT Settings": "Paramètres de Speech-to-Text",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Sous-titres (par ex. sur l'Empire romain)",
|
"Subtitle (e.g. about the Roman Empire)": "Sous-titres (par ex. sur l'Empire romain)",
|
||||||
"Success": "Réussite",
|
"Success": "Réussite",
|
||||||
"Successfully updated.": "Mise à jour réussie.",
|
"Successfully updated.": "Mise à jour réussie.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "Cette conversation n'apparaîtra pas dans l'historique et vos messages ne seront pas enregistrés.",
|
"This chat won’t appear in history and your messages will not be saved.": "Cette conversation n'apparaîtra pas dans l'historique et vos messages ne seront pas enregistrés.",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cela garantit que vos conversations précieuses soient sauvegardées en toute sécurité dans votre base de données backend. Merci !",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cela garantit que vos conversations précieuses soient sauvegardées en toute sécurité dans votre base de données backend. Merci !",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Il s'agit d'une fonctionnalité expérimentale, elle peut ne pas fonctionner comme prévu et est sujette à modification à tout moment.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Il s'agit d'une fonctionnalité expérimentale, elle peut ne pas fonctionner comme prévu et est sujette à modification à tout moment.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Cette option détermine combien de Token sont conservés lors du rafraîchissement du contexte. Par exemple, avec une valeur de 2, les 2 derniers Token seront conservés. Cela aide à maintenir la continuité de la conversation, mais peut limiter la capacité à traiter de nouveaux sujets.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Cette option détermine combien de Token sont conservés lors du rafraîchissement du contexte. Par exemple, avec une valeur de 2, les 2 derniers Token seront conservés. Cela aide à maintenir la continuité de la conversation, mais peut limiter la capacité à traiter de nouveaux sujets.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Cette option définit le nombre maximal de Token que le modèle peut générer dans sa réponse. Une valeur plus élevée permet des réponses plus longues, mais peut aussi générer du contenu moins pertinent.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Cette option définit le nombre maximal de Token que le modèle peut générer dans sa réponse. Une valeur plus élevée permet des réponses plus longues, mais peut aussi générer du contenu moins pertinent.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Cette option supprimera tous les fichiers existants dans la collection et les remplacera par les fichiers nouvellement téléchargés.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Cette option supprimera tous les fichiers existants dans la collection et les remplacera par les fichiers nouvellement téléchargés.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "(למשל `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(למשל `sh webui.sh --api`)",
|
||||||
"(latest)": "(האחרון)",
|
"(latest)": "(האחרון)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ דגמים }}",
|
"{{ models }}": "{{ דגמים }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "תגובה שגויה",
|
"Bad Response": "תגובה שגויה",
|
||||||
"Banners": "באנרים",
|
"Banners": "באנרים",
|
||||||
"Base Model (From)": "דגם בסיס (מ)",
|
"Base Model (From)": "דגם בסיס (מ)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "לפני",
|
"before": "לפני",
|
||||||
"Being lazy": "להיות עצלן",
|
"Being lazy": "להיות עצלן",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "ערוך",
|
"Edit": "ערוך",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "אפשר הרשמות חדשות",
|
"Enable New Sign Ups": "אפשר הרשמות חדשות",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ודא שקובץ ה-CSV שלך כולל 4 עמודות בסדר הבא: שם, דוא\"ל, סיסמה, תפקיד.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ודא שקובץ ה-CSV שלך כולל 4 עמודות בסדר הבא: שם, דוא\"ל, סיסמה, תפקיד.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "מצב בקשה",
|
"Request Mode": "מצב בקשה",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "מודל דירוג מחדש",
|
"Reranking Model": "מודל דירוג מחדש",
|
||||||
"Reranking model disabled": "מודל דירוג מחדש מושבת",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "מודל דירוג מחדש הוגדר ל-\"{{reranking_model}}\"",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "הצג",
|
"Show": "הצג",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "הצג קיצורי דרך",
|
"Show shortcuts": "הצג קיצורי דרך",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "הגדרות חקירה של TTS",
|
"STT Settings": "הגדרות חקירה של TTS",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "תחקור (לדוגמה: על מעמד הרומי)",
|
"Subtitle (e.g. about the Roman Empire)": "תחקור (לדוגמה: על מעמד הרומי)",
|
||||||
"Success": "הצלחה",
|
"Success": "הצלחה",
|
||||||
"Successfully updated.": "עדכון הצלחה.",
|
"Successfully updated.": "עדכון הצלחה.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "פעולה זו מבטיחה שהשיחות בעלות הערך שלך יישמרו באופן מאובטח במסד הנתונים העורפי שלך. תודה!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "פעולה זו מבטיחה שהשיחות בעלות הערך שלך יישמרו באופן מאובטח במסד הנתונים העורפי שלך. תודה!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(e.g. `sh webui.sh --api`)",
|
||||||
"(latest)": "(latest)",
|
"(latest)": "(latest)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ मॉडल }}",
|
"{{ models }}": "{{ मॉडल }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "ख़राब प्रतिक्रिया",
|
"Bad Response": "ख़राब प्रतिक्रिया",
|
||||||
"Banners": "बैनर",
|
"Banners": "बैनर",
|
||||||
"Base Model (From)": "बेस मॉडल (से)",
|
"Base Model (From)": "बेस मॉडल (से)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "पहले",
|
"before": "पहले",
|
||||||
"Being lazy": "आलसी होना",
|
"Being lazy": "आलसी होना",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "संपादित करें",
|
"Edit": "संपादित करें",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "नए साइन अप सक्रिय करें",
|
"Enable New Sign Ups": "नए साइन अप सक्रिय करें",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "सुनिश्चित करें कि आपकी CSV फ़ाइल में इस क्रम में 4 कॉलम शामिल हैं: नाम, ईमेल, पासवर्ड, भूमिका।",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "सुनिश्चित करें कि आपकी CSV फ़ाइल में इस क्रम में 4 कॉलम शामिल हैं: नाम, ईमेल, पासवर्ड, भूमिका।",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "अनुरोध मोड",
|
"Request Mode": "अनुरोध मोड",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "रीरैकिंग मोड",
|
"Reranking Model": "रीरैकिंग मोड",
|
||||||
"Reranking model disabled": "पुनर्रैंकिंग मॉडल अक्षम किया गया",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "रीरैंकिंग मॉडल को \"{{reranking_model}}\" पर \u200b\u200bसेट किया गया",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "दिखाओ",
|
"Show": "दिखाओ",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "शॉर्टकट दिखाएँ",
|
"Show shortcuts": "शॉर्टकट दिखाएँ",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "STT सेटिंग्स ",
|
"STT Settings": "STT सेटिंग्स ",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "उपशीर्षक (जैसे रोमन साम्राज्य के बारे में)",
|
"Subtitle (e.g. about the Roman Empire)": "उपशीर्षक (जैसे रोमन साम्राज्य के बारे में)",
|
||||||
"Success": "संपन्न",
|
"Success": "संपन्न",
|
||||||
"Successfully updated.": "सफलतापूर्वक उत्परिवर्तित।",
|
"Successfully updated.": "सफलतापूर्वक उत्परिवर्तित।",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "यह सुनिश्चित करता है कि आपकी मूल्यवान बातचीत आपके बैकएंड डेटाबेस में सुरक्षित रूप से सहेजी गई है। धन्यवाद!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "यह सुनिश्चित करता है कि आपकी मूल्यवान बातचीत आपके बैकएंड डेटाबेस में सुरक्षित रूप से सहेजी गई है। धन्यवाद!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "(npr. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(npr. `sh webui.sh --api`)",
|
||||||
"(latest)": "(najnovije)",
|
"(latest)": "(najnovije)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ modeli }}",
|
"{{ models }}": "{{ modeli }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Loš odgovor",
|
"Bad Response": "Loš odgovor",
|
||||||
"Banners": "Baneri",
|
"Banners": "Baneri",
|
||||||
"Base Model (From)": "Osnovni model (Od)",
|
"Base Model (From)": "Osnovni model (Od)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "prije",
|
"before": "prije",
|
||||||
"Being lazy": "Biti lijen",
|
"Being lazy": "Biti lijen",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Uredi",
|
"Edit": "Uredi",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Omogući nove prijave",
|
"Enable New Sign Ups": "Omogući nove prijave",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Provjerite da vaša CSV datoteka uključuje 4 stupca u ovom redoslijedu: Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Provjerite da vaša CSV datoteka uključuje 4 stupca u ovom redoslijedu: Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Način zahtjeva",
|
"Request Mode": "Način zahtjeva",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Model za ponovno rangiranje",
|
"Reranking Model": "Model za ponovno rangiranje",
|
||||||
"Reranking model disabled": "Model za ponovno rangiranje onemogućen",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Model za ponovno rangiranje postavljen na \"{{reranking_model}}\"",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Poništi upload direktorij",
|
"Reset Upload Directory": "Poništi upload direktorij",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Pokaži",
|
"Show": "Pokaži",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Pokaži prečace",
|
"Show shortcuts": "Pokaži prečace",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "STT model",
|
"STT Model": "STT model",
|
||||||
"STT Settings": "STT postavke",
|
"STT Settings": "STT postavke",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Podnaslov (npr. o Rimskom carstvu)",
|
"Subtitle (e.g. about the Roman Empire)": "Podnaslov (npr. o Rimskom carstvu)",
|
||||||
"Success": "Uspjeh",
|
"Success": "Uspjeh",
|
||||||
"Successfully updated.": "Uspješno ažurirano.",
|
"Successfully updated.": "Uspješno ažurirano.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ovo osigurava da su vaši vrijedni razgovori sigurno spremljeni u bazu podataka. Hvala vam!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ovo osigurava da su vaši vrijedni razgovori sigurno spremljeni u bazu podataka. Hvala vam!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Ovo je eksperimentalna značajka, možda neće funkcionirati prema očekivanjima i podložna je promjenama u bilo kojem trenutku.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Ovo je eksperimentalna značajka, možda neće funkcionirati prema očekivanjima i podložna je promjenama u bilo kojem trenutku.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(pl. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(pl. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(pl. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(pl. `sh webui.sh --api`)",
|
||||||
"(latest)": "(legújabb)",
|
"(latest)": "(legújabb)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "(Ollama)",
|
"(Ollama)": "(Ollama)",
|
||||||
"{{ models }}": "{{ modellek }}",
|
"{{ models }}": "{{ modellek }}",
|
||||||
"{{COUNT}} Available Tools": "{{COUNT}} Elérhető eszköz",
|
"{{COUNT}} Available Tools": "{{COUNT}} Elérhető eszköz",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Rossz válasz",
|
"Bad Response": "Rossz válasz",
|
||||||
"Banners": "Bannerek",
|
"Banners": "Bannerek",
|
||||||
"Base Model (From)": "Alap modell (Forrás)",
|
"Base Model (From)": "Alap modell (Forrás)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Köteg méret (num_batch)",
|
"Batch Size (num_batch)": "Köteg méret (num_batch)",
|
||||||
"before": "előtt",
|
"before": "előtt",
|
||||||
"Being lazy": "Lustaság",
|
"Being lazy": "Lustaság",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "pl. Eszközök különböző műveletek elvégzéséhez",
|
"e.g. Tools for performing various operations": "pl. Eszközök különböző műveletek elvégzéséhez",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Szerkesztés",
|
"Edit": "Szerkesztés",
|
||||||
"Edit Arena Model": "Arena modell szerkesztése",
|
"Edit Arena Model": "Arena modell szerkesztése",
|
||||||
"Edit Channel": "Csatorna szerkesztése",
|
"Edit Channel": "Csatorna szerkesztése",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "Engedélyezd a Mirostat mintavételezést a perplexitás szabályozásához.",
|
"Enable Mirostat sampling for controlling perplexity.": "Engedélyezd a Mirostat mintavételezést a perplexitás szabályozásához.",
|
||||||
"Enable New Sign Ups": "Új regisztrációk engedélyezése",
|
"Enable New Sign Ups": "Új regisztrációk engedélyezése",
|
||||||
"Enabled": "Engedélyezve",
|
"Enabled": "Engedélyezve",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "Ideiglenes csevegés kikényszerítése",
|
"Enforce Temporary Chat": "Ideiglenes csevegés kikényszerítése",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Győződj meg róla, hogy a CSV fájl tartalmazza ezt a 4 oszlopot ebben a sorrendben: Név, Email, Jelszó, Szerep.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Győződj meg róla, hogy a CSV fájl tartalmazza ezt a 4 oszlopot ebben a sorrendben: Név, Email, Jelszó, Szerep.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Ismétlési büntetés (Ollama)",
|
"Repeat Penalty (Ollama)": "Ismétlési büntetés (Ollama)",
|
||||||
"Reply in Thread": "Válasz szálban",
|
"Reply in Thread": "Válasz szálban",
|
||||||
"Request Mode": "Kérési mód",
|
"Request Mode": "Kérési mód",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Újrarangsoroló modell",
|
"Reranking Model": "Újrarangsoroló modell",
|
||||||
"Reranking model disabled": "Újrarangsoroló modell letiltva",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Újrarangsoroló modell beállítva erre: \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Visszaállítás",
|
"Reset": "Visszaállítás",
|
||||||
"Reset All Models": "Minden modell visszaállítása",
|
"Reset All Models": "Minden modell visszaállítása",
|
||||||
"Reset Upload Directory": "Feltöltési könyvtár visszaállítása",
|
"Reset Upload Directory": "Feltöltési könyvtár visszaállítása",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Mutat",
|
"Show": "Mutat",
|
||||||
"Show \"What's New\" modal on login": "\"Mi újság\" modal megjelenítése bejelentkezéskor",
|
"Show \"What's New\" modal on login": "\"Mi újság\" modal megjelenítése bejelentkezéskor",
|
||||||
"Show Admin Details in Account Pending Overlay": "Admin részletek megjelenítése a függő fiók átfedésben",
|
"Show Admin Details in Account Pending Overlay": "Admin részletek megjelenítése a függő fiók átfedésben",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "Modell megjelenítése",
|
"Show Model": "Modell megjelenítése",
|
||||||
"Show shortcuts": "Gyorsbillentyűk megjelenítése",
|
"Show shortcuts": "Gyorsbillentyűk megjelenítése",
|
||||||
"Show your support!": "Mutassa meg támogatását!",
|
"Show your support!": "Mutassa meg támogatását!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Chat válasz streamelése",
|
"Stream Chat Response": "Chat válasz streamelése",
|
||||||
"STT Model": "STT modell",
|
"STT Model": "STT modell",
|
||||||
"STT Settings": "STT beállítások",
|
"STT Settings": "STT beállítások",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Alcím (pl. a Római Birodalomról)",
|
"Subtitle (e.g. about the Roman Empire)": "Alcím (pl. a Római Birodalomról)",
|
||||||
"Success": "Siker",
|
"Success": "Siker",
|
||||||
"Successfully updated.": "Sikeresen frissítve.",
|
"Successfully updated.": "Sikeresen frissítve.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "Ez a csevegés nem jelenik meg az előzményekben, és az üzeneteid nem kerülnek mentésre.",
|
"This chat won’t appear in history and your messages will not be saved.": "Ez a csevegés nem jelenik meg az előzményekben, és az üzeneteid nem kerülnek mentésre.",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ez biztosítja, hogy értékes beszélgetései biztonságosan mentésre kerüljenek a backend adatbázisban. Köszönjük!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ez biztosítja, hogy értékes beszélgetései biztonságosan mentésre kerüljenek a backend adatbázisban. Köszönjük!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Ez egy kísérleti funkció, lehet, hogy nem a várt módon működik és bármikor változhat.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Ez egy kísérleti funkció, lehet, hogy nem a várt módon működik és bármikor változhat.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Ez az opció szabályozza, hány token marad meg a kontextus frissítésekor. Például, ha 2-re van állítva, a beszélgetés kontextusának utolsó 2 tokenje megmarad. A kontextus megőrzése segíthet a beszélgetés folytonosságának fenntartásában, de csökkentheti az új témákra való reagálás képességét.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Ez az opció szabályozza, hány token marad meg a kontextus frissítésekor. Például, ha 2-re van állítva, a beszélgetés kontextusának utolsó 2 tokenje megmarad. A kontextus megőrzése segíthet a beszélgetés folytonosságának fenntartásában, de csökkentheti az új témákra való reagálás képességét.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Ez az opció beállítja a modell által generálható tokenek maximális számát a válaszban. Ezen limit növelése hosszabb válaszokat tesz lehetővé, de növelheti a nem hasznos vagy irreleváns tartalom generálásának valószínűségét.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Ez az opció beállítja a modell által generálható tokenek maximális számát a válaszban. Ezen limit növelése hosszabb válaszokat tesz lehetővé, de növelheti a nem hasznos vagy irreleváns tartalom generálásának valószínűségét.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Ez az opció törli az összes meglévő fájlt a gyűjteményben és lecseréli őket az újonnan feltöltött fájlokkal.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Ez az opció törli az összes meglévő fájlt a gyűjteményben és lecseréli őket az újonnan feltöltött fájlokkal.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(contoh: `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(contoh: `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(contoh: `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(contoh: `sh webui.sh --api`)",
|
||||||
"(latest)": "(terbaru)",
|
"(latest)": "(terbaru)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Respons Buruk",
|
"Bad Response": "Respons Buruk",
|
||||||
"Banners": "Spanduk",
|
"Banners": "Spanduk",
|
||||||
"Base Model (From)": "Model Dasar (Dari)",
|
"Base Model (From)": "Model Dasar (Dari)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Ukuran Batch (num_batch)",
|
"Batch Size (num_batch)": "Ukuran Batch (num_batch)",
|
||||||
"before": "sebelum",
|
"before": "sebelum",
|
||||||
"Being lazy": "Menjadi malas",
|
"Being lazy": "Menjadi malas",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Edit",
|
"Edit": "Edit",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Aktifkan Pendaftaran Baru",
|
"Enable New Sign Ups": "Aktifkan Pendaftaran Baru",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Pastikan file CSV Anda menyertakan 4 kolom dengan urutan sebagai berikut: Nama, Email, Kata Sandi, Peran.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Pastikan file CSV Anda menyertakan 4 kolom dengan urutan sebagai berikut: Nama, Email, Kata Sandi, Peran.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Mode Permintaan",
|
"Request Mode": "Mode Permintaan",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Model Pemeringkatan Ulang",
|
"Reranking Model": "Model Pemeringkatan Ulang",
|
||||||
"Reranking model disabled": "Model pemeringkatan ulang dinonaktifkan",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Model pemeringkatan diatur ke \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Atur Ulang",
|
"Reset": "Atur Ulang",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Setel Ulang Direktori Unggahan",
|
"Reset Upload Directory": "Setel Ulang Direktori Unggahan",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Tampilkan",
|
"Show": "Tampilkan",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "Tampilkan Detail Admin di Hamparan Akun Tertunda",
|
"Show Admin Details in Account Pending Overlay": "Tampilkan Detail Admin di Hamparan Akun Tertunda",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Tampilkan pintasan",
|
"Show shortcuts": "Tampilkan pintasan",
|
||||||
"Show your support!": "Tunjukkan dukungan Anda!",
|
"Show your support!": "Tunjukkan dukungan Anda!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "Model STT",
|
"STT Model": "Model STT",
|
||||||
"STT Settings": "Pengaturan STT",
|
"STT Settings": "Pengaturan STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Subtitle (misalnya tentang Kekaisaran Romawi)",
|
"Subtitle (e.g. about the Roman Empire)": "Subtitle (misalnya tentang Kekaisaran Romawi)",
|
||||||
"Success": "Berhasil",
|
"Success": "Berhasil",
|
||||||
"Successfully updated.": "Berhasil diperbarui.",
|
"Successfully updated.": "Berhasil diperbarui.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ini akan memastikan bahwa percakapan Anda yang berharga disimpan dengan aman ke basis data backend. Terima kasih!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ini akan memastikan bahwa percakapan Anda yang berharga disimpan dengan aman ke basis data backend. Terima kasih!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Ini adalah fitur eksperimental, mungkin tidak berfungsi seperti yang diharapkan dan dapat berubah sewaktu-waktu.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Ini adalah fitur eksperimental, mungkin tidak berfungsi seperti yang diharapkan dan dapat berubah sewaktu-waktu.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(m.sh. `sh webui.sh --api --api-auth username_password `)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(m.sh. `sh webui.sh --api --api-auth username_password `)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(m.sh. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(m.sh. `sh webui.sh --api`)",
|
||||||
"(latest)": "(is déanaí)",
|
"(latest)": "(is déanaí)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "(Ollama)",
|
"(Ollama)": "(Ollama)",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "{{COUNT}} Uirlisí ar Fáil",
|
"{{COUNT}} Available Tools": "{{COUNT}} Uirlisí ar Fáil",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Droch-fhreagra",
|
"Bad Response": "Droch-fhreagra",
|
||||||
"Banners": "Meirgí",
|
"Banners": "Meirgí",
|
||||||
"Base Model (From)": "Múnla Bonn (Ó)",
|
"Base Model (From)": "Múnla Bonn (Ó)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Méid Baisc (num_batch)",
|
"Batch Size (num_batch)": "Méid Baisc (num_batch)",
|
||||||
"before": "roimh",
|
"before": "roimh",
|
||||||
"Being lazy": "A bheith leisciúil",
|
"Being lazy": "A bheith leisciúil",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "m.sh. Uirlisí chun oibríochtaí éagsúla a dhéanamh",
|
"e.g. Tools for performing various operations": "m.sh. Uirlisí chun oibríochtaí éagsúla a dhéanamh",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "m.sh., en-US, ja-JP (fág bán le haghaidh uathbhraite)",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "m.sh., en-US, ja-JP (fág bán le haghaidh uathbhraite)",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Cuir in eagar",
|
"Edit": "Cuir in eagar",
|
||||||
"Edit Arena Model": "Cuir Samhail Airéine in Eagar",
|
"Edit Arena Model": "Cuir Samhail Airéine in Eagar",
|
||||||
"Edit Channel": "Cuir Cainéal in Eagar",
|
"Edit Channel": "Cuir Cainéal in Eagar",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "Cumasaigh sampláil Mirostat chun seachrán a rialú.",
|
"Enable Mirostat sampling for controlling perplexity.": "Cumasaigh sampláil Mirostat chun seachrán a rialú.",
|
||||||
"Enable New Sign Ups": "Cumasaigh Clárúcháin Nua",
|
"Enable New Sign Ups": "Cumasaigh Clárúcháin Nua",
|
||||||
"Enabled": "Cumasaithe",
|
"Enabled": "Cumasaithe",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "Cuir Comhrá Sealadach i bhfeidhm",
|
"Enforce Temporary Chat": "Cuir Comhrá Sealadach i bhfeidhm",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Déan cinnte go bhfuil 4 cholún san ord seo i do chomhad CSV: Ainm, Ríomhphost, Pasfhocal, Ról.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Déan cinnte go bhfuil 4 cholún san ord seo i do chomhad CSV: Ainm, Ríomhphost, Pasfhocal, Ról.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Pionós Athrá (Ollama)",
|
"Repeat Penalty (Ollama)": "Pionós Athrá (Ollama)",
|
||||||
"Reply in Thread": "Freagra i Snáithe",
|
"Reply in Thread": "Freagra i Snáithe",
|
||||||
"Request Mode": "Mód Iarratais",
|
"Request Mode": "Mód Iarratais",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Múnla Athrangú",
|
"Reranking Model": "Múnla Athrangú",
|
||||||
"Reranking model disabled": "Samhail athrangú faoi mhíchumas",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Samhail athrangú socraithe go \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Athshocraigh",
|
"Reset": "Athshocraigh",
|
||||||
"Reset All Models": "Athshocraigh Gach Múnla",
|
"Reset All Models": "Athshocraigh Gach Múnla",
|
||||||
"Reset Upload Directory": "Athshocraigh Eolaire Uas",
|
"Reset Upload Directory": "Athshocraigh Eolaire Uas",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Taispeáin",
|
"Show": "Taispeáin",
|
||||||
"Show \"What's New\" modal on login": "Taispeáin módúil \"Cad atá Nua\" ar logáil isteach",
|
"Show \"What's New\" modal on login": "Taispeáin módúil \"Cad atá Nua\" ar logáil isteach",
|
||||||
"Show Admin Details in Account Pending Overlay": "Taispeáin Sonraí Riaracháin sa Chuntas ar Feitheamh Forleagan",
|
"Show Admin Details in Account Pending Overlay": "Taispeáin Sonraí Riaracháin sa Chuntas ar Feitheamh Forleagan",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "Taispeáin Múnla",
|
"Show Model": "Taispeáin Múnla",
|
||||||
"Show shortcuts": "Taispeáin aicearraí",
|
"Show shortcuts": "Taispeáin aicearraí",
|
||||||
"Show your support!": "Taispeáin do thacaíocht!",
|
"Show your support!": "Taispeáin do thacaíocht!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Freagra Comhrá Sruth",
|
"Stream Chat Response": "Freagra Comhrá Sruth",
|
||||||
"STT Model": "Múnla STT",
|
"STT Model": "Múnla STT",
|
||||||
"STT Settings": "Socruithe STT",
|
"STT Settings": "Socruithe STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Fotheideal (m.sh. faoin Impireacht Rómhánach)",
|
"Subtitle (e.g. about the Roman Empire)": "Fotheideal (m.sh. faoin Impireacht Rómhánach)",
|
||||||
"Success": "Rath",
|
"Success": "Rath",
|
||||||
"Successfully updated.": "Nuashonraithe go rathúil.",
|
"Successfully updated.": "Nuashonraithe go rathúil.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "Ní bheidh an comhrá seo le feiceáil sa stair agus ní shábhálfar do theachtaireachtaí.",
|
"This chat won’t appear in history and your messages will not be saved.": "Ní bheidh an comhrá seo le feiceáil sa stair agus ní shábhálfar do theachtaireachtaí.",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cinntíonn sé seo go sábhálfar do chomhráite luachmhara go daingean i do bhunachar sonraí cúltaca Go raibh maith agat!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cinntíonn sé seo go sábhálfar do chomhráite luachmhara go daingean i do bhunachar sonraí cúltaca Go raibh maith agat!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Is gné turgnamhach í seo, b'fhéidir nach bhfeidhmeoidh sé mar a bhíothas ag súil leis agus tá sé faoi réir athraithe ag am ar bith.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Is gné turgnamhach í seo, b'fhéidir nach bhfeidhmeoidh sé mar a bhíothas ag súil leis agus tá sé faoi réir athraithe ag am ar bith.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Rialaíonn an rogha seo cé mhéad comhartha a chaomhnaítear agus an comhthéacs á athnuachan. Mar shampla, má shocraítear go 2 é, coinneofar an 2 chomhartha dheireanacha de chomhthéacs an chomhrá. Is féidir le comhthéacs a chaomhnú cabhrú le leanúnachas comhrá a choinneáil, ach d’fhéadfadh sé laghdú a dhéanamh ar an gcumas freagairt do thopaicí nua.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Rialaíonn an rogha seo cé mhéad comhartha a chaomhnaítear agus an comhthéacs á athnuachan. Mar shampla, má shocraítear go 2 é, coinneofar an 2 chomhartha dheireanacha de chomhthéacs an chomhrá. Is féidir le comhthéacs a chaomhnú cabhrú le leanúnachas comhrá a choinneáil, ach d’fhéadfadh sé laghdú a dhéanamh ar an gcumas freagairt do thopaicí nua.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Socraíonn an rogha seo an t-uaslíon comharthaí is féidir leis an tsamhail a ghiniúint ina fhreagra. Tríd an teorainn seo a mhéadú is féidir leis an tsamhail freagraí níos faide a sholáthar, ach d’fhéadfadh go méadódh sé an dóchúlacht go nginfear ábhar neamhchabhrach nó nach mbaineann le hábhar.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Socraíonn an rogha seo an t-uaslíon comharthaí is féidir leis an tsamhail a ghiniúint ina fhreagra. Tríd an teorainn seo a mhéadú is féidir leis an tsamhail freagraí níos faide a sholáthar, ach d’fhéadfadh go méadódh sé an dóchúlacht go nginfear ábhar neamhchabhrach nó nach mbaineann le hábhar.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Scriosfaidh an rogha seo gach comhad atá sa bhailiúchán agus cuirfear comhaid nua-uaslódála ina n-ionad.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Scriosfaidh an rogha seo gach comhad atá sa bhailiúchán agus cuirfear comhaid nua-uaslódála ina n-ionad.",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(例: `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(例: `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(例: `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(例: `sh webui.sh --api`)",
|
||||||
"(latest)": "(最新)",
|
"(latest)": "(最新)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ モデル }}",
|
"{{ models }}": "{{ モデル }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "応答が悪い",
|
"Bad Response": "応答が悪い",
|
||||||
"Banners": "バナー",
|
"Banners": "バナー",
|
||||||
"Base Model (From)": "ベースモデル (From)",
|
"Base Model (From)": "ベースモデル (From)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "バッチサイズ (num_batch)",
|
"Batch Size (num_batch)": "バッチサイズ (num_batch)",
|
||||||
"before": "より前",
|
"before": "より前",
|
||||||
"Being lazy": "怠惰な",
|
"Being lazy": "怠惰な",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "編集",
|
"Edit": "編集",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "新規登録を有効にする",
|
"Enable New Sign Ups": "新規登録を有効にする",
|
||||||
"Enabled": "有効",
|
"Enabled": "有効",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSVファイルに4つの列が含まれていることを確認してください: Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSVファイルに4つの列が含まれていることを確認してください: Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "リクエストモード",
|
"Request Mode": "リクエストモード",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "モデルの再ランキング",
|
"Reranking Model": "モデルの再ランキング",
|
||||||
"Reranking model disabled": "再ランキングモデルが無効です",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "再ランキングモデルを \"{{reranking_model}}\" に設定しました",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "アップロードディレクトリをリセット",
|
"Reset Upload Directory": "アップロードディレクトリをリセット",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "表示",
|
"Show": "表示",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "表示",
|
"Show shortcuts": "表示",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "STTモデル",
|
"STT Model": "STTモデル",
|
||||||
"STT Settings": "STT設定",
|
"STT Settings": "STT設定",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "タイトル (例: ローマ帝国)",
|
"Subtitle (e.g. about the Roman Empire)": "タイトル (例: ローマ帝国)",
|
||||||
"Success": "成功",
|
"Success": "成功",
|
||||||
"Successfully updated.": "正常に更新されました。",
|
"Successfully updated.": "正常に更新されました。",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "これは、貴重な会話がバックエンドデータベースに安全に保存されることを保証します。ありがとうございます!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "これは、貴重な会話がバックエンドデータベースに安全に保存されることを保証します。ありがとうございます!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "実験的機能であり正常動作しない場合があります。",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "実験的機能であり正常動作しない場合があります。",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(მაგ: `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(მაგ: `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(მაგ: `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(მაგ: `sh webui.sh --api`)",
|
||||||
"(latest)": "(უახლესი)",
|
"(latest)": "(უახლესი)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ მოდელები }}",
|
"{{ models }}": "{{ მოდელები }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "არასწორი პასუხი",
|
"Bad Response": "არასწორი პასუხი",
|
||||||
"Banners": "ბანერები",
|
"Banners": "ბანერები",
|
||||||
"Base Model (From)": "საბაზისო მოდელი (საიდან)",
|
"Base Model (From)": "საბაზისო მოდელი (საიდან)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "მითითებულ დრომდე",
|
"before": "მითითებულ დრომდე",
|
||||||
"Being lazy": "ზარმაცობა",
|
"Being lazy": "ზარმაცობა",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "ჩასწორება",
|
"Edit": "ჩასწორება",
|
||||||
"Edit Arena Model": "არენის მოდელის ჩასწორება",
|
"Edit Arena Model": "არენის მოდელის ჩასწორება",
|
||||||
"Edit Channel": "არხის ჩასწორება",
|
"Edit Channel": "არხის ჩასწორება",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "ახალი რეგისტრაციების ჩართვა",
|
"Enable New Sign Ups": "ახალი რეგისტრაციების ჩართვა",
|
||||||
"Enabled": "ჩართულია",
|
"Enabled": "ჩართულია",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "დარწმუნდით, რომ თქვენი CSV-ფაილი შეიცავს 4 ველს ამ მიმდევრობით: სახელი, ელფოსტა, პაროლი, როლი.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "დარწმუნდით, რომ თქვენი CSV-ფაილი შეიცავს 4 ველს ამ მიმდევრობით: სახელი, ელფოსტა, პაროლი, როლი.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "ნაკადში პასუხი",
|
"Reply in Thread": "ნაკადში პასუხი",
|
||||||
"Request Mode": "მოთხოვნის რეჟიმი",
|
"Request Mode": "მოთხოვნის რეჟიმი",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Reranking მოდელი",
|
"Reranking Model": "Reranking მოდელი",
|
||||||
"Reranking model disabled": "Reranking მოდელი გათიშულია",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"",
|
|
||||||
"Reset": "ჩამოყრა",
|
"Reset": "ჩამოყრა",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "ჩვენება",
|
"Show": "ჩვენება",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "მალსახმობების ჩვენება",
|
"Show shortcuts": "მალსახმობების ჩვენება",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "STT-ის მორგება",
|
"STT Settings": "STT-ის მორგება",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "სუბტიტრები (მაგ. რომის იმპერიის შესახებ)",
|
"Subtitle (e.g. about the Roman Empire)": "სუბტიტრები (მაგ. რომის იმპერიის შესახებ)",
|
||||||
"Success": "წარმატება",
|
"Success": "წარმატება",
|
||||||
"Successfully updated.": "წარმატებით განახლდა.",
|
"Successfully updated.": "წარმატებით განახლდა.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "ეს უზრუნველყოფს, რომ თქვენი ღირებული საუბრები უსაფრთხოდ შეინახება თქვენს უკანაბოლო მონაცემთა ბაზაში. მადლობა!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "ეს უზრუნველყოფს, რომ თქვენი ღირებული საუბრები უსაფრთხოდ შეინახება თქვენს უკანაბოლო მონაცემთა ბაზაში. მადლობა!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(예: `sh webui.sh --api --api-auth 사용자이름_비밀번호`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(예: `sh webui.sh --api --api-auth 사용자이름_비밀번호`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(예: `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(예: `sh webui.sh --api`)",
|
||||||
"(latest)": "(최근)",
|
"(latest)": "(최근)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "사용 가능한 도구 {{COUNT}}개",
|
"{{COUNT}} Available Tools": "사용 가능한 도구 {{COUNT}}개",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "잘못된 응답",
|
"Bad Response": "잘못된 응답",
|
||||||
"Banners": "배너",
|
"Banners": "배너",
|
||||||
"Base Model (From)": "기본 모델(시작)",
|
"Base Model (From)": "기본 모델(시작)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "배치 크기 (num_batch)",
|
"Batch Size (num_batch)": "배치 크기 (num_batch)",
|
||||||
"before": "이전",
|
"before": "이전",
|
||||||
"Being lazy": "게으름 피우기",
|
"Being lazy": "게으름 피우기",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "예: 다양한 작업을 수행하는 도구",
|
"e.g. Tools for performing various operations": "예: 다양한 작업을 수행하는 도구",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "예: en-US, ja-JP (자동 감지를 위해 비워 두세요)",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "예: en-US, ja-JP (자동 감지를 위해 비워 두세요)",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "편집",
|
"Edit": "편집",
|
||||||
"Edit Arena Model": "아레나 모델 편집",
|
"Edit Arena Model": "아레나 모델 편집",
|
||||||
"Edit Channel": "채널 편집",
|
"Edit Channel": "채널 편집",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "퍼플렉서티 제어를 위해 Mirostat 샘플링 활성화",
|
"Enable Mirostat sampling for controlling perplexity.": "퍼플렉서티 제어를 위해 Mirostat 샘플링 활성화",
|
||||||
"Enable New Sign Ups": "새 회원가입 활성화",
|
"Enable New Sign Ups": "새 회원가입 활성화",
|
||||||
"Enabled": "활성화됨",
|
"Enabled": "활성화됨",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "임시 채팅 강제 적용",
|
"Enforce Temporary Chat": "임시 채팅 강제 적용",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV 파일에 이름, 이메일, 비밀번호, 역할 4개의 열이 순서대로 포함되어 있는지 확인하세요.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV 파일에 이름, 이메일, 비밀번호, 역할 4개의 열이 순서대로 포함되어 있는지 확인하세요.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "스레드에 답글 달기",
|
"Reply in Thread": "스레드에 답글 달기",
|
||||||
"Request Mode": "요청 모드",
|
"Request Mode": "요청 모드",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Reranking 모델",
|
"Reranking Model": "Reranking 모델",
|
||||||
"Reranking model disabled": "Reranking 모델 비활성화",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Reranking 모델을 \"{{reranking_model}}\"로 설정",
|
|
||||||
"Reset": "초기화",
|
"Reset": "초기화",
|
||||||
"Reset All Models": "모든 모델 초기화",
|
"Reset All Models": "모든 모델 초기화",
|
||||||
"Reset Upload Directory": "업로드 디렉토리 초기화",
|
"Reset Upload Directory": "업로드 디렉토리 초기화",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "보기",
|
"Show": "보기",
|
||||||
"Show \"What's New\" modal on login": "로그인시 \"새로운 기능\" 모달 보기",
|
"Show \"What's New\" modal on login": "로그인시 \"새로운 기능\" 모달 보기",
|
||||||
"Show Admin Details in Account Pending Overlay": "사용자용 계정 보류 설명창에, 관리자 상세 정보 노출",
|
"Show Admin Details in Account Pending Overlay": "사용자용 계정 보류 설명창에, 관리자 상세 정보 노출",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "단축키 보기",
|
"Show shortcuts": "단축키 보기",
|
||||||
"Show your support!": "당신의 응원을 보내주세요!",
|
"Show your support!": "당신의 응원을 보내주세요!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "스트림 채팅 응답",
|
"Stream Chat Response": "스트림 채팅 응답",
|
||||||
"STT Model": "STT 모델",
|
"STT Model": "STT 모델",
|
||||||
"STT Settings": "STT 설정",
|
"STT Settings": "STT 설정",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "자막 (예: 로마 황제)",
|
"Subtitle (e.g. about the Roman Empire)": "자막 (예: 로마 황제)",
|
||||||
"Success": "성공",
|
"Success": "성공",
|
||||||
"Successfully updated.": "성공적으로 업데이트되었습니다.",
|
"Successfully updated.": "성공적으로 업데이트되었습니다.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "이렇게 하면 소중한 대화 내용이 백엔드 데이터베이스에 안전하게 저장됩니다. 감사합니다!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "이렇게 하면 소중한 대화 내용이 백엔드 데이터베이스에 안전하게 저장됩니다. 감사합니다!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "이것은 실험적 기능으로, 예상대로 작동하지 않을 수 있으며 언제든지 변경될 수 있습니다.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "이것은 실험적 기능으로, 예상대로 작동하지 않을 수 있으며 언제든지 변경될 수 있습니다.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "이 행동은 컬렉션에 존재하는 모든 파일을 삭제하고 새로 업로드된 파일들로 대체됩니다",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "이 행동은 컬렉션에 존재하는 모든 파일을 삭제하고 새로 업로드된 파일들로 대체됩니다",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(pvz. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(pvz. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(pvz. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(pvz. `sh webui.sh --api`)",
|
||||||
"(latest)": "(naujausias)",
|
"(latest)": "(naujausias)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Neteisingas atsakymas",
|
"Bad Response": "Neteisingas atsakymas",
|
||||||
"Banners": "Baneriai",
|
"Banners": "Baneriai",
|
||||||
"Base Model (From)": "Bazinis modelis",
|
"Base Model (From)": "Bazinis modelis",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Batch dydis",
|
"Batch Size (num_batch)": "Batch dydis",
|
||||||
"before": "prieš",
|
"before": "prieš",
|
||||||
"Being lazy": "Būvimas tingiu",
|
"Being lazy": "Būvimas tingiu",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Redaguoti",
|
"Edit": "Redaguoti",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Aktyvuoti naujas registracijas",
|
"Enable New Sign Ups": "Aktyvuoti naujas registracijas",
|
||||||
"Enabled": "Leisti",
|
"Enabled": "Leisti",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Įsitikinkite, kad CSV failas turi 4 kolonas šiuo eiliškumu: Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Įsitikinkite, kad CSV failas turi 4 kolonas šiuo eiliškumu: Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Užklausos rėžimas",
|
"Request Mode": "Užklausos rėžimas",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Reranking modelis",
|
"Reranking Model": "Reranking modelis",
|
||||||
"Reranking model disabled": "Reranking modelis neleidžiamas",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Nustatytas rereanking modelis: \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Atkurti",
|
"Reset": "Atkurti",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Atkurti įkėlimų direktoiją",
|
"Reset Upload Directory": "Atkurti įkėlimų direktoiją",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Rodyti",
|
"Show": "Rodyti",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "Rodyti administratoriaus duomenis laukiant paskyros patvirtinimo",
|
"Show Admin Details in Account Pending Overlay": "Rodyti administratoriaus duomenis laukiant paskyros patvirtinimo",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Rodyti trumpinius",
|
"Show shortcuts": "Rodyti trumpinius",
|
||||||
"Show your support!": "Palaikykite",
|
"Show your support!": "Palaikykite",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "STT modelis",
|
"STT Model": "STT modelis",
|
||||||
"STT Settings": "STT nustatymai",
|
"STT Settings": "STT nustatymai",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Subtitras",
|
"Subtitle (e.g. about the Roman Empire)": "Subtitras",
|
||||||
"Success": "Sėkmingai",
|
"Success": "Sėkmingai",
|
||||||
"Successfully updated.": "Sėkmingai atnaujinta.",
|
"Successfully updated.": "Sėkmingai atnaujinta.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Tai užtikrina, kad Jūsų pokalbiai saugiai saugojami duomenų bazėje. Ačiū!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Tai užtikrina, kad Jūsų pokalbiai saugiai saugojami duomenų bazėje. Ačiū!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Tai eksperimentinė funkcija ir gali veikti nevisada.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Tai eksperimentinė funkcija ir gali veikti nevisada.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(contoh `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(contoh `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(contoh `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(contoh `sh webui.sh --api`)",
|
||||||
"(latest)": "(terkini)",
|
"(latest)": "(terkini)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Maklumbalas Salah",
|
"Bad Response": "Maklumbalas Salah",
|
||||||
"Banners": "Sepanduk",
|
"Banners": "Sepanduk",
|
||||||
"Base Model (From)": "Model Asas (Dari)",
|
"Base Model (From)": "Model Asas (Dari)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Saiz Kumpulan (num_batch)",
|
"Batch Size (num_batch)": "Saiz Kumpulan (num_batch)",
|
||||||
"before": "sebelum,",
|
"before": "sebelum,",
|
||||||
"Being lazy": "Menjadi Malas",
|
"Being lazy": "Menjadi Malas",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Edit",
|
"Edit": "Edit",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Benarkan Pendaftaran Baharu",
|
"Enable New Sign Ups": "Benarkan Pendaftaran Baharu",
|
||||||
"Enabled": "Dibenarkan",
|
"Enabled": "Dibenarkan",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "astikan fail CSV anda mengandungi 4 lajur dalam susunan ini: Nama, E-mel, Kata Laluan, Peranan.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "astikan fail CSV anda mengandungi 4 lajur dalam susunan ini: Nama, E-mel, Kata Laluan, Peranan.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Mod Permintaan",
|
"Request Mode": "Mod Permintaan",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Model 'Reranking'",
|
"Reranking Model": "Model 'Reranking'",
|
||||||
"Reranking model disabled": "Model 'Reranking' dilumpuhkan",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Model 'Reranking' ditetapkan kepada \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Tetapkan Semula",
|
"Reset": "Tetapkan Semula",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Tetapkan Semula Direktori Muat Naik",
|
"Reset Upload Directory": "Tetapkan Semula Direktori Muat Naik",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Tunjukkan",
|
"Show": "Tunjukkan",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "Tunjukkan Butiran Pentadbir dalam Akaun Menunggu Tindanan",
|
"Show Admin Details in Account Pending Overlay": "Tunjukkan Butiran Pentadbir dalam Akaun Menunggu Tindanan",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Tunjukkan pintasan",
|
"Show shortcuts": "Tunjukkan pintasan",
|
||||||
"Show your support!": "Tunjukkan sokongan anda!",
|
"Show your support!": "Tunjukkan sokongan anda!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "Model STT",
|
"STT Model": "Model STT",
|
||||||
"STT Settings": "Tetapan STT",
|
"STT Settings": "Tetapan STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Sari kata (cth tentang Kesultanan Melaka)",
|
"Subtitle (e.g. about the Roman Empire)": "Sari kata (cth tentang Kesultanan Melaka)",
|
||||||
"Success": "Berjaya",
|
"Success": "Berjaya",
|
||||||
"Successfully updated.": "Berjaya Dikemaskini",
|
"Successfully updated.": "Berjaya Dikemaskini",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ini akan memastikan bahawa perbualan berharga anda disimpan dengan selamat ke pangkalan data 'backend' anda. Terima kasih!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ini akan memastikan bahawa perbualan berharga anda disimpan dengan selamat ke pangkalan data 'backend' anda. Terima kasih!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "ni adalah ciri percubaan, ia mungkin tidak berfungsi seperti yang diharapkan dan tertakluk kepada perubahan pada bila-bila masa.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "ni adalah ciri percubaan, ia mungkin tidak berfungsi seperti yang diharapkan dan tertakluk kepada perubahan pada bila-bila masa.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(f.eks. `sh webui.sh --api --api-auth brukernavn_passord`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(f.eks. `sh webui.sh --api --api-auth brukernavn_passord`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(f.eks. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(f.eks. `sh webui.sh --api`)",
|
||||||
"(latest)": "(siste)",
|
"(latest)": "(siste)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ modeller }}",
|
"{{ models }}": "{{ modeller }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Dårlig svar",
|
"Bad Response": "Dårlig svar",
|
||||||
"Banners": "Bannere",
|
"Banners": "Bannere",
|
||||||
"Base Model (From)": "Grunnmodell (fra)",
|
"Base Model (From)": "Grunnmodell (fra)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Batchstørrelse (num_batch)",
|
"Batch Size (num_batch)": "Batchstørrelse (num_batch)",
|
||||||
"before": "før",
|
"before": "før",
|
||||||
"Being lazy": "Er lat",
|
"Being lazy": "Er lat",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "f.eks. Verktøy for å gjøre ulike handlinger",
|
"e.g. Tools for performing various operations": "f.eks. Verktøy for å gjøre ulike handlinger",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Rediger",
|
"Edit": "Rediger",
|
||||||
"Edit Arena Model": "Rediger Arena-modell",
|
"Edit Arena Model": "Rediger Arena-modell",
|
||||||
"Edit Channel": "Rediger kanal",
|
"Edit Channel": "Rediger kanal",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Aktiver nye registreringer",
|
"Enable New Sign Ups": "Aktiver nye registreringer",
|
||||||
"Enabled": "Aktivert",
|
"Enabled": "Aktivert",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Sørg for at CSV-filen din inkluderer fire kolonner i denne rekkefølgen: Navn, E-post, Passord, Rolle.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Sørg for at CSV-filen din inkluderer fire kolonner i denne rekkefølgen: Navn, E-post, Passord, Rolle.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Gjenta straff (Ollama)",
|
"Repeat Penalty (Ollama)": "Gjenta straff (Ollama)",
|
||||||
"Reply in Thread": "Svar i tråd",
|
"Reply in Thread": "Svar i tråd",
|
||||||
"Request Mode": "Forespørselsmodus",
|
"Request Mode": "Forespørselsmodus",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Omrangeringsmodell",
|
"Reranking Model": "Omrangeringsmodell",
|
||||||
"Reranking model disabled": "Omrangeringsmodell deaktivert",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Omrangeringsmodell er angitt til \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Tilbakestill",
|
"Reset": "Tilbakestill",
|
||||||
"Reset All Models": "Tilbakestill alle modeller",
|
"Reset All Models": "Tilbakestill alle modeller",
|
||||||
"Reset Upload Directory": "Tilbakestill opplastingskatalog",
|
"Reset Upload Directory": "Tilbakestill opplastingskatalog",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Vis",
|
"Show": "Vis",
|
||||||
"Show \"What's New\" modal on login": "Vis \"Hva er nytt\"-modal ved innlogging",
|
"Show \"What's New\" modal on login": "Vis \"Hva er nytt\"-modal ved innlogging",
|
||||||
"Show Admin Details in Account Pending Overlay": "Vis administratordetaljer i ventende kontovisning",
|
"Show Admin Details in Account Pending Overlay": "Vis administratordetaljer i ventende kontovisning",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Vis snarveier",
|
"Show shortcuts": "Vis snarveier",
|
||||||
"Show your support!": "Vis din støtte!",
|
"Show your support!": "Vis din støtte!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Strømme chat-svar",
|
"Stream Chat Response": "Strømme chat-svar",
|
||||||
"STT Model": "STT-modell",
|
"STT Model": "STT-modell",
|
||||||
"STT Settings": "STT-innstillinger",
|
"STT Settings": "STT-innstillinger",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Undertittel (f.eks. om romerriket)",
|
"Subtitle (e.g. about the Roman Empire)": "Undertittel (f.eks. om romerriket)",
|
||||||
"Success": "Suksess",
|
"Success": "Suksess",
|
||||||
"Successfully updated.": "Oppdatert.",
|
"Successfully updated.": "Oppdatert.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dette sikrer at de verdifulle samtalene dine lagres sikkert i backend-databasen din. Takk!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dette sikrer at de verdifulle samtalene dine lagres sikkert i backend-databasen din. Takk!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Dette er en eksperimentell funksjon. Det er mulig den ikke fungerer som forventet, og den kan endres når som helst.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Dette er en eksperimentell funksjon. Det er mulig den ikke fungerer som forventet, og den kan endres når som helst.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Dette alternativet sletter alle eksisterende filer i samlingen og erstatter dem med nyopplastede filer.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Dette alternativet sletter alle eksisterende filer i samlingen og erstatter dem med nyopplastede filer.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(bv. `sh webui.sh --api --api-auth gebruikersnaam_wachtwoord`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(bv. `sh webui.sh --api --api-auth gebruikersnaam_wachtwoord`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(bv. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(bv. `sh webui.sh --api`)",
|
||||||
"(latest)": "(nieuwste)",
|
"(latest)": "(nieuwste)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "(Ollama)",
|
"(Ollama)": "(Ollama)",
|
||||||
"{{ models }}": "{{ modellen }}",
|
"{{ models }}": "{{ modellen }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Ongeldig antwoord",
|
"Bad Response": "Ongeldig antwoord",
|
||||||
"Banners": "Banners",
|
"Banners": "Banners",
|
||||||
"Base Model (From)": "Basismodel (Vanaf)",
|
"Base Model (From)": "Basismodel (Vanaf)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Batchgrootte (num_batch)",
|
"Batch Size (num_batch)": "Batchgrootte (num_batch)",
|
||||||
"before": "voor",
|
"before": "voor",
|
||||||
"Being lazy": "Lui zijn",
|
"Being lazy": "Lui zijn",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "Gereedschappen om verschillende bewerkingen uit te voeren",
|
"e.g. Tools for performing various operations": "Gereedschappen om verschillende bewerkingen uit te voeren",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Wijzig",
|
"Edit": "Wijzig",
|
||||||
"Edit Arena Model": "Bewerk arenamodel",
|
"Edit Arena Model": "Bewerk arenamodel",
|
||||||
"Edit Channel": "Bewerk kanaal",
|
"Edit Channel": "Bewerk kanaal",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "Mirostat-sampling in om perplexiteit te controleren inschakelen.",
|
"Enable Mirostat sampling for controlling perplexity.": "Mirostat-sampling in om perplexiteit te controleren inschakelen.",
|
||||||
"Enable New Sign Ups": "Schakel nieuwe registraties in",
|
"Enable New Sign Ups": "Schakel nieuwe registraties in",
|
||||||
"Enabled": "Ingeschakeld",
|
"Enabled": "Ingeschakeld",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "Tijdelijke chat afdwingen",
|
"Enforce Temporary Chat": "Tijdelijke chat afdwingen",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Zorg ervoor dat uw CSV-bestand de volgende vier kolommen in deze volgorde bevat: Naam, E-mail, Wachtwoord, Rol.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Zorg ervoor dat uw CSV-bestand de volgende vier kolommen in deze volgorde bevat: Naam, E-mail, Wachtwoord, Rol.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Herhalingsstraf (Ollama)",
|
"Repeat Penalty (Ollama)": "Herhalingsstraf (Ollama)",
|
||||||
"Reply in Thread": "Antwoord in draad",
|
"Reply in Thread": "Antwoord in draad",
|
||||||
"Request Mode": "Request Modus",
|
"Request Mode": "Request Modus",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Reranking Model",
|
"Reranking Model": "Reranking Model",
|
||||||
"Reranking model disabled": "Reranking model uitgeschakeld",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Reranking model ingesteld op \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Herstellen",
|
"Reset": "Herstellen",
|
||||||
"Reset All Models": "Herstel alle modellen",
|
"Reset All Models": "Herstel alle modellen",
|
||||||
"Reset Upload Directory": "Herstel Uploadmap",
|
"Reset Upload Directory": "Herstel Uploadmap",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Toon",
|
"Show": "Toon",
|
||||||
"Show \"What's New\" modal on login": "Toon \"Wat is nieuw\" bij inloggen",
|
"Show \"What's New\" modal on login": "Toon \"Wat is nieuw\" bij inloggen",
|
||||||
"Show Admin Details in Account Pending Overlay": "Admin-details weergeven in overlay in afwachting van account",
|
"Show Admin Details in Account Pending Overlay": "Admin-details weergeven in overlay in afwachting van account",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "Toon model",
|
"Show Model": "Toon model",
|
||||||
"Show shortcuts": "Toon snelkoppelingen",
|
"Show shortcuts": "Toon snelkoppelingen",
|
||||||
"Show your support!": "Toon je steun",
|
"Show your support!": "Toon je steun",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Stream chat-antwoord",
|
"Stream Chat Response": "Stream chat-antwoord",
|
||||||
"STT Model": "STT Model",
|
"STT Model": "STT Model",
|
||||||
"STT Settings": "STT Instellingen",
|
"STT Settings": "STT Instellingen",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Ondertitel (bijv. over de Romeinse Empire)",
|
"Subtitle (e.g. about the Roman Empire)": "Ondertitel (bijv. over de Romeinse Empire)",
|
||||||
"Success": "Succes",
|
"Success": "Succes",
|
||||||
"Successfully updated.": "Succesvol bijgewerkt.",
|
"Successfully updated.": "Succesvol bijgewerkt.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dit zorgt ervoor dat je waardevolle gesprekken veilig worden opgeslagen in je backend database. Dank je wel!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dit zorgt ervoor dat je waardevolle gesprekken veilig worden opgeslagen in je backend database. Dank je wel!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Dit is een experimentele functie, het kan functioneren zoals verwacht en kan op elk moment veranderen.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Dit is een experimentele functie, het kan functioneren zoals verwacht en kan op elk moment veranderen.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Deze optie bepaalt hoeveel tokens bewaard blijven bij het verversen van de context. Als deze bijvoorbeeld op 2 staat, worden de laatste 2 tekens van de context van het gesprek bewaard. Het behouden van de context kan helpen om de continuïteit van een gesprek te behouden, maar het kan de mogelijkheid om te reageren op nieuwe onderwerpen verminderen.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Deze optie bepaalt hoeveel tokens bewaard blijven bij het verversen van de context. Als deze bijvoorbeeld op 2 staat, worden de laatste 2 tekens van de context van het gesprek bewaard. Het behouden van de context kan helpen om de continuïteit van een gesprek te behouden, maar het kan de mogelijkheid om te reageren op nieuwe onderwerpen verminderen.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Deze optie stelt het maximum aantal tokens in dat het model kan genereren in zijn antwoord. Door dit limiet te verhogen, kan het model langere antwoorden geven, maar het kan ook de kans vergroten dat er onbehulpzame of irrelevante inhoud wordt gegenereerd.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Deze optie stelt het maximum aantal tokens in dat het model kan genereren in zijn antwoord. Door dit limiet te verhogen, kan het model langere antwoorden geven, maar het kan ook de kans vergroten dat er onbehulpzame of irrelevante inhoud wordt gegenereerd.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Deze optie verwijdert alle bestaande bestanden in de collectie en vervangt ze door nieuw geüploade bestanden.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Deze optie verwijdert alle bestaande bestanden in de collectie en vervangt ze door nieuw geüploade bestanden.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "(ਉਦਾਹਰਣ ਦੇ ਤੌਰ ਤੇ `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(ਉਦਾਹਰਣ ਦੇ ਤੌਰ ਤੇ `sh webui.sh --api`)",
|
||||||
"(latest)": "(ਤਾਜ਼ਾ)",
|
"(latest)": "(ਤਾਜ਼ਾ)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ ਮਾਡਲ }}",
|
"{{ models }}": "{{ ਮਾਡਲ }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "ਖਰਾਬ ਜਵਾਬ",
|
"Bad Response": "ਖਰਾਬ ਜਵਾਬ",
|
||||||
"Banners": "ਬੈਨਰ",
|
"Banners": "ਬੈਨਰ",
|
||||||
"Base Model (From)": "ਬੇਸ ਮਾਡਲ (ਤੋਂ)",
|
"Base Model (From)": "ਬੇਸ ਮਾਡਲ (ਤੋਂ)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "ਪਹਿਲਾਂ",
|
"before": "ਪਹਿਲਾਂ",
|
||||||
"Being lazy": "ਆਲਸੀ ਹੋਣਾ",
|
"Being lazy": "ਆਲਸੀ ਹੋਣਾ",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "ਸੰਪਾਦਨ ਕਰੋ",
|
"Edit": "ਸੰਪਾਦਨ ਕਰੋ",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "ਨਵੇਂ ਸਾਈਨ ਅਪ ਯੋਗ ਕਰੋ",
|
"Enable New Sign Ups": "ਨਵੇਂ ਸਾਈਨ ਅਪ ਯੋਗ ਕਰੋ",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਤੁਹਾਡੀ CSV ਫਾਈਲ ਵਿੱਚ ਇਸ ਕ੍ਰਮ ਵਿੱਚ 4 ਕਾਲਮ ਹਨ: ਨਾਮ, ਈਮੇਲ, ਪਾਸਵਰਡ, ਭੂਮਿਕਾ।",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਤੁਹਾਡੀ CSV ਫਾਈਲ ਵਿੱਚ ਇਸ ਕ੍ਰਮ ਵਿੱਚ 4 ਕਾਲਮ ਹਨ: ਨਾਮ, ਈਮੇਲ, ਪਾਸਵਰਡ, ਭੂਮਿਕਾ।",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "ਬੇਨਤੀ ਮੋਡ",
|
"Request Mode": "ਬੇਨਤੀ ਮੋਡ",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "ਮਾਡਲ ਮੁੜ ਰੈਂਕਿੰਗ",
|
"Reranking Model": "ਮਾਡਲ ਮੁੜ ਰੈਂਕਿੰਗ",
|
||||||
"Reranking model disabled": "ਮਾਡਲ ਮੁੜ ਰੈਂਕਿੰਗ ਅਯੋਗ ਕੀਤਾ ਗਿਆ",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "ਮਾਡਲ ਮੁੜ ਰੈਂਕਿੰਗ ਨੂੰ \"{{reranking_model}}\" 'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "ਦਿਖਾਓ",
|
"Show": "ਦਿਖਾਓ",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "ਸ਼ਾਰਟਕਟ ਦਿਖਾਓ",
|
"Show shortcuts": "ਸ਼ਾਰਟਕਟ ਦਿਖਾਓ",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "",
|
"STT Model": "",
|
||||||
"STT Settings": "STT ਸੈਟਿੰਗਾਂ",
|
"STT Settings": "STT ਸੈਟਿੰਗਾਂ",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "ਉਪਸਿਰਲੇਖ (ਉਦਾਹਰਣ ਲਈ ਰੋਮਨ ਸਾਮਰਾਜ ਬਾਰੇ)",
|
"Subtitle (e.g. about the Roman Empire)": "ਉਪਸਿਰਲੇਖ (ਉਦਾਹਰਣ ਲਈ ਰੋਮਨ ਸਾਮਰਾਜ ਬਾਰੇ)",
|
||||||
"Success": "ਸਫਲਤਾ",
|
"Success": "ਸਫਲਤਾ",
|
||||||
"Successfully updated.": "ਸਫਲਤਾਪੂਰਵਕ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ।",
|
"Successfully updated.": "ਸਫਲਤਾਪੂਰਵਕ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ।",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੁਹਾਡੀਆਂ ਕੀਮਤੀ ਗੱਲਾਂ ਤੁਹਾਡੇ ਬੈਕਐਂਡ ਡਾਟਾਬੇਸ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਤੌਰ 'ਤੇ ਸੰਭਾਲੀਆਂ ਗਈਆਂ ਹਨ। ਧੰਨਵਾਦ!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੁਹਾਡੀਆਂ ਕੀਮਤੀ ਗੱਲਾਂ ਤੁਹਾਡੇ ਬੈਕਐਂਡ ਡਾਟਾਬੇਸ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਤੌਰ 'ਤੇ ਸੰਭਾਲੀਆਂ ਗਈਆਂ ਹਨ। ਧੰਨਵਾਦ!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(np. `sh webui.sh --api --api-auth username_password`)>",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(np. `sh webui.sh --api --api-auth username_password`)>",
|
||||||
"(e.g. `sh webui.sh --api`)": "(np. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(np. `sh webui.sh --api`)",
|
||||||
"(latest)": "(najnowszy)",
|
"(latest)": "(najnowszy)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ modele }}",
|
"{{ models }}": "{{ modele }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Nieprawidłowa odpowiedź",
|
"Bad Response": "Nieprawidłowa odpowiedź",
|
||||||
"Banners": "Bannery",
|
"Banners": "Bannery",
|
||||||
"Base Model (From)": "Model bazowy (od)",
|
"Base Model (From)": "Model bazowy (od)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Rozmiar partii (num_batch)",
|
"Batch Size (num_batch)": "Rozmiar partii (num_batch)",
|
||||||
"before": "przed",
|
"before": "przed",
|
||||||
"Being lazy": "Jest leniwy.",
|
"Being lazy": "Jest leniwy.",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "np. Narzędzia do wykonywania różnych operacji",
|
"e.g. Tools for performing various operations": "np. Narzędzia do wykonywania różnych operacji",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Edytuj",
|
"Edit": "Edytuj",
|
||||||
"Edit Arena Model": "Edytuj model arenę",
|
"Edit Arena Model": "Edytuj model arenę",
|
||||||
"Edit Channel": "Edytuj kanał",
|
"Edit Channel": "Edytuj kanał",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Włącz nowe rejestracje",
|
"Enable New Sign Ups": "Włącz nowe rejestracje",
|
||||||
"Enabled": "Włączone",
|
"Enabled": "Włączone",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Upewnij się, że twój plik CSV zawiera dokładnie 4 kolumny w następującej kolejności: Nazwa, Email, Hasło, Rola.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Upewnij się, że twój plik CSV zawiera dokładnie 4 kolumny w następującej kolejności: Nazwa, Email, Hasło, Rola.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Powtórzona kara (Ollama)",
|
"Repeat Penalty (Ollama)": "Powtórzona kara (Ollama)",
|
||||||
"Reply in Thread": "Odpowiedz w wątku",
|
"Reply in Thread": "Odpowiedz w wątku",
|
||||||
"Request Mode": "Tryb żądania",
|
"Request Mode": "Tryb żądania",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Poprawa rankingu modelu",
|
"Reranking Model": "Poprawa rankingu modelu",
|
||||||
"Reranking model disabled": "Ponowny ranking modeli wyłączony",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Ponowny ranking modeli ustawiony na \"{{reranking_model}}\".",
|
|
||||||
"Reset": "Resetuj",
|
"Reset": "Resetuj",
|
||||||
"Reset All Models": "Resetuj wszystkie modele",
|
"Reset All Models": "Resetuj wszystkie modele",
|
||||||
"Reset Upload Directory": "Resetuj katalog pobierania",
|
"Reset Upload Directory": "Resetuj katalog pobierania",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Wyświetl",
|
"Show": "Wyświetl",
|
||||||
"Show \"What's New\" modal on login": "Wyświetl okno dialogowe \"What's New\" podczas logowania",
|
"Show \"What's New\" modal on login": "Wyświetl okno dialogowe \"What's New\" podczas logowania",
|
||||||
"Show Admin Details in Account Pending Overlay": "Wyświetl szczegóły administratora w okienu informacyjnym o potrzebie zatwierdzenia przez administratora konta użytkownika",
|
"Show Admin Details in Account Pending Overlay": "Wyświetl szczegóły administratora w okienu informacyjnym o potrzebie zatwierdzenia przez administratora konta użytkownika",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Wyświetl skróty",
|
"Show shortcuts": "Wyświetl skróty",
|
||||||
"Show your support!": "Wyraź swoje poparcie!",
|
"Show your support!": "Wyraź swoje poparcie!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Strumieniowanie odpowiedzi z czatu",
|
"Stream Chat Response": "Strumieniowanie odpowiedzi z czatu",
|
||||||
"STT Model": "Model STT",
|
"STT Model": "Model STT",
|
||||||
"STT Settings": "Ustawienia STT",
|
"STT Settings": "Ustawienia STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Podtytuł (np. o Imperium Rzymskim)",
|
"Subtitle (e.g. about the Roman Empire)": "Podtytuł (np. o Imperium Rzymskim)",
|
||||||
"Success": "Sukces",
|
"Success": "Sukces",
|
||||||
"Successfully updated.": "Uaktualniono pomyślnie.",
|
"Successfully updated.": "Uaktualniono pomyślnie.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "To gwarantuje, że Twoje wartościowe rozmowy są bezpiecznie zapisywane w bazie danych backendowej. Dziękujemy!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "To gwarantuje, że Twoje wartościowe rozmowy są bezpiecznie zapisywane w bazie danych backendowej. Dziękujemy!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "To jest funkcja eksperymentalna, może nie działać zgodnie z oczekiwaniami i jest podatna na zmiany w dowolnym momencie.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "To jest funkcja eksperymentalna, może nie działać zgodnie z oczekiwaniami i jest podatna na zmiany w dowolnym momencie.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Ta opcja usunie wszystkie istniejące pliki w kolekcji i zastąpi je nowo przesłanymi plikami.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Ta opcja usunie wszystkie istniejące pliki w kolekcji i zastąpi je nowo przesłanymi plikami.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(por exemplo, `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(por exemplo, `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(por exemplo, `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(por exemplo, `sh webui.sh --api`)",
|
||||||
"(latest)": "(último)",
|
"(latest)": "(último)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Resposta Ruim",
|
"Bad Response": "Resposta Ruim",
|
||||||
"Banners": "Banners",
|
"Banners": "Banners",
|
||||||
"Base Model (From)": "Modelo Base (De)",
|
"Base Model (From)": "Modelo Base (De)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Tamanho do Lote (num_batch)",
|
"Batch Size (num_batch)": "Tamanho do Lote (num_batch)",
|
||||||
"before": "antes",
|
"before": "antes",
|
||||||
"Being lazy": "Sendo preguiçoso",
|
"Being lazy": "Sendo preguiçoso",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "Exemplo: Ferramentas para executar operações diversas",
|
"e.g. Tools for performing various operations": "Exemplo: Ferramentas para executar operações diversas",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Editar",
|
"Edit": "Editar",
|
||||||
"Edit Arena Model": "Editar Arena de Modelos",
|
"Edit Arena Model": "Editar Arena de Modelos",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Ativar Novos Cadastros",
|
"Enable New Sign Ups": "Ativar Novos Cadastros",
|
||||||
"Enabled": "Ativado",
|
"Enabled": "Ativado",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Certifique-se de que seu arquivo CSV inclua 4 colunas nesta ordem: Nome, Email, Senha, Função.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Certifique-se de que seu arquivo CSV inclua 4 colunas nesta ordem: Nome, Email, Senha, Função.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Modo de Solicitação",
|
"Request Mode": "Modo de Solicitação",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Modelo de Reclassificação",
|
"Reranking Model": "Modelo de Reclassificação",
|
||||||
"Reranking model disabled": "Modelo de Reclassificação desativado",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reclassificação definido como \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Redefinir",
|
"Reset": "Redefinir",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Redefinir Diretório de Upload",
|
"Reset Upload Directory": "Redefinir Diretório de Upload",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Mostrar",
|
"Show": "Mostrar",
|
||||||
"Show \"What's New\" modal on login": "Mostrar \"O que há de Novo\" no login",
|
"Show \"What's New\" modal on login": "Mostrar \"O que há de Novo\" no login",
|
||||||
"Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na Sobreposição de Conta Pendentes",
|
"Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na Sobreposição de Conta Pendentes",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Mostrar atalhos",
|
"Show shortcuts": "Mostrar atalhos",
|
||||||
"Show your support!": "Mostre seu apoio!",
|
"Show your support!": "Mostre seu apoio!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Stream Resposta do Chat",
|
"Stream Chat Response": "Stream Resposta do Chat",
|
||||||
"STT Model": "Modelo STT",
|
"STT Model": "Modelo STT",
|
||||||
"STT Settings": "Configurações STT",
|
"STT Settings": "Configurações STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Subtítulo (por exemplo, sobre o Império Romano)",
|
"Subtitle (e.g. about the Roman Empire)": "Subtítulo (por exemplo, sobre o Império Romano)",
|
||||||
"Success": "Sucesso",
|
"Success": "Sucesso",
|
||||||
"Successfully updated.": "Atualizado com sucesso.",
|
"Successfully updated.": "Atualizado com sucesso.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isso garante que suas conversas valiosas sejam salvas com segurança no banco de dados do backend. Obrigado!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isso garante que suas conversas valiosas sejam salvas com segurança no banco de dados do backend. Obrigado!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Esta é uma funcionalidade experimental, pode não funcionar como esperado e está sujeita a alterações a qualquer momento.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Esta é uma funcionalidade experimental, pode não funcionar como esperado e está sujeita a alterações a qualquer momento.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Essa opção deletará todos os arquivos existentes na coleção e todos eles serão substituídos.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Essa opção deletará todos os arquivos existentes na coleção e todos eles serão substituídos.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "",
|
||||||
"(e.g. `sh webui.sh --api`)": "(por exemplo, `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(por exemplo, `sh webui.sh --api`)",
|
||||||
"(latest)": "(mais recente)",
|
"(latest)": "(mais recente)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ modelos }}",
|
"{{ models }}": "{{ modelos }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Resposta má",
|
"Bad Response": "Resposta má",
|
||||||
"Banners": "Estandartes",
|
"Banners": "Estandartes",
|
||||||
"Base Model (From)": "Modelo Base (De)",
|
"Base Model (From)": "Modelo Base (De)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "antes",
|
"before": "antes",
|
||||||
"Being lazy": "Ser preguiçoso",
|
"Being lazy": "Ser preguiçoso",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Editar",
|
"Edit": "Editar",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Ativar Novas Inscrições",
|
"Enable New Sign Ups": "Ativar Novas Inscrições",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Confirme que o seu ficheiro CSV inclui 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Confirme que o seu ficheiro CSV inclui 4 colunas nesta ordem: Nome, E-mail, Senha, Função.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Modo de Pedido",
|
"Request Mode": "Modo de Pedido",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Modelo de Reranking",
|
"Reranking Model": "Modelo de Reranking",
|
||||||
"Reranking model disabled": "Modelo de Reranking desativado",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Modelo de Reranking definido como \"{{reranking_model}}\"",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Limpar Pasta de Carregamento",
|
"Reset Upload Directory": "Limpar Pasta de Carregamento",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Mostrar",
|
"Show": "Mostrar",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na sobreposição de Conta Pendente",
|
"Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na sobreposição de Conta Pendente",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Mostrar atalhos",
|
"Show shortcuts": "Mostrar atalhos",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "Modelo STT",
|
"STT Model": "Modelo STT",
|
||||||
"STT Settings": "Configurações STT",
|
"STT Settings": "Configurações STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Subtítulo (ex.: sobre o Império Romano)",
|
"Subtitle (e.g. about the Roman Empire)": "Subtítulo (ex.: sobre o Império Romano)",
|
||||||
"Success": "Sucesso",
|
"Success": "Sucesso",
|
||||||
"Successfully updated.": "Atualizado com sucesso.",
|
"Successfully updated.": "Atualizado com sucesso.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isto garante que suas conversas valiosas sejam guardadas com segurança na sua base de dados de backend. Obrigado!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isto garante que suas conversas valiosas sejam guardadas com segurança na sua base de dados de backend. Obrigado!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Isto é um recurso experimental, pode não funcionar conforme o esperado e está sujeito a alterações a qualquer momento.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Isto é um recurso experimental, pode não funcionar conforme o esperado e está sujeito a alterações a qualquer momento.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(de ex. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(de ex. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(de ex. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(de ex. `sh webui.sh --api`)",
|
||||||
"(latest)": "(ultimul)",
|
"(latest)": "(ultimul)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ modele }}",
|
"{{ models }}": "{{ modele }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Răspuns Greșit",
|
"Bad Response": "Răspuns Greșit",
|
||||||
"Banners": "Bannere",
|
"Banners": "Bannere",
|
||||||
"Base Model (From)": "Model de Bază (De la)",
|
"Base Model (From)": "Model de Bază (De la)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Dimensiune Lot (num_batch)",
|
"Batch Size (num_batch)": "Dimensiune Lot (num_batch)",
|
||||||
"before": "înainte",
|
"before": "înainte",
|
||||||
"Being lazy": "Fiind leneș",
|
"Being lazy": "Fiind leneș",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Editează",
|
"Edit": "Editează",
|
||||||
"Edit Arena Model": "Editați Modelul Arena",
|
"Edit Arena Model": "Editați Modelul Arena",
|
||||||
"Edit Channel": "Editează canalul",
|
"Edit Channel": "Editează canalul",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Activează Înscrierile Noi",
|
"Enable New Sign Ups": "Activează Înscrierile Noi",
|
||||||
"Enabled": "Activat",
|
"Enabled": "Activat",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Asigurați-vă că fișierul CSV include 4 coloane în această ordine: Nume, Email, Parolă, Rol.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Asigurați-vă că fișierul CSV include 4 coloane în această ordine: Nume, Email, Parolă, Rol.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Mod de Cerere",
|
"Request Mode": "Mod de Cerere",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Model de Rearanjare",
|
"Reranking Model": "Model de Rearanjare",
|
||||||
"Reranking model disabled": "Modelul de Rearanjare este dezactivat",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Modelul de Rearanjare setat la \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Resetează",
|
"Reset": "Resetează",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Resetează Directorul de Încărcare",
|
"Reset Upload Directory": "Resetează Directorul de Încărcare",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Afișează",
|
"Show": "Afișează",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "Afișează Detaliile Administratorului în Suprapunerea Contului În Așteptare",
|
"Show Admin Details in Account Pending Overlay": "Afișează Detaliile Administratorului în Suprapunerea Contului În Așteptare",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Afișează scurtături",
|
"Show shortcuts": "Afișează scurtături",
|
||||||
"Show your support!": "Arată-ți susținerea!",
|
"Show your support!": "Arată-ți susținerea!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Răspuns Stream Chat",
|
"Stream Chat Response": "Răspuns Stream Chat",
|
||||||
"STT Model": "Model STT",
|
"STT Model": "Model STT",
|
||||||
"STT Settings": "Setări STT",
|
"STT Settings": "Setări STT",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Subtitlu (de ex. despre Imperiul Roman)",
|
"Subtitle (e.g. about the Roman Empire)": "Subtitlu (de ex. despre Imperiul Roman)",
|
||||||
"Success": "Succes",
|
"Success": "Succes",
|
||||||
"Successfully updated.": "Actualizat cu succes.",
|
"Successfully updated.": "Actualizat cu succes.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Acest lucru asigură că conversațiile dvs. valoroase sunt salvate în siguranță în baza de date a backend-ului dvs. Mulțumim!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Acest lucru asigură că conversațiile dvs. valoroase sunt salvate în siguranță în baza de date a backend-ului dvs. Mulțumim!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Aceasta este o funcție experimentală, poate să nu funcționeze așa cum vă așteptați și este supusă schimbării în orice moment.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Aceasta este o funcție experimentală, poate să nu funcționeze așa cum vă așteptați și este supusă schimbării în orice moment.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Această opțiune va șterge toate fișierelor existente din colecție și le va înlocui cu fișierele nou încărcate.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Această opțiune va șterge toate fișierelor existente din colecție și le va înlocui cu fișierele nou încărcate.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(например, `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(например, `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(например, `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(например, `sh webui.sh --api`)",
|
||||||
"(latest)": "(последняя)",
|
"(latest)": "(последняя)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "(оставьте поле пустым для автоматической генерации коммерческого URL-адреса Azure)",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ модели }}",
|
"{{ models }}": "{{ модели }}",
|
||||||
"{{COUNT}} Available Tools": "{{COUNT}} доступных инструментов",
|
"{{COUNT}} Available Tools": "{{COUNT}} доступных инструментов",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Плохой ответ",
|
"Bad Response": "Плохой ответ",
|
||||||
"Banners": "Баннеры",
|
"Banners": "Баннеры",
|
||||||
"Base Model (From)": "Базовая модель (от)",
|
"Base Model (From)": "Базовая модель (от)",
|
||||||
"Base URL": "Базовый URL адрес",
|
|
||||||
"Batch Size (num_batch)": "Размер партии (num_batch)",
|
"Batch Size (num_batch)": "Размер партии (num_batch)",
|
||||||
"before": "до",
|
"before": "до",
|
||||||
"Being lazy": "Лениво",
|
"Being lazy": "Лениво",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "например, инструменты для выполнения различных операций",
|
"e.g. Tools for performing various operations": "например, инструменты для выполнения различных операций",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "например, 3, 4, 5 (оставьте поле пустым по умолчанию)",
|
"e.g., 3, 4, 5 (leave blank for default)": "например, 3, 4, 5 (оставьте поле пустым по умолчанию)",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "например, en-US,ja-JP (оставьте поле пустым для автоматического определения)",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "например, en-US,ja-JP (оставьте поле пустым для автоматического определения)",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Редактировать",
|
"Edit": "Редактировать",
|
||||||
"Edit Arena Model": "Изменить модель арены",
|
"Edit Arena Model": "Изменить модель арены",
|
||||||
"Edit Channel": "Редактировать канал",
|
"Edit Channel": "Редактировать канал",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "Включите выборку Mirostat для контроля путаницы.",
|
"Enable Mirostat sampling for controlling perplexity.": "Включите выборку Mirostat для контроля путаницы.",
|
||||||
"Enable New Sign Ups": "Разрешить новые регистрации",
|
"Enable New Sign Ups": "Разрешить новые регистрации",
|
||||||
"Enabled": "Включено",
|
"Enabled": "Включено",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "Принудительный временный чат",
|
"Enforce Temporary Chat": "Принудительный временный чат",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Убедитесь, что ваш CSV-файл включает в себя 4 столбца в следующем порядке: Имя, Электронная почта, Пароль, Роль.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Убедитесь, что ваш CSV-файл включает в себя 4 столбца в следующем порядке: Имя, Электронная почта, Пароль, Роль.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "Повторить наказание (Ollama)",
|
"Repeat Penalty (Ollama)": "Повторить наказание (Ollama)",
|
||||||
"Reply in Thread": "Ответить в обсуждении",
|
"Reply in Thread": "Ответить в обсуждении",
|
||||||
"Request Mode": "Режим запроса",
|
"Request Mode": "Режим запроса",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Модель реранжирования",
|
"Reranking Model": "Модель реранжирования",
|
||||||
"Reranking model disabled": "Модель реранжирования отключена",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Модель реранжирования установлена на \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Сбросить",
|
"Reset": "Сбросить",
|
||||||
"Reset All Models": "Сбросить все модели",
|
"Reset All Models": "Сбросить все модели",
|
||||||
"Reset Upload Directory": "Сбросить каталог загрузок",
|
"Reset Upload Directory": "Сбросить каталог загрузок",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Показать",
|
"Show": "Показать",
|
||||||
"Show \"What's New\" modal on login": "Показывать окно «Что нового» при входе в систему",
|
"Show \"What's New\" modal on login": "Показывать окно «Что нового» при входе в систему",
|
||||||
"Show Admin Details in Account Pending Overlay": "Показывать данные администратора в оверлее ожидающей учетной записи",
|
"Show Admin Details in Account Pending Overlay": "Показывать данные администратора в оверлее ожидающей учетной записи",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "Показать модель",
|
"Show Model": "Показать модель",
|
||||||
"Show shortcuts": "Показать горячие клавиши",
|
"Show shortcuts": "Показать горячие клавиши",
|
||||||
"Show your support!": "Поддержите нас!",
|
"Show your support!": "Поддержите нас!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Потоковый вывод ответа",
|
"Stream Chat Response": "Потоковый вывод ответа",
|
||||||
"STT Model": "Модель распознавания речи",
|
"STT Model": "Модель распознавания речи",
|
||||||
"STT Settings": "Настройки распознавания речи",
|
"STT Settings": "Настройки распознавания речи",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Подзаголовок (напр., о Римской империи)",
|
"Subtitle (e.g. about the Roman Empire)": "Подзаголовок (напр., о Римской империи)",
|
||||||
"Success": "Успех",
|
"Success": "Успех",
|
||||||
"Successfully updated.": "Успешно обновлено.",
|
"Successfully updated.": "Успешно обновлено.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "Этот чат не появится в истории, и ваши сообщения не будут сохранены.",
|
"This chat won’t appear in history and your messages will not be saved.": "Этот чат не появится в истории, и ваши сообщения не будут сохранены.",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Это обеспечивает сохранение ваших ценных разговоров в безопасной базе данных на вашем сервере. Спасибо!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Это обеспечивает сохранение ваших ценных разговоров в безопасной базе данных на вашем сервере. Спасибо!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Это экспериментальная функция, она может работать не так, как ожидалось, и может быть изменена в любое время.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Это экспериментальная функция, она может работать не так, как ожидалось, и может быть изменена в любое время.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Этот параметр определяет, сколько токенов сохраняется при обновлении контекста. Например, если задано значение 2, будут сохранены последние 2 токена контекста беседы. Сохранение контекста может помочь сохранить непрерывность беседы, но может уменьшить возможность отвечать на новые темы.",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "Этот параметр определяет, сколько токенов сохраняется при обновлении контекста. Например, если задано значение 2, будут сохранены последние 2 токена контекста беседы. Сохранение контекста может помочь сохранить непрерывность беседы, но может уменьшить возможность отвечать на новые темы.",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Этот параметр устанавливает максимальное количество токенов, которые модель может генерировать в своем ответе. Увеличение этого ограничения позволяет модели предоставлять более длинные ответы, но также может увеличить вероятность создания бесполезного или нерелевантного контента.",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "Этот параметр устанавливает максимальное количество токенов, которые модель может генерировать в своем ответе. Увеличение этого ограничения позволяет модели предоставлять более длинные ответы, но также может увеличить вероятность создания бесполезного или нерелевантного контента.",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Эта опция удалит все существующие файлы в коллекции и заменит их вновь загруженными файлами.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Эта опция удалит все существующие файлы в коллекции и заменит их вновь загруженными файлами.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(napr. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(napr. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(napr. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(napr. `sh webui.sh --api`)",
|
||||||
"(latest)": "Najnovšie",
|
"(latest)": "Najnovšie",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ models }}",
|
"{{ models }}": "{{ models }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Zlá odozva",
|
"Bad Response": "Zlá odozva",
|
||||||
"Banners": "Bannery",
|
"Banners": "Bannery",
|
||||||
"Base Model (From)": "Základný model (z)",
|
"Base Model (From)": "Základný model (z)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Veľkosť batchu (num_batch)",
|
"Batch Size (num_batch)": "Veľkosť batchu (num_batch)",
|
||||||
"before": "pred",
|
"before": "pred",
|
||||||
"Being lazy": "",
|
"Being lazy": "",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Upraviť",
|
"Edit": "Upraviť",
|
||||||
"Edit Arena Model": "Upraviť Arena Model",
|
"Edit Arena Model": "Upraviť Arena Model",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Povoliť nové registrácie",
|
"Enable New Sign Ups": "Povoliť nové registrácie",
|
||||||
"Enabled": "Povolené",
|
"Enabled": "Povolené",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Uistite sa, že váš CSV súbor obsahuje 4 stĺpce v tomto poradí: Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Uistite sa, že váš CSV súbor obsahuje 4 stĺpce v tomto poradí: Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Režim žiadosti",
|
"Request Mode": "Režim žiadosti",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Model na prehodnotenie poradia",
|
"Reranking Model": "Model na prehodnotenie poradia",
|
||||||
"Reranking model disabled": "Model na prehodnotenie poradia je deaktivovaný",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Model na prehodnotenie poradia nastavený na \"{{reranking_model}}\"",
|
|
||||||
"Reset": "režim Reset",
|
"Reset": "režim Reset",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Resetovať adresár nahrávania",
|
"Reset Upload Directory": "Resetovať adresár nahrávania",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Zobraziť",
|
"Show": "Zobraziť",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "Zobraziť podrobnosti administrátora v prekryvnom okne s čakajúcim účtom",
|
"Show Admin Details in Account Pending Overlay": "Zobraziť podrobnosti administrátora v prekryvnom okne s čakajúcim účtom",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Zobraziť klávesové skratky",
|
"Show shortcuts": "Zobraziť klávesové skratky",
|
||||||
"Show your support!": "Vyjadrite svoju podporu!",
|
"Show your support!": "Vyjadrite svoju podporu!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "Odozva chatu Stream",
|
"Stream Chat Response": "Odozva chatu Stream",
|
||||||
"STT Model": "Model rozpoznávania reči na text (STT)",
|
"STT Model": "Model rozpoznávania reči na text (STT)",
|
||||||
"STT Settings": "Nastavenia STT (Rozpoznávanie reči)",
|
"STT Settings": "Nastavenia STT (Rozpoznávanie reči)",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Titulky (napr. o Rímskej ríši)",
|
"Subtitle (e.g. about the Roman Empire)": "Titulky (napr. o Rímskej ríši)",
|
||||||
"Success": "Úspech",
|
"Success": "Úspech",
|
||||||
"Successfully updated.": "Úspešne aktualizované.",
|
"Successfully updated.": "Úspešne aktualizované.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Týmto je zaistené, že vaše cenné konverzácie sú bezpečne uložené vo vašej backendovej databáze. Ďakujeme!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Týmto je zaistené, že vaše cenné konverzácie sú bezpečne uložené vo vašej backendovej databáze. Ďakujeme!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Toto je experimentálna funkcia, nemusí fungovať podľa očakávania a môže byť kedykoľvek zmenená.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Toto je experimentálna funkcia, nemusí fungovať podľa očakávania a môže byť kedykoľvek zmenená.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Táto voľba odstráni všetky existujúce súbory v kolekcii a nahradí ich novo nahranými súbormi.",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Táto voľba odstráni všetky existujúce súbory v kolekcii a nahradí ich novo nahranými súbormi.",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(нпр. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(нпр. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(нпр. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(нпр. `sh webui.sh --api`)",
|
||||||
"(latest)": "(најновије)",
|
"(latest)": "(најновије)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ модели }}",
|
"{{ models }}": "{{ модели }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Лош одговор",
|
"Bad Response": "Лош одговор",
|
||||||
"Banners": "Барјаке",
|
"Banners": "Барјаке",
|
||||||
"Base Model (From)": "Основни модел (од)",
|
"Base Model (From)": "Основни модел (од)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "",
|
"Batch Size (num_batch)": "",
|
||||||
"before": "пре",
|
"before": "пре",
|
||||||
"Being lazy": "Бити лењ",
|
"Being lazy": "Бити лењ",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Измени",
|
"Edit": "Измени",
|
||||||
"Edit Arena Model": "Измени модел арене",
|
"Edit Arena Model": "Измени модел арене",
|
||||||
"Edit Channel": "Измени канал",
|
"Edit Channel": "Измени канал",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Омогући нове пријаве",
|
"Enable New Sign Ups": "Омогући нове пријаве",
|
||||||
"Enabled": "Омогућено",
|
"Enabled": "Омогућено",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверите се да ваша CSV датотека укључује 4 колоне у овом редоследу: Име, Е-пошта, Лозинка, Улога.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Уверите се да ваша CSV датотека укључује 4 колоне у овом редоследу: Име, Е-пошта, Лозинка, Улога.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Режим захтева",
|
"Request Mode": "Режим захтева",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Модел поновног рангирања",
|
"Reranking Model": "Модел поновног рангирања",
|
||||||
"Reranking model disabled": "Модел поновног рангирања онемогућен",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Модел поновног рангирања подешен на \"{{reranking_model}}\"",
|
|
||||||
"Reset": "Поврати",
|
"Reset": "Поврати",
|
||||||
"Reset All Models": "Поврати све моделе",
|
"Reset All Models": "Поврати све моделе",
|
||||||
"Reset Upload Directory": "",
|
"Reset Upload Directory": "",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Прикажи",
|
"Show": "Прикажи",
|
||||||
"Show \"What's New\" modal on login": "Прикажи \"Погледај шта је ново\" прозорче при пријави",
|
"Show \"What's New\" modal on login": "Прикажи \"Погледај шта је ново\" прозорче при пријави",
|
||||||
"Show Admin Details in Account Pending Overlay": "",
|
"Show Admin Details in Account Pending Overlay": "",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Прикажи пречице",
|
"Show shortcuts": "Прикажи пречице",
|
||||||
"Show your support!": "",
|
"Show your support!": "",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "STT модел",
|
"STT Model": "STT модел",
|
||||||
"STT Settings": "STT подешавања",
|
"STT Settings": "STT подешавања",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Поднаслов (нпр. о Римском царству)",
|
"Subtitle (e.g. about the Roman Empire)": "Поднаслов (нпр. о Римском царству)",
|
||||||
"Success": "Успех",
|
"Success": "Успех",
|
||||||
"Successfully updated.": "Успешно ажурирано.",
|
"Successfully updated.": "Успешно ажурирано.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ово осигурава да су ваши вредни разговори безбедно сачувани у вашој бекенд бази података. Хвала вам!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ово осигурава да су ваши вредни разговори безбедно сачувани у вашој бекенд бази података. Хвала вам!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(t.ex. `sh webui.sh --api --api-auth username_password`)",
|
"(e.g. `sh webui.sh --api --api-auth username_password`)": "(t.ex. `sh webui.sh --api --api-auth username_password`)",
|
||||||
"(e.g. `sh webui.sh --api`)": "(t.ex. `sh webui.sh --api`)",
|
"(e.g. `sh webui.sh --api`)": "(t.ex. `sh webui.sh --api`)",
|
||||||
"(latest)": "(senaste)",
|
"(latest)": "(senaste)",
|
||||||
"(leave blank for Azure Commercial URL auto-generation)": "",
|
"(leave blank for to use commercial endpoint)": "",
|
||||||
"(Ollama)": "",
|
"(Ollama)": "",
|
||||||
"{{ models }}": "{{ modeller }}",
|
"{{ models }}": "{{ modeller }}",
|
||||||
"{{COUNT}} Available Tools": "",
|
"{{COUNT}} Available Tools": "",
|
||||||
@@ -140,7 +140,6 @@
|
|||||||
"Bad Response": "Felaktig respons",
|
"Bad Response": "Felaktig respons",
|
||||||
"Banners": "Banners",
|
"Banners": "Banners",
|
||||||
"Base Model (From)": "Basmodell (Från)",
|
"Base Model (From)": "Basmodell (Från)",
|
||||||
"Base URL": "",
|
|
||||||
"Batch Size (num_batch)": "Batchstorlek (num_batch)",
|
"Batch Size (num_batch)": "Batchstorlek (num_batch)",
|
||||||
"before": "före",
|
"before": "före",
|
||||||
"Being lazy": "Lägg till",
|
"Being lazy": "Lägg till",
|
||||||
@@ -377,6 +376,7 @@
|
|||||||
"e.g. Tools for performing various operations": "",
|
"e.g. Tools for performing various operations": "",
|
||||||
"e.g., 3, 4, 5 (leave blank for default)": "",
|
"e.g., 3, 4, 5 (leave blank for default)": "",
|
||||||
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
"e.g., en-US,ja-JP (leave blank for auto-detect)": "",
|
||||||
|
"e.g., westus (leave blank for eastus)": "",
|
||||||
"Edit": "Redigera",
|
"Edit": "Redigera",
|
||||||
"Edit Arena Model": "",
|
"Edit Arena Model": "",
|
||||||
"Edit Channel": "",
|
"Edit Channel": "",
|
||||||
@@ -404,6 +404,7 @@
|
|||||||
"Enable Mirostat sampling for controlling perplexity.": "",
|
"Enable Mirostat sampling for controlling perplexity.": "",
|
||||||
"Enable New Sign Ups": "Aktivera nya registreringar",
|
"Enable New Sign Ups": "Aktivera nya registreringar",
|
||||||
"Enabled": "",
|
"Enabled": "",
|
||||||
|
"Endpoint URL": "",
|
||||||
"Enforce Temporary Chat": "",
|
"Enforce Temporary Chat": "",
|
||||||
"Enhance": "",
|
"Enhance": "",
|
||||||
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Se till att din CSV-fil innehåller fyra kolumner i denna ordning: Name, Email, Password, Role.",
|
"Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "Se till att din CSV-fil innehåller fyra kolumner i denna ordning: Name, Email, Password, Role.",
|
||||||
@@ -958,9 +959,8 @@
|
|||||||
"Repeat Penalty (Ollama)": "",
|
"Repeat Penalty (Ollama)": "",
|
||||||
"Reply in Thread": "",
|
"Reply in Thread": "",
|
||||||
"Request Mode": "Frågeläge",
|
"Request Mode": "Frågeläge",
|
||||||
|
"Reranking Engine": "",
|
||||||
"Reranking Model": "Reranking modell",
|
"Reranking Model": "Reranking modell",
|
||||||
"Reranking model disabled": "Reranking modell inaktiverad",
|
|
||||||
"Reranking model set to \"{{reranking_model}}\"": "Reranking modell inställd på \"{{reranking_model}}\"",
|
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
"Reset All Models": "",
|
"Reset All Models": "",
|
||||||
"Reset Upload Directory": "Återställ uppladdningskatalog",
|
"Reset Upload Directory": "Återställ uppladdningskatalog",
|
||||||
@@ -1068,6 +1068,8 @@
|
|||||||
"Show": "Visa",
|
"Show": "Visa",
|
||||||
"Show \"What's New\" modal on login": "",
|
"Show \"What's New\" modal on login": "",
|
||||||
"Show Admin Details in Account Pending Overlay": "Visa administratörsinformation till väntande konton",
|
"Show Admin Details in Account Pending Overlay": "Visa administratörsinformation till väntande konton",
|
||||||
|
"Show All": "",
|
||||||
|
"Show Less": "",
|
||||||
"Show Model": "",
|
"Show Model": "",
|
||||||
"Show shortcuts": "Visa genvägar",
|
"Show shortcuts": "Visa genvägar",
|
||||||
"Show your support!": "Visa ditt stöd!",
|
"Show your support!": "Visa ditt stöd!",
|
||||||
@@ -1091,6 +1093,7 @@
|
|||||||
"Stream Chat Response": "",
|
"Stream Chat Response": "",
|
||||||
"STT Model": "Tal-till-text-modell",
|
"STT Model": "Tal-till-text-modell",
|
||||||
"STT Settings": "Tal-till-text-inställningar",
|
"STT Settings": "Tal-till-text-inställningar",
|
||||||
|
"Stylized PDF Export": "",
|
||||||
"Subtitle (e.g. about the Roman Empire)": "Undertext (t.ex. om Romerska Imperiet)",
|
"Subtitle (e.g. about the Roman Empire)": "Undertext (t.ex. om Romerska Imperiet)",
|
||||||
"Success": "Framgång",
|
"Success": "Framgång",
|
||||||
"Successfully updated.": "Uppdaterades framgångsrikt.",
|
"Successfully updated.": "Uppdaterades framgångsrikt.",
|
||||||
@@ -1137,6 +1140,7 @@
|
|||||||
"This chat won’t appear in history and your messages will not be saved.": "",
|
"This chat won’t appear in history and your messages will not be saved.": "",
|
||||||
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Detta säkerställer att dina värdefulla samtal sparas säkert till din backend-databas. Tack!",
|
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Detta säkerställer att dina värdefulla samtal sparas säkert till din backend-databas. Tack!",
|
||||||
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Detta är en experimentell funktion som kanske inte fungerar som förväntat och som kan komma att ändras när som helst.",
|
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Detta är en experimentell funktion som kanske inte fungerar som förväntat och som kan komma att ändras när som helst.",
|
||||||
|
"This model is not publicly available. Please select another model.": "",
|
||||||
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
"This option controls how many tokens are preserved when refreshing the context. For example, if set to 2, the last 2 tokens of the conversation context will be retained. Preserving context can help maintain the continuity of a conversation, but it may reduce the ability to respond to new topics.": "",
|
||||||
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
"This option sets the maximum number of tokens the model can generate in its response. Increasing this limit allows the model to provide longer answers, but it may also increase the likelihood of unhelpful or irrelevant content being generated.": "",
|
||||||
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user