LLM-Client-SDK adalah SDK untuk integrasi tanpa batas dengan model bahasa besar AI generatif (Saat ini kami mendukung - OpenAI, Google, AI21, HuggingfaceHub, Aleph Alpha, Anthropic, model Lokal dengan transformator - dan banyak lagi yang akan segera hadir).
Visi kami adalah menyediakan SDK async asli dan siap produksi sekaligus menciptakan integrasi yang kuat dan cepat dengan LLM berbeda tanpa membiarkan pengguna kehilangan fleksibilitas apa pun (param API, titik akhir, dll.). *Kami juga menyediakan versi sinkronisasi, lihat detail lebih lanjut di bawah di bagian Penggunaan.
Paket ini memperlihatkan dua antarmuka sederhana untuk integrasi mulus dengan LLM (Di masa depan, kami akan memperluas antarmuka untuk mendukung lebih banyak tugas seperti model daftar, pengeditan, dll.):
dari abc impor ABC, metode abstrakdari kelas data impor kelas data, bidang dari mengetik impor Apa saja, Opsionaldari enum impor Enumdari dataclasses_json impor dataclass_json, configfrom aiohttp import ClientSessionclass BaseLLMClient(ABC):@abstractmethodasync def text_completion(self, prompt: str, **kwargs) -> daftar [str]: naikkan NotImplementedError() async def get_tokens_count(mandiri, teks: str, **kwargs) -> int:raise NotImplementedError()class Role(Enum):SYSTEM = "system"USER = "user"ASSISTANT = "assistant"@dataclass_json@dataclassclass ChatMessage:role: Role = bidang(metadata=config(encoder=peran lambda: peran.nilai, decoder=Peran))konten: nama str: Opsional[str] = bidang(default=Tidak ada, metadata=config(tidak termasuk=nama lambda: nama tidak ada))contoh: bool = bidang(default=False, metadata=config(tidak termasuk=lambda _: Benar)) @dataclassclass LLMAPIClientConfig:api_key: strsession: ClientSessionbase_url: Opsional[str] = Nonedefault_model: Opsional[str] = Noneheaders: dict[str, Any] = field(default_factory=dict)class BaseLLMAPIClient(BaseLLMClient, ABC):def __init__(self, konfigurasi: LLMAPIClientConfig): ...@abstractmethodasync def text_completion(mandiri, prompt: str, model: Opsional[str] = Tidak ada, max_tokens: int | Tidak ada = Tidak ada, suhu: Opsional[float] = Tidak ada, top_p: Opsional[float] = Tidak ada, * *kwargs) -> daftar[str]:raise NotImplementedError()async def chat_completion(mandiri, pesan: daftar[ChatMessage], suhu: float = 0, max_tokens: int = 16, model: Opsional[str] = Tidak ada, **kwargs) -> daftar[str]:raise NotImplementedError()async def embedding(mandiri, teks: str, model: Opsional[str] = Tidak ada , **kwargs) -> daftar[float]:raise NotImplementedError()async def get_chat_tokens_count(mandiri, pesan: daftar[ChatMessage], **kwargs) -> int:naikkan NotImplementedError()
Python 3.9+
Jika Anda khawatir tentang ukuran paket, Anda hanya dapat menginstal klien yang Anda perlukan, secara default kami tidak menginstal satu pun klien.
Untuk semua dukungan klien saat ini
$ pip install llm-klien[semua]
Hanya untuk antarmuka dasar dan beberapa klien LLM ringan (AI21 dan Aleph Alpha)
$ pip instal llm-client
Untuk semua dukungan klien api saat ini
$ pip install llm-klien[api]
Hanya untuk dukungan klien lokal
$ pip install llm-client[lokal]
Untuk dukungan sinkronisasi
$ pip install llm-client[sinkronisasi]
Hanya untuk dukungan OpenAI
$ pip install llm-klien[openai]
Hanya untuk dukungan HuggingFace
$ pip install llm-client[huggingface]
Menggunakan OpenAI secara langsung melalui OpenAIClient - Kontrol maksimum dan praktik terbaik dalam produksi
impor osfrom aiohttp impor ClientSessionfrom llm_client impor ChatMessage, Peran, OpenAIClient, LLMAPIClientConfigOPENAI_API_KEY = os.environ["API_KEY"]OPENAI_ORG_ID = os.getenv("ORG_ID")async def main():async dengan ClientSession() sebagai sesi:llm_client = OpenAIClient(LLMAPIClientConfig(OPENAI_API_KEY, session, default_model="text-davinci-003", headers={"OpenAI-Organization": OPENAI_ORG_ID})) # Headernya adalah opsionaltext = "Ini memang sebuah ujian"messages = [ChatMessage(role =Peran.PENGGUNA, content="Halo!"),ChatMessage(role=Role.SYSTEM, content="Halo! Apa yang bisa saya bantu hari ini?")]print("jumlah token:", menunggu llm_client.get_tokens_count(teks)) # 5print("jumlah token untuk penyelesaian obrolan:", menunggu llm_client.get_chat_tokens_count(messages, model="gpt-3.5-turbo")) # 23print("obrolan yang dihasilkan:", menunggu llm_client.chat_completion(messages, model="gpt-3.5-turbo")) # ['Halo! Apa yang bisa saya bantu hari ini?']print("teks yang dihasilkan:", menunggu llm_client.text_completion(teks)) # [' stringnnYa, ini adalah string pengujian. String pengujian digunakan untuk']print("generated embedding:", waiting llm_client.embedding(text)) # [0.0023064255, -0.009327292, ...]
Menggunakan LLMAPIClientFactory - Sempurna jika Anda ingin bergerak cepat dan tidak menangani sendiri sesi klien
impor osfrom llm_client impor LLMAPIClientFactory, LLMAPIClientTypeOPENAI_API_KEY = os.environ["API_KEY"]async def main():async dengan LLMAPIClientFactory() sebagai llm_api_client_factory:llm_client = llm_api_client_factory.get_llm_api_client(LLMAPIClientType.OPEN_AI, api_key=OPENAI_API_KEY, default_model="text-davinci-003")menunggu llm_client.text_completion(prompt="Ini memang sebuah ujian")menunggu llm_client.text_completion(prompt="Ini memang sebuah ujian", max_tokens=50) # Atau jika Anda tidak ingin menggunakan asyncfrom llm_client import init_sync_llm_api_clientllm_client = init_sync_llm_api_client(LLMAPIClientType.OPEN_AI, api_key=OPENAI_API_KEY, default_model="text-davinci-003")llm_client.text_completion(prompt="Ini memang a test")llm_client.text_completion(prompt="Ini memang sebuah ujian", max_tokens=50)
Model lokal
impor osfrom transformator impor AutoModelForCausalLM, AutoModelForSeq2SeqLM, AutoTokenizerfrom llm_client impor LocalClientConfig, LocalClientasync def main():try:model = AutoModelForCausalLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])kecuali ValueError:model = AutoModelForSeq2SeqLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])tokenizer = AutoTokenizer.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])llm_client = LocalClient(LocalClientConfig(model, tokenizer, os.environ["TENSORS_TYPE"], os.environ["DEVICE"]))await llm_client.text_completion(prompt="Ini memang sebuah ujian")tunggu llm_client.text_completion(prompt="Ini memang sebuah ujian", max_tokens=50)# Atau jika Anda tidak Saya tidak ingin menggunakan asyncimport async_to_synctry:model = AutoModelForCausalLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])kecuali ValueError:model = AutoModelForSeq2SeqLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])tokenizer = AutoTokenizer.from_pretrained(os.environ["MODEL_NAME_OR_PATH"])llm_client = LocalClient(LocalClientConfig(model, tokenizer, os.environ["TENSORS_TYPE"], os.environ["DEVICE"]))llm_client = async_to_sync.methods(llm_client)llm_client.text_completion(prompt="Ini memang ujian")llm_client .text_completion(prompt="Ini memang sebuah ujian", maks_tokens=50)
Kontribusi dipersilahkan! Silakan periksa tugas-tugas di bawah ini, dan jangan ragu untuk membuka masalah atau permintaan penarikan.
Daftarnya tidak berurutan
Tambahkan dukungan untuk lebih banyak LLM
Antropis
Berpadu
Tambahkan dukungan untuk lebih banyak fungsi melalui LLM
penyematan
mengobrol
daftar model
suntingan
lagi
Tambahkan pedoman kontribusi dan linter
Buat cara mudah untuk menjalankan beberapa LLM secara paralel dengan petunjuk yang sama
Konversi parameter model umum
suhu
max_tokens
atas_p
lagi
Untuk menginstal paket dalam mode pengembangan, jalankan perintah berikut:
$ pip install -e ".[semua,uji]"
Untuk menjalankan tes, jalankan perintah berikut:
$ tes pytest
Jika Anda ingin menambahkan LLMClient baru, Anda perlu mengimplementasikan BaseLLMClient atau BaseLLMAPIClient.
Jika Anda menambahkan BaseLLMAPIClient Anda juga perlu menambahkannya di LLMAPIClientFactory.
Anda dapat menambahkan dependensi ke LLMClient Anda di pyproject.toml dan pastikan Anda menambahkan matriks.flavor di test.yml.