Files
wehub-resource-sync 97e91a83f3
Ruff / Ruff (push) Has been cancelled
Test / Core Tests (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.10) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.11) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.12) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.13) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.9) (push) Has been cancelled
Test / Full Coverage (Python 3.11) (push) Has been cancelled
Test / Core Provider Tests (OpenAI) (push) Has been cancelled
Test / Core Provider Tests (Anthropic) (push) Has been cancelled
Test / Core Provider Tests (Google) (push) Has been cancelled
Test / Core Provider Tests (Other) (push) Has been cancelled
Test / Anthropic Tests (push) Has been cancelled
Test / Gemini Tests (push) Has been cancelled
Test / Google GenAI Tests (push) Has been cancelled
Test / Vertex AI Tests (push) Has been cancelled
Test / OpenAI Tests (push) Has been cancelled
Test / Writer Tests (push) Has been cancelled
Test / Auto Client Tests (push) Has been cancelled
ty / type-check (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:36:38 +08:00

390 lines
12 KiB
Python

import os
import pytest
if not (
os.getenv("OPENAI_API_KEY")
and os.getenv("ANTHROPIC_API_KEY")
and os.getenv("COHERE_API_KEY")
):
pytest.skip(
"Required API keys not set",
allow_module_level=True,
)
try:
import cohere
import openai
import instructor
import anthropic
except ImportError: # pragma: no cover - optional dependency
pytest.skip("Required LLM packages are not installed", allow_module_level=True)
from pydantic import BaseModel, Field
class User(BaseModel):
name: str
age: int
def test_client_create():
client = instructor.from_openai(openai.OpenAI(), model="gpt-4.1-mini")
user = client.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
def test_client_messages_create():
client = instructor.from_openai(openai.OpenAI(), model="gpt-4.1-mini")
user = client.messages.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
def test_client_chat_completions_create_with_response():
client = instructor.from_openai(openai.OpenAI(), model="gpt-4.1-mini")
user, completion = client.chat.completions.create_with_completion(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
from openai.types.chat import ChatCompletion
assert isinstance(completion, ChatCompletion)
def test_client_chat_completions_create():
client = instructor.from_openai(openai.OpenAI(), model="gpt-4.1-mini")
user = client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
def test_client_chat_completions_create_partial():
client = instructor.from_openai(openai.OpenAI(), model="gpt-4.1-mini")
for user in client.chat.completions.create_partial(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
):
assert isinstance(user, User)
def test_client_chat_completions_create_iterable():
client = instructor.from_openai(openai.OpenAI(), model="gpt-4.1-mini")
users = [
user
for user in client.chat.completions.create_iterable(
response_model=User,
messages=[{"role": "user", "content": "Alice is 25, Bob is 30"}],
temperature=0,
)
]
assert len(users) == 2
@pytest.mark.asyncio
async def test_async_client_chat_completions_create():
client = openai.AsyncOpenAI()
instructor_client = instructor.from_openai(client, model="gpt-4.1-mini")
user = await instructor_client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
@pytest.mark.asyncio
async def test_async_client_chat_completions_create_partial():
client = openai.AsyncOpenAI()
instructor_client = instructor.from_openai(client, model="gpt-4.1-mini")
async for user in instructor_client.chat.completions.create_partial(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
):
assert isinstance(user, User)
@pytest.mark.asyncio
async def test_async_client_chat_completions_create_iterable():
client = openai.AsyncOpenAI()
instructor_client = instructor.from_openai(client, model="gpt-4.1-mini")
async for user in instructor_client.chat.completions.create_iterable(
response_model=User,
messages=[{"role": "user", "content": "Alice is 25, Bob is 30"}],
temperature=0,
):
assert isinstance(user, User)
@pytest.mark.asyncio
async def test_async_client_chat_completions_create_with_response():
client = openai.AsyncOpenAI()
instructor_client = instructor.from_openai(client, model="gpt-4.1-mini")
user, response = await instructor_client.chat.completions.create_with_completion(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
from openai.types.chat import ChatCompletion
assert user.name == "Jason"
assert user.age == 10
assert isinstance(response, ChatCompletion)
def test_client_from_anthropic_with_response():
client = instructor.from_anthropic(
anthropic.Anthropic(),
max_tokens=1000,
model="claude-haiku-4-5-20251001",
)
user, response = client.messages.create_with_completion(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
assert isinstance(response, anthropic.types.Message)
def test_client_anthropic_response():
client = anthropic.Anthropic()
instructor_client = instructor.from_anthropic(
client,
max_tokens=1000,
model="claude-haiku-4-5-20251001",
)
user = instructor_client.messages.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
@pytest.mark.skip(reason="Skip for now")
def test_client_anthropic_bedrock_response():
client = anthropic.AnthropicBedrock(
aws_access_key=os.getenv("AWS_ACCESS_KEY_ID"),
aws_secret_key=os.getenv("AWS_SECRET_ACCESS_KEY"),
aws_session_token=os.getenv("AWS_SESSION_TOKEN"),
aws_region=os.getenv("AWS_REGION_NAME"),
)
instructor_client = instructor.from_anthropic(
client,
max_tokens=1000,
model="anthropic.claude-3-haiku-20240307-v1:0",
)
user = instructor_client.messages.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
@pytest.mark.asyncio
async def test_async_client_anthropic_response():
client = anthropic.AsyncAnthropic()
instructor_client = instructor.from_anthropic(
client,
max_tokens=1000,
model="claude-haiku-4-5-20251001",
)
user = await instructor_client.messages.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
@pytest.mark.skip(reason="Skip for now")
@pytest.mark.asyncio
async def test_async_client_anthropic_bedrock_response():
client = anthropic.AsyncAnthropicBedrock(
aws_access_key=os.getenv("AWS_ACCESS_KEY_ID"),
aws_secret_key=os.getenv("AWS_SECRET_ACCESS_KEY"),
aws_session_token=os.getenv("AWS_SESSION_TOKEN"),
aws_region=os.getenv("AWS_REGION_NAME"),
)
instructor_client = instructor.from_anthropic(
client,
max_tokens=1000,
model="anthropic.claude-3-haiku-20240307-v1:0",
)
user = await instructor_client.messages.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
@pytest.mark.skip(reason="Skipping if Cohere API is not available")
def test_client_cohere_response():
client = cohere.ClientV2()
instructor_client = instructor.from_cohere(
client,
max_tokens=1000,
model="command-a-03-2025",
)
user = instructor_client.messages.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
@pytest.mark.skip(reason="Skipping if Cohere API is not available")
def test_client_cohere_response_with_nested_classes():
client = cohere.ClientV2()
instructor_client = instructor.from_cohere(
client,
max_tokens=1000,
model="command-a-03-2025",
)
class Person(BaseModel):
name: str = Field(description="name of the person")
country_of_origin: str = Field(description="country of origin of the person")
class Group(BaseModel):
group_name: str = Field(description="name of the group")
members: list[Person] = Field(description="list of members in the group")
task = """\
Given the following text, create a Group object for 'The Beatles' band
Text:
The Beatles were an English rock band formed in Liverpool in 1960. With a line-up comprising John Lennon, Paul McCartney, George Harrison and Ringo Starr, they are regarded as the most influential band of all time. The group were integral to the development of 1960s counterculture and popular music's recognition as an art form.
"""
group = instructor_client.messages.create(
response_model=Group,
messages=[{"role": "user", "content": task}],
temperature=0,
)
assert group.group_name == "The Beatles"
assert len(group.members) == 4
assert group.members[0].name == "John Lennon"
assert group.members[1].name == "Paul McCartney"
assert group.members[2].name == "George Harrison"
assert group.members[3].name == "Ringo Starr"
@pytest.mark.skip(reason="Skipping if Cohere API is not available")
@pytest.mark.asyncio
async def test_client_cohere_async():
client = cohere.AsyncClientV2()
instructor_client = instructor.from_cohere(
client,
max_tokens=1000,
model="command-a-03-2025",
)
class Person(BaseModel):
name: str = Field(description="name of the person")
country_of_origin: str = Field(description="country of origin of the person")
class Group(BaseModel):
group_name: str = Field(description="name of the group")
members: list[Person] = Field(description="list of members in the group")
task = """\
Given the following text, create a Group object for 'The Beatles' band
Text:
The Beatles were an English rock band formed in Liverpool in 1960. With a line-up comprising John Lennon, Paul McCartney, George Harrison and Ringo Starr, they are regarded as the most influential band of all time. The group were integral to the development of 1960s counterculture and popular music's recognition as an art form.
"""
group = await instructor_client.messages.create(
response_model=Group,
messages=[{"role": "user", "content": task}],
temperature=0,
)
assert group.group_name == "The Beatles"
assert len(group.members) == 4
assert group.members[0].name == "John Lennon"
assert group.members[1].name == "Paul McCartney"
assert group.members[2].name == "George Harrison"
assert group.members[3].name == "Ringo Starr"
@pytest.mark.skip(reason="Skip for now")
def test_client_from_mistral_with_response():
import mistralai.client as mistralaicli
client = instructor.from_mistral(
mistralaicli.MistralClient(),
max_tokens=1000,
model="mistral-large-latest",
)
user, response = client.messages.create_with_completion(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10
@pytest.mark.skip(reason="Skip for now")
def test_client_mistral_response():
import mistralai.client as mistralaicli
client = mistralaicli.MistralClient()
instructor_client = instructor.from_mistral(
client, max_tokens=1000, model="mistral-large-latest"
)
user = instructor_client.messages.create(
response_model=User,
messages=[{"role": "user", "content": "Jason is 10"}],
temperature=0,
)
assert user.name == "Jason"
assert user.age == 10