mirror of
https://github.com/kennethreitz/simplemind.git
synced 2026-06-05 22:50:18 +00:00
working!
This commit is contained in:
@@ -39,18 +39,30 @@ class OpenAI(BaseClientProvider):
|
||||
|
||||
return bool(len(self.available_models))
|
||||
|
||||
def single_message(self, message, *, response_model=False, **kwargs):
|
||||
def message(self, message, *, response_model=False, **kwargs):
|
||||
"""Generates a response from the OpenAI client."""
|
||||
use_instructor = bool(response_model)
|
||||
|
||||
client = self.client if not response_model else self.instructor_client
|
||||
client = self.instructor_client if use_instructor else self.client
|
||||
|
||||
completion = self.client.chat.completions.create(
|
||||
model=self.model,
|
||||
messages=[{"role": "user", "content": message}],
|
||||
**kwargs,
|
||||
)
|
||||
# Parameters for the OpenAI client.
|
||||
params = {
|
||||
"messages": [{"role": "user", "content": message}],
|
||||
"model": self.model,
|
||||
}
|
||||
params.update(kwargs)
|
||||
|
||||
return AIResponse(
|
||||
response=completion,
|
||||
text=completion.choices[0].message.content,
|
||||
)
|
||||
if use_instructor:
|
||||
params["response_model"] = response_model
|
||||
|
||||
# Make the request to OpenAI.
|
||||
completion = client.chat.completions.create(**params)
|
||||
|
||||
if use_instructor:
|
||||
return completion.model_dump()
|
||||
|
||||
else:
|
||||
return AIResponse(
|
||||
response=completion,
|
||||
text=completion.choices[0].message.content,
|
||||
)
|
||||
|
||||
@@ -1,18 +1,50 @@
|
||||
from pprint import pprint
|
||||
from pydantic import BaseModel
|
||||
import simplemind
|
||||
|
||||
context = None
|
||||
|
||||
openai = simplemind.integrations.OpenAI()
|
||||
|
||||
|
||||
class YearlyData(BaseModel):
|
||||
year: int
|
||||
events: list[str]
|
||||
|
||||
|
||||
class ProjectData(BaseModel):
|
||||
name: str
|
||||
description: str
|
||||
url: str
|
||||
github_url: str
|
||||
|
||||
|
||||
class BioData(BaseModel):
|
||||
bio: str
|
||||
spouse_name: str
|
||||
history: list[YearlyData]
|
||||
fun_facts: list[str]
|
||||
# age: int
|
||||
# occupation: str
|
||||
# bio: str
|
||||
# affiliations: list[str]
|
||||
|
||||
|
||||
class PersonData(BaseModel):
|
||||
bio: BioData
|
||||
projects: list[ProjectData]
|
||||
yearly_breakdown: list[YearlyData]
|
||||
|
||||
|
||||
print(openai.test_connection())
|
||||
print(openai.available_models)
|
||||
|
||||
print()
|
||||
print()
|
||||
message = "who is kennethreitz?"
|
||||
message = "who is kenneth reitz?"
|
||||
|
||||
print(f"> {message}")
|
||||
print(openai.single_message(message))
|
||||
pprint(openai.message(message, response_model=BioData))
|
||||
|
||||
# claude = simplemind.integrations.Anthropic()
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
import instructor
|
||||
from pydantic import BaseModel
|
||||
from openai import OpenAI
|
||||
|
||||
|
||||
class ProjectInfo(BaseModel):
|
||||
name: str
|
||||
description: str
|
||||
url: str
|
||||
github_url: str
|
||||
|
||||
|
||||
# Define your desired output structure
|
||||
class UserInfo(BaseModel):
|
||||
name: str
|
||||
age: int
|
||||
bio: str
|
||||
projects: list[ProjectInfo]
|
||||
|
||||
|
||||
# Patch the OpenAI client
|
||||
client = instructor.from_openai(OpenAI())
|
||||
|
||||
# Extract structured data from natural language
|
||||
user_info = client.chat.completions.create(
|
||||
model="gpt-4o",
|
||||
response_model=UserInfo,
|
||||
messages=[{"role": "user", "content": "who is kennethreitz?"}],
|
||||
)
|
||||
|
||||
print(user_info.model_dump())
|
||||
# > 30
|
||||
Reference in New Issue
Block a user