LLM FOO est un projet de pointe mélangeant l'art du kung-fu avec la science des modèles de grandes langues ... ou en fait, il s'agit de faire automatiquement le schéma JSON Tool Openai, d'analyser l'appel et de construire le résultat au modèle de chat. Et puis il y a un deuxième utilitaire is_statement_true qui utilise un truc de génie logit_bias qui n'utilise qu'un seul jeton de sortie.
Mais hé j'espère que cela deviendra un ensemble de petites fonctions LLM utiles qui faciliteront la construction de choses car les API de saignement actuels sont un peu en désordre et je pense que nous pouvons faire mieux.

pip install llmfoo Vous devez avoir OpenAI_API_KEY dans Env et capacité d'appeler le modèle gpt-4-1106-preview
is_statement_true devrait être facile à comprendre. Faites une déclaration de langage naturel et vérifiez-la contre les critères ou la véracité générale. Vous récupérez booléen.
La fonctionnalité pdf2md nouvellement introduite permet la conversion des documents PDF au format Markdown, ce qui les rend plus faciles à traiter et à intégrer avec des systèmes basés sur LLM. Cette fonctionnalité est particulièrement utile pour extraire du texte et des tables de PDF et de les transformer en un format plus gérable.
pdftocairo doit être installé sur votre système pour convertir les pages PDF en images. from llmfoo . pdf2md import process_pdf
from pathlib import Path
pdf_path = Path ( "path/to/your/document.pdf" )
output_dir = Path ( "path/to/output/directory" )
# Process the PDF and generate Markdown
markdown_file = process_pdf ( pdf_path , output_dir )Cette fonction traitera chaque page du PDF, tentant d'extraire du texte, des figures et des tables, et les convertir en fichier de marque dans le répertoire de sortie spécifié.
@tool .openai_schema pour retourner le schéma (vous pouvez le modifier à partir du JSON si vous n'êtes pas satisfait de ce que les machines ont fait)openai_tool_call pour faire l'appel de l'outil et renvoyer le résultat du format de message API de chatopenai_tool_output from time import sleep
from openai import OpenAI
from llmfoo . functions import tool
from llmfoo import is_statement_true
def test_is_statement_true_with_default_criteria ():
assert is_statement_true ( "Earth is a planet." )
assert not is_statement_true ( "1 + 2 = 5" )
def test_is_statement_true_with_own_criteria ():
assert not is_statement_true ( "Temperature outside is -2 degrees celsius" ,
criteria = "Temperature above 0 degrees celsius" )
assert is_statement_true ( "1984 was written by George Orwell" ,
criteria = "George Orwell is the author of 1984" )
def test_is_statement_true_criteria_can_change_truth_value ():
assert is_statement_true ( "Earth is 3rd planet from the Sun" )
assert not is_statement_true ( "Earth is 3rd planet from the Sun" ,
criteria = "Earth is stated to be 5th planet from the Sun" )
@ tool
def adder ( x : int , y : int ) -> int :
return x + y
@ tool
def multiplier ( x : int , y : int ) -> int :
return x * y
client = OpenAI ()
def test_chat_completion_with_adder ():
number1 = 3267182746
number2 = 798472847
messages = [
{
"role" : "user" ,
"content" : f"What is { number1 } + { number2 } ?"
}
]
response = client . chat . completions . create (
model = "gpt-4-1106-preview" ,
messages = messages ,
tools = [ adder . openai_schema ]
)
messages . append ( response . choices [ 0 ]. message )
messages . append ( adder . openai_tool_call ( response . choices [ 0 ]. message . tool_calls [ 0 ]))
response2 = client . chat . completions . create (
model = "gpt-4-1106-preview" ,
messages = messages ,
tools = [ adder . openai_schema ]
)
assert str ( adder ( number1 , number2 )) in response2 . choices [ 0 ]. message . content . replace ( "," , "" )
def test_assistant_with_multiplier ():
number1 = 1238763428176
number2 = 172388743612
assistant = client . beta . assistants . create (
name = "The Calc Machina" ,
instructions = "You are a calculator with a funny pirate accent." ,
tools = [ multiplier . openai_schema ],
model = "gpt-4-1106-preview"
)
thread = client . beta . threads . create ( messages = [
{
"role" : "user" ,
"content" : f"What is { number1 } * { number2 } ?"
}
])
run = client . beta . threads . runs . create (
thread_id = thread . id ,
assistant_id = assistant . id
)
while True :
run_state = client . beta . threads . runs . retrieve (
run_id = run . id ,
thread_id = thread . id ,
)
if run_state . status not in [ 'in_progress' , 'requires_action' ]:
break
if run_state . status == 'requires_action' :
tool_call = run_state . required_action . submit_tool_outputs . tool_calls [ 0 ]
run = client . beta . threads . runs . submit_tool_outputs (
thread_id = thread . id ,
run_id = run . id ,
tool_outputs = [
multiplier . openai_tool_output ( tool_call )
]
)
sleep ( 1 )
sleep ( 0.1 )
messages = client . beta . threads . messages . list ( thread_id = thread . id )
assert str ( multiplier ( number1 , number2 )) in messages . data [ 0 ]. content [ 0 ]. text . value . replace ( "," , "" )Intéressé à contribuer? J'ai adoré obtenir votre aide pour améliorer ce projet! Les API Under changent et le système est toujours une première version.
Ce projet est autorisé sous la licence du MIT.