Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
172a4954c5 |
@@ -124,10 +124,6 @@ module DiscourseAi
|
||||
raise Discourse::InvalidParameters.new(:custom_prompt) if params[:custom_prompt].blank?
|
||||
end
|
||||
|
||||
# to stream we must have an appropriate client_id
|
||||
# otherwise we may end up streaming the data to the wrong client
|
||||
raise Discourse::InvalidParameters.new(:client_id) if params[:client_id].blank?
|
||||
|
||||
if location == "composer"
|
||||
Jobs.enqueue(
|
||||
:stream_composer_helper,
|
||||
@@ -136,7 +132,6 @@ module DiscourseAi
|
||||
prompt: prompt.name,
|
||||
custom_prompt: params[:custom_prompt],
|
||||
force_default_locale: params[:force_default_locale] || false,
|
||||
client_id: params[:client_id],
|
||||
)
|
||||
else
|
||||
post_id = get_post_param!
|
||||
@@ -151,7 +146,6 @@ module DiscourseAi
|
||||
text: text,
|
||||
prompt: prompt.name,
|
||||
custom_prompt: params[:custom_prompt],
|
||||
client_id: params[:client_id],
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ module Jobs
|
||||
return unless args[:prompt]
|
||||
return unless user = User.find_by(id: args[:user_id])
|
||||
return unless args[:text]
|
||||
return unless args[:client_id]
|
||||
|
||||
prompt = CompletionPrompt.enabled_by_name(args[:prompt])
|
||||
|
||||
@@ -22,7 +21,6 @@ module Jobs
|
||||
user,
|
||||
"/discourse-ai/ai-helper/stream_composer_suggestion",
|
||||
force_default_locale: args[:force_default_locale],
|
||||
client_id: args[:client_id],
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import Component from "@glimmer/component";
|
||||
import { action } from "@ember/object";
|
||||
import { service } from "@ember/service";
|
||||
import DButton from "discourse/components/d-button";
|
||||
import AddPmParticipants from "discourse/components/modal/add-pm-participants";
|
||||
|
||||
export default class AiConversationsInvite extends Component {
|
||||
@service site;
|
||||
@service modal;
|
||||
|
||||
@action
|
||||
showInvite() {
|
||||
this.modal.show(AddPmParticipants, {
|
||||
model: {
|
||||
title: "discourse_ai.ai_bot.invite_ai_conversation.title",
|
||||
inviteModel: this.args.topic,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
<template>
|
||||
<DButton
|
||||
@icon="user-plus"
|
||||
@label="discourse_ai.ai_bot.invite_ai_conversation.button"
|
||||
@action={{this.showInvite}}
|
||||
class="ai-conversations__invite-button"
|
||||
/>
|
||||
</template>
|
||||
}
|
||||
@@ -242,7 +242,6 @@ export default class AiPostHelperMenu extends Component {
|
||||
text: this.args.data.selectedText,
|
||||
post_id: this.args.data.quoteState.postId,
|
||||
custom_prompt: this.customPromptValue,
|
||||
client_id: this.messageBus.clientId,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import concatClass from "discourse/helpers/concat-class";
|
||||
import { ajax } from "discourse/lib/ajax";
|
||||
import { popupAjaxError } from "discourse/lib/ajax-error";
|
||||
import { bind } from "discourse/lib/decorators";
|
||||
import { escapeExpression } from "discourse/lib/utilities";
|
||||
import { i18n } from "discourse-i18n";
|
||||
import DiffStreamer from "../../lib/diff-streamer";
|
||||
import SmoothStreamer from "../../lib/smooth-streamer";
|
||||
@@ -24,34 +23,21 @@ export default class ModalDiffModal extends Component {
|
||||
|
||||
@tracked loading = false;
|
||||
@tracked finalResult = "";
|
||||
@tracked selectedText = escapeExpression(this.args.model.selectedText);
|
||||
@tracked diffStreamer = new DiffStreamer(this.selectedText);
|
||||
@tracked showcasedDiff = "";
|
||||
@tracked diffStreamer = new DiffStreamer(this.args.model.selectedText);
|
||||
@tracked suggestion = "";
|
||||
@tracked
|
||||
smoothStreamer = new SmoothStreamer(
|
||||
() => this.suggestion,
|
||||
(newValue) => (this.suggestion = newValue)
|
||||
);
|
||||
@tracked isStreaming = false;
|
||||
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.suggestChanges();
|
||||
}
|
||||
|
||||
get diffResult() {
|
||||
if (this.diffStreamer.diff?.length > 0) {
|
||||
return this.diffStreamer.diff;
|
||||
}
|
||||
|
||||
// Prevents flash by showing the
|
||||
// original text when the diff is empty
|
||||
return this.selectedText;
|
||||
}
|
||||
|
||||
get isStreaming() {
|
||||
return this.diffStreamer.isStreaming || this.smoothStreamer.isStreaming;
|
||||
}
|
||||
|
||||
get primaryBtnLabel() {
|
||||
return this.loading
|
||||
? i18n("discourse_ai.ai_helper.context_menu.loading")
|
||||
@@ -76,14 +62,23 @@ export default class ModalDiffModal extends Component {
|
||||
|
||||
@action
|
||||
async updateResult(result) {
|
||||
// TODO(@keegan)
|
||||
// Temporarily we are removing the animation using the diff streamer
|
||||
// and simply showing the diff streamed without a proper animation
|
||||
// while we figure things out
|
||||
// so that things are not too janky in the meantime.
|
||||
this.loading = false;
|
||||
this.isStreaming = true;
|
||||
|
||||
if (result.done) {
|
||||
this.finalResult = result.result;
|
||||
}
|
||||
|
||||
this.showcasedDiff = result.diff;
|
||||
|
||||
if (result.done) {
|
||||
this.loading = false;
|
||||
this.isStreaming = false;
|
||||
}
|
||||
|
||||
if (this.args.model.showResultAsDiff) {
|
||||
@@ -105,10 +100,9 @@ export default class ModalDiffModal extends Component {
|
||||
data: {
|
||||
location: "composer",
|
||||
mode: this.args.model.mode,
|
||||
text: this.selectedText,
|
||||
text: this.args.model.selectedText,
|
||||
custom_prompt: this.args.model.customPromptValue,
|
||||
force_default_locale: true,
|
||||
client_id: this.messageBus.clientId,
|
||||
},
|
||||
});
|
||||
} catch (e) {
|
||||
@@ -122,7 +116,7 @@ export default class ModalDiffModal extends Component {
|
||||
|
||||
if (this.suggestion) {
|
||||
this.args.model.toolbarEvent.replaceText(
|
||||
this.selectedText,
|
||||
this.args.model.selectedText,
|
||||
this.suggestion
|
||||
);
|
||||
}
|
||||
@@ -132,7 +126,10 @@ export default class ModalDiffModal extends Component {
|
||||
? this.finalResult
|
||||
: this.diffStreamer.suggestion;
|
||||
if (this.args.model.showResultAsDiff && finalResult) {
|
||||
this.args.model.toolbarEvent.replaceText(this.selectedText, finalResult);
|
||||
this.args.model.toolbarEvent.replaceText(
|
||||
this.args.model.selectedText,
|
||||
finalResult
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,14 +140,10 @@ export default class ModalDiffModal extends Component {
|
||||
@closeModal={{@closeModal}}
|
||||
>
|
||||
<:body>
|
||||
<div
|
||||
{{didInsert this.subscribe}}
|
||||
{{willDestroy this.unsubscribe}}
|
||||
class="text-preview"
|
||||
>
|
||||
<div {{didInsert this.subscribe}} {{willDestroy this.unsubscribe}}>
|
||||
{{#if this.loading}}
|
||||
<div class="composer-ai-helper-modal__loading">
|
||||
{{~@model.selectedText~}}
|
||||
<CookText @rawText={{@model.selectedText}} />
|
||||
</div>
|
||||
{{else}}
|
||||
<div
|
||||
@@ -159,11 +152,10 @@ export default class ModalDiffModal extends Component {
|
||||
"streamable-content"
|
||||
(if this.isStreaming "streaming")
|
||||
(if @model.showResultAsDiff "inline-diff")
|
||||
(if this.diffStreamer.isThinking "thinking")
|
||||
}}
|
||||
>
|
||||
{{~#if @model.showResultAsDiff~}}
|
||||
<span class="diff-inner">{{htmlSafe this.diffResult}}</span>
|
||||
{{#if @model.showResultAsDiff}}
|
||||
{{htmlSafe this.showcasedDiff}}
|
||||
{{else}}
|
||||
{{#if this.smoothStreamer.isStreaming}}
|
||||
<CookText
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
import Component from "@glimmer/component";
|
||||
import AiConversationsInvite from "../../components/ai-conversations-invite";
|
||||
|
||||
export default class AiConversationsInviteConnector extends Component {
|
||||
static shouldRender(args) {
|
||||
return args.topic.is_bot_pm;
|
||||
}
|
||||
|
||||
<template><AiConversationsInvite @topic={{@outletArgs.topic}} /></template>
|
||||
}
|
||||
+10
-16
@@ -7,10 +7,6 @@ import AiSummaryModal from "../../components/modal/ai-summary-modal";
|
||||
export default class AiSummaryTrigger extends Component {
|
||||
@service modal;
|
||||
|
||||
get isAiConversation() {
|
||||
return this.args.outletArgs.topic.is_bot_pm;
|
||||
}
|
||||
|
||||
@action
|
||||
openAiSummaryModal() {
|
||||
this.modal.show(AiSummaryModal, {
|
||||
@@ -22,17 +18,15 @@ export default class AiSummaryTrigger extends Component {
|
||||
}
|
||||
|
||||
<template>
|
||||
{{#unless this.isAiConversation}}
|
||||
{{#if @outletArgs.topic.summarizable}}
|
||||
<section class="topic-map__additional-contents toggle-summary">
|
||||
<DButton
|
||||
@label="summary.buttons.generate"
|
||||
@icon="discourse-sparkles"
|
||||
@action={{this.openAiSummaryModal}}
|
||||
class="btn-default ai-summarization-button"
|
||||
/>
|
||||
</section>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
{{#if @outletArgs.topic.summarizable}}
|
||||
<section class="topic-map__additional-contents toggle-summary">
|
||||
<DButton
|
||||
@label="summary.buttons.generate"
|
||||
@icon="discourse-sparkles"
|
||||
@action={{this.openAiSummaryModal}}
|
||||
class="btn-default ai-summarization-button"
|
||||
/>
|
||||
</section>
|
||||
{{/if}}
|
||||
</template>
|
||||
}
|
||||
|
||||
-55
@@ -1,55 +0,0 @@
|
||||
import Component from "@glimmer/component";
|
||||
import { action } from "@ember/object";
|
||||
import { service } from "@ember/service";
|
||||
import { or } from "truth-helpers";
|
||||
import DButton from "discourse/components/d-button";
|
||||
import Participant from "discourse/components/header/topic/participant";
|
||||
import AddPmParticipants from "discourse/components/modal/add-pm-participants";
|
||||
|
||||
export default class AiConversationInvite extends Component {
|
||||
static shouldRender(args) {
|
||||
return args.topic.is_bot_pm;
|
||||
}
|
||||
|
||||
@service site;
|
||||
@service modal;
|
||||
@service header;
|
||||
@service sidebarState;
|
||||
|
||||
get participants() {
|
||||
const participants = [
|
||||
...this.header.topicInfo.details.allowed_users,
|
||||
...this.header.topicInfo.details.allowed_groups,
|
||||
];
|
||||
return participants;
|
||||
}
|
||||
|
||||
@action
|
||||
showInvite() {
|
||||
this.modal.show(AddPmParticipants, {
|
||||
model: {
|
||||
title: "discourse_ai.ai_bot.invite_ai_conversation.title",
|
||||
inviteModel: this.args.outletArgs.topic,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
<template>
|
||||
<div class="ai-conversation__participants">
|
||||
<DButton
|
||||
@icon="user-plus"
|
||||
@label="discourse_ai.ai_bot.invite_ai_conversation.button"
|
||||
@action={{this.showInvite}}
|
||||
class="btn-default ai-conversations__invite-button"
|
||||
/>
|
||||
{{#each this.participants as |participant|}}
|
||||
<Participant
|
||||
@user={{participant}}
|
||||
@type={{if participant.username "user" "group"}}
|
||||
@username={{or participant.username participant.name}}
|
||||
@avatarSize="medium"
|
||||
/>
|
||||
{{/each}}
|
||||
</div>
|
||||
</template>
|
||||
}
|
||||
@@ -12,15 +12,13 @@ export default class PostUpdater extends StreamUpdater {
|
||||
|
||||
constructor(postStream, postId) {
|
||||
super();
|
||||
|
||||
this.postStream = postStream;
|
||||
this.postId = postId;
|
||||
this.post = postStream.findLoadedPost(postId);
|
||||
const topicId = postStream.topic.id;
|
||||
|
||||
if (this.post) {
|
||||
this.postElement = document.querySelector(
|
||||
`.topic-area[data-topic-id="${topicId}"] #post_${this.post.post_number}`
|
||||
`#post_${this.post.post_number}`
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -59,10 +57,6 @@ export default class PostUpdater extends StreamUpdater {
|
||||
}
|
||||
|
||||
async setCooked(value) {
|
||||
if (!this.postElement) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.post.set("cooked", value);
|
||||
|
||||
(await loadMorphlex()).morphInner(
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -42,7 +42,8 @@ export default class AiConversationsSidebarManager extends Service {
|
||||
if (this.sidebarState.isForcingSidebar && !isAdminSidebarActive) {
|
||||
this.sidebarState.setPanel(MAIN_PANEL); // Return to main sidebar panel
|
||||
this.sidebarState.isForcingSidebar = false;
|
||||
this.appEvents.trigger("discourse-ai:stop-forcing-conversations-sidebar");
|
||||
}
|
||||
|
||||
this.appEvents.trigger("discourse-ai:stop-forcing-conversations-sidebar");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ function initializeAiHelperTrigger(api) {
|
||||
icon: "discourse-sparkles",
|
||||
title: "discourse_ai.ai_helper.context_menu.trigger",
|
||||
preventFocus: true,
|
||||
hideShortcutInTitle: true,
|
||||
shortcut: "ALT+P",
|
||||
shortcutAction: (toolbarEvent) => {
|
||||
if (toolbarEvent.getText().length === 0) {
|
||||
|
||||
@@ -83,48 +83,14 @@ article.streaming .cooked {
|
||||
@keyframes mark-blink {
|
||||
0%,
|
||||
100% {
|
||||
border-color: transparent;
|
||||
border-color: var(--highlight-high);
|
||||
}
|
||||
|
||||
50% {
|
||||
border-color: var(--highlight-high);
|
||||
border-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes fade-in-highlight {
|
||||
from {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
mark.highlight {
|
||||
background-color: var(--highlight-high);
|
||||
animation: fade-in-highlight 0.5s ease-in-out forwards;
|
||||
}
|
||||
|
||||
.composer-ai-helper-modal__suggestion.thinking mark.highlight {
|
||||
animation: mark-blink 1s step-start 0s infinite;
|
||||
animation-name: mark-blink;
|
||||
}
|
||||
|
||||
.composer-ai-helper-modal__loading {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.composer-ai-helper-modal__suggestion.inline-diff {
|
||||
white-space: pre-wrap;
|
||||
|
||||
del:last-child {
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
color: var(--primary-low-mid);
|
||||
}
|
||||
|
||||
.diff-inner {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ body.has-ai-conversations-sidebar {
|
||||
.private-message-glyph-wrapper,
|
||||
.topic-header-participants,
|
||||
.topic-above-footer-buttons-outlet,
|
||||
.topic-map,
|
||||
#topic-footer-buttons .topic-footer-main-buttons details {
|
||||
display: none;
|
||||
}
|
||||
@@ -449,87 +450,10 @@ body.has-ai-conversations-sidebar {
|
||||
button:not(
|
||||
.create,
|
||||
.share-ai-conversation-button,
|
||||
.topic-admin-menu-trigger
|
||||
.topic-admin-menu-trigger,
|
||||
.ai-conversations__invite-button
|
||||
) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.topic-map {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
padding-block: 0.5em;
|
||||
|
||||
.topic-map__views-trigger,
|
||||
.topic-map__likes-trigger,
|
||||
.summarization-button,
|
||||
&__private-message-map,
|
||||
.topic-map__users-list {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.--bottom {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
section {
|
||||
background: transparent;
|
||||
border-block: 1px solid var(--primary-low);
|
||||
}
|
||||
|
||||
&__contents {
|
||||
padding: 0.5em 1.25em;
|
||||
|
||||
@include viewport.from(sm) {
|
||||
padding: 0.5em 0.5em 0.5em 1.9em;
|
||||
}
|
||||
}
|
||||
|
||||
&__stats {
|
||||
height: 100%;
|
||||
flex-wrap: nowrap;
|
||||
gap: 1em;
|
||||
}
|
||||
|
||||
.ai-conversation__participants {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5em 0.25em;
|
||||
align-items: center;
|
||||
|
||||
.avatar {
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
}
|
||||
|
||||
.trigger-group-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border: 1px solid var(--primary-low);
|
||||
border-radius: var(--d-button-border-radius);
|
||||
padding: 0.25em 0.5em;
|
||||
font-size: var(--font-down-1);
|
||||
|
||||
span {
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
|
||||
.d-icon {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--primary-medium);
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
font-size: var(--font-down-1);
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
.composer-ai-helper-modal {
|
||||
.text-preview,
|
||||
.inline-diff {
|
||||
font-family: var(--d-font-family--monospace);
|
||||
font-variant-ligatures: none;
|
||||
|
||||
ins {
|
||||
background-color: var(--success-low);
|
||||
text-decoration: none;
|
||||
|
||||
@@ -320,18 +320,9 @@ de:
|
||||
rag_conversation_chunks_help: "Die Anzahl der Chunks, die für die RAG-Modell-Suche verwendet werden. Erhöhen, um die Menge des Kontexts zu steigern, den die KI verwenden kann."
|
||||
persona_description: "Personas sind eine leistungsstarke Funktion, mit der du das Verhalten der KI-Engine in deinem Discourse-Forum anpassen kannst. Sie fungieren als „Systemnachricht“, welche die Antworten und Interaktionen der KI steuert und dazu beiträgt, ein persönlicheres und ansprechenderes Erlebnis für Benutzer zu schaffen."
|
||||
response_format:
|
||||
title: "JSON-Antwortformat"
|
||||
no_format: "Kein JSON-Format angegeben"
|
||||
open_modal: "Bearbeiten"
|
||||
modal:
|
||||
root_title: "Antwortstruktur"
|
||||
key_title: "Schlüssel"
|
||||
examples:
|
||||
title: Beispiele
|
||||
new: Neues Beispiel
|
||||
remove: Beispiel löschen
|
||||
collapsable_title: "Beispiel #%{number}"
|
||||
model: "Antwort des Modells"
|
||||
list:
|
||||
enabled: "KI-Bot?"
|
||||
ai_bot:
|
||||
@@ -523,7 +514,6 @@ de:
|
||||
disable_streaming: "Streaming-Vervollständigung deaktivieren (Streaming-Anfragen in Nicht-Streaming-Anfragen umwandeln)"
|
||||
reasoning_effort: "Argumentationsaufwand (gilt nur für Argumentationsmodelle)"
|
||||
enable_reasoning: "Argumentation aktivieren (gilt nur für Sonnet 3.7)"
|
||||
thinking_tokens: "Anzahl der zum Denken verwendeten Token"
|
||||
reasoning_tokens: "Anzahl der für die Argumentation verwendeten Token"
|
||||
disable_temperature: "Temperatur deaktivieren (einige Denkmodelle unterstützen keine Temperatur)"
|
||||
disable_top_p: "Top P deaktivieren (einige Denkmodelle unterstützen Top P nicht)"
|
||||
@@ -711,9 +701,6 @@ de:
|
||||
disclaimer: "Generative KI kann Fehler machen. Überprüfe wichtige Informationen."
|
||||
placeholder: "Stell eine Frage ..."
|
||||
new: "Neue Frage"
|
||||
min_input_length_message:
|
||||
one: "Nachricht muss mindestens 1 Zeichen lang sein"
|
||||
other: "Nachricht muss mindestens %{count} Zeichen lang sein"
|
||||
messages_sidebar_title: "Unterhaltungen"
|
||||
today: "Heute"
|
||||
last_7_days: "Letzte 7 Tage"
|
||||
|
||||
@@ -709,7 +709,7 @@ en:
|
||||
delete: "Delete share"
|
||||
|
||||
share_ai_conversation:
|
||||
name: "Share AI conversation"
|
||||
name: "Share"
|
||||
title: "Share this AI conversation publicly"
|
||||
|
||||
invite_ai_conversation:
|
||||
|
||||
@@ -309,13 +309,6 @@ he:
|
||||
modal:
|
||||
root_title: "מבנה תגובה"
|
||||
key_title: "מפתח"
|
||||
examples:
|
||||
title: דוגמאות
|
||||
new: דוגמה חדשה
|
||||
remove: מחיקת דוגמה
|
||||
collapsable_title: "דוגמה מס׳ %{number}"
|
||||
user: "הודעת משתמש"
|
||||
model: "תגובת המודל"
|
||||
list:
|
||||
enabled: "בוט בינה מלאכותית?"
|
||||
ai_bot:
|
||||
@@ -721,7 +714,6 @@ he:
|
||||
discobot_discoveries:
|
||||
regular_results: "נושאים"
|
||||
tell_me_more: "אשמח לדעת עוד…"
|
||||
continue_convo: "המשך בשיחה…"
|
||||
collapse: "צמצום"
|
||||
tooltip:
|
||||
header: "חיפוש מופעל בינה מלאכותית"
|
||||
|
||||
@@ -261,6 +261,9 @@ ar:
|
||||
settings_explorer:
|
||||
name: مستكشف الإعدادات
|
||||
description: "روبوت ذكاء اصطناعي متخصص في المساعدة في استكشاف إعدادات موقع Discourse"
|
||||
researcher:
|
||||
name: الباحث
|
||||
description: "روبوت ذكاء اصطناعي مزوَّد بإمكانية الوصول إلى Google، ويمكنه البحث عن المعلومات نيابةً عنك"
|
||||
creative:
|
||||
name: المبدع
|
||||
description: "روبوت ذكاء اصطناعي من دون تكاملات خارجية متخصصة في المهام الإبداعية"
|
||||
@@ -277,9 +280,6 @@ ar:
|
||||
summarizing: "جارٍ تلخيص الموضوع"
|
||||
searching: "جارٍ البحث عن: '%{query}'"
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "الحد الأقصى لعدد النتائج"
|
||||
google:
|
||||
base_query:
|
||||
name: "استعلام البحث الأساسي"
|
||||
|
||||
@@ -106,7 +106,6 @@ de:
|
||||
ai_discord_search_mode: "Wähle den Suchmodus für die Discord-Suche aus"
|
||||
ai_discord_search_persona: "Die Persona, die für die Discord-Suche verwendet wird."
|
||||
ai_discord_allowed_guilds: "Discord-Gilden (Server), auf denen der Bot suchen darf"
|
||||
ai_bot_enable_dedicated_ux: "Erlaube eine Vollbild-Bot-Oberfläche anstelle einer PM"
|
||||
reviewables:
|
||||
reasons:
|
||||
flagged_by_toxicity: Das KI-Plug-in meldete dies nach der Klassifizierung als toxisch.
|
||||
@@ -279,11 +278,6 @@ de:
|
||||
artist:
|
||||
name: Künstler
|
||||
description: "KI-Bot, spezialisiert auf die Erstellung von Bildern"
|
||||
designer:
|
||||
name: Designer
|
||||
forum_researcher:
|
||||
name: Forum-Rechercheur
|
||||
description: "KI-Bot, spezialisiert auf gründliche Recherche für das Forum"
|
||||
sql_helper:
|
||||
name: SQL-Helfer
|
||||
description: "KI-Bot, der darauf spezialisiert ist, bei der Erstellung von SQL-Abfragen auf dieser Discourse-Instanz zu helfen"
|
||||
@@ -291,8 +285,8 @@ de:
|
||||
name: Einstellungs-Explorer
|
||||
description: "KI-Bot, der darauf spezialisiert ist, die Einstellungen der Discourse-Website zu erkunden"
|
||||
researcher:
|
||||
name: Web-Rechercheur
|
||||
description: "KI-Bot mit Google-Zugriff, der Webseiten sowohl suchen als auch lesen kann"
|
||||
name: Forscher
|
||||
description: "KI-Bot mit Google-Zugang, der Informationen für dich recherchieren kann"
|
||||
creative:
|
||||
name: Kreativ
|
||||
description: "KI-Bot ohne externe Integrationen, spezialisiert auf kreative Aufgaben"
|
||||
@@ -315,16 +309,6 @@ de:
|
||||
summarizing: "Thema zusammenfassen"
|
||||
searching: "Suche nach: „%{query}“"
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "Maximale Anzahl von Ergebnissen"
|
||||
description: "Maximale Anzahl von Ergebnissen, die in einen Filter aufgenommen werden"
|
||||
include_private:
|
||||
name: "Private einschließen"
|
||||
description: "Private Themen in die Filter einbeziehen"
|
||||
max_tokens_per_post:
|
||||
name: "Maximale Token pro Beitrag"
|
||||
description: "Maximale Anzahl von Token, die für jeden Beitrag im Filter verwendet werden"
|
||||
create_artifact:
|
||||
creator_llm:
|
||||
name: "LLM"
|
||||
@@ -381,7 +365,6 @@ de:
|
||||
dall_e: "Bild generieren"
|
||||
search_meta_discourse: "Meta-Discourse durchsuchen"
|
||||
javascript_evaluator: "JavaScript auswerten"
|
||||
researcher: "Rechercheur"
|
||||
tool_help:
|
||||
read_artifact: "Lesen eines Webartefakts mit dem KI-Bot"
|
||||
update_artifact: "Aktualisiere ein Web-Artefakt mit dem KI-Bot"
|
||||
@@ -406,7 +389,6 @@ de:
|
||||
dall_e: "Bild mit DALL-E 3 generieren"
|
||||
search_meta_discourse: "Meta-Discourse durchsuchen"
|
||||
javascript_evaluator: "JavaScript auswerten"
|
||||
researcher: "Foreninformationen mit dem KI-Bot recherchieren"
|
||||
tool_description:
|
||||
read_artifact: "Lesen eines Webartefakts mit dem KI-Bot"
|
||||
update_artifact: "Ein Web-Artefakt wurde mit dem KI-Bot aktualisiert"
|
||||
@@ -441,12 +423,6 @@ de:
|
||||
other: "%{count} <a href='%{url}'>Ergebnisse</a> für „%{query}“ gefunden"
|
||||
setting_context: "Kontext wird gelesen für: %{setting_name}"
|
||||
schema: "%{tables}"
|
||||
researcher_dry_run:
|
||||
one: "Vorgeschlagene Ziele: %{goals}\n\n%{count} Beitrag passend zu „%{filter}“ gefunden"
|
||||
other: "Vorgeschlagene Ziele: %{goals}\n\n%{count} Beiträge passend zu „%{filter}“ gefunden"
|
||||
researcher:
|
||||
one: "Recherche: %{goals}\n\n%{count} Beitrag passend zu „%{filter}“ gefunden"
|
||||
other: "Recherche: %{goals}\n\n%{count} Beiträge passend zu „%{filter}“ gefunden"
|
||||
search_settings:
|
||||
one: "%{count} Ergebnis für „%{query}“ gefunden"
|
||||
other: "%{count} Ergebnisse für „%{query}“ gefunden"
|
||||
@@ -492,8 +468,6 @@ de:
|
||||
one: "Wir konnten dieses Modell nicht löschen, weil es von %{settings} verwendet wird. Aktualisiere die Einstellung und versuche es erneut."
|
||||
other: "Wir konnten dieses Modell nicht löschen, weil %{settings} es verwenden. Aktualisiere die Einstellungen und versuche es erneut."
|
||||
cannot_edit_builtin: "Du kannst ein integriertes Modell nicht bearbeiten."
|
||||
personas:
|
||||
malformed_examples: "Die angegebenen Beispiele haben das falsche Format."
|
||||
embeddings:
|
||||
delete_failed: "Dieses Modell wird derzeit verwendet. Aktualisiere zuerst `ai embeddings selected model`."
|
||||
cannot_edit_builtin: "Du kannst ein integriertes Modell nicht bearbeiten."
|
||||
|
||||
@@ -3,7 +3,6 @@ en:
|
||||
ai:
|
||||
flag_types:
|
||||
review: "Add post to review queue"
|
||||
review_hide: "Add post to review queue and hide post"
|
||||
spam: "Flag as spam and hide post"
|
||||
spam_silence: "Flag as spam, hide post and silence user"
|
||||
scriptables:
|
||||
|
||||
@@ -262,6 +262,9 @@ es:
|
||||
settings_explorer:
|
||||
name: Explorador de ajustes
|
||||
description: "Bot de IA especializado en ayudar a explorar los ajustes del sitio Discourse"
|
||||
researcher:
|
||||
name: Investigador
|
||||
description: "Bot de IA con acceso a Google que puede buscar información por ti"
|
||||
creative:
|
||||
name: Creativa
|
||||
description: "Bot de IA sin integraciones externas especializado en tareas creativas"
|
||||
@@ -278,9 +281,6 @@ es:
|
||||
summarizing: "Resumiendo tema"
|
||||
searching: "Buscando: '%{query}'"
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "Número máximo de resultados"
|
||||
google:
|
||||
base_query:
|
||||
name: "Consulta de búsqueda básica"
|
||||
|
||||
@@ -262,6 +262,9 @@ fi:
|
||||
settings_explorer:
|
||||
name: Asetusapuri
|
||||
description: "Tekoälybotti, joka on erikoistunut auttamaan Discoursen sivustoasetuksiin tutustumisessa"
|
||||
researcher:
|
||||
name: Tutkija
|
||||
description: "Tekoälybotti, joka voi käyttää Googlea ja etsiä tietoja puolestasi"
|
||||
creative:
|
||||
name: Luova
|
||||
description: "Tekoälybotti ilman ulkoisia integraatioita, joka on erikoistuneet luoviin tehtäviin"
|
||||
@@ -278,9 +281,6 @@ fi:
|
||||
summarizing: "Laaditaan yhteenvetoa ketjusta"
|
||||
searching: "Haetaan: \"%{query}\""
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "Tulosten enimmäismäärä"
|
||||
google:
|
||||
base_query:
|
||||
name: "Perushakukysely"
|
||||
|
||||
@@ -262,6 +262,9 @@ fr:
|
||||
settings_explorer:
|
||||
name: Explorateur de paramètres
|
||||
description: "Bot IA spécialisé dans l'aide à l'exploration des paramètres du site Discourse"
|
||||
researcher:
|
||||
name: Chercheur
|
||||
description: "Bot IA avec accès Google qui peut rechercher des informations pour vous"
|
||||
creative:
|
||||
name: Créatif
|
||||
description: "Bot IA sans intégration externe spécialisé dans les tâches créatives"
|
||||
@@ -278,9 +281,6 @@ fr:
|
||||
summarizing: "Synthèse du sujet"
|
||||
searching: "Recherche de : '%{query}'"
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "Nombre maximal de résultats"
|
||||
google:
|
||||
base_query:
|
||||
name: "Requête de recherche de base"
|
||||
|
||||
@@ -283,6 +283,9 @@ he:
|
||||
settings_explorer:
|
||||
name: סייר הגדרות
|
||||
description: "בוט בינה מלאכותית שמתמחה בסיור בהגדרות אתר ה־Discourse"
|
||||
researcher:
|
||||
name: מחקר
|
||||
description: "בוט בינה מלאכותית עם גישה ל־Google שיכול לגשת למידע מחקרי בשבילך"
|
||||
creative:
|
||||
name: יצירה
|
||||
description: "בוט בינה מלאכותית ללא שילובים חיצוניים שמתמחה ביצירת משימות יצירתיות"
|
||||
@@ -303,9 +306,6 @@ he:
|
||||
summarizing: "הנושא מסוכם"
|
||||
searching: "חיפוש אחר: ‚%{query}’"
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "מספר תוצאות מרבי"
|
||||
create_artifact:
|
||||
creator_llm:
|
||||
name: "LLM"
|
||||
@@ -363,7 +363,6 @@ he:
|
||||
javascript_evaluator: "שערוך JavaScript"
|
||||
create_image: "יצירת תמונה"
|
||||
edit_image: "עריכת תמונה"
|
||||
researcher_dry_run: "המחקר בהכנה"
|
||||
tool_help:
|
||||
read_artifact: "לקרוא תוצר דפדפני באמצעות בוט הבינה המלאכותית"
|
||||
update_artifact: "עדכון תוצר דפדפני באמצעות בוט הבינה המלאכותית"
|
||||
@@ -434,16 +433,6 @@ he:
|
||||
other: "נמצאו %{count} <a href='%{url}'>תוצאות</a> לחיפוש אחר ‚%{query}’"
|
||||
setting_context: "נקרא הקשר עבור: %{setting_name}"
|
||||
schema: "%{tables}"
|
||||
researcher_dry_run:
|
||||
one: "יעדים מוצעים: %{goals}\n\nנמצא פוסט שעונה על ‚%{filter}’"
|
||||
two: "יעדים מוצעים: %{goals}\n\nנמצאו שני פוסטים שעונים על ‚%{filter}’"
|
||||
many: "יעדים מוצעים: %{goals}\n\nנמצאו %{count} פוסטים שעונים על ‚%{filter}’"
|
||||
other: "יעדים מוצעים: %{goals}\n\nנמצאו %{count} פוסטים שעונים על ‚%{filter}’"
|
||||
researcher:
|
||||
one: "במהלך מחקר: %{goals}\n\nנמצא פוסט שעונה על ‚%{filter}’"
|
||||
two: "במהלך מחקר: %{goals}\n\nנמצאו שני פוסטים שעונים על ‚%{filter}’"
|
||||
many: "במהלך מחקר: %{goals}\n\nנמצאו %{count} פוסטים שעונים על ‚%{filter}’"
|
||||
other: "במהלך מחקר: %{goals}\n\nנמצאו %{count} פוסטים שעונים על ‚%{filter}’"
|
||||
search_settings:
|
||||
one: "נמצאה תוצאה לחיפוש אחר ‚%{query}’"
|
||||
two: "נמצאו שתי תוצאות לחיפוש אחר ‚%{query}’"
|
||||
|
||||
@@ -262,6 +262,9 @@ it:
|
||||
settings_explorer:
|
||||
name: Esploratore di impostazioni
|
||||
description: "Bot IA specializzato nell'aiutare a esplorare le impostazioni del sito Discourse"
|
||||
researcher:
|
||||
name: Ricercatore
|
||||
description: "Bot IA con accesso a Google che può ricercare informazioni per te"
|
||||
creative:
|
||||
name: Creativo
|
||||
description: "Bot IA senza integrazioni esterne specializzato in attività creative"
|
||||
@@ -278,9 +281,6 @@ it:
|
||||
summarizing: "Riepilogo argomento"
|
||||
searching: "Ricerca di: '%{query}'"
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "Numero massimo di risultati"
|
||||
google:
|
||||
base_query:
|
||||
name: "Query di ricerca di base"
|
||||
|
||||
@@ -260,6 +260,9 @@ ja:
|
||||
settings_explorer:
|
||||
name: 設定エクスプローラー
|
||||
description: "Discourse のサイト設定のナビ支援を専門とする AI ボット"
|
||||
researcher:
|
||||
name: リサーチャー
|
||||
description: "ユーザーに代わって Google にアクセスして情報を調査できる AI ボット"
|
||||
creative:
|
||||
name: クリエイティブ
|
||||
description: "外部統合のないクリエイティブ系タスクを専門とする AI ボット"
|
||||
@@ -276,9 +279,6 @@ ja:
|
||||
summarizing: "トピックの要約を生成中"
|
||||
searching: "検索中: '%{query}'"
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "結果の最大件数"
|
||||
google:
|
||||
base_query:
|
||||
name: "ベース検索クエリ"
|
||||
|
||||
@@ -262,6 +262,9 @@ nl:
|
||||
settings_explorer:
|
||||
name: Instellingenverkenner
|
||||
description: "AI-bot gespecialiseerd in het verkennen van Discourse-site-instellingen"
|
||||
researcher:
|
||||
name: Onderzoeker
|
||||
description: "AI-bot met toegang tot Google die informatie voor je kan onderzoeken"
|
||||
creative:
|
||||
name: Creatief
|
||||
description: "AI-bot zonder externe integraties, gespecialiseerd in creatieve taken"
|
||||
@@ -278,9 +281,6 @@ nl:
|
||||
summarizing: "Topic samenvatten"
|
||||
searching: "Zoeken naar: '%{query}'"
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "Maximaal aantal resultaten"
|
||||
google:
|
||||
base_query:
|
||||
name: "Basiszoekquery"
|
||||
|
||||
@@ -141,6 +141,9 @@ pl_PL:
|
||||
settings_explorer:
|
||||
name: Eksplorator ustawień
|
||||
description: "Bot AI specjalizujący się w eksploracji ustawień strony Discourse"
|
||||
researcher:
|
||||
name: Badacz
|
||||
description: "Bot AI z dostępem do Google, który może wyszukiwać informacje za Ciebie"
|
||||
creative:
|
||||
name: Kreatywny
|
||||
description: "Bot AI bez zewnętrznych integracji specjalizujący się w zadaniach kreatywnych"
|
||||
@@ -153,9 +156,6 @@ pl_PL:
|
||||
summarizing: "Podsumowanie tematu"
|
||||
searching: "Wyszukiwanie: '%{query}'"
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "Maksymalna liczba wyników"
|
||||
update_artifact:
|
||||
update_algorithm:
|
||||
description: "Poproś LLM o pełne zastąpienie lub użyj diff do aktualizacji"
|
||||
|
||||
@@ -261,6 +261,9 @@ pt_BR:
|
||||
settings_explorer:
|
||||
name: Explorador de configurações
|
||||
description: "Bot de IA especializado em ajudar a explorar as configurações do site do Discourse"
|
||||
researcher:
|
||||
name: Pesquisador(a)
|
||||
description: "Esta informação pode ser pesquisada com um Bot de IA com acesso ao Google para você"
|
||||
creative:
|
||||
name: Criativa
|
||||
description: "Bot de IA sem integrações externas especializado em tarefas criativas"
|
||||
@@ -277,9 +280,6 @@ pt_BR:
|
||||
summarizing: "Resumindo tópico"
|
||||
searching: "Pesquisando: \"%{query}\""
|
||||
tool_options:
|
||||
researcher:
|
||||
max_results:
|
||||
name: "O número máximo de resultados"
|
||||
google:
|
||||
base_query:
|
||||
name: "Consulta de pesquisa básica"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user