feat: Random.org dice and daily word matrix, interpreter voices, curated lexicon
Wire cleromancy rolls and the once-per-UTC-day 000-999 word shuffle to RANDOM.ORG JSON-RPC, with a local CSPRNG fallback. Add settings for interpreter personas and a cleaner default oracle prompt. Replace proper names and bureaucratic filler in the 1000-word lexicon with sacred symbols.
This commit is contained in:
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'dart:ui';
|
||||
import '../g4f/client.dart';
|
||||
import '../g4f/models.dart';
|
||||
import '../services/settings_repository.dart';
|
||||
|
||||
class OracleChatScreen extends StatefulWidget {
|
||||
const OracleChatScreen({Key? key}) : super(key: key);
|
||||
@@ -22,15 +23,20 @@ class _OracleChatScreenState extends State<OracleChatScreen> {
|
||||
final ScrollController _scrollController = ScrollController();
|
||||
final G4FClient _client = G4FClient();
|
||||
|
||||
final List<ChatMessage> _messages = [
|
||||
ChatMessage(
|
||||
text: "Я Оракул. Мой взор проникает сквозь завесу времени. О чем ты хочешь спросить?",
|
||||
isUser: false
|
||||
),
|
||||
];
|
||||
|
||||
late final List<ChatMessage> _messages;
|
||||
bool _isLoading = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_messages = [
|
||||
ChatMessage(
|
||||
text: SettingsRepository().persona.chatGreeting,
|
||||
isUser: false,
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
void _scrollToBottom() {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (_scrollController.hasClients) {
|
||||
@@ -43,14 +49,6 @@ class _OracleChatScreenState extends State<OracleChatScreen> {
|
||||
});
|
||||
}
|
||||
|
||||
static const _oracleSystem = Message(
|
||||
role: Role.system,
|
||||
content:
|
||||
'Ты — Великий Оракул 999, древний архетипический разум. '
|
||||
'Стиль речи: глубокий, философский, лаконичный, без банальностей. '
|
||||
'Отвечай на языке вопрошающего. Не упоминай модели, провайдеров и технические сбои.',
|
||||
);
|
||||
|
||||
Future<void> _sendMessage() async {
|
||||
final text = _controller.text.trim();
|
||||
if (text.isEmpty || _isLoading) return;
|
||||
@@ -64,7 +62,12 @@ class _OracleChatScreenState extends State<OracleChatScreen> {
|
||||
_scrollToBottom();
|
||||
|
||||
final apiMessages = <Message>[
|
||||
_oracleSystem,
|
||||
Message(
|
||||
role: Role.system,
|
||||
content:
|
||||
'${SettingsRepository().persona.systemPrompt}\n'
|
||||
'Отвечай на языке вопрошающего. Не упоминай модели, провайдеров и технические сбои.',
|
||||
),
|
||||
for (final m in _messages)
|
||||
if (m.text.trim().isNotEmpty)
|
||||
Message(
|
||||
|
||||
Reference in New Issue
Block a user