iris-pressure-studio / docs /ARCHITECTURE.md
Codex
Deploy submission links to Hugging Face Space
200cb0b
|
Raw
History Blame Contribute Delete
5.24 kB
# Architecture
## Current State
Iris has a validated constraint engine and a custom Gradio product experience
around it. The current codebase is a small Python package that calls an
OpenAI-compatible MiniCPM endpoint, prints full idea spirals from a CLI harness,
scores seed runs with an automated gate, and serves a Gradio interface through
`app.py`. The current UI checkpoint is Iris UI v2 pressure studio: a focused
threaded workspace with multiple idea threads, user idea cards, model-authored
four-direction pressure sets, contextual iteration stacking, final brief export,
and hidden default Gradio chrome.
## Initial Structure
```text
iris/ Constraint engine package
tests/ Automated tests
docs/ Project documentation and decisions
scripts/ Local maintenance and validation scripts
app.py Gradio / Hugging Face Spaces entrypoint
stitch_iris_atomic_infinite_zoom/
Earlier Google Stitch atomic UI export/reference
```
## Architecture Principles
- Keep the first version small and easy to run locally.
- Prefer conventional structure for the chosen stack.
- Separate source code, tests, scripts, and docs.
- Document runtime requirements as soon as they are known.
- Keep configuration explicit and keep secrets out of Git.
## Hackathon Constraints
- Preserve the local MiniCPM path for the small/offline submission story.
- Keep the custom UI clearly beyond default Gradio.
- Avoid runtime frontend CDN dependencies so the Space remains demo-resilient.
- Keep MiniCPM load-bearing: the model writes pressure, while Python validates,
formats, and re-prompts.
- Build toward the screen-recordable demo moment: idea, four pressures, sharper
next iteration.
- See `BUILD_SMALL_FIELD_GUIDE.md` for badge and submission guidance.
## Engine Flow
```text
idea + prior constraints + ring depth
-> pressure prompt
-> OpenAI-compatible chat completions endpoint
-> safe JSON parser
-> one pressure + why_it_bites
- Ring 3 also includes a model-chosen existing alternative
-> quality guard rejects generic, repeated, unrelated, or advice-shaped output
-> repeat until center
-> distill prompt
-> model-filled actor + situation + assumption_to_test
-> mechanical next_step formatter
-> automated gate scores ring separation, advice language, concrete nouns,
existing alternative, repetition, and center concreteness
```
## UI Flow
```text
app.py
-> iris.ui.create_app()
-> Gradio Blocks wrapper
-> embedded HTML/CSS/JS pressure studio
-> in-memory JS state tracks idea threads and card stacks
-> New Idea creates an independent idea thread
-> user idea card Apply Pressure calls the named Gradio API endpoint
-> iris.ui.run_canvas_engine()
-> original idea + current iteration + idea history + prior AI pressure
trail become the frame memory for this call
-> prior pressure cards also become forbidden prior pressure context
-> IrisEngine.pressure_directions() for every open-ended UI depth
-> response JSON returns four model pressure cards
-> JS renders the returned pressure set and adds the next editable idea card
-> Finalize asks the engine for a model-authored brief and next step
-> Save PDF uses the browser's local print-to-PDF path
```
## Four-Direction Pressure Set
For each UI depth, the app asks the engine for one pressure in each standard
direction:
```text
Constraints
Limitations
Capabilities
Reality Contact
```
Each direction is still authored by MiniCPM. The Python layer enforces JSON
shape, direction-specific question openings, non-advice language, repeat
checks, and missing-field repairs by re-prompting MiniCPM. It does not invent
the pressure question or `why_it_bites` line.
UI iteration is intentionally open-ended. The older CLI spiral still runs
the four-ring plus center validation flow, but the UI keeps asking for pressure
sets as the user adds more idea cards. Short follow-up phrases are grounded by
the full frame context, including the original idea and previous idea
iterations plus the prior AI pressure trail. Prior model pressure cards are
also passed separately as forbidden pressure context so MiniCPM can avoid
repeats without treating them as examples to imitate.
The UI path fails closed for malformed JSON, advice language, or wrong
direction shape. If the final retry is otherwise valid but still only fails the
repeat-similarity, broad idea-grounding, or current-iteration grounding check,
the UI accepts that last model-authored card so an open-ended thread keeps
stacking instead of collapsing into an error card.
## Configuration
- `IRIS_API_BASE_URL`: OpenAI-compatible base URL ending in `/v1`.
- `IRIS_MODEL`: model ID served by the endpoint.
- `IRIS_API_KEY`: local-only credential, never committed.
- `IRIS_TIMEOUT_SECONDS`: optional request timeout.
- `IRIS_MAX_TOKENS`: optional response token limit.
- `IRIS_ENABLE_THINKING`: appends `/think` to MiniCPM4.1 prompts for reasoning
mode when supported by the backend.
## Source Intake Checklist
- Runtime and version identified.
- Package manager identified.
- Install command documented.
- Run command documented.
- Test command documented.
- Build command documented, if applicable.
- Deployment target documented, if known.