Metadata-Version: 2.4
Name: memoriant-patent-core
Version: 0.1.0
Summary: AI-powered patent workflow: search, analyze, draft, review, export
Project-URL: Homepage, https://github.com/NathanMaine/memoriant-patent-platform
Project-URL: Repository, https://github.com/NathanMaine/memoriant-patent-core
Project-URL: Issues, https://github.com/NathanMaine/memoriant-patent-core/issues
Author: Nathan Maine
License: MIT
License-File: LICENSE
Keywords: AI,LLM,USPTO,intellectual-property,patent,prior-art
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Legal Industry
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.11
Requires-Dist: aiosqlite>=0.20
Requires-Dist: anthropic>=0.40.0
Requires-Dist: cryptography>=43.0
Requires-Dist: httpx>=0.27
Requires-Dist: openai>=1.0
Requires-Dist: pydantic>=2.0
Requires-Dist: pyjwt>=2.8
Requires-Dist: python-docx>=1.0
Requires-Dist: structlog>=24.0
Provides-Extra: all
Requires-Dist: asyncpg>=0.29; extra == 'all'
Requires-Dist: qdrant-client>=1.9; extra == 'all'
Requires-Dist: weasyprint>=60.0; extra == 'all'
Provides-Extra: dev
Requires-Dist: hypothesis>=6.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Provides-Extra: pdf
Requires-Dist: weasyprint>=60.0; extra == 'pdf'
Provides-Extra: postgres
Requires-Dist: asyncpg>=0.29; extra == 'postgres'
Provides-Extra: vector
Requires-Dist: qdrant-client>=1.9; extra == 'vector'
Description-Content-Type: text/markdown

# memoriant-patent-core

<p align="center">
  <img src="https://img.shields.io/pypi/v/memoriant-patent-core" alt="PyPI" />
  <img src="https://img.shields.io/pypi/pyversions/memoriant-patent-core" alt="Python" />
  <img src="https://img.shields.io/github/actions/workflow/status/NathanMaine/memoriant-patent-core/test.yml" alt="Tests" />
  <img src="https://img.shields.io/badge/coverage-100%25-brightgreen" alt="Coverage" />
  <img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License" />
</p>

AI-powered patent workflow library: prior art search, novelty analysis, and application drafting for provisional, non-provisional, and PCT filings.

## Installation

```bash
pip install memoriant-patent-core
```

With optional extras:

```bash
pip install "memoriant-patent-core[vector]"   # Qdrant vector storage
pip install "memoriant-patent-core[postgres]"  # PostgreSQL/Supabase storage
pip install "memoriant-patent-core[pdf]"       # PDF export via WeasyPrint
pip install "memoriant-patent-core[all]"       # All optional dependencies
```

## Quick Start

```python
import asyncio
from memoriant_patent_core import PatentPipeline, ClaudeProvider, UserConfig
from memoriant_patent_core.models.config import LLMProviderConfig, StorageConfig

async def main():
    config = UserConfig(
        llm=LLMProviderConfig(provider="claude", model="claude-opus-4-5"),
        storage=StorageConfig(backend="sqlite", path="patents.db"),
    )
    provider = ClaudeProvider(api_key="YOUR_ANTHROPIC_KEY", model="claude-opus-4-5")

    pipeline = PatentPipeline(config=config, llm=provider)

    result = await pipeline.run(
        invention_description="A method for lossless compression of neural network weights using structured sparsity masks.",
    )

    print(f"Stage reached: {result.stage}")
    print(f"Draft title: {result.draft.title}")
    print(f"Claims: {len(result.draft.claims)}")

asyncio.run(main())
```

## Features

- **Prior Art Search** — USPTO ODP, PatentsView, Semantic Scholar, SerpAPI (Google Patents), semantic vector search
- **AI Analysis** — Novelty, obviousness, claim quality scoring, eligibility assessment, formalities review
- **Application Drafting** — Provisional, non-provisional (utility), PCT with structured claims and specifications
- **Export** — DOCX (python-docx) and PDF (WeasyPrint) with USPTO-compliant formatting
- **LLM Agnostic** — Claude (default), OpenAI-compatible endpoints (Ollama, vLLM, LM Studio)
- **Encrypted Storage** — SQLite (local), Qdrant (vector), PostgreSQL/Supabase, with AES-256 secret storage
- **Pipeline Orchestration** — Full end-to-end workflow with stage re-entry, metrics, and structured logging

## Usage

### Search

```python
from memoriant_patent_core import SearchAggregator, SearchQuery

aggregator = SearchAggregator(providers=[...])
query = SearchQuery(text="neural network weight compression", max_results=20)
response = await aggregator.search(query)
for result in response.results:
    print(result.patent_number, result.title, result.similarity_score)
```

### Analyze

```python
from memoriant_patent_core.analysis.novelty import NoveltyAnalyzer
from memoriant_patent_core.analysis.quality_score import QualityScorer

analyzer = NoveltyAnalyzer(llm=provider)
result = await analyzer.analyze(patent=my_patent, prior_art=search_results)
print(result.score, result.summary)
```

### Draft

```python
from memoriant_patent_core import ProvisionalDrafter, NonProvisionalDrafter, PCTDrafter

drafter = ProvisionalDrafter(llm=provider)
draft = await drafter.draft(patent=my_patent)

np_drafter = NonProvisionalDrafter(llm=provider)
np_draft = await np_drafter.draft(patent=my_patent, claims=draft.claims)
```

### Export

```python
from memoriant_patent_core import export_docx, export_pdf

docx_bytes = await export_docx(draft)
pdf_bytes = await export_pdf(draft)

with open("application.docx", "wb") as f:
    f.write(docx_bytes)
```

## Configuration

### Claude (default)

```python
from memoriant_patent_core import ClaudeProvider

provider = ClaudeProvider(api_key="sk-ant-...", model="claude-opus-4-5")
```

### Ollama / vLLM / LM Studio (local)

```python
from memoriant_patent_core import OpenAICompatProvider

# Ollama on DGX Spark
provider = OpenAICompatProvider(base_url="http://10.0.4.93:11434/v1", model="qwen2.5:72b")

# LM Studio
provider = OpenAICompatProvider(base_url="http://10.0.4.93:1234/v1", model="your-model")

# vLLM
provider = OpenAICompatProvider(base_url="http://localhost:8000/v1", model="meta-llama/Llama-3-70b")
```

## Command Line

```bash
# Search for prior art
export PATENTSVIEW_API_KEY=your-key
memoriant-patent search "wireless power transfer for medical implants"
memoriant-patent search "adaptive frequency hopping" --format json --max-results 20

# Show version
memoriant-patent version
```

## Related Projects

- [memoriant-patent-platform](https://github.com/NathanMaine/memoriant-patent-platform) — Full platform with FastAPI REST API, Docker Compose, authentication, and web UI
- Memoriant skills plugin — Claude Code skill for in-IDE patent workflows (coming soon)

## Disclaimer

This library is a workflow automation tool. It does not constitute legal advice. Patent applications should be reviewed by a registered patent attorney or agent before filing with the USPTO or any patent office.

## License

MIT License — Copyright (c) 2025 Nathan Maine
