Skip to main content

AI-Powered TRIZ Innovation Engine — combines TRIZ methodology with AI and real patent data

Project description

triz-ai

PyPI Tests License Python Versions

AI-powered TRIZ innovation engine — analyze technical problems, classify patents, and discover new inventive principles.

What is this?

triz-ai combines TRIZ (Theory of Inventive Problem Solving) with AI and real patent data. It goes beyond static TRIZ tools by using AI to discover candidate new principles from modern patents, continuing Altshuller's original work.

  • Patent-grounded — every suggestion is backed by real patent evidence, with assignee and filing date
  • Hybrid search — finds relevant patents using both vector similarity and TRIZ principle/contradiction matching
  • Solution directions — generates concrete, actionable solution approaches, not just abstract principles
  • 50 engineering parameters — extends Altshuller's 39 with modern domains (security, sustainability, scalability, etc.)
  • Evolving principles & parameters — discovers candidate new principles and parameters from modern patents
  • Provider-agnostic — works with OpenRouter, Ollama, Anthropic, OpenAI, and 100+ providers via litellm
  • Pluggable storage — local SQLite by default; swap to Postgres, DynamoDB, etc. via the PatentRepository protocol
  • Zero infrastructure — works out of the box with local SQLite + built-in vector search

Installation

pip install triz-ai

Or for development:

# Requires Python 3.12+ and uv
uv sync

Set up your LLM provider API key:

export OPENROUTER_API_KEY="your-key"

Or use a .env file: echo 'OPENROUTER_API_KEY=your-key' > .env

Quick Start

# Analyze a problem — auto-classifies and routes to the best TRIZ tool
triz-ai analyze "How to increase SiC MOSFET switching speed without increasing EMI"
# → Routes to: technical contradiction analysis

triz-ai analyze "The solder joint must be rigid for reliability but flexible for thermal cycling"
# → Routes to: physical contradiction analysis

triz-ai analyze "How to detect delamination without adding sensors"
# → Routes to: Su-Field analysis

triz-ai analyze "The adhesive layer damages the silicon die during thermal cycling"
# → Routes to: function analysis

triz-ai analyze "Reduce the BOM cost of this gate driver circuit"
# → Routes to: trimming analysis

triz-ai analyze "What is the next generation of SiC packaging technology?"
# → Routes to: trends analysis

# Deep ARIZ-85C analysis — reformulates, runs multiple tools, verifies against IFR
triz-ai analyze "How to increase SiC MOSFET switching speed without increasing EMI" --deep

# Deep with a reasoning model for reformulation/synthesis, cheaper model for pipelines
triz-ai analyze "problem" --deep \
  --model "openrouter/nvidia/nemotron-3-super-120b-a12b:free" \
  --deep-model "openrouter/deepseek/deepseek-r1:free" \
  --reasoning-effort high

# Force a specific method
triz-ai analyze "How to detect delamination" --method su-field

# For patent-backed examples, ingest patent data
triz-ai ingest data/patents/battery_patents.json

# Discover underused principles in a domain
triz-ai discover --domain "battery technology"

# Run evolution pipeline to find candidate new principles
triz-ai evolve
triz-ai evolve --review  # interactive accept/reject

# View matrix statistics
triz-ai matrix stats

Commands

Command Description
analyze Auto-routes to the best TRIZ tool (6 methods); --method to force one; --deep for full ARIZ-85C
discover Find underused principles in a domain and generate patent-grounded ideas
evolve Discover candidate new TRIZ principles (--parameters for parameters)
ingest Ingest and auto-classify patents from .txt, .pdf, or .json files
init Reset the patent database (only needed with --force)
matrix seed LLM-seed missing matrix cells for params 40-50 (power-user)
matrix stats Show matrix fill rate and patent observation statistics

Analysis Methods

Method When to use
technical-contradiction Improving X worsens Y
physical-contradiction A part must be both A and B
su-field Detection/measurement problems
function-analysis A component causes harm
trimming Simplify / reduce cost
trends Where is this technology going?

All commands support --format text|json|markdown and --model to override the LLM model.

Deep ARIZ-85C Analysis

Use --deep for a full 3-pass analysis that reformulates the problem, runs multiple TRIZ tools in parallel, and verifies solutions against the Ideal Final Result:

# Basic deep analysis
triz-ai analyze "problem" --deep

# Use a reasoning model for reformulation/synthesis, cheaper model for pipelines
triz-ai analyze "problem" --deep \
  --deep-model "openrouter/deepseek/deepseek-r1:free" \
  --reasoning-effort high

# Mix models: cheap for Pass 2 pipelines, reasoning for Passes 1 & 3
triz-ai analyze "problem" --deep \
  --model "openrouter/nvidia/nemotron-3-super-120b-a12b:free" \
  --deep-model "anthropic/claude-sonnet-4-6" \
  --reasoning-effort medium
Flag Affects Purpose
--model Pass 2 (pipelines) + fallback Base model for parallel tool research
--deep-model Pass 1 & 3 Reasoning model for reformulation + synthesis
--reasoning-effort Pass 1 & 3 low/medium/high — litellm translates across providers

Research Tools (Programmatic API)

Research tools can participate in three pipeline stages: context (before LLM extraction), search (during patent search), and enrichment (after solution generation):

from triz_ai import ResearchTool
from triz_ai.engine.router import route
from triz_ai.llm.client import LLMClient

# Search-only tool (default, backward compatible)
google_patents = ResearchTool(
    name="google_patents",
    description="Search Google Patents for prior art. Best for recent filings.",
    fn=lambda query, ctx: [  # ctx includes {"stage": "search", ...}
        {"title": f"Patent about {query}", "abstract": "...", "url": "..."}
    ],
)

# Multi-stage tool: provides context before analysis + enrichment after
web_search = ResearchTool(
    name="web_search",
    description="General web search for domain knowledge and feasibility data.",
    fn=lambda query, ctx: (
        [{"content": f"Domain context for: {query}"}] if ctx["stage"] == "context"
        else [{"title": "Feasibility note", "content": "..."}]
    ),
    stages=["context", "enrichment"],
)

# Normal mode: all tools run automatically at their declared stages
result = route("battery energy density", LLMClient(),
               research_tools=[google_patents, web_search])
# result.enrichment contains enrichment-stage results

# Deep mode: LLM selects which tools to use
from triz_ai.engine.ariz import orchestrate_deep
result = orchestrate_deep("battery problem", LLMClient(), store=None,
                          research_tools=[google_patents, web_search])

Each tool's fn(query, context) receives a search query and a context dict with {"stage": str} plus stage-specific data. Return format depends on stage:

  • context: [{"content": "..."}] — text prepended to problem description
  • search: [{"title": "...", "abstract": "..."}] — patent-like results (optional: "id", "assignee", "filing_date", "url", "matched_principles")
  • enrichment: [{"title": "...", "content": "..."}] — stored in AnalysisResult.enrichment

Project Structure

src/triz_ai/
  cli.py              # Typer CLI entry point
  config.py            # Config loading (--config / TRIZ_AI_CONFIG / ~/.triz-ai/config.yaml)
  data/                # TRIZ JSON data (principles, parameters, matrix, separation, solutions, trends)
  knowledge/           # Loaders for all TRIZ knowledge data
  engine/              # analyzer, router, ariz orchestrator, 5 pipelines, classifier, generator, evaluator
  patents/             # PatentRepository protocol + SQLite default, vector search, ingestion
  evolution/           # Candidate principle & parameter discovery + review
  llm/                 # litellm wrapper with pydantic validation
tests/                 # 194 unit tests

Configuration

Config is loaded from (highest priority first):

  1. --config CLI flag — triz-ai --config /path/to/config.yaml analyze "..."
  2. TRIZ_AI_CONFIG environment variable — export TRIZ_AI_CONFIG=/app/config.yaml
  3. ~/.triz-ai/config.yaml (default)

Example:

llm:
  default_model: openrouter/nvidia/nemotron-3-super-120b-a12b:free
  classify_model: openrouter/nvidia/nemotron-3-nano-30b-a3b:free
  # router_model: null           # model for problem classification (defaults to classify_model)
  # deep_model: null             # model for ARIZ deep passes 1 & 3 (defaults to default_model)
  # reasoning_effort: null       # low/medium/high for reasoning models in deep mode

embeddings:
  model: openrouter/nvidia/llama-nemotron-embed-vl-1b-v2:free
  dimensions: 768

database:
  path: ~/.triz-ai/patents.db

evolution:
  review_threshold: 0.7

Any litellm-supported model string works — just change the model and set the corresponding API key.

Using a custom LLM gateway (e.g., company litellm proxy)

llm:
  default_model: gpt-4o              # base model for analysis pipelines
  classify_model: gpt-4o-mini        # smaller model for patent classification during ingest
  deep_model: o3                     # reasoning model for ARIZ deep passes 1 & 3
  reasoning_effort: medium           # low/medium/high for the deep model
  api_base: https://llm-proxy.internal/v1
  api_key: your-proxy-token
  ssl_verify: false                # disable for corporate proxies with internal CA certs

embeddings:
  model: text-embedding-3-small
  dimensions: 768
  api_base: https://llm-proxy.internal/v1
  api_key: your-proxy-token

You can also override models per-command:

triz-ai ingest data/ --classify-model gpt-4o-mini
triz-ai analyze "problem" --deep --deep-model o3 --reasoning-effort high

Development

uv sync                              # Install dependencies
uv run pytest                        # Run tests
uv run pre-commit install            # Install git hooks
uv run pre-commit install --hook-type pre-push

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

triz_ai-0.13.0.tar.gz (281.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

triz_ai-0.13.0-py3-none-any.whl (98.0 kB view details)

Uploaded Python 3

File details

Details for the file triz_ai-0.13.0.tar.gz.

File metadata

  • Download URL: triz_ai-0.13.0.tar.gz
  • Upload date:
  • Size: 281.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for triz_ai-0.13.0.tar.gz
Algorithm Hash digest
SHA256 121267d0dfeee1d91f78cd18e81e54a14314706d7aa65365df7bc17ac07ba5e5
MD5 b23b720993361870e13306a138ef0436
BLAKE2b-256 5f86d43e070f9e67f9b98aeeba974bf05b46ad41060946df92521e3d85897120

See more details on using hashes here.

Provenance

The following attestation bundles were made for triz_ai-0.13.0.tar.gz:

Publisher: ci-and-publish.yml on flyersworder/triz-ai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file triz_ai-0.13.0-py3-none-any.whl.

File metadata

  • Download URL: triz_ai-0.13.0-py3-none-any.whl
  • Upload date:
  • Size: 98.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for triz_ai-0.13.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4c6a7358ef366a7f4d2e6c9bc7462b5d161d202620ef78016c8b8854e142a3b4
MD5 ec09d72efed92eeef9d28fe369fa3e1e
BLAKE2b-256 638640331517c9bcd178eeb5fdb38e4462a5bb53be97ff21335dd91c6540f24a

See more details on using hashes here.

Provenance

The following attestation bundles were made for triz_ai-0.13.0-py3-none-any.whl:

Publisher: ci-and-publish.yml on flyersworder/triz-ai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page