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

67 lines
1.7 KiB
Python

from __future__ import annotations
from typing import overload, Any
import groq
import instructor
@overload
def from_groq(
client: groq.Groq,
mode: instructor.Mode = instructor.Mode.TOOLS,
**kwargs: Any,
) -> instructor.Instructor: ...
@overload
def from_groq(
client: groq.AsyncGroq,
mode: instructor.Mode = instructor.Mode.TOOLS,
**kwargs: Any,
) -> instructor.AsyncInstructor: ...
def from_groq(
client: groq.Groq | groq.AsyncGroq,
mode: instructor.Mode = instructor.Mode.TOOLS,
**kwargs: Any,
) -> instructor.Instructor | instructor.AsyncInstructor:
valid_modes = {
instructor.Mode.JSON,
instructor.Mode.TOOLS,
}
if mode not in valid_modes:
from ...core.exceptions import ModeError
raise ModeError(
mode=str(mode), provider="Groq", valid_modes=[str(m) for m in valid_modes]
)
if not isinstance(client, (groq.Groq, groq.AsyncGroq)):
from ...core.exceptions import ClientError
raise ClientError(
f"Client must be an instance of groq.Groq or groq.AsyncGroq. "
f"Got: {type(client).__name__}"
)
if isinstance(client, groq.Groq):
return instructor.Instructor(
client=client,
create=instructor.patch(create=client.chat.completions.create, mode=mode),
provider=instructor.Provider.GROQ,
mode=mode,
**kwargs,
)
else:
return instructor.AsyncInstructor(
client=client,
create=instructor.patch(create=client.chat.completions.create, mode=mode),
provider=instructor.Provider.GROQ,
mode=mode,
**kwargs,
)