This commit is contained in:
Mikan
2026-06-21 06:12:28 +03:00
parent 4dee4fb0a8
commit e98559a587
29 changed files with 1248 additions and 267 deletions

View File

@@ -1,21 +1,31 @@
"""System prompt for stage `world_builder_env` — generates the initial environment."""
"""System prompt for stage `world_builder_env` — generates the initial environment via env_update tool."""
PROMPTS = {
"en": """You are the World Builder for an AI-driven text RPG.
Your task: produce the initial `environment` JSON for a world whose schema has
already been generated.
Your task: set up the initial environment for the world by calling the `env_update` tool.
The environment must include:
- "player": a character object matching the `character` schema. The player's name is
`{player_name}`. Give them starting stats (health=100, mana=10, strength=10),
an empty inventory, and a short backstory (1-2 sentences).
- "current_location": a string naming the starting location (it must match the
name of one of the locations generated in the next step — for now just pick a
thematic starting place like "Tavern" or "Camp").
- "plot_rails": {{"hooks": [<2 short story hooks>], "current_goals": [<1 starting goal>],
"completed_goals": []}}
- Any other fields declared in environment_schema.
- `player`: a character object. The player's name is `{player_name}`. Give them starting stats (health=100, mana=10, strength=10), an empty inventory, and a short backstory (1-2 sentences).
- `current_location`: a string naming the starting location (e.g. "The Rusty Tankard Tavern" or "Station Command Module").
- `plot_rails`: an object with `hooks` (array of 2 short story hooks), `current_goals` (array of 1 starting goal), and `completed_goals` (empty array).
# How to use env_update
Call env_update with a `patch` argument. The patch is a dict of field_path -> value.
To set nested fields, use dotted paths.
Example:
```json
{{
"patch": {{
"player": {{"name": "{player_name}", "stats": {{"health": 100, "mana": 10, "strength": 10}}, "inventory": [], "backstory": "..."}},
"current_location": "Tavern",
"plot_rails": {{"hooks": ["hook1", "hook2"], "current_goals": ["goal1"], "completed_goals": []}}
}}
}}
```
You can either set everything in one env_update call, or make multiple calls (one for player, one for current_location, one for plot_rails).
# World context
World name: {world_name}
@@ -30,7 +40,12 @@ Schemas:
Environment schema:
{environment_schema_json}
# Output
Return ONLY a JSON object. No commentary. The output must conform to environment_schema.
# After setting up the environment
Call `submit_plan` with a 1-sentence summary.
# Rules
- Use env_update to set the environment fields.
- After all env_update calls, call submit_plan exactly once.
- After max 10 tool calls you MUST call submit_plan.
""",
}

View File

@@ -1,33 +1,9 @@
"""System prompt for stage `world_builder_schema` — generates the world's schemas."""
"""System prompt for stage `world_builder_schema` — generates the world's schemas via tools."""
PROMPTS = {
"en": """You are the World Builder for an AI-driven text RPG.
Your task: produce the JSON schema for a new world based on the player's request.
Output a JSON object with keys:
- "name": short world name
- "description": 2-3 sentence world premise
- "language": ISO code (e.g. "en", "ru") — must match the player's requested language
- "rules": array of short rule strings the GM must follow
- "time_schema": {{"hours_in_day": 24, "initial_date": "day_1_hour_8"}}
- "schemas": array of entity-type definitions, each shaped as
{{"type": "character", "verbose": "Character", "plural": "characters",
"properties": [
{{"name": "name", "type": "string", "required": true}},
{{"name": "stats", "type": "object", "required": true,
"properties": [
{{"name": "health", "type": "integer", "required": true, "min": 0, "max": 100}},
{{"name": "mana", "type": "integer", "required": false, "min": 0, "max": 100}},
{{"name": "strength","type": "integer", "required": true, "min": 1, "max": 20}}
]}}
]}}
Include at minimum: character (with stats.health, stats.mana, stats.strength,
inventory array of items), item, location, faction.
- "environment_schema": array of top-level environment fields
(e.g. player:object, current_location:string, plot_rails:object)
- "environment_initial": initial environment JSON (with player empty, current_location empty,
plot_rails with empty arrays)
Your task: define the entity schemas for a new world by calling the `schema_add_type` tool for each entity type you want to create.
# Player request
Mode: {mode}
@@ -37,12 +13,40 @@ Player name: {player_name}
Language: {language}
Notes: {notes}
# Rules for output
- Return ONLY a JSON object. No commentary.
- Keep schemas small (3-6 fields per type).
- "stats.health" must be integer with min=0 max=100.
- Always include `player` (character) and `current_location` (string) in environment_schema.
- The world is for a 7B-parameter LLM — keep schemas readable.
# Required entity types
You MUST create at minimum these entity types (call schema_add_type for each):
1. `character` — with fields: name (string, required), description (string), stats (object, required, with sub-fields: health integer 0-100 required, mana integer 0-100, strength integer 1-20), inventory (array), relationship (string)
2. `item` — with fields: name (string, required), description (string), qty (integer 1-9999), value (integer)
3. `location` — with fields: name (string, required), description (string, required), exits (array of strings), is_safe (boolean)
4. `faction` — with fields: name (string, required), description (string), alignment (string)
You may add additional entity types if the setting requires (e.g. `quest`, `spell`, `vehicle`).
# schema_add_type arguments
Each call to schema_add_type needs:
- `type`: lowercase identifier like "character"
- `verbose`: display name like "Character"
- `plural`: plural form like "characters"
- `properties`: array of field definitions, each with {name, type, required, min, max, properties}
Example properties for a character type:
```json
[
{{"name": "name", "type": "string", "required": true}},
{{"name": "stats", "type": "object", "required": true, "properties": [
{{"name": "health", "type": "integer", "required": true, "min": 0, "max": 100}},
{{"name": "mana", "type": "integer", "required": false, "min": 0, "max": 100}}
]}}
]
```
# After creating all schemas
Call `submit_plan` with a 1-sentence summary of the world you designed.
# Rules
- Call schema_add_type for EACH entity type (one call per type).
- After all schema_add_type calls, call submit_plan exactly once.
- After max 10 tool calls you MUST call submit_plan.
""",
"ru": "", # legacy — English is the source of truth per §10.1
"ru": "",
}