gllm-inference-binary 0.5.35__cp313-cp313-manylinux_2_31_x86_64.whl → 0.5.37__cp313-cp313-manylinux_2_31_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gllm-inference-binary might be problematic. Click here for more details.
- gllm_inference/lm_invoker/anthropic_lm_invoker.pyi +1 -1
- gllm_inference/lm_invoker/google_lm_invoker.pyi +1 -1
- gllm_inference/lm_invoker/lm_invoker.pyi +3 -2
- gllm_inference/lm_invoker/openai_chat_completions_lm_invoker.pyi +1 -1
- gllm_inference/lm_invoker/openai_lm_invoker.pyi +1 -1
- gllm_inference/lm_invoker/xai_lm_invoker.pyi +1 -1
- gllm_inference/realtime_chat/__init__.pyi +3 -0
- gllm_inference/realtime_chat/google_realtime_chat.pyi +205 -0
- gllm_inference/realtime_chat/input_streamer/__init__.pyi +4 -0
- gllm_inference/realtime_chat/input_streamer/input_streamer.pyi +36 -0
- gllm_inference/realtime_chat/input_streamer/keyboard_input_streamer.pyi +27 -0
- gllm_inference/realtime_chat/input_streamer/linux_mic_input_streamer.pyi +36 -0
- gllm_inference/realtime_chat/output_streamer/__init__.pyi +4 -0
- gllm_inference/realtime_chat/output_streamer/console_output_streamer.pyi +21 -0
- gllm_inference/realtime_chat/output_streamer/linux_speaker_output_streamer.pyi +42 -0
- gllm_inference/realtime_chat/output_streamer/output_streamer.pyi +33 -0
- gllm_inference/realtime_chat/realtime_chat.pyi +28 -0
- gllm_inference/schema/__init__.pyi +3 -3
- gllm_inference/schema/activity.pyi +55 -2
- gllm_inference/schema/enums.pyi +17 -0
- gllm_inference/schema/events.pyi +89 -20
- gllm_inference.cpython-313-x86_64-linux-gnu.so +0 -0
- gllm_inference.pyi +12 -1
- {gllm_inference_binary-0.5.35.dist-info → gllm_inference_binary-0.5.37.dist-info}/METADATA +1 -1
- {gllm_inference_binary-0.5.35.dist-info → gllm_inference_binary-0.5.37.dist-info}/RECORD +27 -16
- {gllm_inference_binary-0.5.35.dist-info → gllm_inference_binary-0.5.37.dist-info}/WHEEL +0 -0
- {gllm_inference_binary-0.5.35.dist-info → gllm_inference_binary-0.5.37.dist-info}/top_level.txt +0 -0
|
@@ -5,7 +5,7 @@ from gllm_core.utils.retry import RetryConfig as RetryConfig
|
|
|
5
5
|
from gllm_inference.constants import INVOKER_PROPAGATED_MAX_RETRIES as INVOKER_PROPAGATED_MAX_RETRIES
|
|
6
6
|
from gllm_inference.lm_invoker.lm_invoker import BaseLMInvoker as BaseLMInvoker
|
|
7
7
|
from gllm_inference.lm_invoker.schema.anthropic import InputType as InputType, Key as Key, OutputType as OutputType
|
|
8
|
-
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType, BatchStatus as BatchStatus,
|
|
8
|
+
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType, BatchStatus as BatchStatus, LMInput as LMInput, LMOutput as LMOutput, Message as Message, ModelId as ModelId, ModelProvider as ModelProvider, Reasoning as Reasoning, ResponseSchema as ResponseSchema, ThinkingEvent as ThinkingEvent, TokenUsage as TokenUsage, ToolCall as ToolCall, ToolResult as ToolResult
|
|
9
9
|
from langchain_core.tools import Tool as LangChainTool
|
|
10
10
|
from typing import Any
|
|
11
11
|
|
|
@@ -7,7 +7,7 @@ from gllm_inference.exceptions import BaseInvokerError as BaseInvokerError, conv
|
|
|
7
7
|
from gllm_inference.exceptions.provider_error_map import GOOGLE_ERROR_MAPPING as GOOGLE_ERROR_MAPPING
|
|
8
8
|
from gllm_inference.lm_invoker.lm_invoker import BaseLMInvoker as BaseLMInvoker
|
|
9
9
|
from gllm_inference.lm_invoker.schema.google import InputType as InputType, Key as Key
|
|
10
|
-
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType,
|
|
10
|
+
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType, LMOutput as LMOutput, Message as Message, MessageRole as MessageRole, ModelId as ModelId, ModelProvider as ModelProvider, Reasoning as Reasoning, ResponseSchema as ResponseSchema, ThinkingEvent as ThinkingEvent, TokenUsage as TokenUsage, ToolCall as ToolCall, ToolResult as ToolResult
|
|
11
11
|
from langchain_core.tools import Tool as LangChainTool
|
|
12
12
|
from typing import Any
|
|
13
13
|
|
|
@@ -2,12 +2,12 @@ import abc
|
|
|
2
2
|
from _typeshed import Incomplete
|
|
3
3
|
from abc import ABC
|
|
4
4
|
from gllm_core.event import EventEmitter as EventEmitter
|
|
5
|
-
from gllm_core.schema
|
|
5
|
+
from gllm_core.schema import Event as Event, Tool
|
|
6
6
|
from gllm_core.utils import RetryConfig
|
|
7
7
|
from gllm_inference.constants import DOCUMENT_MIME_TYPES as DOCUMENT_MIME_TYPES, INVOKER_DEFAULT_TIMEOUT as INVOKER_DEFAULT_TIMEOUT
|
|
8
8
|
from gllm_inference.exceptions import BaseInvokerError as BaseInvokerError, convert_to_base_invoker_error as convert_to_base_invoker_error
|
|
9
9
|
from gllm_inference.lm_invoker.batch import BatchOperations as BatchOperations
|
|
10
|
-
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType, BatchStatus as BatchStatus,
|
|
10
|
+
from gllm_inference.schema import Activity as Activity, Attachment as Attachment, AttachmentType as AttachmentType, BatchStatus as BatchStatus, LMInput as LMInput, LMOutput as LMOutput, Message as Message, MessageContent as MessageContent, MessageRole as MessageRole, ModelId as ModelId, Reasoning as Reasoning, ResponseSchema as ResponseSchema, ToolCall as ToolCall, ToolResult as ToolResult
|
|
11
11
|
from langchain_core.tools import Tool as LangChainTool
|
|
12
12
|
from typing import Any
|
|
13
13
|
|
|
@@ -23,6 +23,7 @@ class Key:
|
|
|
23
23
|
DEFAULT: str
|
|
24
24
|
DESCRIPTION: str
|
|
25
25
|
FUNC: str
|
|
26
|
+
ID: str
|
|
26
27
|
NAME: str
|
|
27
28
|
PROPERTIES: str
|
|
28
29
|
REQUIRED: str
|
|
@@ -5,7 +5,7 @@ from gllm_core.utils.retry import RetryConfig as RetryConfig
|
|
|
5
5
|
from gllm_inference.constants import INVOKER_PROPAGATED_MAX_RETRIES as INVOKER_PROPAGATED_MAX_RETRIES, OPENAI_DEFAULT_URL as OPENAI_DEFAULT_URL
|
|
6
6
|
from gllm_inference.lm_invoker.lm_invoker import BaseLMInvoker as BaseLMInvoker
|
|
7
7
|
from gllm_inference.lm_invoker.schema.openai_chat_completions import InputType as InputType, Key as Key, ReasoningEffort as ReasoningEffort
|
|
8
|
-
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType,
|
|
8
|
+
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType, LMOutput as LMOutput, Message as Message, MessageRole as MessageRole, ModelId as ModelId, ModelProvider as ModelProvider, Reasoning as Reasoning, ResponseSchema as ResponseSchema, ThinkingEvent as ThinkingEvent, TokenUsage as TokenUsage, ToolCall as ToolCall, ToolResult as ToolResult
|
|
9
9
|
from gllm_inference.utils import validate_string_enum as validate_string_enum
|
|
10
10
|
from langchain_core.tools import Tool as LangChainTool
|
|
11
11
|
from typing import Any
|
|
@@ -5,7 +5,7 @@ from gllm_core.utils.retry import RetryConfig as RetryConfig
|
|
|
5
5
|
from gllm_inference.constants import INVOKER_PROPAGATED_MAX_RETRIES as INVOKER_PROPAGATED_MAX_RETRIES, OPENAI_DEFAULT_URL as OPENAI_DEFAULT_URL
|
|
6
6
|
from gllm_inference.lm_invoker.lm_invoker import BaseLMInvoker as BaseLMInvoker
|
|
7
7
|
from gllm_inference.lm_invoker.schema.openai import InputType as InputType, Key as Key, OutputType as OutputType, ReasoningEffort as ReasoningEffort, ReasoningSummary as ReasoningSummary
|
|
8
|
-
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType,
|
|
8
|
+
from gllm_inference.schema import ActivityEvent as ActivityEvent, Attachment as Attachment, AttachmentType as AttachmentType, CodeEvent as CodeEvent, CodeExecResult as CodeExecResult, LMOutput as LMOutput, MCPCall as MCPCall, MCPCallActivity as MCPCallActivity, MCPListToolsActivity as MCPListToolsActivity, MCPServer as MCPServer, Message as Message, MessageRole as MessageRole, ModelId as ModelId, ModelProvider as ModelProvider, Reasoning as Reasoning, ResponseSchema as ResponseSchema, ThinkingEvent as ThinkingEvent, TokenUsage as TokenUsage, ToolCall as ToolCall, ToolResult as ToolResult, WebSearchActivity as WebSearchActivity
|
|
9
9
|
from gllm_inference.utils import validate_string_enum as validate_string_enum
|
|
10
10
|
from langchain_core.tools import Tool as LangChainTool
|
|
11
11
|
from typing import Any
|
|
@@ -7,7 +7,7 @@ from gllm_inference.exceptions import BaseInvokerError as BaseInvokerError, Invo
|
|
|
7
7
|
from gllm_inference.exceptions.provider_error_map import GRPC_STATUS_CODE_MAPPING as GRPC_STATUS_CODE_MAPPING
|
|
8
8
|
from gllm_inference.lm_invoker.lm_invoker import BaseLMInvoker as BaseLMInvoker
|
|
9
9
|
from gllm_inference.lm_invoker.schema.xai import Key as Key, ReasoningEffort as ReasoningEffort
|
|
10
|
-
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType,
|
|
10
|
+
from gllm_inference.schema import Attachment as Attachment, AttachmentType as AttachmentType, LMOutput as LMOutput, Message as Message, MessageRole as MessageRole, ModelId as ModelId, ModelProvider as ModelProvider, Reasoning as Reasoning, ResponseSchema as ResponseSchema, ThinkingEvent as ThinkingEvent, TokenUsage as TokenUsage, ToolCall as ToolCall, ToolResult as ToolResult
|
|
11
11
|
from gllm_inference.utils.validation import validate_string_enum as validate_string_enum
|
|
12
12
|
from langchain_core.tools import Tool as LangChainTool
|
|
13
13
|
from typing import Any
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import logging
|
|
3
|
+
from _typeshed import Incomplete
|
|
4
|
+
from gllm_inference.constants import GOOGLE_SCOPES as GOOGLE_SCOPES
|
|
5
|
+
from gllm_inference.realtime_chat.input_streamer import KeyboardInputStreamer as KeyboardInputStreamer
|
|
6
|
+
from gllm_inference.realtime_chat.input_streamer.input_streamer import BaseInputStreamer as BaseInputStreamer
|
|
7
|
+
from gllm_inference.realtime_chat.output_streamer import ConsoleOutputStreamer as ConsoleOutputStreamer
|
|
8
|
+
from gllm_inference.realtime_chat.output_streamer.output_streamer import BaseOutputStreamer as BaseOutputStreamer
|
|
9
|
+
from gllm_inference.realtime_chat.realtime_chat import BaseRealtimeChat as BaseRealtimeChat
|
|
10
|
+
from pydantic import BaseModel
|
|
11
|
+
from typing import Literal
|
|
12
|
+
|
|
13
|
+
DEFAULT_POST_OUTPUT_AUDIO_DELAY: float
|
|
14
|
+
LIVE_CONNECT_CONFIG: Incomplete
|
|
15
|
+
|
|
16
|
+
class GoogleIOStreamerState(BaseModel):
|
|
17
|
+
'''[BETA] Defines the state of the GoogleIOStreamer with thread-safe properties.
|
|
18
|
+
|
|
19
|
+
Attributes:
|
|
20
|
+
is_streaming_output (bool): Whether the output is streaming.
|
|
21
|
+
console_mode (Literal["input", "user", "assistant"]): The current console mode.
|
|
22
|
+
terminated (bool): Whether the conversation is terminated.
|
|
23
|
+
'''
|
|
24
|
+
is_streaming_output: bool
|
|
25
|
+
console_mode: Literal['input', 'user', 'assistant']
|
|
26
|
+
terminated: bool
|
|
27
|
+
async def set_streaming_output(self, value: bool) -> None:
|
|
28
|
+
"""Thread-safe setter for is_streaming_output.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
value (bool): The value to set for is_streaming_output.
|
|
32
|
+
"""
|
|
33
|
+
async def get_streaming_output(self) -> bool:
|
|
34
|
+
"""Thread-safe getter for is_streaming_output.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
bool: The value of is_streaming_output.
|
|
38
|
+
"""
|
|
39
|
+
async def set_console_mode(self, value: Literal['input', 'user', 'assistant']) -> None:
|
|
40
|
+
'''Thread-safe setter for console_mode.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
value (Literal["input", "user", "assistant"]): The value to set for console_mode.
|
|
44
|
+
'''
|
|
45
|
+
async def get_console_mode(self) -> Literal['input', 'user', 'assistant']:
|
|
46
|
+
'''Thread-safe getter for console_mode.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Literal["input", "user", "assistant"]: The value of console_mode.
|
|
50
|
+
'''
|
|
51
|
+
async def set_terminated(self, value: bool) -> None:
|
|
52
|
+
"""Thread-safe setter for terminated.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
value (bool): The value to set for terminated.
|
|
56
|
+
"""
|
|
57
|
+
async def get_terminated(self) -> bool:
|
|
58
|
+
"""Thread-safe getter for terminated.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
bool: The value of terminated.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
class GoogleIOStreamer:
|
|
65
|
+
"""[BETA] Defines the GoogleIOStreamer.
|
|
66
|
+
|
|
67
|
+
This class manages the realtime conversation lifecycle.
|
|
68
|
+
It handles the IO operations between the model and the input/output streamers.
|
|
69
|
+
|
|
70
|
+
Attributes:
|
|
71
|
+
session (AsyncSession): The session of the GoogleIOStreamer.
|
|
72
|
+
task_group (asyncio.TaskGroup): The task group of the GoogleIOStreamer.
|
|
73
|
+
input_queue (asyncio.Queue): The input queue of the GoogleIOStreamer.
|
|
74
|
+
output_queue (asyncio.Queue): The output queue of the GoogleIOStreamer.
|
|
75
|
+
input_streamers (list[BaseInputStreamer]): The input streamers of the GoogleIOStreamer.
|
|
76
|
+
output_streamers (list[BaseOutputStreamer]): The output streamers of the GoogleIOStreamer.
|
|
77
|
+
post_output_audio_delay (float): The delay in seconds to post the output audio.
|
|
78
|
+
"""
|
|
79
|
+
session: AsyncSession
|
|
80
|
+
task_group: Incomplete
|
|
81
|
+
input_queue: Incomplete
|
|
82
|
+
output_queue: Incomplete
|
|
83
|
+
state: Incomplete
|
|
84
|
+
input_streamers: Incomplete
|
|
85
|
+
output_streamers: Incomplete
|
|
86
|
+
post_output_audio_delay: Incomplete
|
|
87
|
+
def __init__(self, session: AsyncSession, task_group: asyncio.TaskGroup, input_queue: asyncio.Queue, output_queue: asyncio.Queue, input_streamers: list[BaseInputStreamer], output_streamers: list[BaseOutputStreamer], post_output_audio_delay: float, logger: logging.Logger) -> None:
|
|
88
|
+
"""Initializes a new instance of the GoogleIOStreamer class.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
session (AsyncSession): The session of the GoogleIOStreamer.
|
|
92
|
+
task_group (asyncio.TaskGroup): The task group of the GoogleIOStreamer.
|
|
93
|
+
input_queue (asyncio.Queue): The input queue of the GoogleIOStreamer.
|
|
94
|
+
output_queue (asyncio.Queue): The output queue of the GoogleIOStreamer.
|
|
95
|
+
input_streamers (list[BaseInputStreamer]): The input streamers of the GoogleIOStreamer.
|
|
96
|
+
output_streamers (list[BaseOutputStreamer]): The output streamers of the GoogleIOStreamer.
|
|
97
|
+
post_output_audio_delay (float): The delay in seconds to post the output audio.
|
|
98
|
+
logger (logging.Logger): The logger of the GoogleIOStreamer.
|
|
99
|
+
"""
|
|
100
|
+
async def start(self) -> None:
|
|
101
|
+
"""Processes the realtime conversation.
|
|
102
|
+
|
|
103
|
+
This method is used to start the realtime conversation.
|
|
104
|
+
It initializes the input and output streamers, creates the necessary tasks, and starts the conversation.
|
|
105
|
+
When the conversation is terminated, it cleans up the input and output streamers.
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
class GoogleRealtimeChat(BaseRealtimeChat):
|
|
109
|
+
'''[BETA] A realtime chat module to interact with Gemini Live models.
|
|
110
|
+
|
|
111
|
+
Warning:
|
|
112
|
+
The \'GoogleRealtimeChat\' class is currently in beta and may be subject to changes in the future.
|
|
113
|
+
It is intended only for quick prototyping in local environments.
|
|
114
|
+
Please avoid using it in production environments.
|
|
115
|
+
|
|
116
|
+
Attributes:
|
|
117
|
+
model_name (str): The name of the language model.
|
|
118
|
+
client_params (dict[str, Any]): The Google client instance init parameters.
|
|
119
|
+
|
|
120
|
+
Basic usage:
|
|
121
|
+
The `GoogleRealtimeChat` can be used as started as follows:
|
|
122
|
+
```python
|
|
123
|
+
realtime_chat = GoogleRealtimeChat(model_name="gemini-live-2.5-flash-preview")
|
|
124
|
+
await realtime_chat.invoke()
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Custom IO streamers:
|
|
128
|
+
The `GoogleRealtimeChat` can be used with custom IO streamers.
|
|
129
|
+
```python
|
|
130
|
+
input_streamers = [KeyboardInputStreamer(), LinuxMicInputStreamer()]
|
|
131
|
+
output_streamers = [ConsoleOutputStreamer(), LinuxSpeakerOutputStreamer()]
|
|
132
|
+
realtime_chat = GoogleRealtimeChat(model_name="gemini-live-2.5-flash-preview")
|
|
133
|
+
await realtime_chat.start(input_streamers=input_streamers, output_streamers=output_streamers)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
In the above example, we added a capability to use a Linux system microphone and speaker,
|
|
137
|
+
allowing realtime audio input and output to the model.
|
|
138
|
+
|
|
139
|
+
Authentication:
|
|
140
|
+
The `GoogleRealtimeChat` can use either Google Gen AI or Google Vertex AI.
|
|
141
|
+
|
|
142
|
+
Google Gen AI is recommended for quick prototyping and development.
|
|
143
|
+
It requires a Gemini API key for authentication.
|
|
144
|
+
|
|
145
|
+
Usage example:
|
|
146
|
+
```python
|
|
147
|
+
realtime_chat = GoogleRealtimeChat(
|
|
148
|
+
model_name="gemini-live-2.5-flash-preview",
|
|
149
|
+
api_key="your_api_key"
|
|
150
|
+
)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Google Vertex AI is recommended to build production-ready applications.
|
|
154
|
+
It requires a service account JSON file for authentication.
|
|
155
|
+
|
|
156
|
+
Usage example:
|
|
157
|
+
```python
|
|
158
|
+
realtime_chat = GoogleRealtimeChat(
|
|
159
|
+
model_name="gemini-live-2.5-flash-preview",
|
|
160
|
+
credentials_path="path/to/service_account.json"
|
|
161
|
+
)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
If neither `api_key` nor `credentials_path` is provided, Google Gen AI will be used by default.
|
|
165
|
+
The `GOOGLE_API_KEY` environment variable will be used for authentication.
|
|
166
|
+
'''
|
|
167
|
+
model_name: Incomplete
|
|
168
|
+
client_params: Incomplete
|
|
169
|
+
def __init__(self, model_name: str, api_key: str | None = None, credentials_path: str | None = None, project_id: str | None = None, location: str = 'us-central1') -> None:
|
|
170
|
+
'''Initializes a new instance of the GoogleRealtimeChat class.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
model_name (str): The name of the model to use.
|
|
174
|
+
api_key (str | None, optional): Required for Google Gen AI authentication. Cannot be used together
|
|
175
|
+
with `credentials_path`. Defaults to None.
|
|
176
|
+
credentials_path (str | None, optional): Required for Google Vertex AI authentication. Path to the service
|
|
177
|
+
account credentials JSON file. Cannot be used together with `api_key`. Defaults to None.
|
|
178
|
+
project_id (str | None, optional): The Google Cloud project ID for Vertex AI. Only used when authenticating
|
|
179
|
+
with `credentials_path`. Defaults to None, in which case it will be loaded from the credentials file.
|
|
180
|
+
location (str, optional): The location of the Google Cloud project for Vertex AI. Only used when
|
|
181
|
+
authenticating with `credentials_path`. Defaults to "us-central1".
|
|
182
|
+
|
|
183
|
+
Note:
|
|
184
|
+
If neither `api_key` nor `credentials_path` is provided, Google Gen AI will be used by default.
|
|
185
|
+
The `GOOGLE_API_KEY` environment variable will be used for authentication.
|
|
186
|
+
'''
|
|
187
|
+
async def start(self, input_streamers: list[BaseInputStreamer] | None = None, output_streamers: list[BaseOutputStreamer] | None = None, post_output_audio_delay: float = ...) -> None:
|
|
188
|
+
"""Starts the realtime conversation using the provided input and output streamers.
|
|
189
|
+
|
|
190
|
+
This method is used to start the realtime conversation using a `GoogleIOStreamer`.
|
|
191
|
+
The streamers are responsible for handling the input and output of the conversation.
|
|
192
|
+
|
|
193
|
+
Args:
|
|
194
|
+
input_streamers (list[BaseInputStreamer] | None, optional): The input streamers to use.
|
|
195
|
+
Defaults to None, in which case a `KeyboardInputStreamer` will be used.
|
|
196
|
+
output_streamers (list[BaseOutputStreamer] | None, optional): The output streamers to use.
|
|
197
|
+
Defaults to None, in which case a `ConsoleOutputStreamer` will be used.
|
|
198
|
+
post_output_audio_delay (float, optional): The delay in seconds to post the output audio.
|
|
199
|
+
Defaults to 0.5 seconds.
|
|
200
|
+
|
|
201
|
+
Raises:
|
|
202
|
+
ValueError: If the `input_streamers` or `output_streamers` is an empty list.
|
|
203
|
+
ValueError: If the `post_output_audio_delay` is not greater than 0.
|
|
204
|
+
Exception: If the conversation fails to process.
|
|
205
|
+
"""
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
from gllm_inference.realtime_chat.input_streamer.keyboard_input_streamer import KeyboardInputStreamer as KeyboardInputStreamer
|
|
2
|
+
from gllm_inference.realtime_chat.input_streamer.linux_mic_input_streamer import LinuxMicInputStreamer as LinuxMicInputStreamer
|
|
3
|
+
|
|
4
|
+
__all__ = ['KeyboardInputStreamer', 'LinuxMicInputStreamer']
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
import asyncio
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from pydantic import BaseModel as BaseModel
|
|
5
|
+
|
|
6
|
+
class BaseInputStreamer(ABC, metaclass=abc.ABCMeta):
|
|
7
|
+
"""[BETA] A base class for input streamers.
|
|
8
|
+
|
|
9
|
+
Attributes:
|
|
10
|
+
state (BaseModel | None): The state of the input streamer.
|
|
11
|
+
input_queue (asyncio.Queue | None): The queue to put the input events.
|
|
12
|
+
"""
|
|
13
|
+
state: BaseModel | None
|
|
14
|
+
input_queue: asyncio.Queue | None
|
|
15
|
+
async def initialize(self, state: BaseModel, input_queue: asyncio.Queue) -> None:
|
|
16
|
+
"""Initializes the input streamer.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
input_queue (asyncio.Queue): The queue to put the input events.
|
|
20
|
+
state (BaseModel): The state of the input streamer.
|
|
21
|
+
"""
|
|
22
|
+
@abstractmethod
|
|
23
|
+
async def stream_input(self) -> None:
|
|
24
|
+
"""Streams the input from a certain source.
|
|
25
|
+
|
|
26
|
+
This method must be implemented by subclasses to define the logic for streaming the input.
|
|
27
|
+
|
|
28
|
+
Raises:
|
|
29
|
+
NotImplementedError: If the method is not implemented in a subclass.
|
|
30
|
+
"""
|
|
31
|
+
async def close(self) -> None:
|
|
32
|
+
"""Closes the input streamer.
|
|
33
|
+
|
|
34
|
+
This method is used to close the input streamer.
|
|
35
|
+
It is used to clean up the input streamer.
|
|
36
|
+
"""
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from _typeshed import Incomplete
|
|
3
|
+
from gllm_inference.realtime_chat.input_streamer.input_streamer import BaseInputStreamer as BaseInputStreamer
|
|
4
|
+
|
|
5
|
+
DEFAULT_QUIT_CMD: str
|
|
6
|
+
|
|
7
|
+
class KeyboardInputStreamer(BaseInputStreamer):
|
|
8
|
+
"""[BETA] A keyboard input streamer that reads the input text from the keyboard.
|
|
9
|
+
|
|
10
|
+
Attributes:
|
|
11
|
+
state (BaseModel): The state of the input streamer.
|
|
12
|
+
input_queue (asyncio.Queue): The queue to put the input events.
|
|
13
|
+
quit_cmd (str): The command to quit the conversation.
|
|
14
|
+
"""
|
|
15
|
+
record_process: asyncio.subprocess.Process | None
|
|
16
|
+
quit_cmd: Incomplete
|
|
17
|
+
def __init__(self, quit_cmd: str = ...) -> None:
|
|
18
|
+
"""Initializes the KeyboardInputStreamer.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
quit_cmd (str, optional): The command to quit the conversation. Defaults to DEFAULT_QUIT_CMD.
|
|
22
|
+
"""
|
|
23
|
+
async def stream_input(self) -> None:
|
|
24
|
+
"""Streams the input from the keyboard.
|
|
25
|
+
|
|
26
|
+
This method is used to stream the input text from the keyboard to the input queue.
|
|
27
|
+
"""
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from _typeshed import Incomplete
|
|
3
|
+
from gllm_inference.realtime_chat.input_streamer.input_streamer import BaseInputStreamer as BaseInputStreamer
|
|
4
|
+
|
|
5
|
+
SEND_SAMPLE_RATE: int
|
|
6
|
+
CHANNELS: int
|
|
7
|
+
RECORD_CMD: Incomplete
|
|
8
|
+
CHUNK_DURATION: float
|
|
9
|
+
CHUNK_SIZE: Incomplete
|
|
10
|
+
|
|
11
|
+
class LinuxMicInputStreamer(BaseInputStreamer):
|
|
12
|
+
"""[BETA] A Linux microphone input streamer that reads the input audio from the microphone.
|
|
13
|
+
|
|
14
|
+
Attributes:
|
|
15
|
+
state (BaseModel): The state of the input streamer.
|
|
16
|
+
input_queue (asyncio.Queue): The queue to put the input events.
|
|
17
|
+
record_process (asyncio.subprocess.Process | None): The process to record the input audio.
|
|
18
|
+
"""
|
|
19
|
+
record_process: asyncio.subprocess.Process | None
|
|
20
|
+
def __init__(self) -> None:
|
|
21
|
+
"""Initializes the LinuxMicInputStreamer.
|
|
22
|
+
|
|
23
|
+
Raises:
|
|
24
|
+
OSError: If the current system is not Linux.
|
|
25
|
+
"""
|
|
26
|
+
async def stream_input(self) -> None:
|
|
27
|
+
"""Streams the input audio from the Linux system microphone.
|
|
28
|
+
|
|
29
|
+
This method is used to stream the recorded input audio from the Linux system microphone to the input queue.
|
|
30
|
+
"""
|
|
31
|
+
async def close(self) -> None:
|
|
32
|
+
"""Closes the LinuxMicInputStreamer.
|
|
33
|
+
|
|
34
|
+
This method is used to close the LinuxMicInputStreamer.
|
|
35
|
+
It is used to clean up the recording process.
|
|
36
|
+
"""
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
from gllm_inference.realtime_chat.output_streamer.console_output_streamer import ConsoleOutputStreamer as ConsoleOutputStreamer
|
|
2
|
+
from gllm_inference.realtime_chat.output_streamer.linux_speaker_output_streamer import LinuxSpeakerOutputStreamer as LinuxSpeakerOutputStreamer
|
|
3
|
+
|
|
4
|
+
__all__ = ['ConsoleOutputStreamer', 'LinuxSpeakerOutputStreamer']
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from gllm_inference.realtime_chat.output_streamer.output_streamer import BaseOutputStreamer as BaseOutputStreamer
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
USER_HEADER: str
|
|
5
|
+
ASSISTANT_HEADER: str
|
|
6
|
+
FOOTER: str
|
|
7
|
+
|
|
8
|
+
class ConsoleOutputStreamer(BaseOutputStreamer):
|
|
9
|
+
"""[BETA] A console output streamer that prints the output to the console.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
state (BaseModel): The state of the output streamer.
|
|
13
|
+
"""
|
|
14
|
+
async def handle(self, data: dict[str, Any]) -> None:
|
|
15
|
+
"""Handles the output events.
|
|
16
|
+
|
|
17
|
+
This method is used to handle the text output events and print them to the console.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
data (dict[str, Any]): The output events.
|
|
21
|
+
"""
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from _typeshed import Incomplete
|
|
3
|
+
from gllm_inference.realtime_chat.output_streamer.output_streamer import BaseOutputStreamer as BaseOutputStreamer
|
|
4
|
+
from pydantic import BaseModel as BaseModel
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
PLAY_AUDIO_SAMPLE_RATE: int
|
|
8
|
+
CHANNELS: int
|
|
9
|
+
PLAY_CMD: Incomplete
|
|
10
|
+
OUTPUT_AUDIO_DELAY: float
|
|
11
|
+
|
|
12
|
+
class LinuxSpeakerOutputStreamer(BaseOutputStreamer):
|
|
13
|
+
"""[BETA] A Linux speaker output streamer that plays the output audio through the speakers.
|
|
14
|
+
|
|
15
|
+
Attributes:
|
|
16
|
+
state (BaseModel): The state of the output streamer.
|
|
17
|
+
play_process (asyncio.subprocess.Process | None): The process to play the output audio.
|
|
18
|
+
"""
|
|
19
|
+
play_process: asyncio.subprocess.Process | None
|
|
20
|
+
async def initialize(self, state: BaseModel) -> None:
|
|
21
|
+
"""Initializes the LinuxSpeakerOutputStreamer.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
state (BaseModel): The state of the output streamer.
|
|
25
|
+
|
|
26
|
+
Raises:
|
|
27
|
+
OSError: If the current system is not Linux.
|
|
28
|
+
"""
|
|
29
|
+
async def handle(self, data: dict[str, Any]) -> None:
|
|
30
|
+
"""Handles the output events.
|
|
31
|
+
|
|
32
|
+
This method is used to handle the audio output events and play them through the Linux system speakers.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
data (dict[str, Any]): The output events.
|
|
36
|
+
"""
|
|
37
|
+
async def close(self) -> None:
|
|
38
|
+
"""Closes the LinuxSpeakerOutputStreamer.
|
|
39
|
+
|
|
40
|
+
This method is used to close the LinuxSpeakerOutputStreamer.
|
|
41
|
+
It is used to clean up playing process.
|
|
42
|
+
"""
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from abc import ABC, abstractmethod
|
|
3
|
+
from pydantic import BaseModel as BaseModel
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
class BaseOutputStreamer(ABC, metaclass=abc.ABCMeta):
|
|
7
|
+
"""[BETA] A base class for output streamers.
|
|
8
|
+
|
|
9
|
+
Attributes:
|
|
10
|
+
state (BaseModel | None): The state of the output streamer.
|
|
11
|
+
"""
|
|
12
|
+
state: BaseModel | None
|
|
13
|
+
async def initialize(self, state: BaseModel) -> None:
|
|
14
|
+
"""Initializes the output streamer.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
state (BaseModel): The state of the output streamer.
|
|
18
|
+
"""
|
|
19
|
+
@abstractmethod
|
|
20
|
+
async def handle(self, data: dict[str, Any]) -> None:
|
|
21
|
+
"""Handles output events streamed from the model.
|
|
22
|
+
|
|
23
|
+
This method must be implemented by subclasses to define the logic for handling the output events.
|
|
24
|
+
|
|
25
|
+
Raises:
|
|
26
|
+
NotImplementedError: If the method is not implemented in a subclass.
|
|
27
|
+
"""
|
|
28
|
+
async def close(self) -> None:
|
|
29
|
+
"""Closes the output streamer.
|
|
30
|
+
|
|
31
|
+
This method is used to close the output streamer.
|
|
32
|
+
It is used to clean up the output streamer.
|
|
33
|
+
"""
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from abc import ABC, abstractmethod
|
|
3
|
+
from gllm_inference.realtime_chat.input_streamer.input_streamer import BaseInputStreamer as BaseInputStreamer
|
|
4
|
+
from gllm_inference.realtime_chat.output_streamer.output_streamer import BaseOutputStreamer as BaseOutputStreamer
|
|
5
|
+
|
|
6
|
+
class BaseRealtimeChat(ABC, metaclass=abc.ABCMeta):
|
|
7
|
+
"""[BETA] A base class for realtime chat modules.
|
|
8
|
+
|
|
9
|
+
The `BaseRealtimeChat` class provides a framework for processing real-time conversations.
|
|
10
|
+
"""
|
|
11
|
+
def __init__(self) -> None:
|
|
12
|
+
"""Initializes a new instance of the BaseRealtimeChat class."""
|
|
13
|
+
@abstractmethod
|
|
14
|
+
async def start(self, input_streamers: list[BaseInputStreamer] | None = None, output_streamers: list[BaseOutputStreamer] | None = None) -> None:
|
|
15
|
+
"""Starts the real-time conversation using the provided input and output streamers.
|
|
16
|
+
|
|
17
|
+
This abstract method must be implemented by subclasses to define the logic
|
|
18
|
+
for starting the real-time conversation.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
input_streamers (list[BaseInputStreamer] | None, optional): The input streamers to use.
|
|
22
|
+
Defaults to None.
|
|
23
|
+
output_streamers (list[BaseOutputStreamer] | None, optional): The output streamers to use.
|
|
24
|
+
Defaults to None.
|
|
25
|
+
|
|
26
|
+
Raises:
|
|
27
|
+
NotImplementedError: If the method is not implemented in a subclass.
|
|
28
|
+
"""
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
from gllm_inference.schema.activity import Activity as Activity
|
|
1
|
+
from gllm_inference.schema.activity import Activity as Activity, MCPCallActivity as MCPCallActivity, MCPListToolsActivity as MCPListToolsActivity, WebSearchActivity as WebSearchActivity
|
|
2
2
|
from gllm_inference.schema.attachment import Attachment as Attachment
|
|
3
3
|
from gllm_inference.schema.code_exec_result import CodeExecResult as CodeExecResult
|
|
4
4
|
from gllm_inference.schema.config import TruncationConfig as TruncationConfig
|
|
5
5
|
from gllm_inference.schema.enums import AttachmentType as AttachmentType, BatchStatus as BatchStatus, EmitDataType as EmitDataType, MessageRole as MessageRole, TruncateSide as TruncateSide
|
|
6
|
-
from gllm_inference.schema.events import ActivityEvent as ActivityEvent, CodeEvent as CodeEvent,
|
|
6
|
+
from gllm_inference.schema.events import ActivityEvent as ActivityEvent, CodeEvent as CodeEvent, ThinkingEvent as ThinkingEvent
|
|
7
7
|
from gllm_inference.schema.lm_input import LMInput as LMInput
|
|
8
8
|
from gllm_inference.schema.lm_output import LMOutput as LMOutput
|
|
9
9
|
from gllm_inference.schema.mcp import MCPCall as MCPCall, MCPServer as MCPServer
|
|
@@ -15,4 +15,4 @@ from gllm_inference.schema.tool_call import ToolCall as ToolCall
|
|
|
15
15
|
from gllm_inference.schema.tool_result import ToolResult as ToolResult
|
|
16
16
|
from gllm_inference.schema.type_alias import EMContent as EMContent, MessageContent as MessageContent, ResponseSchema as ResponseSchema, Vector as Vector
|
|
17
17
|
|
|
18
|
-
__all__ = ['Activity', 'ActivityEvent', 'Attachment', 'AttachmentType', 'BatchStatus', 'CodeEvent', 'CodeExecResult', 'EMContent', 'EmitDataType', '
|
|
18
|
+
__all__ = ['Activity', 'ActivityEvent', 'Attachment', 'AttachmentType', 'BatchStatus', 'CodeEvent', 'CodeExecResult', 'EMContent', 'EmitDataType', 'InputTokenDetails', 'LMInput', 'LMOutput', 'MCPCall', 'MCPCallActivity', 'MCPListToolsActivity', 'MCPServer', 'Message', 'MessageContent', 'MessageRole', 'ModelId', 'ModelProvider', 'OutputTokenDetails', 'Reasoning', 'ThinkingEvent', 'ResponseSchema', 'TokenUsage', 'ToolCall', 'ToolResult', 'TruncateSide', 'TruncationConfig', 'Vector', 'WebSearchActivity']
|
|
@@ -1,9 +1,62 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from gllm_inference.schema.enums import ActivityType as ActivityType, WebSearchKey as WebSearchKey
|
|
1
3
|
from pydantic import BaseModel
|
|
4
|
+
from typing import Literal
|
|
5
|
+
|
|
6
|
+
WEB_SEARCH_VISIBLE_FIELDS: Incomplete
|
|
2
7
|
|
|
3
8
|
class Activity(BaseModel):
|
|
4
9
|
"""Base schema for any activity.
|
|
5
10
|
|
|
6
11
|
Attributes:
|
|
7
|
-
|
|
12
|
+
type (str): The type of activity being performed.
|
|
13
|
+
"""
|
|
14
|
+
type: str
|
|
15
|
+
|
|
16
|
+
class MCPListToolsActivity(Activity):
|
|
17
|
+
"""Schema for listing tools in MCP.
|
|
18
|
+
|
|
19
|
+
Attributes:
|
|
20
|
+
server_name (str): The name of the MCP server.
|
|
21
|
+
tools (list[dict[str, str]] | None): The tools in the MCP server.
|
|
22
|
+
type (str): The type of activity being performed.
|
|
23
|
+
"""
|
|
24
|
+
type: Literal[ActivityType.MCP_LIST_TOOLS]
|
|
25
|
+
server_name: str
|
|
26
|
+
tools: list[dict[str, str]] | None
|
|
27
|
+
|
|
28
|
+
class MCPCallActivity(Activity):
|
|
29
|
+
"""Schema for MCP tool call.
|
|
30
|
+
|
|
31
|
+
Attributes:
|
|
32
|
+
server_name (str): The name of the MCP server.
|
|
33
|
+
tool_name (str): The name of the tool.
|
|
34
|
+
args (dict[str, str]): The arguments of the tool.
|
|
35
|
+
type (str): The type of activity being performed.
|
|
8
36
|
"""
|
|
9
|
-
|
|
37
|
+
type: Literal[ActivityType.MCP_CALL]
|
|
38
|
+
server_name: str
|
|
39
|
+
tool_name: str
|
|
40
|
+
args: dict[str, str]
|
|
41
|
+
|
|
42
|
+
class WebSearchActivity(Activity):
|
|
43
|
+
"""Schema for web search tool call.
|
|
44
|
+
|
|
45
|
+
Attributes:
|
|
46
|
+
type (str): The type of activity being performed.
|
|
47
|
+
pattern (str): The pattern of the web search.
|
|
48
|
+
url (str): The URL of the page.
|
|
49
|
+
query (str): The query of the web search.
|
|
50
|
+
sources (list[dict[str, str]] | None): The sources of the web search.
|
|
51
|
+
"""
|
|
52
|
+
type: Literal[ActivityType.FIND_IN_PAGE, ActivityType.OPEN_PAGE, ActivityType.SEARCH]
|
|
53
|
+
url: str | None
|
|
54
|
+
pattern: str | None
|
|
55
|
+
query: str | None
|
|
56
|
+
sources: list[dict[str, str]] | None
|
|
57
|
+
def model_dump(self, *args, **kwargs) -> dict[str, str]:
|
|
58
|
+
"""Serialize the activity for display.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
dict[str, str]: The serialized activity.
|
|
62
|
+
"""
|
gllm_inference/schema/enums.pyi
CHANGED
|
@@ -24,6 +24,15 @@ class EmitDataType(StrEnum):
|
|
|
24
24
|
THINKING_START = 'thinking_start'
|
|
25
25
|
THINKING_END = 'thinking_end'
|
|
26
26
|
|
|
27
|
+
class ActivityType(StrEnum):
|
|
28
|
+
"""Defines valid activity types."""
|
|
29
|
+
FIND_IN_PAGE = 'find_in_page'
|
|
30
|
+
MCP_CALL = 'mcp_call'
|
|
31
|
+
MCP_LIST_TOOLS = 'mcp_list_tools'
|
|
32
|
+
OPEN_PAGE = 'open_page'
|
|
33
|
+
SEARCH = 'search'
|
|
34
|
+
WEB_SEARCH = 'web_search'
|
|
35
|
+
|
|
27
36
|
class MessageRole(StrEnum):
|
|
28
37
|
"""Defines valid message roles."""
|
|
29
38
|
SYSTEM = 'system'
|
|
@@ -34,3 +43,11 @@ class TruncateSide(StrEnum):
|
|
|
34
43
|
"""Enumeration for truncation sides."""
|
|
35
44
|
RIGHT = 'RIGHT'
|
|
36
45
|
LEFT = 'LEFT'
|
|
46
|
+
|
|
47
|
+
class WebSearchKey(StrEnum):
|
|
48
|
+
"""Defines valid web search keys."""
|
|
49
|
+
PATTERN = 'pattern'
|
|
50
|
+
QUERY = 'query'
|
|
51
|
+
SOURCES = 'sources'
|
|
52
|
+
TYPE = 'type'
|
|
53
|
+
URL = 'url'
|
gllm_inference/schema/events.pyi
CHANGED
|
@@ -1,40 +1,109 @@
|
|
|
1
|
+
from gllm_core.constants import EventLevel
|
|
1
2
|
from gllm_core.schema import Event
|
|
2
3
|
from gllm_inference.schema.activity import Activity as Activity
|
|
3
4
|
from gllm_inference.schema.enums import EmitDataType as EmitDataType
|
|
4
5
|
from typing import Literal
|
|
5
6
|
|
|
6
|
-
class ReasoningEvent(Event):
|
|
7
|
-
"""Event schema for model reasoning.
|
|
8
|
-
|
|
9
|
-
Attributes:
|
|
10
|
-
id (str): The unique identifier for the thinking event. Defaults to an UUID string.
|
|
11
|
-
data_type (Literal): The type of thinking event (thinking, thinking_start, or thinking_end).
|
|
12
|
-
data_value (str): The thinking content or message.
|
|
13
|
-
"""
|
|
14
|
-
id: str
|
|
15
|
-
data_type: Literal[EmitDataType.THINKING, EmitDataType.THINKING_START, EmitDataType.THINKING_END]
|
|
16
|
-
data_value: str
|
|
17
|
-
|
|
18
7
|
class ActivityEvent(Event):
|
|
19
8
|
"""Event schema for model-triggered activities (e.g. web search, MCP).
|
|
20
9
|
|
|
21
10
|
Attributes:
|
|
22
11
|
id (str): The unique identifier for the activity event. Defaults to an UUID string.
|
|
23
|
-
|
|
24
|
-
|
|
12
|
+
type (Literal): The type of event, always 'activity'.
|
|
13
|
+
value (Activity): The activity data containing message and type.
|
|
14
|
+
level (EventLevel): The severity level of the event. Defined through the EventLevel constants.
|
|
25
15
|
"""
|
|
26
16
|
id: str
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
type: Literal[EmitDataType.ACTIVITY]
|
|
18
|
+
value: Activity
|
|
19
|
+
level: EventLevel
|
|
29
20
|
|
|
30
21
|
class CodeEvent(Event):
|
|
31
22
|
"""Event schema for model-triggered code execution.
|
|
32
23
|
|
|
33
24
|
Attributes:
|
|
34
25
|
id (str): The unique identifier for the code event. Defaults to an UUID string.
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
type (Literal): The type of event (code, code_start, or code_end).
|
|
27
|
+
value (str): The code content.
|
|
28
|
+
level (EventLevel): The severity level of the event. Defined through the EventLevel constants.
|
|
29
|
+
"""
|
|
30
|
+
id: str
|
|
31
|
+
type: Literal[EmitDataType.CODE, EmitDataType.CODE_START, EmitDataType.CODE_END]
|
|
32
|
+
value: str
|
|
33
|
+
level: EventLevel
|
|
34
|
+
@classmethod
|
|
35
|
+
def start(cls, id: str | None = None) -> CodeEvent:
|
|
36
|
+
"""Create a code start event.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
id (str | None): The unique identifier for the code event. Defaults to an UUID string.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
CodeEvent: The code start event.
|
|
43
|
+
"""
|
|
44
|
+
@classmethod
|
|
45
|
+
def content(cls, id: str | None = None, value: str = '') -> CodeEvent:
|
|
46
|
+
"""Create a code content event.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
id (str | None): The unique identifier for the code event. Defaults to an UUID string.
|
|
50
|
+
value (str): The code content.
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
CodeEvent: The code value event.
|
|
54
|
+
"""
|
|
55
|
+
@classmethod
|
|
56
|
+
def end(cls, id: str | None = None) -> CodeEvent:
|
|
57
|
+
"""Create a code end event.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
id (str | None): The unique identifier for the code event. Defaults to an UUID string.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
CodeEvent: The code end event.
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
class ThinkingEvent(Event):
|
|
67
|
+
"""Event schema for model thinking.
|
|
68
|
+
|
|
69
|
+
Attributes:
|
|
70
|
+
id (str): The unique identifier for the thinking event. Defaults to an UUID string.
|
|
71
|
+
type (Literal): The type of thinking event (thinking, thinking_start, or thinking_end).
|
|
72
|
+
value (str): The thinking content or message.
|
|
73
|
+
level (EventLevel): The severity level of the event. Defined through the EventLevel constants.
|
|
37
74
|
"""
|
|
38
75
|
id: str
|
|
39
|
-
|
|
40
|
-
|
|
76
|
+
type: Literal[EmitDataType.THINKING, EmitDataType.THINKING_START, EmitDataType.THINKING_END]
|
|
77
|
+
value: str
|
|
78
|
+
level: EventLevel
|
|
79
|
+
@classmethod
|
|
80
|
+
def start(cls, id: str | None = None) -> ThinkingEvent:
|
|
81
|
+
"""Create a thinking start event.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
id (str | None): The unique identifier for the thinking event. Defaults to an UUID string.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
ThinkingEvent: The thinking start event.
|
|
88
|
+
"""
|
|
89
|
+
@classmethod
|
|
90
|
+
def content(cls, id: str | None = None, value: str = '') -> ThinkingEvent:
|
|
91
|
+
"""Create a thinking value event.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
id (str | None): The unique identifier for the thinking event. Defaults to an UUID string.
|
|
95
|
+
value (str): The thinking content or message.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
ThinkingEvent: The thinking value event.
|
|
99
|
+
"""
|
|
100
|
+
@classmethod
|
|
101
|
+
def end(cls, id: str | None = None) -> ThinkingEvent:
|
|
102
|
+
"""Create a thinking end event.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
id (str | None): The unique identifier for the thinking event. Defaults to an UUID string.
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
ThinkingEvent: The thinking end event.
|
|
109
|
+
"""
|
|
Binary file
|
gllm_inference.pyi
CHANGED
|
@@ -85,12 +85,12 @@ import gllm_core.schema
|
|
|
85
85
|
import gllm_core.schema.tool
|
|
86
86
|
import langchain_core.tools
|
|
87
87
|
import gllm_inference.schema.BatchStatus
|
|
88
|
-
import gllm_inference.schema.EmitDataType
|
|
89
88
|
import gllm_inference.schema.LMInput
|
|
90
89
|
import gllm_inference.schema.LMOutput
|
|
91
90
|
import gllm_inference.schema.Message
|
|
92
91
|
import gllm_inference.schema.Reasoning
|
|
93
92
|
import gllm_inference.schema.ResponseSchema
|
|
93
|
+
import gllm_inference.schema.ThinkingEvent
|
|
94
94
|
import gllm_inference.schema.TokenUsage
|
|
95
95
|
import gllm_inference.schema.ToolCall
|
|
96
96
|
import gllm_inference.schema.ToolResult
|
|
@@ -108,12 +108,18 @@ import inspect
|
|
|
108
108
|
import time
|
|
109
109
|
import jsonschema
|
|
110
110
|
import gllm_inference.lm_invoker.batch.BatchOperations
|
|
111
|
+
import gllm_inference.schema.Activity
|
|
111
112
|
import gllm_inference.schema.MessageContent
|
|
112
113
|
import gllm_inference.utils.validate_string_enum
|
|
113
114
|
import __future__
|
|
115
|
+
import gllm_inference.schema.ActivityEvent
|
|
116
|
+
import gllm_inference.schema.CodeEvent
|
|
114
117
|
import gllm_inference.schema.CodeExecResult
|
|
115
118
|
import gllm_inference.schema.MCPCall
|
|
119
|
+
import gllm_inference.schema.MCPCallActivity
|
|
120
|
+
import gllm_inference.schema.MCPListToolsActivity
|
|
116
121
|
import gllm_inference.schema.MCPServer
|
|
122
|
+
import gllm_inference.schema.WebSearchActivity
|
|
117
123
|
import xai_sdk
|
|
118
124
|
import xai_sdk.chat
|
|
119
125
|
import xai_sdk.search
|
|
@@ -122,6 +128,11 @@ import xai_sdk.proto.v5
|
|
|
122
128
|
import xai_sdk.proto.v5.chat_pb2
|
|
123
129
|
import transformers
|
|
124
130
|
import gllm_inference.prompt_formatter.HuggingFacePromptFormatter
|
|
131
|
+
import logging
|
|
132
|
+
import traceback
|
|
133
|
+
import gllm_inference.realtime_chat.input_streamer.KeyboardInputStreamer
|
|
134
|
+
import gllm_inference.realtime_chat.output_streamer.ConsoleOutputStreamer
|
|
135
|
+
import google.genai.live
|
|
125
136
|
import gllm_core.utils.logger_manager
|
|
126
137
|
import mimetypes
|
|
127
138
|
import uuid
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: gllm-inference-binary
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.37
|
|
4
4
|
Summary: A library containing components related to model inferences in Gen AI applications.
|
|
5
5
|
Author-email: Henry Wicaksono <henry.wicaksono@gdplabs.id>, Resti Febrina <resti.febrina@gdplabs.id>
|
|
6
6
|
Requires-Python: <3.14,>=3.11
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
gllm_inference.cpython-313-x86_64-linux-gnu.so,sha256=
|
|
2
|
-
gllm_inference.pyi,sha256=
|
|
1
|
+
gllm_inference.cpython-313-x86_64-linux-gnu.so,sha256=2h9nrUGWI4hMJ2lLypQMijdGM2sGwD71YRe4bYDDnKY,5138712
|
|
2
|
+
gllm_inference.pyi,sha256=qhr5RWsSZFXwfPesD-Xz8vUjIavUSK56QMtEKkcthaA,4750
|
|
3
3
|
gllm_inference/__init__.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
gllm_inference/constants.pyi,sha256=uCf0Rc8GkKwUKeMC5wx5WG_x0iV_piKhjZQl1gNffSQ,291
|
|
5
5
|
gllm_inference/builder/__init__.pyi,sha256=usz2lvfwO4Yk-ZGKXbCWG1cEr3nlQXxMNDNC-2yc1NM,500
|
|
@@ -36,18 +36,18 @@ gllm_inference/exceptions/error_parser.pyi,sha256=IOfa--NpLUW5E9Qq0mwWi6ZpTAbUyy
|
|
|
36
36
|
gllm_inference/exceptions/exceptions.pyi,sha256=Bv996qLa_vju0Qjf4GewMxdkq8CV9LRZb0S6289DldA,5725
|
|
37
37
|
gllm_inference/exceptions/provider_error_map.pyi,sha256=P1WnhWkM103FW6hqMfNZBOmYSWOmsJtll3VQV8DGb8E,1210
|
|
38
38
|
gllm_inference/lm_invoker/__init__.pyi,sha256=IGF3h8Z7Yr0bLrkDMRTDVPNBU6Y3liJabW3acjstJDY,1374
|
|
39
|
-
gllm_inference/lm_invoker/anthropic_lm_invoker.pyi,sha256=
|
|
39
|
+
gllm_inference/lm_invoker/anthropic_lm_invoker.pyi,sha256=inf_fuiy89t9CPiwCs_gsF2k7G7qZ9hMKEKYsGXLtNQ,17237
|
|
40
40
|
gllm_inference/lm_invoker/azure_openai_lm_invoker.pyi,sha256=7zF8pj3LbuOwu1QArPX0ra6IrqUq5AkkGbC_wXiGhlA,15027
|
|
41
41
|
gllm_inference/lm_invoker/bedrock_lm_invoker.pyi,sha256=uZ9wpzOKSOvgu1ICMLqEXcrOE3RIbUmqHmgtuwBekPg,12802
|
|
42
42
|
gllm_inference/lm_invoker/datasaur_lm_invoker.pyi,sha256=J_tfnIgVDr-zQ7YE5_TKMyZyA336ly04g1l-ZKnr1As,9315
|
|
43
|
-
gllm_inference/lm_invoker/google_lm_invoker.pyi,sha256=
|
|
43
|
+
gllm_inference/lm_invoker/google_lm_invoker.pyi,sha256=u4egvGHRG30IotgAN6r_jrjDWFujDxjTdyoIlNLXjYA,17166
|
|
44
44
|
gllm_inference/lm_invoker/langchain_lm_invoker.pyi,sha256=Bxi9hT4-sIZTz-VhAlxd5JyjAjQZQbUq2xtGhUL6oIs,13705
|
|
45
45
|
gllm_inference/lm_invoker/litellm_lm_invoker.pyi,sha256=5dEgqLvMB04W30PO2MEUJ4h7rEMmM7ETdQ7LOlLpeXg,13238
|
|
46
|
-
gllm_inference/lm_invoker/lm_invoker.pyi,sha256=
|
|
47
|
-
gllm_inference/lm_invoker/openai_chat_completions_lm_invoker.pyi,sha256=
|
|
46
|
+
gllm_inference/lm_invoker/lm_invoker.pyi,sha256=IDqmtIe9T47mrqJzb0e7dynH-9gbwqhmcb7EeVzPFos,8167
|
|
47
|
+
gllm_inference/lm_invoker/openai_chat_completions_lm_invoker.pyi,sha256=94gLqMhuPUGkC_gwV1-GXnQHCxDrGgHf3wQ8lNqbqdc,15738
|
|
48
48
|
gllm_inference/lm_invoker/openai_compatible_lm_invoker.pyi,sha256=PFOqWhLGHFcoZROW-yreldVaZjHKTzPhuZY2ELM6_SY,3837
|
|
49
|
-
gllm_inference/lm_invoker/openai_lm_invoker.pyi,sha256=
|
|
50
|
-
gllm_inference/lm_invoker/xai_lm_invoker.pyi,sha256=
|
|
49
|
+
gllm_inference/lm_invoker/openai_lm_invoker.pyi,sha256=BtjSKEPc75xDJIU2AXY9AZL8600rYRsmx-C7_ZjTwfQ,23807
|
|
50
|
+
gllm_inference/lm_invoker/xai_lm_invoker.pyi,sha256=KtCGKADVbrLfvkFOPHoeLNjlA2TKRf8F_kQHekSvQQI,15689
|
|
51
51
|
gllm_inference/lm_invoker/batch/__init__.pyi,sha256=W4W-_yfk7lL20alREJai6GnwuQvdlKRfwQCX4mQK4XI,127
|
|
52
52
|
gllm_inference/lm_invoker/batch/batch_operations.pyi,sha256=Oo7hoyPSfPZdy1mXvSdvtRndvq-XTIbPIjEoGvJj5C0,5372
|
|
53
53
|
gllm_inference/lm_invoker/schema/__init__.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -81,16 +81,27 @@ gllm_inference/prompt_formatter/llama_prompt_formatter.pyi,sha256=nz24trAqHsUY_z
|
|
|
81
81
|
gllm_inference/prompt_formatter/mistral_prompt_formatter.pyi,sha256=DgFitxfvCSJf8_6NUfSre-PXYMuPI4vX4AN6BPF1cBE,2650
|
|
82
82
|
gllm_inference/prompt_formatter/openai_prompt_formatter.pyi,sha256=QB7gHddipQuAolUKO01ApZeaRxBtRZzglS5B78mzsV8,1286
|
|
83
83
|
gllm_inference/prompt_formatter/prompt_formatter.pyi,sha256=UkcPi5ao98OGJyNRsqfhYTlMW-ZLNITaGZUTwzvBzqk,1146
|
|
84
|
+
gllm_inference/realtime_chat/__init__.pyi,sha256=Fhxr_sYOt_p43BT2uvJmCp5FMhfb3dDMoIZglq2y6G8,137
|
|
85
|
+
gllm_inference/realtime_chat/google_realtime_chat.pyi,sha256=S5FOCacuc7j4J2tjpUHCdp91YlalxIJ3V3Bh0t0GGus,10112
|
|
86
|
+
gllm_inference/realtime_chat/realtime_chat.pyi,sha256=qG0fXyhTPLw6wGpnDX6wQrLfs6RBaxCK2ASwIqOymp4,1375
|
|
87
|
+
gllm_inference/realtime_chat/input_streamer/__init__.pyi,sha256=REN1dEEZB-I2RX5QsBMxWcUiGm0-fWLevgj7IT18W6Y,317
|
|
88
|
+
gllm_inference/realtime_chat/input_streamer/input_streamer.pyi,sha256=DOVBe_lxievONS_t14opNNuv0zM3MWyBcCwmxzR4_BE,1259
|
|
89
|
+
gllm_inference/realtime_chat/input_streamer/keyboard_input_streamer.pyi,sha256=3L0y91efGmb4YFWigs2WGAURQ48EwNxLgcVMm15yrIg,1043
|
|
90
|
+
gllm_inference/realtime_chat/input_streamer/linux_mic_input_streamer.pyi,sha256=o8rOootmcKHmKRUCCHvfGlCcfeBow5UTbQHIw89XIqg,1337
|
|
91
|
+
gllm_inference/realtime_chat/output_streamer/__init__.pyi,sha256=FP5amnApQcIvW7YfQEnLzJBzEDz51npgocfCcRWDQXA,339
|
|
92
|
+
gllm_inference/realtime_chat/output_streamer/console_output_streamer.pyi,sha256=pO_llZK7JDjllTWEZjujEVo83Hvrv_8LwVqEkQiIOOo,674
|
|
93
|
+
gllm_inference/realtime_chat/output_streamer/linux_speaker_output_streamer.pyi,sha256=yie6VaOyozzE4bKtvWr-6hRiobK-8mshCqeUOhK1PVA,1487
|
|
94
|
+
gllm_inference/realtime_chat/output_streamer/output_streamer.pyi,sha256=GPAw1wPSrwHpJ2MeZJB3V9CCESTDZpyYYgsoy_LI2Nk,1083
|
|
84
95
|
gllm_inference/request_processor/__init__.pyi,sha256=hVnfdNZnkTBJHnmLtN3Na4ANP0yK6AstWdIizVr2Apo,227
|
|
85
96
|
gllm_inference/request_processor/lm_request_processor.pyi,sha256=VnYc8E3Iayyhw-rPnGPfTKuO3ohgFsS8HPrZJeyES5I,5889
|
|
86
97
|
gllm_inference/request_processor/uses_lm_mixin.pyi,sha256=Yu0XPNuHxq1tWBviHTPw1oThojneFwGHepvGjBXxKQA,6382
|
|
87
|
-
gllm_inference/schema/__init__.pyi,sha256=
|
|
88
|
-
gllm_inference/schema/activity.pyi,sha256=
|
|
98
|
+
gllm_inference/schema/__init__.pyi,sha256=bV9_1E-3ce6Dm6Q7xJ6TynPmxQAE1-ujfp9fkRbjI0E,2116
|
|
99
|
+
gllm_inference/schema/activity.pyi,sha256=xGZbfceV8iTJcLtRJrwHfK-dYdhQRmhNwWm7KuckLh4,1974
|
|
89
100
|
gllm_inference/schema/attachment.pyi,sha256=jApuzjOHJDCz4lr4MlHzBgIndh559nbWu2Xp1fk3hso,3297
|
|
90
101
|
gllm_inference/schema/code_exec_result.pyi,sha256=ZTHh6JtRrPIdQ059P1UAiD2L-tAO1_S5YcMsAXfJ5A0,559
|
|
91
102
|
gllm_inference/schema/config.pyi,sha256=rAL_UeXyQeXVk1P2kqd8vFWOMwmKenfpQLtvMP74t9s,674
|
|
92
|
-
gllm_inference/schema/enums.pyi,sha256=
|
|
93
|
-
gllm_inference/schema/events.pyi,sha256=
|
|
103
|
+
gllm_inference/schema/enums.pyi,sha256=5shfuJs76BqiAIZpA1wW1gXe5_KuFikQvuW3ALbQAmM,1322
|
|
104
|
+
gllm_inference/schema/events.pyi,sha256=Ly7B0N0_B3UztJNpT2oqOZ7YArEQp2VZpZ-VFeGc3ok,3911
|
|
94
105
|
gllm_inference/schema/lm_input.pyi,sha256=A5pjz1id6tP9XRNhzQrbmzd66C_q3gzo0UP8rCemz6Q,193
|
|
95
106
|
gllm_inference/schema/lm_output.pyi,sha256=15y-M0lpqM_fSlErPKiN1Pj-ikl5NtFBcWLMYsRidt8,2182
|
|
96
107
|
gllm_inference/schema/mcp.pyi,sha256=Vwu8E2BDl6FvvnI42gIyY3Oki1BdwRE3Uh3aV0rmhQU,1014
|
|
@@ -106,7 +117,7 @@ gllm_inference/utils/io_utils.pyi,sha256=7kUTacHAVRYoemFUOjCH7-Qmw-YsQGd6rGYxjf_
|
|
|
106
117
|
gllm_inference/utils/langchain.pyi,sha256=VluQiHkGigDdqLUbhB6vnXiISCP5hHqV0qokYY6dC1A,1164
|
|
107
118
|
gllm_inference/utils/validation.pyi,sha256=toxBtRp-VItC_X7sNi-GDd7sjibBdWMrR0q01OI2D7k,385
|
|
108
119
|
gllm_inference.build/.gitignore,sha256=aEiIwOuxfzdCmLZe4oB1JsBmCUxwG8x-u-HBCV9JT8E,1
|
|
109
|
-
gllm_inference_binary-0.5.
|
|
110
|
-
gllm_inference_binary-0.5.
|
|
111
|
-
gllm_inference_binary-0.5.
|
|
112
|
-
gllm_inference_binary-0.5.
|
|
120
|
+
gllm_inference_binary-0.5.37.dist-info/METADATA,sha256=EZZMljrGByJU9D5YPcM5O9XBdgEBcq-h_haG61XsTTU,5636
|
|
121
|
+
gllm_inference_binary-0.5.37.dist-info/WHEEL,sha256=GrvfTP3j0ebqecWD3AHlLRzmSrTVGeL6T8Btq6Eg9eI,108
|
|
122
|
+
gllm_inference_binary-0.5.37.dist-info/top_level.txt,sha256=FpOjtN80F-qVNgbScXSEyqa0w09FYn6301iq6qt69IQ,15
|
|
123
|
+
gllm_inference_binary-0.5.37.dist-info/RECORD,,
|
|
File without changes
|
{gllm_inference_binary-0.5.35.dist-info → gllm_inference_binary-0.5.37.dist-info}/top_level.txt
RENAMED
|
File without changes
|