LLM-Client-SDK عبارة عن SDK للتكامل السلس مع نماذج اللغات الكبيرة المولدة للذكاء الاصطناعي (نحن ندعم حاليًا - OpenAI وGoogle وAI21 وHuggingfaceHub وAleph Alpha وAnthropic والنماذج المحلية مع المحولات - وغيرها الكثير قريبًا).
تتمثل رؤيتنا في توفير SDK أصلي غير متزامن وجاهز للإنتاج مع إنشاء تكامل قوي وسريع مع LLM مختلفة دون السماح للمستخدم بفقد أي مرونة (معلمات API ونقاط النهاية وما إلى ذلك). *نوفر أيضًا إصدارًا متزامنًا، راجع المزيد من التفاصيل أدناه في قسم الاستخدام.
تعرض الحزمة واجهتين بسيطتين للتكامل السلس مع LLMs (في المستقبل، سنقوم بتوسيع الواجهة لدعم المزيد من المهام مثل نماذج القائمة والتحريرات وما إلى ذلك):
من abc استيراد ABC، Abstractmethodfrom dataclasses استيراد dataclass، fieldfrom كتابة استيراد أي، اختياريمن التعداد استيراد Enumfrom dataclasses_json استيراد dataclass_json، configfrom aiohttp import ClientSessionclass BaseLLMClient(ABC):@abstractmethodasync def text_completion(self, موجه: str, **kwargs) -> قائمة [str]:رفع NotImplementedError()async def get_tokens_count(self, text: str, **kwargs) -> int:raise NotImplementedError()class role(Enum):SYSTEM = "system"USER = "user"ASSISTANT = "assistant"@dataclass_json@dataclassclass ChatMessage:role: الدور = الحقل (بيانات التعريف = التكوين (التشفير = دور لامدا: قيمة الدور، وحدة فك التشفير = الدور)) المحتوى: اسم السلسلة: اختياري[str] = حقل (افتراضي=لا شيء، البيانات الوصفية=config(استبعاد=اسم لامدا: الاسم لا شيء))مثال: bool = field(default=False, metadata=config(exclude=lambda _: True)) @dataclassclass LLMAPIClientConfig:api_key: strsession: ClientSessionbase_url: اختياري[str] = Nonedefault_model: اختياري[str] = Noneheaders: dict[str, Any] = field(default_factory=dict)class BaseLLMAPIClient(BaseLLMClient, ABC):def __init__(self, التكوين: LLMAPIClientConfig): ...@abstractmethodasync def text_completion(self، موجه: str، model: اختياري[str] = لا شيء، max_tokens: int | لا شيء = لا شيء، درجة الحرارة: اختياري[float] = لا شيء، top_p: اختياري[float] = لا شيء، * *kwargs) -> list[str]:raise NotImplementedError()async def chat_completion(self, messages: list[ChatMessage], درجة الحرارة: float = 0, max_tokens: int = 16, model: اختياري[str] = لا شيء, **kwargs) -> list[str]:raise NotImplementedError()async def embedding(self, text: str, model: اختياري[str] = لا شيء، **kwargs) -> القائمة[float]:raise NotImplementedError()async def get_chat_tokens_count(self, messages: قائمة [ChatMessage]، **kwargs) -> int:raise NotImplementedError()
بايثون 3.9+
إذا كنت قلقًا بشأن حجم الحزمة، فيمكنك تثبيت العملاء الذين تحتاجهم فقط، وبشكل افتراضي، لا نقوم بتثبيت أي من العملاء.
لجميع دعم العملاء الحاليين
تثبيت $ pip llm-client[all]
للواجهة الأساسية فقط وبعض عملاء LLM الخفيفين (AI21 وAleph Alpha)
$ pip install llm-client
لجميع عملاء API الحاليين
تثبيت $ pip llm-client[api]
لدعم العملاء المحليين فقط
$ pip install llm-client[محلي]
لدعم المزامنة
تثبيت $ pip llm-client[sync]
لدعم OpenAI فقط
$ pip install llm-client[openai]
لدعم HuggingFace فقط
$ pip install llm-client[عناق الوجه]
استخدام OpenAI مباشرة من خلال OpenAIClient - أقصى قدر من التحكم وأفضل الممارسات في الإنتاج
استيراد osfrom aiohttp استيراد ClientSessionfrom llm_client استيراد ChatMessage، الدور، OpenAIClient، LLMAPIClientConfigOPENAI_API_KEY = os.environ["API_KEY"]OPENAI_ORG_ID = os.getenv("ORG_ID")async def main():async with ClientSession() as session:llm_client = OpenAIClient(LLMAPIClientConfig(OPENAI_API_KEY, session, default_model="text-davinci-003", headers={"OpenAI-Organization": OPENAI_ORG_ID})) # الرؤوس اختياريةtext = "هذا بالفعل اختبار"messages = [ChatMessage(role) =الدور.USER، content="Hello!"),ChatMessage(role=Role.SYSTEM, content="مرحبًا! كيف يمكنني مساعدتك اليوم؟")]print("عدد الرموز:"، في انتظار llm_client.get_tokens_count(text)) # 5print("عدد الرموز المميزة لإكمال الدردشة:"، في انتظار llm_client.get_chat_tokens_count(messages, model="gpt-3.5-turbo")) # 23print("الدردشة التي تم إنشاؤها:"، في انتظار llm_client.chat_completion(messages, model = "gpt-3.5-turbo")) # ['مرحبًا! كيف يمكنني مساعدتك اليوم؟']print("generated text:"، انتظار llm_client.text_completion(text)) # [' stringnnنعم، هذه سلسلة اختبار. يتم استخدام سلاسل الاختبار لـ']print("التضمين المُنشأ:"، انتظار llm_client.embedding(text)) # [0.0023064255, -0.009327292, ...]
استخدام LLMAPIClientFactory - مثالي إذا كنت تريد التحرك بسرعة وعدم التعامل مع جلسة العميل بنفسك
استيراد osfrom llm_client استيراد LLMAPIClientFactory، LLMAPIClientTypeOPENAI_API_KEY = os.environ["API_KEY"]async def main():async مع LLMAPIClientFactory() كـ 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") انتظر llm_client.text_completion(prompt="هذا بالفعل اختبار") انتظر llm_client.text_completion(prompt="هذا بالفعل اختبار" "، max_tokens=50) # أو إذا كنت لا تريد استخدام 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="This is في الواقع اختبار")llm_client.text_completion(prompt="هذا بالفعل اختبار"، max_tokens=50)
النموذج المحلي
استيراد osfrom المحولات import AutoModelForCausalLM, AutoModelForSeq2SeqLM, AutoTokenizerfrom llm_client import LocalClientConfig, LocalClientasync def main():try:model = AutoModelForCausalLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"]) باستثناء 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="هذا بالفعل اختبار")wait llm_client.text_completion(prompt="هذا بالفعل اختبار"، max_tokens=50)# أو إذا لم تفعل ذلك لا تريد استخدام asyncimport async_to_synctry:model = AutoModelForCausalLM.from_pretrained(os.environ["MODEL_NAME_OR_PATH"]) باستثناء 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="هذا بالفعل اختبار")llm_client.text_completion(prompt="هذا بالفعل اختبار"، max_tokens=50)
المساهمات هي موضع ترحيب! من فضلك قم بمراجعة المهام أدناه، ولا تتردد في فتح مشكلة أو طلب سحب.
القائمة غير مرتبة
إضافة دعم لمزيد من LLMs
أنثروبي
جوجل
التحم
أضف دعمًا لمزيد من الوظائف عبر LLMs
التضمينات
محادثة
نماذج القائمة
التعديلات
أكثر
إضافة المبادئ التوجيهية المساهمة وinter
قم بإنشاء طريقة سهلة لتشغيل LLMs متعددة بالتوازي مع نفس المطالبات
تحويل معلمة النماذج الشائعة
درجة حرارة
max_tokens
top_p
أكثر
لتثبيت الحزمة في وضع التطوير، قم بتشغيل الأمر التالي:
$ تثبيت النقطة -e ".[الكل،اختبار]"
لإجراء الاختبارات، قم بتشغيل الأمر التالي:
اختبارات pytest $
إذا كنت تريد إضافة LLMClient جديد، فأنت بحاجة إلى تنفيذ BaseLLMClient أو BaseLLMAPIClient.
إذا كنت تقوم بإضافة BaseLLMAPIClient، فأنت بحاجة أيضًا إلى إضافته في LLMAPIClientFactory.
يمكنك إضافة تبعيات إلى LLMClient الخاص بك في pyproject.toml وتأكد أيضًا من إضافة Matrix.flavor في test.yml.