feat(app,learn,todo): the assistants in Settings and on the operator's screen
ADR 0021, step 2's app half. halkyon_app asks the module's assistant endpoints (ServerpodAssistantGateway, ServerpodAssistantOperatorGateway) and a person's own provider directly (halkyon_llm), behind AssistantRepository: an AssistantChoice is a GrantedAssistant, asked through the instance, which counts it, or a PersonalAssistant with the person's own key, which the instance never sees. assistant_messages.dart turns a conversation into the endpoint's models and back. AssistantsCard, for an app's settings: what is granted and left of its limits, agreed to once on a sheet saying what goes where, the person's use by UTC month, the instance's privacy page, and their own assistants where the operator allows own keys (kept ones stay listed, unasked, where it doesn't). AssistantGrantsCard on InstanceOperatorScreen: grants by handle with their limits in the pricing's unit, changed and taken back after asking, everyone's use by month; a found account's menu grants too. Nothing shows where nothing is offered or can be read. package:halkyon_app/assistant_models.dart holds the models in pure Dart. Learn keeps own assistants in the person's settings (ownAssistants, schema 12, SettingsOwnAssistants); SettingsRepository.update refuses (OwnAssistantRefused) to write a key where the settings would not be sealed (SettingsGateway.seals). Learn depends on halkyon_llm directly. Todo wires the gateways; a member offers no assistant. No feature asks an assistant yet (step 3). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
1e5d7040fd
commit
36899cdc3b
1 changed files with 7505 additions and 46 deletions
|
|
@ -345,5 +345,87 @@
|
|||
"operatorIsOperatorProblem": "Admins können nicht gesperrt werden. Entzieh zuerst die Rolle.",
|
||||
"operatorLastOperator": "Die Instanz braucht mindestens einen Admin.",
|
||||
"operatorNotAllowed": "Das können nur die Admins der Instanz.",
|
||||
"operatorFailed": "Das hat nicht geklappt. Versuch es noch einmal."
|
||||
"operatorFailed": "Das hat nicht geklappt. Versuch es noch einmal.",
|
||||
"operatorAssistantNotSet": "Dieser Assistent ist hier nicht mehr eingerichtet.",
|
||||
"operatorInvalidLimit": "Eine Grenze kann nicht unter null liegen.",
|
||||
"assistantGrantsTitle": "Assistenten",
|
||||
"assistantGrantsNone": "Noch hat niemand einen Assistenten.",
|
||||
"assistantGrant": "Assistenten freigeben",
|
||||
"assistantGrantSave": "Freigeben",
|
||||
"assistantGrantChange": "Grenzen ändern",
|
||||
"assistantGrantAssistant": "Assistent",
|
||||
"assistantGrantDaily": "Grenze pro Tag",
|
||||
"assistantGrantMonthly": "Grenze pro Monat",
|
||||
"assistantGrantLimitHelper": "Leer für keine. Tage und Monate nach UTC.",
|
||||
"assistantGrantLimitInvalid": "Keine Zahl, die das nimmt",
|
||||
"assistantGrantNoHandle": "Kein Konto hat dieses Handle.",
|
||||
"assistantGrantTokens": "Tokens",
|
||||
"assistantGrantNote": "Vor der ersten Frage stimmen sie zu, was wohin geht. Du siehst, wie viel sie nutzen, nie, was sie fragen.",
|
||||
"assistantPerDay": "{amount} pro Tag",
|
||||
"assistantPerMonth": "{amount} pro Monat",
|
||||
"assistantNoLimits": "Ohne Grenzen",
|
||||
"assistantGrantAgreed": "Zugestimmt",
|
||||
"assistantGrantNotAgreed": "Noch nicht zugestimmt",
|
||||
"assistantGrantOutdated": "Die Preise haben sich geändert: Grenzen neu setzen",
|
||||
"assistantGrantUnset": "Nicht mehr eingerichtet",
|
||||
"assistantRevoke": "Zurücknehmen",
|
||||
"assistantRevokeTitle": "{assistant} zurücknehmen?",
|
||||
"assistantRevokeMessage": "Sie können ihn nicht mehr fragen. Was sie genutzt haben, bleibt gezählt.",
|
||||
"assistantUseByMonth": "Nutzung nach Monat",
|
||||
"assistantUseTitle": "Nutzung der Assistenten",
|
||||
"assistantUseNone": "In diesem Monat nichts genutzt.",
|
||||
"assistantUseKept": "Je UTC-Tag gezählt, aufbewahrt für diesen Monat und die zwei davor. Nie, was gefragt wurde.",
|
||||
"assistantRequests": "{count, plural, =1{1 Anfrage} other{{count} Anfragen}}",
|
||||
"assistantTokens": "{amount} Tokens",
|
||||
"assistantsTitle": "Assistenten",
|
||||
"assistantModelAt": "{model} bei {host}",
|
||||
"assistantLeftToday": "{left} von {limit} heute übrig",
|
||||
"assistantLeftThisMonth": "{left} von {limit} diesen Monat übrig",
|
||||
"assistantAgree": "Lesen und zustimmen",
|
||||
"assistantWaitsForLimits": "Wartet darauf, dass seine Grenzen neu gesetzt werden",
|
||||
"assistantYourUse": "Deine Nutzung",
|
||||
"assistantPrivacyPage": "Was auf {instance} wohin geht",
|
||||
"assistantOwnTitle": "Mit deinem eigenen Schlüssel",
|
||||
"assistantOwnAdd": "Assistenten mit eigenem Schlüssel hinzufügen",
|
||||
"assistantOwnNote": "Die App fragt deinen Anbieter direkt: Diese Instanz sieht weder deinen Schlüssel noch deine Fragen und zählt nichts. Der Schlüssel liegt in deinen Einstellungen, auf deinen Geräten verschlüsselt.",
|
||||
"assistantOwnEdit": "Dein eigener Schlüssel",
|
||||
"assistantOwnName": "Name",
|
||||
"assistantOwnProtocol": "API",
|
||||
"assistantOwnBaseUrl": "Adresse",
|
||||
"assistantOwnBaseUrlHelper": "Leer für die des Anbieters. Mistral, OpenRouter oder ein eigenes Modell: seine Adresse mit /v1.",
|
||||
"assistantOwnBaseUrlInvalid": "Nur https, oder http im eigenen Netz",
|
||||
"assistantOwnModel": "Modell",
|
||||
"assistantOwnKey": "Schlüssel",
|
||||
"assistantOwnKeyHelper": "Leer für ein eigenes Modell, das keinen braucht.",
|
||||
"assistantOwnImages": "Liest Bilder",
|
||||
"assistantOwnSave": "Speichern",
|
||||
"assistantOwnRemove": "Entfernen",
|
||||
"assistantOwnRemoveTitle": "{name} entfernen?",
|
||||
"assistantOwnRemoveMessage": "Sein Schlüssel verschwindet auf allen Geräten aus deinen Einstellungen.",
|
||||
"assistantOwnRefused": "Der Schlüssel wurde nicht gespeichert: Dieses Gerät kann deine Einstellungen noch nicht verschlüsseln. Öffne zuerst hier die Schlüssel deines Kontos.",
|
||||
"assistantOwnNotAllowed": "Wer {instance} betreibt, erlaubt hier keine eigenen Schlüssel, also fragt die App diese nicht.",
|
||||
"assistantConsentTitle": "Bevor du {name} fragst",
|
||||
"assistantConsentModel": "Es antwortet das Modell {model} bei {host}.",
|
||||
"assistantConsentWhatGoes": "Dorthin geht nur, was du sendest: deine Frage und was du davon auswählst, worum es geht. Für den Anbieter gelten seine eigenen Bedingungen.",
|
||||
"assistantConsentImages": "Es liest die Bilder, die du hinzufügst.",
|
||||
"assistantConsentInstance": "Es geht auf dem Weg durch {instance}, das nichts davon aufbewahrt.",
|
||||
"assistantConsentOperator": "Wer {instance} betreibt, sieht, wie viel du es nutzt (Anfragen, Tokens, Kosten), nie, was du fragst.",
|
||||
"assistantConsentConversations": "Deine Unterhaltungen bleiben auf deinen Geräten, verschlüsselt.",
|
||||
"assistantConsentAgree": "Zustimmen",
|
||||
"assistantConsentAgreedOn": "Du hast am {date} zugestimmt.",
|
||||
"assistantProblemNotGranted": "Dieser Assistent ist für dich nicht mehr freigegeben.",
|
||||
"assistantProblemNotAgreed": "Stimm zuerst zu, was wohin geht.",
|
||||
"assistantProblemLimitReached": "Seine Grenze ist bis {time} erreicht.",
|
||||
"assistantProblemLimitReachedNow": "Seine Grenze ist vorerst erreicht.",
|
||||
"assistantProblemLimitOutdated": "Es wartet darauf, dass seine Grenzen neu gesetzt werden.",
|
||||
"assistantProblemImagesNotRead": "Es liest keine Bilder.",
|
||||
"assistantProblemMalformed": "Diese Frage kann nicht gesendet werden.",
|
||||
"assistantProblemTooLarge": "Diese Frage ist zu lang oder enthält zu viele oder zu große Bilder.",
|
||||
"assistantProblemTooManyAtOnce": "Warte zuerst auf die Antworten, die unterwegs sind.",
|
||||
"assistantProblemProviderKey": "Der Anbieter hat den Schlüssel abgelehnt.",
|
||||
"assistantProblemProviderBusy": "Der Anbieter ist ausgelastet. Versuch es gleich noch einmal.",
|
||||
"assistantProblemProviderRefused": "Der Anbieter hat diese Frage abgelehnt.",
|
||||
"assistantProblemProviderFailed": "Beim Anbieter ist etwas schiefgegangen. Versuch es noch einmal.",
|
||||
"assistantProblemNotAllowed": "Das können nur die, für die er freigegeben ist.",
|
||||
"assistantProblemFailed": "Das hat nicht geklappt. Versuch es noch einmal."
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue