The LLM abstraction layer for modern AI agent applications.
Project description
Kosong
Kosong is an LLM abstraction layer designed for modern AI agent applications. It unifies message structures, asynchronous tool orchestration, and pluggable chat providers so you can build agents with ease and avoid vendor lock-in.
Kosong means "empty" in Malay and Indonesian.
Installation
Kosong requires Python 3.12 or higher. We recommend using uv as the package manager.
Init your project with:
uv init --python 3.12 # or higher
Then add Kosong as a dependency:
uv add kosong
To enable chat providers other than Kimi (e.g. Anthropic and Google Gemini), install the optional extra:
uv add 'kosong[contrib]'
Examples
Simple chat completion
import asyncio
import kosong
from kosong.chat_provider.kimi import Kimi
from kosong.message import Message
async def main() -> None:
kimi = Kimi(
base_url="https://api.moonshot.ai/v1",
api_key="your_kimi_api_key_here",
model="kimi-k2-turbo-preview",
)
history = [
Message(role="user", content="Who are you?"),
]
result = await kosong.generate(
chat_provider=kimi,
system_prompt="You are a helpful assistant.",
tools=[],
history=history,
)
print(result.message)
print(result.usage)
asyncio.run(main())
Streaming output
import asyncio
import kosong
from kosong.chat_provider import StreamedMessagePart
from kosong.chat_provider.kimi import Kimi
from kosong.message import Message
async def main() -> None:
kimi = Kimi(
base_url="https://api.moonshot.ai/v1",
api_key="your_kimi_api_key_here",
model="kimi-k2-turbo-preview",
)
history = [
Message(role="user", content="Who are you?"),
]
def output(message_part: StreamedMessagePart):
print(message_part)
result = await kosong.generate(
chat_provider=kimi,
system_prompt="You are a helpful assistant.",
tools=[],
history=history,
on_message_part=output,
)
print(result.message)
print(result.usage)
asyncio.run(main())
Tool calling with kosong.step
import asyncio
from pydantic import BaseModel
import kosong
from kosong import StepResult
from kosong.chat_provider.kimi import Kimi
from kosong.message import Message
from kosong.tooling import CallableTool2, ToolOk, ToolReturnValue
from kosong.tooling.simple import SimpleToolset
class AddToolParams(BaseModel):
a: int
b: int
class AddTool(CallableTool2[AddToolParams]):
name: str = "add"
description: str = "Add two integers."
params: type[AddToolParams] = AddToolParams
async def __call__(self, params: AddToolParams) -> ToolReturnValue:
return ToolOk(output=str(params.a + params.b))
async def main() -> None:
kimi = Kimi(
base_url="https://api.moonshot.ai/v1",
api_key="your_kimi_api_key_here",
model="kimi-k2-turbo-preview",
)
toolset = SimpleToolset()
toolset += AddTool()
history = [
Message(role="user", content="Please add 2 and 3 with the add tool."),
]
result: StepResult = await kosong.step(
chat_provider=kimi,
system_prompt="You are a precise math tutor.",
toolset=toolset,
history=history,
)
print(result.message)
print(await result.tool_results())
asyncio.run(main())
Builtin Demo
Kosong comes with a builtin demo agent that you can run locally. To start the demo, run:
export KIMI_BASE_URL="https://api.moonshot.ai/v1"
export KIMI_API_KEY="your_kimi_api_key"
uv run python -m kosong kimi --with-bash
Development
To set up a development environment, clone the repository and install the dependencies:
git clone https://github.com/MoonshotAI/kosong.git
cd kosong
uv sync --all-extras
make check # run lint and type checks
make test # run tests
make format # format code
Project details
Release history Release notifications | RSS feed
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 kosong_x-0.53.0.tar.gz.
File metadata
- Download URL: kosong_x-0.53.0.tar.gz
- Upload date:
- Size: 49.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20c282ca45352dcbef25a8e2259c3226e48e6731ecd97877eac360b9b0c718ee
|
|
| MD5 |
9b54347592bf926b99da1651c0e2c8f4
|
|
| BLAKE2b-256 |
8b472e130c261d82da38be9b9d2fc9ef79a7b89de8e17918ba94b8d1e69f1a7c
|
File details
Details for the file kosong_x-0.53.0-py3-none-any.whl.
File metadata
- Download URL: kosong_x-0.53.0-py3-none-any.whl
- Upload date:
- Size: 69.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56eeb175ab5578d5dc37131994aa883d8964c69e45e5ff10dc58535b560432f7
|
|
| MD5 |
d2baecfbb930f3fe674462e3987f8218
|
|
| BLAKE2b-256 |
bf8eac57f54daf85c9ed9f2d7f58c87cb5bac2ab0db530fa6aaa12a8b2f7b948
|