Wir sind auf der Mission, die LLM -Landschaft zu vereinfachen. Unify lässt Sie:
? Verwenden Sie eine beliebige LLM von jedem Anbieter : Mit einer einzigen Schnittstelle können Sie alle LLMs von allen Anbietern verwenden, indem Sie einfach eine Zeichenfolge ändern. Es ist nicht erforderlich, mehrere API-Tasten zu verwalten oder verschiedene Eingangs-Output-Formate zu verarbeiten. Unify Griffe all das für dich!
Verbesserung der LLM -Leistung : Fügen Sie Ihre eigenen benutzerdefinierten Tests und Evals hinzu und beachten Sie Ihre eigenen Aufforderungen für alle Modelle und Anbieter. Vergleichen Sie Qualität, Kosten und Geschwindigkeit und iterieren Sie Ihre Systemaufforderung, bis alle Testfälle vergangen sind, und Sie können Ihre App bereitstellen!
? Route zum besten LLM : Verbessern Sie Qualität, Kosten und Geschwindigkeit, indem Sie für jede einzelne Eingabeaufforderung zum perfekten Modell und Anbieter weitergeben.
Installieren Sie einfach das Paket:
pip install unifyai
Melden Sie sich dann an, um Ihre API -Schlüssel zu erhalten, dann können Sie bereit sind zu gehen!
import unify
client = unify . Unify ( "gpt-4o@openai" , api_key = < your_key > )
client . generate ( "hello world!" )
Notiz
Wir empfehlen, Python-dotenv zu Ihrer .env
Datei zu verwenden, um UNIFY_KEY="My API Key"
hinzuzufügen, wodurch die Verwendung des api_key
-Arguments wie oben verwendet werden muss. Für den Rest des ReadME gehen wir davon aus, dass Sie Ihren Schlüssel als Umgebungsvariable festlegen.
Sie können alle Modelle, Anbieter und Endpunkte auflisten ( <model>@<provider>
Paar) wie folgt:
models = unify . list_models ()
providers = unify . list_providers ()
endpoints = unify . list_endpoints ()
Sie können auch in diesen Funktionen wie folgt filtern:
import random
anthropic_models = unify . list_models ( "anthropic" )
client . set_endpoint ( random . choice ( anthropic_models ) + "@anthropic" )
latest_llama3p1_providers = unify . list_providers ( "llama-3.1-405b-chat" )
client . set_endpoint ( "llama-3.1-405b-chat@" + random . choice ( latest_llama3p1_providers ))
openai_endpoints = unify . list_endpoints ( "openai" )
client . set_endpoint ( random . choice ( openai_endpoints ))
mixtral8x7b_endpoints = unify . list_endpoints ( "mixtral-8x7b-instruct-v0.1" )
client . set_endpoint ( random . choice ( mixtral8x7b_endpoints ))
Wenn Sie den endpoint
, model
oder den provider
ändern möchten, können Sie dies mit den Methoden .set_endpoint
, .set_model
, .set_provider
tun.
client . set_endpoint ( "mistral-7b-instruct-v0.3@deepinfra" )
client . set_model ( "mistral-7b-instruct-v0.3" )
client . set_provider ( "deepinfra" )
Sie können die Persona des Modells mithilfe des Arguments system_message
in der Funktion .generate
beeinflussen:
response = client . generate (
user_message = "Hello Llama! Who was Isaac Newton?" , system_message = "You should always talk in rhymes"
)
Wenn Sie mehrere Nachrichten mit der Funktion .generate
senden möchten, sollten Sie das Argument messages
wie folgt verwenden:
messages = [
{ "role" : "user" , "content" : "Who won the world series in 2020?" },
{ "role" : "assistant" , "content" : "The Los Angeles Dodgers won the World Series in 2020." },
{ "role" : "user" , "content" : "Where was it played?" }
]
res = client . generate ( messages = messages )
Wenn Sie LLMs abfragen, möchten Sie häufig viele Aspekte Ihrer Eingabeaufforderung behalten und nur eine kleine Teilmenge der Eingabeaufforderung für jeden nachfolgenden Anruf ändern.
Zum Beispiel möchten Sie möglicherweise die gemäßigte, die Systemaufforderung und die verfügbaren Tools beheben, während Sie verschiedene Benutzernachrichten über eine nachgelagerte Anwendung übergeben. Alle Clients in Unify machen dies durch Standardargumente, die im Konstruktor angegeben werden können, sehr einfach und können auch jederzeit mit Setzermethoden festgelegt werden.
Beispielsweise übergibt der folgende Code temperature=0.5
an alle nachfolgenden Anforderungen, ohne wiederholt in die Methode .generate()
übergeben zu werden.
client = unify . Unify ( "claude-3-haiku@anthropic" , temperature = 0.5 )
client . generate ( "Hello world!" )
client . generate ( "What a nice day." )
Alle Parameter können auch von Getters abgerufen und über Setzer gesetzt werden:
client = unify . Unify ( "claude-3-haiku@anthropic" , temperature = 0.5 )
print ( client . temperature ) # 0.5
client . set_temperature ( 1.0 )
print ( client . temperature ) # 1.0
Wenn Sie einen Wert an die Methode .generate()
übergeben , schreibt er den für den Client angegebenen Standardwert über .
client = unify . Unify ( "claude-3-haiku@anthropic" , temperature = 0.5 )
client . generate ( "Hello world!" ) # temperature of 0.5
client . generate ( "What a nice day." , temperature = 1.0 ) # temperature of 1.0
Für eine optimale Leistung bei der gleichzeitigen Umstellung mehrerer Benutzeranfragen, beispielsweise in einer Chatbot -Anwendung, wird sie asynchron verarbeitet. Ein minimales Beispiel mit AsyncUnify
ist unten angegeben:
import unify
import asyncio
async_client = unify . AsyncUnify ( "llama-3-8b-chat@fireworks-ai" )
asyncio . run ( async_client . generate ( "Hello Llama! Who was Isaac Newton?" ))
Als mehr angewandteres Beispiel: Die Verarbeitung mehrerer Anforderungen parallel kann dann wie folgt durchgeführt werden:
import unify
import asyncio
clients = dict ()
clients [ "gpt-4o@openai" ] = unify . AsyncUnify ( "gpt-4o@openai" )
clients [ "claude-3-opus@anthropic" ] = unify . AsyncUnify ( "claude-3-opus@anthropic" )
clients [ "llama-3-8b-chat@fireworks-ai" ] = unify . AsyncUnify ( "llama-3-8b-chat@fireworks-ai" )
async def generate_responses ( user_message : str ):
responses_ = dict ()
for endpoint_ , client in clients . items ():
responses_ [ endpoint_ ] = await client . generate ( user_message )
return responses_
responses = asyncio . run ( generate_responses ( "Hello, how's it going?" ))
for endpoint , response in responses . items ():
print ( "endpoint: {}" . format ( endpoint ))
print ( "response: {} n " . format ( response ))
In Bezug auf die Funktionalität sind die asynchronen und synchronen Clients identisch.
Sie können Streaming -Antworten aktivieren, indem Sie stream=True
in der Funktion .generate
einstellen.
import unify
client = unify . Unify ( "llama-3-8b-chat@fireworks-ai" )
stream = client . generate ( "Hello Llama! Who was Isaac Newton?" , stream = True )
for chunk in stream :
print ( chunk , end = "" )
Es funktioniert genauso mit asynchronen Clients.
import unify
import asyncio
async_client = unify . AsyncUnify ( "llama-3-8b-chat@fireworks-ai" )
async def stream ():
async_stream = await async_client . generate ( "Hello Llama! Who was Isaac Newton?" , stream = True )
async for chunk in async_stream :
print ( chunk , end = "" )
asyncio . run ( stream ())
Weitere Informationen zu unseren fortschrittlicheren API -Funktionen, Benchmarking und LLM -Routing finden Sie in unseren umfassenden Dokumenten!