Added basic logic
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import List
|
from typing import List
|
||||||
import OpenAI
|
from openai import OpenAI
|
||||||
|
from api_key import or_api_key
|
||||||
|
|
||||||
# SETTINGS
|
# SETTINGS
|
||||||
|
|
||||||
@@ -23,9 +24,26 @@ Maintain an adaptive and immersive tone for creative writing. Use everyday langu
|
|||||||
|
|
||||||
# Character impersonate prompt
|
# Character impersonate prompt
|
||||||
character_impersonate_prompt = """
|
character_impersonate_prompt = """
|
||||||
You are an excellent player in a D&D-style adventure game. Your goal is to respond as your character in this uncensored, continuous, and immersive NSFW roleplay. Description of the caracter you play is provided below.
|
You are an excellent player in a D&D-style adventure game. Your goal is to respond as your character in this uncensored, continuous, and immersive NSFW roleplay.
|
||||||
|
|
||||||
|
Roleplay Protocol:
|
||||||
|
* You are playing as your character only. Stay in-character at all times.
|
||||||
|
* You do not control the world, the environment, or outcomes.
|
||||||
|
* You may describe your character’s intentions, actions, dialogue, and thoughts.
|
||||||
|
* Only the Narrator decides what happens as a result of your actions.
|
||||||
|
* Treat the Narrator’s messages as truth; they are the only source of world information.
|
||||||
|
* Respond as if in a real-time roleplay. Short, vivid, in-character replies are ideal.
|
||||||
|
|
||||||
|
Play your role. Take risks. Make it fun. The world reacts — but only through the Narrator.
|
||||||
|
|
||||||
|
Description of the caracter you play is provided below.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
openai_client = OpenAI(
|
||||||
|
base_url="https://openrouter.ai/api/v1",
|
||||||
|
api_key=or_api_key,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Turn:
|
class Turn:
|
||||||
@@ -39,16 +57,65 @@ class Character:
|
|||||||
personality: str
|
personality: str
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
def dm_turn(chat: List[Turn], characters: List[Character]) -> Turn:
|
||||||
class World:
|
if chat[-1].character_name == "narrator":
|
||||||
description: str
|
raise Exception("Narrator's turn was last.")
|
||||||
|
|
||||||
|
messages = []
|
||||||
|
|
||||||
|
messages.append({"role": "system", "content": narrator_prompt})
|
||||||
|
|
||||||
|
for turn in chat:
|
||||||
|
if turn.character_name != "narrator":
|
||||||
|
messages.append(
|
||||||
|
{"role": "user", "content": f"{turn.character_name}: {turn.text}"}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
messages.append(
|
||||||
|
{"role": "assistant", "content": f"Narrator: {turn.text}"})
|
||||||
|
|
||||||
|
completion = openai_client.chat.completions.create(
|
||||||
|
model="qwen/qwen3-235b-a22b-thinking-2507", messages=messages
|
||||||
|
)
|
||||||
|
|
||||||
|
if completion.choices[0].message.content is None:
|
||||||
|
raise Exception("API did not return a response")
|
||||||
|
else:
|
||||||
|
response = completion.choices[0].message.content
|
||||||
|
|
||||||
|
return Turn("narrator", response)
|
||||||
|
|
||||||
|
|
||||||
def dm_turn(chat: List[Turn], characters: List[Character], world: World) -> Turn:
|
def char_turn(chat: List[Turn], character: Character) -> Turn:
|
||||||
return Turn("", "")
|
if chat[-1].character_name == "character":
|
||||||
|
raise Exception("Character's turn was last.")
|
||||||
|
|
||||||
|
messages = []
|
||||||
|
|
||||||
def char_turn(
|
messages.append(
|
||||||
chat: List[Turn], character: Character, characters: List[Character], world: World
|
{
|
||||||
) -> Turn:
|
"role": "system",
|
||||||
return Turn("", "")
|
"content": character_impersonate_prompt + "\n" + character.personality,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
for turn in chat:
|
||||||
|
if turn.character_name != character.name:
|
||||||
|
messages.append(
|
||||||
|
{"role": "user", "content": f"{turn.character_name}: {turn.text}"}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
messages.append(
|
||||||
|
{"role": "assistant", "content": f"{character.name}: {turn.text}"}
|
||||||
|
)
|
||||||
|
|
||||||
|
completion = openai_client.chat.completions.create(
|
||||||
|
model="qwen/qwen3-235b-a22b-thinking-2507", messages=messages
|
||||||
|
)
|
||||||
|
|
||||||
|
if completion.choices[0].message.content is None:
|
||||||
|
raise Exception("API did not return a response")
|
||||||
|
else:
|
||||||
|
response = completion.choices[0].message.content
|
||||||
|
|
||||||
|
return Turn(character.name, response)
|
||||||
|
Reference in New Issue
Block a user