<p align="center">
<img src="./docs/public/banner.png" alt="GCOP Banner" style="border-radius: 15px;">
</p>
<div align="center">
[![Python Version](https://img.shields.io/pypi/pyversions/gcop.svg)](https://pypi.org/project/gcop/)
[![Dependencies Status](https://img.shields.io/badge/dependencies-up%20to%20date-brightgreen.svg)](https://github.com/Undertone0809/gcop/pulls?utf8=%E2%9C%93&q=is%3Apr%20author%3Aapp%2Fdependabot)
[![Semantic Versions](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--versions-e10079.svg)](https://github.com/Undertone0809/gcop/releases)
[![License](https://img.shields.io/github/license/Undertone0809/gcop)](https://github.com/Undertone0809/gcop/blob/main/LICENSE)
<a href="https://t.me/zeeland0809" target="_blank">
<img src="https://img.shields.io/badge/Telegram-join%20chat-2CA5E0?logo=telegram&logoColor=white" alt="chat on Telegram">
</a>
</div>
GCOP (Git Copilot) is an intelligent assistant that enhances your Git workflow by automating commit message generation using AI. It's designed to make your development process smoother and more efficient by improving git commit practices, conventional commits, and version control. With GCOP, you can create better commit messages, maintain a clean git history, and streamline your git commit workflow.
## ๐ Key Features
- **Smart Commit Messages**: Let AI generate better commit messages based on your changes.
- **Flexible AI Integration**: Support any language model you want.
- **Simplified Git Commands**: Powerful aliases for common Git operations to speed up your workflow.
## Video Demo
This video shows how to use gcop to generate a commit message. See the [documentation](https://gcop.zeeland.top/)
[![Gcop is your git AI copilot](https://zeeland-bucket.oss-cn-beijing.aliyuncs.com/images/20240624003422.png)](https://www.youtube.com/watch?v=j7qKI_TdhXs "Gcop is your git AI copilot")
## ๐ ๏ธ Getting Started
We recommend you to read the [Quick Start Guide](https://gcop.zeeland.top/) in detail.
### What You'll Need
- Python 3.8 or newer
- Git installed on your system
- An API key for your preferred LLM (e.g., OpenAI, Anthropic)
### Installation
1. Install GCOP with pip:
```
pip install gcop
```
2. Initialize GCOP:
```
gcop init
```
> This command sets up GCOP and adds its aliases to your Git configuration.
3. Configure your AI model:
```
git gconfig
```
This opens the configuration file. Edit it to include your AI provider details:
```yaml
model:
model_name: provider/name, eg openai/gpt-4o
api_key: your_api_key
```
Then gcop will generate a `config.yaml`, then gcop will open the `config.yaml`
file in the default editor, and you can config your language model. See how to
config your model [here](https://gcop.zeeland.top/how-to-config-model.html):
> `config.yaml` store path:
>
> - Windows: `%USERPROFILE%\.zeeland\gcop\config.yaml`
> - Linux: `~/.zeeland/gcop/config.yaml`
> - MacOS: `~/.zeeland/gcop/config.yaml`
1. Verify the installation:
```
git ghelp
```
You should see output similar to:
```
gcop is your local git command copilot
Version: 1.0.0
GitHub: https://github.com/Undertone0809/gcop
Usage: git [OPTIONS] COMMAND
Commands:
git p Push changes to remote repository
git pf Force push changes to remote repository
git undo Undo last commit, keep changes
git ghelp Show this help message
git gconfig Open config file in default editor
git gcommit Generate AI commit message and commit changes
git ac Add all changes and commit with AI message
git c Shorthand for 'git gcommit'
```
## ๐ก Basic Usage
### Generating AI Commit Messages
After making changes to your project:
1. Stage your changes:
```
git add .
```
2. Generate and apply an AI commit message:
```
git c
```
Example output:
```
? Select a commit message to commit (Use arrow keys)
ยป feat: Implement user authentication system
docs: Update installation instructions in README
fix: Resolve database connection timeout issue
style: Improve code formatting in src/main.py
retry
```
3. Choose the most appropriate message using arrow keys and press Enter.
### Other Useful Commands
- `git ac`: Add all changes and commit with an AI-generated message
```
git ac
```
Output:
```
Changes added. Generating commit message...
? Select a commit message to commit (Use arrow keys)
ยป feat: Add new user profile page
fix: Correct CSS styling issues on mobile devices
docs: Update API documentation for v2.0
refactor: Optimize database queries for better performance
retry
```
- `git undo`: Undo the last commit while keeping changes staged
```
git undo
```
Output:
```
HEAD is now at a1b2c3d Previous commit message
Changes from the last commit are now staged.
```
- `git p`: Push to the current branch
```
git p
```
Output:
```
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 328 bytes | 328.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
To https://github.com/username/repo.git
a1b2c3d..e4f5g6h main -> main
```
- `git pf`: Force push to the current branch (use with caution)
- `git gconfig`: Open the GCOP configuration file for adjustments
## ๐ง Configuration
To modify your AI model settings:
1. Open the config file:
```
git gconfig
```
2. Edit the `config.yaml` file:
```yaml
model:
model_name: provider/name, eg openai/gpt-4o
api_key: your_api_key
```
3. Save and close the file.
## ๐ Learn More
- [Detailed Documentation](https://gcop.zeeland.top/)
- [Contribution Guidelines](CONTRIBUTING.md)
- [Changelog](https://github.com/Undertone0809/gcop/releases)
### Makefile usage
[`Makefile`](https://github.com/Undertone0809/gcop/blob/main/Makefile)
contains a lot of
functions for faster development.
<details>
<summary>Install all dependencies and pre-commit hooks</summary>
<p>
```bash
make install
```
</p>
</details>
<details>
<summary>Codestyle and type checks</summary>
<p>
Automatic formatting uses `ruff`.
```bash
make polish-codestyle
# or use synonym
make formatting
```
Codestyle checks only, without rewriting files:
```bash
make check-codestyle
```
> Note: `check-codestyle` uses `ruff` and `darglint` library
</p>
</details>
<details>
<summary>Code security</summary>
<p>
> If this command is not selected during installation, it cannnot be used.
```bash
make check-safety
```
This command launches `Poetry` integrity checks as well as identifies security issues
with `Safety` and `Bandit`.
```bash
make check-safety
```
</p>
</details>
<details>
<summary>Tests with coverage badges</summary>
<p>
Run `pytest`
```bash
make test
```
</p>
</details>
<details>
<summary>All linters</summary>
<p>
Of course there is a command to run all linters in one:
```bash
make lint
```
the same as:
```bash
make check-codestyle && make test && make check-safety
```
</p>
</details>
<details>
<summary>Docker</summary>
<p>
```bash
make docker-build
```
which is equivalent to:
```bash
make docker-build VERSION=latest
```
Remove docker image with
```bash
make docker-remove
```
More
information [about docker](https://github.com/Undertone0809/python-package-template/tree/main/%7B%7B%20cookiecutter.project_name%20%7D%7D/docker).
</p>
</details>
<details>
<summary>Cleanup</summary>
<p>
Delete pycache files
```bash
make pycache-remove
```
Remove package build
```bash
make build-remove
```
Delete .DS_STORE files
```bash
make dsstore-remove
```
Remove .mypycache
```bash
make mypycache-remove
```
Or to remove all above run:
```bash
make cleanup
```
</p>
</details>
## ๐ฆ Techs
- [Promptulate: Large language model automation and Autonomous Language Agents development framework](https://github.com/Undertone0809/promptulate)
- [P3G: Python Packages Project Generator](https://github.com/Undertone0809/P3G)
## ๐ก License
[![License](https://img.shields.io/github/license/Undertone0809/gcop)](https://github.com/Undertone0809/gcop/blob/main/LICENSE)
This project is licensed under the terms of the `MIT` license.
See [LICENSE](https://github.com/Undertone0809/gcop/blob/main/LICENSE) for more details.
## ๐ค Support
For more information, please
contact: [zeeland4work@gmail.com](mailto:zeeland4work@gmail.com)
See anything changelog, describe the [telegram channel](https://t.me/zeeland0809)
## Credits [![๐ Your next Python package needs a bleeding-edge project structure.](https://img.shields.io/badge/P3G-%F0%9F%9A%80-brightgreen)](https://github.com/Undertone0809/python-package-template)
This project was generated with [P3G](https://github.com/Undertone0809/P3G)
Raw data
{
"_id": null,
"home_page": "https://github.com/Undertone0809/gcop",
"name": "gcop",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8.1",
"maintainer_email": null,
"keywords": "gcop, git, git copilot, promptulate, pne, LLM",
"author": "gcop",
"author_email": "zeeland4work@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/9e/4e/2a1c6bc7052a78b37995fb15ba859414aac90889cf13cd1595351d36118b/gcop-1.7.1.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n <img src=\"./docs/public/banner.png\" alt=\"GCOP Banner\" style=\"border-radius: 15px;\">\n</p>\n\n<div align=\"center\">\n\n[![Python Version](https://img.shields.io/pypi/pyversions/gcop.svg)](https://pypi.org/project/gcop/)\n[![Dependencies Status](https://img.shields.io/badge/dependencies-up%20to%20date-brightgreen.svg)](https://github.com/Undertone0809/gcop/pulls?utf8=%E2%9C%93&q=is%3Apr%20author%3Aapp%2Fdependabot)\n[![Semantic Versions](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--versions-e10079.svg)](https://github.com/Undertone0809/gcop/releases)\n[![License](https://img.shields.io/github/license/Undertone0809/gcop)](https://github.com/Undertone0809/gcop/blob/main/LICENSE)\n\n<a href=\"https://t.me/zeeland0809\" target=\"_blank\">\n <img src=\"https://img.shields.io/badge/Telegram-join%20chat-2CA5E0?logo=telegram&logoColor=white\" alt=\"chat on Telegram\">\n</a>\n\n</div>\n\nGCOP (Git Copilot) is an intelligent assistant that enhances your Git workflow by automating commit message generation using AI. It's designed to make your development process smoother and more efficient by improving git commit practices, conventional commits, and version control. With GCOP, you can create better commit messages, maintain a clean git history, and streamline your git commit workflow.\n\n## \ud83d\ude80 Key Features\n\n- **Smart Commit Messages**: Let AI generate better commit messages based on your changes.\n- **Flexible AI Integration**: Support any language model you want.\n- **Simplified Git Commands**: Powerful aliases for common Git operations to speed up your workflow.\n\n## Video Demo\n\nThis video shows how to use gcop to generate a commit message. See the [documentation](https://gcop.zeeland.top/)\n\n[![Gcop is your git AI copilot](https://zeeland-bucket.oss-cn-beijing.aliyuncs.com/images/20240624003422.png)](https://www.youtube.com/watch?v=j7qKI_TdhXs \"Gcop is your git AI copilot\")\n\n## \ud83d\udee0\ufe0f Getting Started\n\nWe recommend you to read the [Quick Start Guide](https://gcop.zeeland.top/) in detail.\n\n### What You'll Need\n\n- Python 3.8 or newer\n- Git installed on your system\n- An API key for your preferred LLM (e.g., OpenAI, Anthropic)\n\n### Installation\n\n1. Install GCOP with pip:\n\n ```\n pip install gcop\n ```\n\n2. Initialize GCOP:\n\n ```\n gcop init\n ```\n\n> This command sets up GCOP and adds its aliases to your Git configuration.\n\n3. Configure your AI model:\n\n ```\n git gconfig\n ```\n\n This opens the configuration file. Edit it to include your AI provider details:\n\n ```yaml\n model:\n model_name: provider/name, eg openai/gpt-4o\n api_key: your_api_key\n ```\n\nThen gcop will generate a `config.yaml`, then gcop will open the `config.yaml`\nfile in the default editor, and you can config your language model. See how to\nconfig your model [here](https://gcop.zeeland.top/how-to-config-model.html):\n\n> `config.yaml` store path:\n>\n> - Windows: `%USERPROFILE%\\.zeeland\\gcop\\config.yaml`\n> - Linux: `~/.zeeland/gcop/config.yaml`\n> - MacOS: `~/.zeeland/gcop/config.yaml`\n\n1. Verify the installation:\n\n ```\n git ghelp\n ```\n\n You should see output similar to:\n\n ```\n gcop is your local git command copilot\n Version: 1.0.0\n GitHub: https://github.com/Undertone0809/gcop\n\n Usage: git [OPTIONS] COMMAND\n\n Commands:\n git p Push changes to remote repository\n git pf Force push changes to remote repository\n git undo Undo last commit, keep changes\n git ghelp Show this help message\n git gconfig Open config file in default editor\n git gcommit Generate AI commit message and commit changes\n git ac Add all changes and commit with AI message\n git c Shorthand for 'git gcommit'\n ```\n\n## \ud83d\udca1 Basic Usage\n\n### Generating AI Commit Messages\n\nAfter making changes to your project:\n\n1. Stage your changes:\n\n ```\n git add .\n ```\n\n2. Generate and apply an AI commit message:\n\n ```\n git c\n ```\n\n Example output:\n\n ```\n ? Select a commit message to commit (Use arrow keys)\n \u00bb feat: Implement user authentication system\n docs: Update installation instructions in README\n fix: Resolve database connection timeout issue\n style: Improve code formatting in src/main.py\n retry\n ```\n\n3. Choose the most appropriate message using arrow keys and press Enter.\n\n### Other Useful Commands\n\n- `git ac`: Add all changes and commit with an AI-generated message\n\n ```\n git ac\n ```\n\n Output:\n\n ```\n Changes added. Generating commit message...\n ? Select a commit message to commit (Use arrow keys)\n \u00bb feat: Add new user profile page\n fix: Correct CSS styling issues on mobile devices\n docs: Update API documentation for v2.0\n refactor: Optimize database queries for better performance\n retry\n ```\n\n- `git undo`: Undo the last commit while keeping changes staged\n\n ```\n git undo\n ```\n\n Output:\n\n ```\n HEAD is now at a1b2c3d Previous commit message\n Changes from the last commit are now staged.\n ```\n\n- `git p`: Push to the current branch\n\n ```\n git p\n ```\n\n Output:\n\n ```\n Enumerating objects: 5, done.\n Counting objects: 100% (5/5), done.\n Delta compression using up to 8 threads\n Compressing objects: 100% (3/3), done.\n Writing objects: 100% (3/3), 328 bytes | 328.00 KiB/s, done.\n Total 3 (delta 2), reused 0 (delta 0), pack-reused 0\n To https://github.com/username/repo.git\n a1b2c3d..e4f5g6h main -> main\n ```\n\n- `git pf`: Force push to the current branch (use with caution)\n- `git gconfig`: Open the GCOP configuration file for adjustments\n\n## \ud83d\udd27 Configuration\n\nTo modify your AI model settings:\n\n1. Open the config file:\n\n ```\n git gconfig\n ```\n\n2. Edit the `config.yaml` file:\n\n ```yaml\n model:\n model_name: provider/name, eg openai/gpt-4o\n api_key: your_api_key\n ```\n\n3. Save and close the file.\n\n## \ud83d\udcda Learn More\n\n- [Detailed Documentation](https://gcop.zeeland.top/)\n- [Contribution Guidelines](CONTRIBUTING.md)\n- [Changelog](https://github.com/Undertone0809/gcop/releases)\n\n### Makefile usage\n\n[`Makefile`](https://github.com/Undertone0809/gcop/blob/main/Makefile)\ncontains a lot of\nfunctions for faster development.\n\n<details>\n<summary>Install all dependencies and pre-commit hooks</summary>\n<p>\n\n```bash\nmake install\n```\n\n</p>\n</details>\n\n<details>\n<summary>Codestyle and type checks</summary>\n<p>\n\nAutomatic formatting uses `ruff`.\n\n```bash\nmake polish-codestyle\n\n# or use synonym\nmake formatting\n```\n\nCodestyle checks only, without rewriting files:\n\n```bash\nmake check-codestyle\n```\n\n> Note: `check-codestyle` uses `ruff` and `darglint` library\n\n</p>\n</details>\n\n<details>\n<summary>Code security</summary>\n<p>\n\n> If this command is not selected during installation, it cannnot be used.\n\n```bash\nmake check-safety\n```\n\nThis command launches `Poetry` integrity checks as well as identifies security issues\nwith `Safety` and `Bandit`.\n\n```bash\nmake check-safety\n```\n\n</p>\n</details>\n\n<details>\n<summary>Tests with coverage badges</summary>\n<p>\n\nRun `pytest`\n\n```bash\nmake test\n```\n\n</p>\n</details>\n\n<details>\n<summary>All linters</summary>\n<p>\n\nOf course there is a command to run all linters in one:\n\n```bash\nmake lint\n```\n\nthe same as:\n\n```bash\nmake check-codestyle && make test && make check-safety\n```\n\n</p>\n</details>\n\n<details>\n<summary>Docker</summary>\n<p>\n\n```bash\nmake docker-build\n```\n\nwhich is equivalent to:\n\n```bash\nmake docker-build VERSION=latest\n```\n\nRemove docker image with\n\n```bash\nmake docker-remove\n```\n\nMore\ninformation [about docker](https://github.com/Undertone0809/python-package-template/tree/main/%7B%7B%20cookiecutter.project_name%20%7D%7D/docker).\n\n</p>\n</details>\n\n<details>\n<summary>Cleanup</summary>\n<p>\nDelete pycache files\n\n```bash\nmake pycache-remove\n```\n\nRemove package build\n\n```bash\nmake build-remove\n```\n\nDelete .DS_STORE files\n\n```bash\nmake dsstore-remove\n```\n\nRemove .mypycache\n\n```bash\nmake mypycache-remove\n```\n\nOr to remove all above run:\n\n```bash\nmake cleanup\n```\n\n</p>\n</details>\n\n## \ud83d\udce6 Techs\n\n- [Promptulate: Large language model automation and Autonomous Language Agents development framework](https://github.com/Undertone0809/promptulate)\n- [P3G: Python Packages Project Generator](https://github.com/Undertone0809/P3G)\n\n## \ud83d\udee1 License\n\n[![License](https://img.shields.io/github/license/Undertone0809/gcop)](https://github.com/Undertone0809/gcop/blob/main/LICENSE)\n\nThis project is licensed under the terms of the `MIT` license.\nSee [LICENSE](https://github.com/Undertone0809/gcop/blob/main/LICENSE) for more details.\n\n## \ud83e\udd1d Support\n\nFor more information, please\ncontact: [zeeland4work@gmail.com](mailto:zeeland4work@gmail.com)\n\nSee anything changelog, describe the [telegram channel](https://t.me/zeeland0809)\n\n## Credits [![\ud83d\ude80 Your next Python package needs a bleeding-edge project structure.](https://img.shields.io/badge/P3G-%F0%9F%9A%80-brightgreen)](https://github.com/Undertone0809/python-package-template)\n\nThis project was generated with [P3G](https://github.com/Undertone0809/P3G)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "gcop is your git AI copilot.",
"version": "1.7.1",
"project_urls": {
"Homepage": "https://github.com/Undertone0809/gcop",
"Repository": "https://github.com/Undertone0809/gcop"
},
"split_keywords": [
"gcop",
" git",
" git copilot",
" promptulate",
" pne",
" llm"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "94f51612e2a67dc135960ed7f8998c643db609b066e473f3c69a89190287e22a",
"md5": "ef89c2ad01e9fcf6a31d4a92a9958abb",
"sha256": "b2237e57c16aa963f89bf98806df436b6540af6a8c4ae9c98a7747d13d67bd3c"
},
"downloads": -1,
"filename": "gcop-1.7.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ef89c2ad01e9fcf6a31d4a92a9958abb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.8.1",
"size": 17356,
"upload_time": "2024-11-07T11:23:32",
"upload_time_iso_8601": "2024-11-07T11:23:32.547146Z",
"url": "https://files.pythonhosted.org/packages/94/f5/1612e2a67dc135960ed7f8998c643db609b066e473f3c69a89190287e22a/gcop-1.7.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9e4e2a1c6bc7052a78b37995fb15ba859414aac90889cf13cd1595351d36118b",
"md5": "2c5945c0930f3ea697dbe9d4e2190335",
"sha256": "7b55b4538ecf5564146f8dcfc8b061d3263e266a3328bb628b71e26c8e813bc9"
},
"downloads": -1,
"filename": "gcop-1.7.1.tar.gz",
"has_sig": false,
"md5_digest": "2c5945c0930f3ea697dbe9d4e2190335",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8.1",
"size": 18305,
"upload_time": "2024-11-07T11:23:33",
"upload_time_iso_8601": "2024-11-07T11:23:33.749538Z",
"url": "https://files.pythonhosted.org/packages/9e/4e/2a1c6bc7052a78b37995fb15ba859414aac90889cf13cd1595351d36118b/gcop-1.7.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-07 11:23:33",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Undertone0809",
"github_project": "gcop",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "aiohappyeyeballs",
"specs": [
[
"==",
"2.4.3"
]
]
},
{
"name": "aiohttp",
"specs": [
[
"==",
"3.10.10"
]
]
},
{
"name": "aiosignal",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "annotated-types",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "anyio",
"specs": [
[
"==",
"4.5.2"
]
]
},
{
"name": "async-timeout",
"specs": [
[
"==",
"4.0.3"
]
]
},
{
"name": "attrs",
"specs": [
[
"==",
"24.2.0"
]
]
},
{
"name": "broadcast-service",
"specs": [
[
"==",
"1.3.2"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2024.8.30"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"3.4.0"
]
]
},
{
"name": "click",
"specs": [
[
"==",
"8.1.7"
]
]
},
{
"name": "colorama",
"specs": [
[
"==",
"0.4.6"
]
]
},
{
"name": "cushy-storage",
"specs": [
[
"==",
"1.3.8"
]
]
},
{
"name": "distro",
"specs": [
[
"==",
"1.9.0"
]
]
},
{
"name": "exceptiongroup",
"specs": [
[
"==",
"1.2.2"
]
]
},
{
"name": "filelock",
"specs": [
[
"==",
"3.16.1"
]
]
},
{
"name": "frozenlist",
"specs": [
[
"==",
"1.5.0"
]
]
},
{
"name": "fsspec",
"specs": [
[
"==",
"2024.10.0"
]
]
},
{
"name": "h11",
"specs": [
[
"==",
"0.14.0"
]
]
},
{
"name": "httpcore",
"specs": [
[
"==",
"1.0.6"
]
]
},
{
"name": "httpx",
"specs": [
[
"==",
"0.27.2"
]
]
},
{
"name": "huggingface-hub",
"specs": [
[
"==",
"0.26.2"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.10"
]
]
},
{
"name": "importlib-metadata",
"specs": [
[
"==",
"8.5.0"
]
]
},
{
"name": "importlib-resources",
"specs": [
[
"==",
"6.4.5"
]
]
},
{
"name": "jinja2",
"specs": [
[
"==",
"3.1.4"
]
]
},
{
"name": "jiter",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "jsonschema-specifications",
"specs": [
[
"==",
"2023.12.1"
]
]
},
{
"name": "jsonschema",
"specs": [
[
"==",
"4.23.0"
]
]
},
{
"name": "litellm",
"specs": [
[
"==",
"1.52.0"
]
]
},
{
"name": "markdown-it-py",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "markupsafe",
"specs": [
[
"==",
"2.1.5"
]
]
},
{
"name": "mdurl",
"specs": [
[
"==",
"0.1.2"
]
]
},
{
"name": "multidict",
"specs": [
[
"==",
"6.1.0"
]
]
},
{
"name": "openai",
"specs": [
[
"==",
"1.54.3"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"24.1"
]
]
},
{
"name": "pkgutil-resolve-name",
"specs": [
[
"==",
"1.3.10"
]
]
},
{
"name": "pne",
"specs": [
[
"==",
"1.1.1"
]
]
},
{
"name": "prompt-toolkit",
"specs": [
[
"==",
"3.0.36"
]
]
},
{
"name": "promptulate",
"specs": [
[
"==",
"1.18.4"
]
]
},
{
"name": "propcache",
"specs": [
[
"==",
"0.2.0"
]
]
},
{
"name": "pydantic-core",
"specs": [
[
"==",
"2.23.4"
]
]
},
{
"name": "pydantic",
"specs": [
[
"==",
"2.9.2"
]
]
},
{
"name": "pygments",
"specs": [
[
"==",
"2.18.0"
]
]
},
{
"name": "python-dotenv",
"specs": [
[
"==",
"1.0.1"
]
]
},
{
"name": "pyyaml",
"specs": [
[
"==",
"6.0.2"
]
]
},
{
"name": "questionary",
"specs": [
[
"==",
"2.0.1"
]
]
},
{
"name": "referencing",
"specs": [
[
"==",
"0.35.1"
]
]
},
{
"name": "regex",
"specs": [
[
"==",
"2024.11.6"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.32.3"
]
]
},
{
"name": "rich",
"specs": [
[
"==",
"13.9.4"
]
]
},
{
"name": "rpds-py",
"specs": [
[
"==",
"0.20.1"
]
]
},
{
"name": "shellingham",
"specs": [
[
"==",
"1.5.4"
]
]
},
{
"name": "sniffio",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "tiktoken",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "tokenizers",
"specs": [
[
"==",
"0.20.3"
]
]
},
{
"name": "tqdm",
"specs": [
[
"==",
"4.67.0"
]
]
},
{
"name": "typer",
"specs": [
[
"==",
"0.12.5"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
"==",
"4.12.2"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"2.2.3"
]
]
},
{
"name": "wcwidth",
"specs": [
[
"==",
"0.2.13"
]
]
},
{
"name": "yarl",
"specs": [
[
"==",
"1.15.2"
]
]
},
{
"name": "zeeland",
"specs": [
[
"==",
"0.3.0"
]
]
},
{
"name": "zipp",
"specs": [
[
"==",
"3.20.2"
]
]
}
],
"lcname": "gcop"
}