mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
09309c1239
* added embeddingsclient and redid chatclient * added to init * added client tests * fixed typing * fixed slice import * fixed pyright
83 lines
2.5 KiB
Python
83 lines
2.5 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
|
|
from collections.abc import AsyncIterable, Sequence
|
|
from typing import Any, Generic, Protocol, TypeVar, runtime_checkable
|
|
|
|
from ._types import ChatMessage, ChatResponse, ChatResponseUpdate, GeneratedEmbeddings
|
|
|
|
TInput = TypeVar("TInput", contravariant=True)
|
|
TEmbedding = TypeVar("TEmbedding")
|
|
|
|
# region: ChatClient Protocol
|
|
|
|
|
|
@runtime_checkable
|
|
class ChatClient(Protocol):
|
|
"""A protocol for a chat client that can generate responses."""
|
|
|
|
async def get_response(
|
|
self,
|
|
messages: ChatMessage | Sequence[ChatMessage],
|
|
**kwargs: Any,
|
|
) -> ChatResponse:
|
|
"""Sends input and returns the response.
|
|
|
|
Args:
|
|
messages: The sequence of input messages to send.
|
|
**kwargs: Additional options for the request, such as ai_model_id, temperature, etc.
|
|
See `ChatOptions` for more details.
|
|
|
|
Returns:
|
|
The response messages generated by the client.
|
|
|
|
Raises:
|
|
ValueError: If the input message sequence is `None`.
|
|
"""
|
|
...
|
|
|
|
async def get_streaming_response(
|
|
self,
|
|
messages: ChatMessage | Sequence[ChatMessage],
|
|
**kwargs: Any,
|
|
) -> AsyncIterable[ChatResponseUpdate]:
|
|
"""Sends input messages and streams the response.
|
|
|
|
Args:
|
|
messages: The sequence of input messages to send.
|
|
**kwargs: Additional options for the request, such as ai_model_id, temperature, etc.
|
|
See `ChatOptions` for more details.
|
|
|
|
Yields:
|
|
An async iterable of chat response updates containing the content of the response messages
|
|
generated by the client.
|
|
|
|
Raises:
|
|
ValueError: If the input message sequence is `None`.
|
|
"""
|
|
...
|
|
|
|
|
|
# region: Embedding Client
|
|
|
|
|
|
@runtime_checkable
|
|
class EmbeddingGenerator(Protocol, Generic[TInput, TEmbedding]):
|
|
"""A protocol for an embedding generator that can create embeddings from input data."""
|
|
|
|
async def generate(
|
|
self,
|
|
input_data: Sequence[TInput],
|
|
**kwargs: Any,
|
|
) -> GeneratedEmbeddings[TEmbedding]:
|
|
"""Generates an embedding for the given input data.
|
|
|
|
Args:
|
|
input_data: The input data to generate an embedding for.
|
|
**kwargs: Additional options for the request.
|
|
|
|
Returns:
|
|
The generated embedding, this acts like a list, but has additional metadata and usage details.
|
|
|
|
"""
|
|
...
|