Commit Graph

3735 Commits

Author SHA1 Message Date
kwaroran
3390e7b11c Merge branch 'main' into patch-2 2025-05-17 01:09:01 +09:00
kwaroran
f9f0b5dd31 feat: Open read-only access to persona name/desc from Lua (#847)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [x] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?

# Description

This PR adds read-only persona name and description access from Lua by
adding `getPersonaName(triggerId)` and
`getPersonaDescription(triggerId)`. The description is parsed before
returning.
2025-05-17 01:08:21 +09:00
kwaroran
19d50d1ef1 feat: add optional prompt metadata saving to chat messages (#848)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [x] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?

# Description
## What does this PR do?

This PR adds an optional feature to store prompt preset metadata in each
chat message.

<img width="311" alt="prompt"
src="https://github.com/user-attachments/assets/2591ac25-6cb2-41fc-85b2-e12c35b79370"
/>

---

## Why is this useful?

When writing prompts, it's common to test **dozens of prompt presets**
across many messages. After just a day or two, it's hard to remember
which message used which prompt.
This is especially important for sensitive models, where even small
changes to prompt wording or toggle combinations can greatly affect
output.

---

## What is stored when enabled?

To support this, an option has been added to **Advanced Settings** that
stores:

- Prompt preset name (*Add Prompt Info to Chat*)
- Active custom toggles (*Add Prompt Info to Chat*)
- Prompt text (*Add Prompt *Text* To Chat*):
Only the **Prompt Template** portion of the final prompt (**as sent**)
is stored — character description, persona, lorebook, and long-term
memory are excluded to avoid excessive size.
    This option is separated due to its potential impact on storage.

This information is stored per message, if the feature is enabled.

<img width="319" alt="setting"
src="https://github.com/user-attachments/assets/00600d0c-d38d-46cf-890f-3f08d78ccb0a"
/>

---

## Implementation Summary

### `src/ts/storage/database.svelte.ts`

- Added `interface MessagePresetInfo` (includes `promptName`,
`promptToggles`, `promptText`)
- Updated `interface Message` with optional `promptInfo`

### `src/ts/process/index.svelte.ts`

- In `sendChat()`, prompt metadata is collected and stored
- `promptText` is taken from the existing `formated` array, but only
after filtering out types like `'persona'`, `'description'`,
`'authornote'`, `'memory'`
- Since `formated` is reused, this had to be placed in the **later**
part of the `sendChat` function.
- However, `promptName` and `promptToggles` are collected **early** to
avoid mismatches caused by user changes during message sending. *(A
short comment has been added to explain the code separation. See
screenshot below.)*
<img width="494" alt="comment"
src="https://github.com/user-attachments/assets/b43da333-d529-4b3c-b659-579b847135a5"
/>

- Used this condition when storing partial prompt data (As you can see,
these are the types that support Custom Inner Format.):

```ts
// only for types supporting Custom Inner Format
if (DBState.db.promptInfoInsideChat && DBState.db.promptTextInfoInsideChat) {
    pushPromptInfoBody('supaMemory', card.innerFormat)
}
```

- The final `promptInfo` is added to the message object during
`message.push`

---

## Additional Notes

- The prompt preset name and active toggles take up very little space,
so they are unlikely to be an issue.
- The prompt text may increase the message size slightly, but:
- Modern models already generate outputs of several thousand tokens, so
adding \~2,000 tokens of metadata is relatively minor in comparison.
  - The `{{slot}}` contents are not included in the saved text.
- The prompt text is filtered through `risuChatParser`, which reduces
unnecessary parts before saving.
- Most importantly, this feature is optional and can be enabled only by
those who need it — for example, prompt creators or advanced users.

---

## Final Thoughts

This feature is designed to help prompt creators **track, debug, and
revisit** messages more easily.
If this feature doesn't fit the project goals or introduces any
concerns, feel free to let me know or suggest changes.
It might also be interesting to allow users to write a note for each
message!

Thanks for reading.
2025-05-17 01:08:11 +09:00
Bo26fhmC5M
85753a76ef feat: implement preset and parallel requests for HypaV3 2025-05-16 22:18:13 +09:00
enzi221
a758b574f5 fix: Pluralize name 2025-05-16 03:37:54 +09:00
enzi221
40e91e59a7 feat: Return all lore books of same name without sort 2025-05-16 03:36:50 +09:00
poroyo
2cb92c0e5f fix: correct promptTextInfoInsideChat label to "Add Prompt Text to Chat" 2025-05-16 02:53:44 +09:00
poroyo
4fca6f26b4 feat: store prompt preset name, toggles, and text in chat metadata when enabled 2025-05-16 02:20:48 +09:00
enzi221
e44ac16b00 feat: Open persona name/desc access from Lua 2025-05-14 20:36:36 +09:00
enzi221
1b8a0762b1 fix: Return stringified false instead of literal false 2025-05-13 23:12:57 +09:00
enzi221
5a70dd1566 refactor: Get current character from db.characters like other functions 2025-05-13 16:16:27 +09:00
enzi221
953fc383f5 feat: Open read-only access to lorebooks from Lua 2025-05-13 14:58:16 +09:00
Kwaroran
634de807ad Remove googli 2025-05-13 13:54:08 +09:00
kwaroran
d9565b4450 feat: Allow deleting an orphaned summary from HypaV3 (#831)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [x] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?

# Description

Currently, you can:

- Manually rewrite summaries
- Delete orphaned summaries (all or none, in the settings)
- Delete all summaries after one

But you can't:

- Manually add summaries
- Delete a summary

This PR aims to add a feature for the second one - you can pick and
delete a specific summary.

As I'm not yet familiar with the implementation of HypaV3, this PR only
allows deleting orphaned summaries to minimize any unforeseen
side-effects.

cn, de, es, vi, zh-Hant strings were made with Gemini. Reviews welcome.
2025-05-10 20:17:29 +09:00
kwaroran
1db6d549b7 Fix ERR_PNPM_OUTDATED_LOCKFILE (#829)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?

# Description
2025-05-10 20:17:10 +09:00
kwaroran
856af41da9 fix: prevent missing data field for recursive lorebook (#839)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?

# Description

Filled data field when creating a recursive lorebook.
2025-05-10 20:16:51 +09:00
kwaroran
146691dd0c fix: prevent blocks lazy loading when no chat selected (#840)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?

# Description

Prevented lazy loading of blocks when no chat is selected.
2025-05-10 20:15:44 +09:00
kwaroran
d7c8c17353 feat: alertSelect for triggerlua (#844)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?

# Description
This PR aims to make the alertSelect trigger usable in Lua as well.

Here is the Lua code used for testing:
```Lua
testSelect = async(function(id)
  -- declare string table
  local strTable = {
    "test1",
    "test2",
    "test3",
    "test4",
    "test5",
  }
  local testVar = alertSelect(id, strTable):await()
  print('testVar')
  print(testVar)
end)
```
2025-05-10 20:14:59 +09:00
bangonicdd
0bd947fcde feat: alertSelect for triggerlua 2025-05-07 22:47:35 +09:00
niceandneat
a148e07ad1 fix: prevent blocks lazy loading when no chat selected 2025-05-04 21:24:56 +09:00
niceandneat
306aa5f894 fix: prevent missing data field for recursive lorebook 2025-05-04 21:12:15 +09:00
YH_KIM
77ab3f79ce fix 2025-05-03 16:43:50 +09:00
YH_KIM
133156d7d4 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/ts/process/stableDiff.ts
2025-05-03 16:41:56 +09:00
YH_KIM
5b0ca460a5 Support numeric values in inputs and enhance image generation configs
Updated `SelectInput` and `OptionInput` to allow `value` as `string | number`. Extended image generation configurations with new features, including `cfg_rescale`, `noise_schedule`, and vibe data handling. Improved the setup for reference images and added support for mnemonist dependency in the package manager.
2025-05-03 16:38:04 +09:00
alattalatta
7a5daf0995 Merge branch 'main' into dev 2025-05-02 01:34:45 +09:00
kwaroran
6db9bd08f1 Add more restrictions 2025-04-28 16:45:06 +09:00
kwaroran
f2839e66bb fix: update request limit to 5 and use fetchNative for API calls 2025-04-28 16:41:30 +09:00
kwaroran
165e6741bd feat: add request api with rate limiting and URL validation in Lua engine 2025-04-28 16:40:28 +09:00
kwaroran
bf55f77e0d Upgrade dep 2025-04-28 16:09:29 +09:00
kwaroran
468450c254 Merge branch 'main' of https://github.com/kwaroran/RisuAI 2025-04-28 15:47:11 +09:00
kwaroran
780cbce164 Remove sleep 2025-04-28 15:47:06 +09:00
kwaroran
aef8a75f76 Add nai cfg_rescale, noise_schedule options settings (#835)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions? -
I've checked web version only.
- [x] Have you added type definitions?

# Description

Added the ability to configure the `cfg_rescale` and `noise_schedule`
properties in the NovelAI settings.

# Example


![image](https://github.com/user-attachments/assets/437984aa-7612-4a38-9d34-311faf20ced4)
2025-04-28 15:43:41 +09:00
kwaroran
02b9050666 feat: add option to show Hypa modal button in chat menu (#823)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?

# Preview

![preview1](https://github.com/user-attachments/assets/daaafcb2-a533-4bf1-b38f-e9b9b54f6769)


![preview2](https://github.com/user-attachments/assets/a632a66d-fc74-4d92-909a-88d450cd41fb)

# Description
This PR introduces following:
- feat: add accessibility setting to control visibility of Hypa V2/V3
modal button in chat menu
- feat: add summarization condition tip to HypaV3 modal
2025-04-28 15:43:06 +09:00
kwaroran
9fc92e50ae Fix: Avoid flatMap crash when output.images is undefined (#827)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?

# Description
In some ComfyUI workflows, output.images is often undefined when
intermediate outputs from text-based nodes are included and cannot be
suppressed in the response.
2025-04-28 15:42:54 +09:00
kwaroran
2c3ddd64e0 feat: module lorebook sort, import, export (#822)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?

# Description
This PR adds sorting, import, and export functionality to the Module
Lorebook list.

I focused on preserving the existing code structure as much as possible
while implementing these changes.

Thank you for your time and review!
2025-04-28 15:42:40 +09:00
kwaroran
eb690750a7 Add: Caching tokenize (#826)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?

# Description
Previous PR #805 had a bug due to incorrect flow of if statements. I
apologize for this.
In this PR, I have improved the flow of if statement additionally from
the modification I made before.
Please refer [Fix: Correct tokenize flow in tokenizer encode
function](09228f3f86)
To see the how I changed the flow.

The biggest change of this commit is that it resolves the issue of
duplicate tokenization that was occurring
By add a `Line 122: if (result === undefined) {`
I think this change corrected the error even if people didn't turn on
the caching option.

And there is an error in the tikJS function, independent of this wrong
flow.
https://github.com/dqbd/tiktoken/issues/35
2025-04-28 15:42:19 +09:00
kwaroran
83b8e6b28e feat: add persona sort (#821)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?

# Description
This PR introduces the persona sorting feature.

**Changes:**

1. Uses the `sortable` library, consistent with other sorting
functionalities.
2. To prevent desynchronization between the selected persona and the UI
value during sorting:
    *   `OnStart`: Saves the currently selected persona.
* `OnEnd`: Switches selection to the first persona without saving the
initial selection.

I believe I've tested this sufficiently, but please feel free to point
out any potential issues or edge cases I might have missed.

Thank you for your time and review!
2025-04-28 15:41:53 +09:00
kwaroran
42ea3abcfd Fix: Resolve account login issues in Node.js hosted version (#820)
# PR Checklist
-  Have you checked if it works normally in all models? *Ignore this if
it doesn't use models.*
   - Not applicable
-  Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
   - Done
-  Have you added type definitions?
   - Not applicable

# Description

In the previous commit, a new proxy endpoint was added to the backend to
resolve CORS errors that occurred when the frontend directly fetched
data from Risu Realm.

However, 403 errors were occurring because the POST requests sent from
the loadRisuAccountData() function in the frontend were not being
properly processed.
Additionally, the backend was inefficiently handling complex body
processing.

The updated backend code now provides a more efficient and stable
solution by directly piping the original request.

Furthermore, an issue where UserSettings.svelte couldn't handle tokens
received through the backend proxy after successfully logging into a
Risu account has also been fixed.
2025-04-28 15:41:26 +09:00
kwaroran
d86320d1bb Fix: Issue with Lorebook prompt prefix/suffix affecting matching (#819)
# PR Checklist
- [x] Have you added type definitions?

# Description
This PR aims to address the following issues:

* Fixed problems where prefixes and suffixes in the Lorebook prompt were
affecting keyword matching logic.
1. In full word matching, the first and last words of the body text
would consistently fail to match.
2. In general matching, using a persona name as a keyword would always
result in a match, regardless of context.
* I tried to preserve the original code structure as much as possible
while implementing these fixes. Please feel free to suggest changes to
the approach if you see a better way.

Thank you for your time and review.
2025-04-28 15:40:11 +09:00
kwaroran
05c51f333f Implement lazy loading of chats via lazy portal 2025-04-28 15:38:57 +09:00
niceandneat
a899a02d30 Add nai cfg_rescale, noise_schedule options settings 2025-04-28 01:21:10 +09:00
shirosaki-hana
a9e5e98603 Merge branch 'kwaroran:main' into DebugHubProxy 2025-04-24 13:07:16 +09:00
kwaroran
39048dd142 Add dice CBS 2025-04-23 12:44:32 +09:00
kwaroran
89257b2ed4 Accept cbr,cnl,cnewline without params 2025-04-23 12:41:48 +09:00
kwaroran
59fdcc20b3 Add randint and cbr, cnl, cnewline 2025-04-23 12:40:38 +09:00
kwaroran
2ca28aff78 Add u escape 2025-04-23 12:37:40 +09:00
kwaroran
e443eadb12 Add code cbs 2025-04-23 12:36:34 +09:00
kwaroran
e029456f01 Fix comment 2025-04-23 12:29:45 +09:00
kwaroran
91e3a352a3 Change download to blob 2025-04-23 12:26:27 +09:00
shirosaki-hana
6bce5cb456 Merge branch 'kwaroran:main' into DebugHubProxy 2025-04-23 08:58:23 +09:00