Files
AI/참고/instructor-main/instructor/providers/writer/client.py
2026-05-12 19:40:31 +09:00

64 lines
1.7 KiB
Python

# Future imports to ensure compatibility with Python 3.9
from __future__ import annotations
import instructor
from writerai import AsyncWriter, Writer
from typing import overload, Any
@overload
def from_writer(
client: Writer,
mode: instructor.Mode = instructor.Mode.WRITER_TOOLS,
**kwargs: Any,
) -> instructor.Instructor: ...
@overload
def from_writer(
client: AsyncWriter,
mode: instructor.Mode = instructor.Mode.WRITER_TOOLS,
**kwargs: Any,
) -> instructor.AsyncInstructor: ...
def from_writer(
client: Writer | AsyncWriter,
mode: instructor.Mode = instructor.Mode.WRITER_TOOLS,
**kwargs: Any,
) -> instructor.Instructor | instructor.AsyncInstructor:
valid_modes = {instructor.Mode.WRITER_TOOLS, instructor.Mode.WRITER_JSON}
if mode not in valid_modes:
from ...core.exceptions import ModeError
raise ModeError(
mode=str(mode), provider="Writer", valid_modes=[str(m) for m in valid_modes]
)
if not isinstance(client, (Writer, AsyncWriter)):
from ...core.exceptions import ClientError
raise ClientError(
f"Client must be an instance of Writer or AsyncWriter. "
f"Got: {type(client).__name__}"
)
if isinstance(client, Writer):
return instructor.Instructor(
client=client,
create=instructor.patch(create=client.chat.chat, mode=mode),
provider=instructor.Provider.WRITER,
mode=mode,
**kwargs,
)
return instructor.AsyncInstructor(
client=client,
create=instructor.patch(create=client.chat.chat, mode=mode),
provider=instructor.Provider.WRITER,
mode=mode,
**kwargs,
)