Utilities for managing multi-shot conversations and structured data handling in LLM applications
This project has been archived.
The maintainers of this project have marked this project as archived. No new releases are expected.
Project description
mdi-llmkit
Utilities for managing LLM chat conversations and structured JSON responses with OpenAI's Responses API.
Installation
pip install mdi-llmkit
Quick Start
Preferred subpackage imports:
from mdi_llmkit.gpt_api import GptConversation
from mdi_llmkit.json_surgery import json_surgery
gpt_submit
from openai import OpenAI
from mdi_llmkit.gpt_api import gpt_submit
client = OpenAI()
reply = gpt_submit(
messages=[{"role": "user", "content": "Say hello."}],
openai_client=client,
)
print(reply)
GptConversation
from openai import OpenAI
from mdi_llmkit.gpt_api import GptConversation
client = OpenAI()
conversation = GptConversation(openai_client=client)
reply = conversation.submit_user_message("Give me three project name ideas.")
print(reply)
JSON Response Mode
from openai import OpenAI
from mdi_llmkit.gpt_api import gpt_submit
client = OpenAI()
result = gpt_submit(
messages=[{"role": "user", "content": "Return JSON with keys a and b."}],
openai_client=client,
json_response=True,
)
print(type(result)) # dict or list
print(result)
JSON Surgery
from openai import OpenAI
from mdi_llmkit.json_surgery import json_surgery
client = OpenAI()
obj = {"status": "pending", "tags": ["alpha"]}
result = json_surgery(
client,
obj,
'Set status to "approved" and append "done" to tags.',
)
print(result)
Placemark helpers are available in mdi_llmkit.json_surgery.placemarked_json:
placemarked_json_stringify(obj, indent=2, skipped_keys=None)navigate_to_json_path(obj, json_path)
Semantic List Comparison (compare_item_lists)
Use compare_item_lists when you need to compare a before list and an after
list and classify items as removed, added, renamed, or unchanged. This uses AI to resolve semantic renames that would otherwise appear as unrelated remove/add pairs in strict string comparison.
from openai import OpenAI
from mdi_llmkit.semantic_match import compare_item_lists
client = OpenAI()
result = compare_item_lists(
client,
["Legacy Plan", "Shared Item"],
["Modern Plan", "shared item"],
(
"Legacy Plan was renamed to Modern Plan. "
"Shared Item is unchanged."
),
)
print(result)
# [
# {
# "item": "Legacy Plan",
# "classification": "renamed",
# "new_name": "Modern Plan",
# },
# {
# "item": "Shared Item",
# "classification": "unchanged",
# "new_name": None,
# },
# ]
Accepted input item formats:
- String item name:
"Item Name" - Object with optional context:
{"name": "Item Name", "description": "..."}
Notes:
- Name matching is case-insensitive for exact unchanged detection.
- Names should be unique within each input list (case-insensitive).
- Optional
descriptionis context-only and does not define identity.
Local Dev (Windows venv)
From packages/python-mdi-llmkit, activate the project venv and run tests:
.\venv\Scripts\Activate.ps1
python -c "import sys; print(sys.executable)"
python -m unittest tests/test_placemarked_json.py tests/test_json_surgery_unit.py
Live json_surgery integration tests (real API) require OPENAI_API_KEY:
python -m unittest tests/test_json_surgery.py
Notes
- Package name for
pip installismdi-llmkit. - Python import package is
mdi_llmkit. gpt_submitsupports optional warning reporting viawarning_callback.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mdi_llmkit-1.1.3.tar.gz.
File metadata
- Download URL: mdi_llmkit-1.1.3.tar.gz
- Upload date:
- Size: 42.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c254afd015f7c9d18fa704303a567a3ab58f9e403ab71ba88a6bcaf0db87ab3a
|
|
| MD5 |
e2a19e690a60fc1ce52b0ab227416838
|
|
| BLAKE2b-256 |
13774498363e4aad411fb14a484e36e7843d913cf835583b0de82e6d24912256
|
File details
Details for the file mdi_llmkit-1.1.3-py3-none-any.whl.
File metadata
- Download URL: mdi_llmkit-1.1.3-py3-none-any.whl
- Upload date:
- Size: 26.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d993637a636fa634ffd0d20512e1ece5e96712db01874622cd4e681052f19d4f
|
|
| MD5 |
da7d30dc7fad29e44183777666dbf19d
|
|
| BLAKE2b-256 |
d022890f1fb389e7cdd41e482da02b68afa009c1e4344949848b4ca850c0cf79
|