# Open Spec Correct
[![PyPI version](https://badge.fury.io/py/open-spec-correct.svg)](https://badge.fury.io/py/open-spec-correct)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
[![Downloads](https://static.pepy.tech/badge/open-spec-correct)](https://pepy.tech/project/open-spec-correct)
[![LinkedIn](https://img.shields.io/badge/LinkedIn-blue)](https://www.linkedin.com/in/eugene-evstafev-716669181/)


**Automate and streamline the correction of imperfect OpenAPI specifications** by extracting structured insights from textual descriptions.

---

## 📌 Overview
Open Spec Correct is a Python package designed to analyze user-provided textual descriptions of APIs and generate structured corrections for OpenAPI specifications. It leverages pattern matching and AI-driven insights to identify inconsistencies, errors, or missing details in API documentation, helping developers create more accurate and maintainable OpenAPI specs faster.

---

## 🚀 Features
- **Text-to-Spec Correction**: Extracts structured insights from unstructured textual descriptions.
- **Pattern Matching**: Uses regex-based validation to ensure output correctness.
- **LLM Flexibility**: Works with **LLM7** by default (free tier included) or supports custom LLMs (OpenAI, Anthropic, Google, etc.).
- **Retry Mechanisms**: Ensures reliable extraction and correction.
- **Environment-Aware**: Respects `LLM7_API_KEY` environment variable for seamless integration.

---

## 📦 Installation

```bash
pip install open_spec_correct
```

---

## 🔧 Usage

### Basic Usage (Default LLM7)
```python
from open_spec_correct import open_spec_correct

user_input = """
API endpoint for fetching user data.
Path: /users/{id}
Method: GET
Query params: ?name=string, ?age=int
Response: 200 OK with JSON body { "id": int, "name": string }
"""

response = open_spec_correct(user_input)
print(response)
```

### Custom LLM Integration
You can replace the default `ChatLLM7` with any LangChain-compatible LLM (e.g., OpenAI, Anthropic, Google Generative AI).

#### Example: Using OpenAI
```python
from langchain_openai import ChatOpenAI
from open_spec_correct import open_spec_correct

llm = ChatOpenAI(model_name="gpt-4")  # Replace with your preferred model
response = open_spec_correct(user_input, llm=llm)
print(response)
```

#### Example: Using Anthropic
```python
from langchain_anthropic import ChatAnthropic
from open_spec_correct import open_spec_correct

llm = ChatAnthropic(model="claude-2")
response = open_spec_correct(user_input, llm=llm)
print(response)
```

#### Example: Using Google Generative AI
```python
from langchain_google_genai import ChatGoogleGenerativeAI
from open_spec_correct import open_spec_correct

llm = ChatGoogleGenerativeAI(model="gemini-pro")
response = open_spec_correct(user_input, llm=llm)
print(response)
```

---

## 🔑 API Key Configuration
- **Default**: Uses `LLM7_API_KEY` from environment variables.
- **Manual Override**: Pass the API key directly:
  ```python
  response = open_spec_correct(user_input, api_key="your_llm7_api_key")
  ```
- **Free API Key**: Register at [LLM7 Token](https://token.llm7.io/) to get started.

---

## ⚠️ Rate Limits
- **LLM7 Free Tier**: Sufficient for most use cases.
- **Custom Rate Limits**: Upgrade via LLM7 dashboard or use a different LLM.

---

## 📝 Input Parameters
| Parameter | Type       | Description                                                                 |
|-----------|------------|-----------------------------------------------------------------------------|
| `user_input` | `str`      | Textual description of the API to correct.                                  |
| `api_key`   | `Optional[str]` | LLM7 API key (optional if `LLM7_API_KEY` is set in environment).          |
| `llm`       | `Optional[BaseChatModel]` | Custom LangChain LLM (e.g., `ChatOpenAI`, `ChatAnthropic`). Defaults to `ChatLLM7`. |

---

## 🔄 Output
Returns a **list of structured corrections** (e.g., OpenAPI-compatible snippets) extracted from the input text.

---

## 📜 License
MIT License (see [LICENSE](https://github.com/chigwell/open-spec-correct/blob/main/LICENSE)).

---

## 🐛 Issues & Support
Report bugs or request features at:
🔗 [GitHub Issues](https://github.com/chigwell/open-spec-correct/issues)

---

## 👤 Author
**Eugene Evstafev**
📧 [hi@euegne.plus](mailto:hi@euegne.plus)
🌐 [GitHub: chigwell](https://github.com/chigwell)

---