gllm-core-binary 0.3.23b3__py3-none-any.whl → 0.4.4__py3-none-any.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.
- gllm_core/adapters/__init__.py +5 -0
- gllm_core/adapters/__init__.pyi +3 -0
- gllm_core/adapters/tool/__init__.py +6 -0
- gllm_core/adapters/tool/__init__.pyi +4 -0
- gllm_core/adapters/tool/google_adk.py +91 -0
- gllm_core/adapters/tool/google_adk.pyi +23 -0
- gllm_core/adapters/tool/langchain.py +130 -0
- gllm_core/adapters/tool/langchain.pyi +31 -0
- gllm_core/constants.py +0 -1
- gllm_core/constants.pyi +0 -1
- gllm_core/event/event_emitter.py +8 -44
- gllm_core/event/event_emitter.pyi +9 -21
- gllm_core/event/handler/console_event_handler.py +1 -12
- gllm_core/event/handler/console_event_handler.pyi +0 -1
- gllm_core/event/handler/print_event_handler.py +15 -59
- gllm_core/event/handler/print_event_handler.pyi +1 -2
- gllm_core/schema/__init__.py +2 -2
- gllm_core/schema/__init__.pyi +2 -2
- gllm_core/schema/component.py +236 -27
- gllm_core/schema/component.pyi +164 -17
- gllm_core/schema/schema_generator.py +150 -0
- gllm_core/schema/schema_generator.pyi +35 -0
- gllm_core/schema/tool.py +31 -1
- gllm_core/schema/tool.pyi +21 -0
- gllm_core/utils/__init__.py +2 -0
- gllm_core/utils/__init__.pyi +2 -1
- gllm_core/utils/analyzer.py +24 -1
- gllm_core/utils/analyzer.pyi +15 -1
- gllm_core/utils/concurrency.py +2 -2
- gllm_core/utils/logger_manager.py +17 -7
- gllm_core/utils/logger_manager.pyi +3 -0
- gllm_core/utils/main_method_resolver.py +185 -0
- gllm_core/utils/main_method_resolver.pyi +54 -0
- gllm_core/utils/retry.py +130 -21
- gllm_core/utils/retry.pyi +6 -29
- gllm_core_binary-0.4.4.dist-info/METADATA +177 -0
- {gllm_core_binary-0.3.23b3.dist-info → gllm_core_binary-0.4.4.dist-info}/RECORD +39 -27
- gllm_core_binary-0.3.23b3.dist-info/METADATA +0 -108
- {gllm_core_binary-0.3.23b3.dist-info → gllm_core_binary-0.4.4.dist-info}/WHEEL +0 -0
- {gllm_core_binary-0.3.23b3.dist-info → gllm_core_binary-0.4.4.dist-info}/top_level.txt +0 -0
gllm_core/utils/retry.py
CHANGED
|
@@ -8,12 +8,15 @@ References:
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
import asyncio
|
|
11
|
+
import functools
|
|
12
|
+
import inspect
|
|
11
13
|
import random
|
|
12
|
-
from typing import Any, Callable, TypeVar
|
|
14
|
+
from typing import Any, Callable, TypeVar, overload
|
|
13
15
|
|
|
14
16
|
from pydantic import BaseModel, Field, model_validator
|
|
15
17
|
|
|
16
18
|
from gllm_core.utils import LoggerManager
|
|
19
|
+
from gllm_core.utils.concurrency import syncify
|
|
17
20
|
|
|
18
21
|
logger = LoggerManager().get_logger(__name__)
|
|
19
22
|
|
|
@@ -29,18 +32,16 @@ class RetryConfig(BaseModel):
|
|
|
29
32
|
max_retries (int): Maximum number of retry attempts.
|
|
30
33
|
base_delay (float): Base delay in seconds between retries.
|
|
31
34
|
max_delay (float): Maximum delay in seconds between retries.
|
|
32
|
-
exponential_base (float): Base for exponential backoff. Deprecated and will be removed in v0.4.
|
|
33
35
|
jitter (bool): Whether to add random jitter to delays.
|
|
34
36
|
timeout (float | None): Overall timeout in seconds for the entire operation. If None, timeout is disabled.
|
|
35
37
|
retry_on_exceptions (tuple[type[Exception], ...]): Tuple of exception types to retry on.
|
|
36
38
|
"""
|
|
37
39
|
|
|
38
40
|
max_retries: int = Field(default=0, ge=0)
|
|
39
|
-
base_delay: float = Field(default=1.0,
|
|
40
|
-
max_delay: float = Field(default=10.0,
|
|
41
|
-
exponential_base: float = Field(default=BASE_EXPONENTIAL_BACKOFF) # TODO: Remove in v0.4
|
|
41
|
+
base_delay: float = Field(default=1.0, gt=0.0)
|
|
42
|
+
max_delay: float = Field(default=10.0, gt=0.0)
|
|
42
43
|
jitter: bool = Field(default=True)
|
|
43
|
-
timeout: float | None = Field(default=None,
|
|
44
|
+
timeout: float | None = Field(default=None, gt=0.0)
|
|
44
45
|
retry_on_exceptions: tuple[type[Exception], ...] = Field(default=(Exception,))
|
|
45
46
|
|
|
46
47
|
@model_validator(mode="after")
|
|
@@ -63,13 +64,29 @@ class RetryConfig(BaseModel):
|
|
|
63
64
|
if self.max_delay < self.base_delay:
|
|
64
65
|
raise ValueError("The 'max_delay' parameter must be greater than or equal to 'base_delay'.")
|
|
65
66
|
|
|
66
|
-
if self.exponential_base != BASE_EXPONENTIAL_BACKOFF: # TODO: Remove in v0.4
|
|
67
|
-
raise ValueError("The 'exponential_base' parameter must be exactly 2.0.")
|
|
68
|
-
|
|
69
67
|
return self
|
|
70
68
|
|
|
71
69
|
|
|
72
|
-
|
|
70
|
+
def _calculate_delay(attempt: int, config: RetryConfig) -> float:
|
|
71
|
+
"""Calculates the delay for the next retry attempt.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
attempt (int): The current attempt number (0-based).
|
|
75
|
+
config (RetryConfig): The retry configuration.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
float: The delay in seconds.
|
|
79
|
+
"""
|
|
80
|
+
delay = config.base_delay * (BASE_EXPONENTIAL_BACKOFF**attempt)
|
|
81
|
+
|
|
82
|
+
if config.jitter:
|
|
83
|
+
jitter_factor = random.uniform(0, 0.25)
|
|
84
|
+
delay += delay * jitter_factor
|
|
85
|
+
|
|
86
|
+
return min(delay, config.max_delay)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
async def _retry_async(
|
|
73
90
|
func: Callable[..., Any],
|
|
74
91
|
*args: Any,
|
|
75
92
|
retry_config: RetryConfig | None = None,
|
|
@@ -107,7 +124,10 @@ async def retry(
|
|
|
107
124
|
|
|
108
125
|
for attempt in range(max_retries):
|
|
109
126
|
try:
|
|
110
|
-
|
|
127
|
+
result = func(*args, **kwargs)
|
|
128
|
+
if inspect.isawaitable(result):
|
|
129
|
+
return await result
|
|
130
|
+
return result
|
|
111
131
|
|
|
112
132
|
except asyncio.TimeoutError:
|
|
113
133
|
raise
|
|
@@ -130,20 +150,109 @@ async def retry(
|
|
|
130
150
|
return await attempt_loop()
|
|
131
151
|
|
|
132
152
|
|
|
133
|
-
|
|
134
|
-
|
|
153
|
+
@overload
|
|
154
|
+
async def retry(
|
|
155
|
+
func: Callable[..., Any],
|
|
156
|
+
*args: Any,
|
|
157
|
+
retry_config: RetryConfig | None = None,
|
|
158
|
+
**kwargs: Any,
|
|
159
|
+
) -> T: ...
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
@overload
|
|
163
|
+
def retry(config: RetryConfig | None = None) -> Callable[[Callable[..., Any]], Callable[..., Any]]: ...
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def retry(
|
|
167
|
+
func_or_config: Callable[..., Any] | RetryConfig | None = None,
|
|
168
|
+
*args: Any,
|
|
169
|
+
retry_config: RetryConfig | None = None,
|
|
170
|
+
**kwargs: Any,
|
|
171
|
+
) -> T | Callable[[Callable[..., Any]], Callable[..., Any]]:
|
|
172
|
+
"""Executes a function with retry logic or creates a retry decorator.
|
|
173
|
+
|
|
174
|
+
This function supports two usage patterns:
|
|
175
|
+
1. Direct function execution: await retry(func, *args, retry_config=config, **kwargs)
|
|
176
|
+
2. Decorator factory: @retry() or @retry(config)
|
|
135
177
|
|
|
136
178
|
Args:
|
|
137
|
-
|
|
138
|
-
|
|
179
|
+
func_or_config (Callable[..., Any] | RetryConfig | None, optional): Either a function to execute or a
|
|
180
|
+
RetryConfig for decorator usage. Defaults to None.
|
|
181
|
+
*args (Any): Positional arguments (only used in direct execution mode).
|
|
182
|
+
retry_config (RetryConfig | None, optional): Retry configuration (only used in direct execution mode).
|
|
183
|
+
Defaults to None, in which case no retry nor timeout is applied.
|
|
184
|
+
**kwargs (Any): Keyword arguments (only used in direct execution mode).
|
|
139
185
|
|
|
140
186
|
Returns:
|
|
141
|
-
|
|
187
|
+
T | Callable[[Callable[..., Any]], Callable[..., Any]]: Either the result of function execution or
|
|
188
|
+
a decorator function.
|
|
189
|
+
|
|
190
|
+
Raises:
|
|
191
|
+
Exception: The last exception raised by the function if all retries are exhausted.
|
|
192
|
+
asyncio.TimeoutError: If the overall timeout is exceeded.
|
|
193
|
+
|
|
194
|
+
Examples:
|
|
195
|
+
# Direct function execution
|
|
196
|
+
```python
|
|
197
|
+
result = await retry(my_function, arg1, arg2, retry_config=config)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
# Decorator usage - parameterless
|
|
201
|
+
```python
|
|
202
|
+
@retry()
|
|
203
|
+
async def my_async_function():
|
|
204
|
+
# Use default settings, in which case no retry nor timeout is applied.
|
|
205
|
+
pass
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
# Decorator usage - with custom configuration
|
|
209
|
+
```python
|
|
210
|
+
@retry(RetryConfig(max_retries=3, timeout=120))
|
|
211
|
+
async def my_function():
|
|
212
|
+
# Will retry up to 3 times with 0.5s base delay
|
|
213
|
+
pass
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
# Decorator on sync functions
|
|
217
|
+
```python
|
|
218
|
+
@retry()
|
|
219
|
+
def my_sync_function():
|
|
220
|
+
# Works with sync functions too
|
|
221
|
+
return "success"
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
# Decorator on class methods
|
|
225
|
+
```python
|
|
226
|
+
class MyService:
|
|
227
|
+
@retry(RetryConfig(max_retries=2))
|
|
228
|
+
async def get_data(self, id: str):
|
|
229
|
+
return {"id": id, "data": "value"}
|
|
230
|
+
```
|
|
142
231
|
"""
|
|
143
|
-
|
|
232
|
+
if callable(func_or_config) and not isinstance(func_or_config, RetryConfig):
|
|
233
|
+
func = func_or_config
|
|
144
234
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
delay += delay * jitter_factor
|
|
235
|
+
async def async_wrapper() -> T:
|
|
236
|
+
return await _retry_async(func, *args, retry_config=retry_config, **kwargs)
|
|
148
237
|
|
|
149
|
-
|
|
238
|
+
return async_wrapper()
|
|
239
|
+
|
|
240
|
+
config = func_or_config
|
|
241
|
+
|
|
242
|
+
def decorator(func: Callable[..., Any]) -> Callable[..., Any]:
|
|
243
|
+
if asyncio.iscoroutinefunction(func):
|
|
244
|
+
|
|
245
|
+
@functools.wraps(func)
|
|
246
|
+
async def async_wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
247
|
+
return await _retry_async(func, *args, retry_config=config, **kwargs)
|
|
248
|
+
|
|
249
|
+
return async_wrapper
|
|
250
|
+
|
|
251
|
+
@functools.wraps(func)
|
|
252
|
+
def sync_wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
253
|
+
sync_retry = syncify(lambda: _retry_async(func, *args, retry_config=config, **kwargs))
|
|
254
|
+
return sync_retry()
|
|
255
|
+
|
|
256
|
+
return sync_wrapper
|
|
257
|
+
|
|
258
|
+
return decorator
|
gllm_core/utils/retry.pyi
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from _typeshed import Incomplete
|
|
2
2
|
from gllm_core.utils import LoggerManager as LoggerManager
|
|
3
|
+
from gllm_core.utils.concurrency import syncify as syncify
|
|
3
4
|
from pydantic import BaseModel
|
|
4
|
-
from typing import Any, Callable, TypeVar
|
|
5
|
+
from typing import Any, Callable, TypeVar, overload
|
|
5
6
|
|
|
6
7
|
logger: Incomplete
|
|
7
8
|
T = TypeVar('T')
|
|
@@ -14,7 +15,6 @@ class RetryConfig(BaseModel):
|
|
|
14
15
|
max_retries (int): Maximum number of retry attempts.
|
|
15
16
|
base_delay (float): Base delay in seconds between retries.
|
|
16
17
|
max_delay (float): Maximum delay in seconds between retries.
|
|
17
|
-
exponential_base (float): Base for exponential backoff. Deprecated and will be removed in v0.4.
|
|
18
18
|
jitter (bool): Whether to add random jitter to delays.
|
|
19
19
|
timeout (float | None): Overall timeout in seconds for the entire operation. If None, timeout is disabled.
|
|
20
20
|
retry_on_exceptions (tuple[type[Exception], ...]): Tuple of exception types to retry on.
|
|
@@ -22,7 +22,6 @@ class RetryConfig(BaseModel):
|
|
|
22
22
|
max_retries: int
|
|
23
23
|
base_delay: float
|
|
24
24
|
max_delay: float
|
|
25
|
-
exponential_base: float
|
|
26
25
|
jitter: bool
|
|
27
26
|
timeout: float | None
|
|
28
27
|
retry_on_exceptions: tuple[type[Exception], ...]
|
|
@@ -36,29 +35,7 @@ class RetryConfig(BaseModel):
|
|
|
36
35
|
ValueError: If max_delay is less than base_delay.
|
|
37
36
|
"""
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
If the function raises an exception that matches the retry_on_exceptions, it will retry up to max_retries times
|
|
44
|
-
with exponential backoff. Therefore, the max number of attempts is max_retries + 1. If provided, the timeout
|
|
45
|
-
applies to the entire retry operation, including all attempts and delays.
|
|
46
|
-
|
|
47
|
-
Example:
|
|
48
|
-
If you set timeout=10.0 and max_retries=3, the entire retry operation (including all attempts
|
|
49
|
-
and delays) will timeout after 10 seconds, not 10 seconds per attempt.
|
|
50
|
-
|
|
51
|
-
Args:
|
|
52
|
-
func (Callable[..., Any]): The function to execute.
|
|
53
|
-
*args (Any): Positional arguments to pass to the function.
|
|
54
|
-
retry_config (RetryConfig | None, optional): Retry configuration. If None, uses default config.
|
|
55
|
-
Defaults to None.
|
|
56
|
-
**kwargs (Any): Keyword arguments to pass to the function.
|
|
57
|
-
|
|
58
|
-
Returns:
|
|
59
|
-
T: The result of the function execution.
|
|
60
|
-
|
|
61
|
-
Raises:
|
|
62
|
-
Exception: The last exception raised by the function if all retries are exhausted.
|
|
63
|
-
asyncio.TimeoutError: If the overall timeout is exceeded.
|
|
64
|
-
"""
|
|
38
|
+
@overload
|
|
39
|
+
async def retry(func: Callable[..., Any], *args: Any, retry_config: RetryConfig | None = None, **kwargs: Any) -> T: ...
|
|
40
|
+
@overload
|
|
41
|
+
def retry(config: RetryConfig | None = None) -> Callable[[Callable[..., Any]], Callable[..., Any]]: ...
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gllm-core-binary
|
|
3
|
+
Version: 0.4.4
|
|
4
|
+
Summary: A library containing core components for Gen AI applications.
|
|
5
|
+
Author-email: Dimitrij Ray <dimitrij.ray@gdplabs.id>, Henry Wicaksono <henry.wicaksono@gdplabs.id>, Resti Febriana <resti.febriana@gdplabs.id>
|
|
6
|
+
Requires-Python: <3.14,>=3.11
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: anyio<5.0.0,>=4.10.0
|
|
9
|
+
Requires-Dist: deprecation<3.0.0,>=2.1.0
|
|
10
|
+
Requires-Dist: google<4.0.0,>=3.0.0
|
|
11
|
+
Requires-Dist: google-auth<3.0.0,>=2.38.0
|
|
12
|
+
Requires-Dist: gspread<7.0.0,>=6.1.4
|
|
13
|
+
Requires-Dist: numpy<2.0.0,>=1.26; python_version < "3.12"
|
|
14
|
+
Requires-Dist: numpy<3.0.0,>=1.26; python_version >= "3.12" and python_version < "3.13"
|
|
15
|
+
Requires-Dist: numpy<3.0.0,>=2.2; python_version >= "3.13"
|
|
16
|
+
Requires-Dist: pydantic<3.0.0,>=2.11.4
|
|
17
|
+
Requires-Dist: python-json-logger<4.0.0,>=3.3.0
|
|
18
|
+
Requires-Dist: rich<15.0.0,>=14.1.0
|
|
19
|
+
Requires-Dist: scipy<2.0.0,>=1.15.1
|
|
20
|
+
Provides-Extra: dev
|
|
21
|
+
Requires-Dist: coverage<8.0.0,>=7.4.4; extra == "dev"
|
|
22
|
+
Requires-Dist: mypy<2.0.0,>=1.15.0; extra == "dev"
|
|
23
|
+
Requires-Dist: pre-commit<4.0.0,>=3.7.0; extra == "dev"
|
|
24
|
+
Requires-Dist: pytest<9.0.0,>=8.1.1; extra == "dev"
|
|
25
|
+
Requires-Dist: pytest-asyncio<1.0.0,>=0.23.6; extra == "dev"
|
|
26
|
+
Requires-Dist: pytest-cov<6.0.0,>=5.0.0; extra == "dev"
|
|
27
|
+
Requires-Dist: ruff<1.0.0,>=0.6.7; extra == "dev"
|
|
28
|
+
Provides-Extra: langchain
|
|
29
|
+
Requires-Dist: langchain-core<1.0.0,>=0.3.0; extra == "langchain"
|
|
30
|
+
Provides-Extra: google-adk
|
|
31
|
+
Requires-Dist: google-adk<2.0.0,>=1.0.0; extra == "google-adk"
|
|
32
|
+
Requires-Dist: starlette<1.0.0,>=0.49.0; extra == "google-adk"
|
|
33
|
+
|
|
34
|
+
# GLLM Core
|
|
35
|
+
|
|
36
|
+
## Description
|
|
37
|
+
A core library providing foundational components and utilities for Generative AI applications.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Installation
|
|
42
|
+
|
|
43
|
+
### Prerequisites
|
|
44
|
+
|
|
45
|
+
Mandatory:
|
|
46
|
+
1. Python 3.11+ — [Install here](https://www.python.org/downloads/)
|
|
47
|
+
2. pip — [Install here](https://pip.pypa.io/en/stable/installation/)
|
|
48
|
+
3. uv — [Install here](https://docs.astral.sh/uv/getting-started/installation/)
|
|
49
|
+
|
|
50
|
+
Extras (required only for Artifact Registry installations):
|
|
51
|
+
1. gcloud CLI (for authentication) — [Install here](https://cloud.google.com/sdk/docs/install), then log in using:
|
|
52
|
+
```bash
|
|
53
|
+
gcloud auth login
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### Option 1: Install from Artifact Registry
|
|
59
|
+
|
|
60
|
+
This option requires authentication via the `gcloud` CLI.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
uv pip install \
|
|
64
|
+
--extra-index-url "https://oauth2accesstoken:$(gcloud auth print-access-token)@glsdk.gdplabs.id/gen-ai-internal/simple/" \
|
|
65
|
+
gllm-inference
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### Option 2: Install from PyPI
|
|
71
|
+
|
|
72
|
+
This option requires no authentication.
|
|
73
|
+
However, it installs the **binary wheel** version of the package, which is fully usable but **does not include source code**.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
uv pip install gllm-core-binary
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Local Development Setup
|
|
82
|
+
|
|
83
|
+
### Prerequisites
|
|
84
|
+
|
|
85
|
+
1. Python 3.11+ — [Install here](https://www.python.org/downloads/)
|
|
86
|
+
2. pip — [Install here](https://pip.pypa.io/en/stable/installation/)
|
|
87
|
+
3. uv — [Install here](https://docs.astral.sh/uv/getting-started/installation/)
|
|
88
|
+
4. gcloud CLI — [Install here](https://cloud.google.com/sdk/docs/install), then log in using:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
gcloud auth login
|
|
92
|
+
```
|
|
93
|
+
5. Git — [Install here](https://git-scm.com/downloads)
|
|
94
|
+
6. Access to the [GDP Labs SDK GitHub repository](https://github.com/GDP-ADMIN/gl-sdk)
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 1. Clone Repository
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
git clone git@github.com:GDP-ADMIN/gl-sdk.git
|
|
102
|
+
cd gl-sdk/libs/gllm-core
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### 2. Setup Authentication
|
|
108
|
+
|
|
109
|
+
Set the following environment variables to authenticate with internal package indexes:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
export UV_INDEX_GEN_AI_INTERNAL_USERNAME=oauth2accesstoken
|
|
113
|
+
export UV_INDEX_GEN_AI_INTERNAL_PASSWORD="$(gcloud auth print-access-token)"
|
|
114
|
+
export UV_INDEX_GEN_AI_USERNAME=oauth2accesstoken
|
|
115
|
+
export UV_INDEX_GEN_AI_PASSWORD="$(gcloud auth print-access-token)"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### 3. Quick Setup
|
|
121
|
+
|
|
122
|
+
Run:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
make setup
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### 4. Activate Virtual Environment
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
source .venv/bin/activate
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Local Development Utilities
|
|
139
|
+
|
|
140
|
+
The following Makefile commands are available for quick operations:
|
|
141
|
+
|
|
142
|
+
### Install uv
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
make install-uv
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Install Pre-Commit
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
make install-pre-commit
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Install Dependencies
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
make install
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Update Dependencies
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
make update
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Run Tests
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
make test
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Contributing
|
|
175
|
+
|
|
176
|
+
Please refer to the [Python Style Guide](https://docs.google.com/document/d/1uRggCrHnVfDPBnG641FyQBwUwLoFw0kTzNqRm92vUwM/edit?usp=sharing)
|
|
177
|
+
for information about code style, documentation standards, and SCA requirements.
|
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
gllm_core/__init__.py,sha256=eNadXBQreFzNIUMsBil5pQpemEqa118vXoQ7W68fb0Y,54
|
|
2
2
|
gllm_core/__init__.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
gllm_core/constants.py,sha256=
|
|
4
|
-
gllm_core/constants.pyi,sha256=
|
|
3
|
+
gllm_core/constants.py,sha256=oYp3hUekkE4Ph3X4ujIFdFJSO5VMdXUE3BB4iCd-XCg,1112
|
|
4
|
+
gllm_core/constants.pyi,sha256=9M5UxEkdttu4fSJTLxhjt7q1xTRYbjTFheM5EjQ5Bs4,904
|
|
5
|
+
gllm_core/adapters/__init__.py,sha256=DT9i3jbfas2h3OZKB8X-h1tUjmgqULK0UpdFqXwrI18,180
|
|
6
|
+
gllm_core/adapters/__init__.pyi,sha256=N8JBGr2mPUMAGaMd__7XxGr2NAzfaFMuNH15QkSfbrA,187
|
|
7
|
+
gllm_core/adapters/tool/__init__.py,sha256=_aSDU8ch_0cs7dEnPjC3DfNJojDOR7nermdnyeqFxu0,242
|
|
8
|
+
gllm_core/adapters/tool/__init__.pyi,sha256=zRmMo1ilDaYF-cErfkQqy8zGnArHebdWmox-P34_7fI,244
|
|
9
|
+
gllm_core/adapters/tool/google_adk.py,sha256=pUay4OgMdffEVQMMIje8p4R1S8AMlCe4ekDsiWnHi5E,3194
|
|
10
|
+
gllm_core/adapters/tool/google_adk.pyi,sha256=0awaKRXmmK5NiAP9vNNYjMARDPWfWyQqy29k3WHoX2s,953
|
|
11
|
+
gllm_core/adapters/tool/langchain.py,sha256=rOxuD1EMZHcFkruT65zYeKvH_xxIzq65pdfb_uUT_f4,3825
|
|
12
|
+
gllm_core/adapters/tool/langchain.pyi,sha256=LBqox8xFm6jSxPfBEftJr_zUmXwPk_qHNwU3bZaphhE,855
|
|
5
13
|
gllm_core/event/__init__.py,sha256=kgm77bXmkT3fBUSQSl0ELAFM9NXnaGXPPml1LcthOLk,243
|
|
6
14
|
gllm_core/event/__init__.pyi,sha256=HVs5C80lFzVEH7mO8KJTUqEPi_7KyPvNeMLuoG-hDeE,177
|
|
7
|
-
gllm_core/event/event_emitter.py,sha256=
|
|
8
|
-
gllm_core/event/event_emitter.pyi,sha256=
|
|
15
|
+
gllm_core/event/event_emitter.py,sha256=8BWYLC-Nz6maGHZLXc_dfyzC08GDQWpDbZu3nYC_7oQ,8658
|
|
16
|
+
gllm_core/event/event_emitter.pyi,sha256=dzhlOGnA2h5-OSRZHt-AJ-THul-rDUatfwr6dyYzYu8,7297
|
|
9
17
|
gllm_core/event/messenger.py,sha256=-m4Kdv6xRRqhaUG_gol0Af7_Z1bKOOgB5VTQdQqg8G8,5664
|
|
10
18
|
gllm_core/event/messenger.pyi,sha256=8Nvra-a7RqnfX0PAtm-Of5M8CvsYr0L_1k3HgdNCR5I,3190
|
|
11
19
|
gllm_core/event/handler/__init__.py,sha256=IClP_8FakiM1-DfYbjGWrylm1AKKbrKX5-btBhKu6Y4,406
|
|
12
20
|
gllm_core/event/handler/__init__.pyi,sha256=gZ21Fjjog3-e3-_Xv5sTpX9_Mx8X2LUzTrqp_tPisCg,377
|
|
13
|
-
gllm_core/event/handler/console_event_handler.py,sha256=
|
|
14
|
-
gllm_core/event/handler/console_event_handler.pyi,sha256=
|
|
21
|
+
gllm_core/event/handler/console_event_handler.py,sha256=lIiBcMClRHI5h1v-xb1BzE9Zzo1QJW4gBqCeB81cFjo,1817
|
|
22
|
+
gllm_core/event/handler/console_event_handler.pyi,sha256=eCv0SaZEpbu8W2jQPLnWwXNzhGOSM5KAtDVUYfvlvMs,1494
|
|
15
23
|
gllm_core/event/handler/event_handler.py,sha256=2r2gpykTEiFnFrroKXtm3J65nE3nysFxr3iGcOSY5Vc,3055
|
|
16
24
|
gllm_core/event/handler/event_handler.pyi,sha256=chEYnw3Rp9Lk3Cz4dSn6EVlzje4BG-SlM82J-4UE5Hw,2153
|
|
17
|
-
gllm_core/event/handler/print_event_handler.py,sha256=
|
|
18
|
-
gllm_core/event/handler/print_event_handler.pyi,sha256=
|
|
25
|
+
gllm_core/event/handler/print_event_handler.py,sha256=SvdbjJ_diJkUlB4yZL-TGfjOB56DM86XDJnB-CZgR60,4968
|
|
26
|
+
gllm_core/event/handler/print_event_handler.pyi,sha256=D_xNtpcBsGl7NVSCvFKEGvaUqfMTxPaQV8zXECwmZ2Q,1674
|
|
19
27
|
gllm_core/event/handler/stream_event_handler.py,sha256=RbzHAyvRoGWn5XSTmkGMBwi-3l02NrKAiNWC03Kl14I,3411
|
|
20
28
|
gllm_core/event/handler/stream_event_handler.pyi,sha256=5faGSFQLBN7XMqd4nIfGkdTBI_ALVaE-fmxVAjzca9w,2908
|
|
21
29
|
gllm_core/event/hook/__init__.py,sha256=ro-Hf0C2BPjxUyEZBl_a19GlH23YcHkkajQC2OarNjc,204
|
|
@@ -24,25 +32,27 @@ gllm_core/event/hook/event_hook.py,sha256=LHu9DcxcrKtiOmDVia1zrbrWg9eLqQzlox_pW9
|
|
|
24
32
|
gllm_core/event/hook/event_hook.pyi,sha256=rMatofdNAwHI65ya_7-q3NAfmTuKhc2WkXeiGPAvcKI,600
|
|
25
33
|
gllm_core/event/hook/json_stringify_event_hook.py,sha256=ImOy1kEudSIzkWkD1PSwsIbMWqoN0vpnjbAKK0EOkqI,849
|
|
26
34
|
gllm_core/event/hook/json_stringify_event_hook.pyi,sha256=I-QxbaLc4rEyqhW_f4INN5UxBg_ZofHHN1HQKfPJ7rs,585
|
|
27
|
-
gllm_core/schema/__init__.py,sha256=
|
|
28
|
-
gllm_core/schema/__init__.pyi,sha256=
|
|
35
|
+
gllm_core/schema/__init__.py,sha256=p2T4be4h062eWl4NwYFV5B9p1LONoIBLjPw31sgkZWw,336
|
|
36
|
+
gllm_core/schema/__init__.pyi,sha256=X7Gv3xgtl4Ylzsg9iuGgjJPkQey7OdvvIC_X1e5_LAI,310
|
|
29
37
|
gllm_core/schema/chunk.py,sha256=5-MjZ9D3nB3ref6qqdygkV5njH7QsUBfTOeFK7zr5PE,4875
|
|
30
38
|
gllm_core/schema/chunk.pyi,sha256=ZVYQitMtvMStiFssnTCgtSIcj30VSsK2dKscSysl3R4,2378
|
|
31
|
-
gllm_core/schema/component.py,sha256=
|
|
32
|
-
gllm_core/schema/component.pyi,sha256=
|
|
39
|
+
gllm_core/schema/component.py,sha256=gd0g1w4UM1UqswDMndoiNsLgi2PuxO5FUBwtWuQ3410,22540
|
|
40
|
+
gllm_core/schema/component.pyi,sha256=fghUD8QJRXjjUT2jn64dkM_KjMv6MV9OAQUXjc7xsD0,9164
|
|
33
41
|
gllm_core/schema/event.py,sha256=TXukuyS7HYlm0OMwlCjUha_JB0D_qs8NWB0K7aImAmE,1744
|
|
34
42
|
gllm_core/schema/event.pyi,sha256=Yd74uSWhIO1lx0_p70rYt-LMz4FZHbbbqJP7xhVh_pY,1335
|
|
35
|
-
gllm_core/schema/
|
|
36
|
-
gllm_core/schema/
|
|
37
|
-
gllm_core/
|
|
38
|
-
gllm_core/
|
|
39
|
-
gllm_core/utils/
|
|
40
|
-
gllm_core/utils/
|
|
43
|
+
gllm_core/schema/schema_generator.py,sha256=1PgcghBNCljTASB_dbmcl9-5sJIevs8XiXm7RT6XFig,5129
|
|
44
|
+
gllm_core/schema/schema_generator.pyi,sha256=ToadC6UKEq35k32wUK1VaMKiICRtENXUYdAQOMlTg3U,1445
|
|
45
|
+
gllm_core/schema/tool.py,sha256=DnuZaDnd2u9-eF06iFYtYgDHKUnTKx4GWuqvxm6Fb2c,16644
|
|
46
|
+
gllm_core/schema/tool.pyi,sha256=T5TufJZPYUzYoSPZBX0FkqgZ9u03VAIsZdwvY1PS7nw,8848
|
|
47
|
+
gllm_core/utils/__init__.py,sha256=THjHMxGlgdlVSR6LoruXzsxHI9UKaN7dCadsTrjA6OY,1200
|
|
48
|
+
gllm_core/utils/__init__.pyi,sha256=ZFilGPXXqc2JGwy8AV8N7pf6zmtd9clzuk310PIGkBs,1359
|
|
49
|
+
gllm_core/utils/analyzer.py,sha256=V8hTVdqMpll0BuH9lFZHiX7Ijl72aNvBlYXLJy9FSRI,8882
|
|
50
|
+
gllm_core/utils/analyzer.pyi,sha256=M48PRor76L5eAQBpSqpv3EkZ4kU1t5Zm3CPFd34dxWM,4470
|
|
41
51
|
gllm_core/utils/binary_handler_factory.py,sha256=JGk1G5OzYLGlx6W2eYb8mSXlHZh29zEKQEx1kX0HLuc,2512
|
|
42
52
|
gllm_core/utils/binary_handler_factory.pyi,sha256=imcuCL2oa-7uwTnC_vI-_KvE1hGu1-5U4ZiF5fShDmQ,1739
|
|
43
53
|
gllm_core/utils/chunk_metadata_merger.py,sha256=-Tk83zuXFlUh2ZilXHSnCTkJW1b8hgkCRaVQu136-xY,4096
|
|
44
54
|
gllm_core/utils/chunk_metadata_merger.pyi,sha256=J1lHTFV-0IiC6xKzzC7x1D1wBoki249muEU2HrF6C58,2317
|
|
45
|
-
gllm_core/utils/concurrency.py,sha256=
|
|
55
|
+
gllm_core/utils/concurrency.py,sha256=KM7qS5rN25ppssSuDsH80xzFeDYuu0MhHn6-O021AjQ,6352
|
|
46
56
|
gllm_core/utils/concurrency.pyi,sha256=n_Mb9D_2hJAQ7VSwDBxhgmDv7hyFRKevDlhcHoAjvyA,3959
|
|
47
57
|
gllm_core/utils/event_formatter.py,sha256=c1jOgu468IY3NPIXFbC56khU8_LERUFLXBocO25mk4g,2237
|
|
48
58
|
gllm_core/utils/event_formatter.pyi,sha256=ocQ_Ev_XorRhLzj0c2szlclz8V3_Ysbg6qHmjhmur3k,1375
|
|
@@ -50,17 +60,19 @@ gllm_core/utils/google_sheets.py,sha256=8p2f-Kfz4gqtq9_bIJd5GvQY22oQ4sTaeyOYJM4t
|
|
|
50
60
|
gllm_core/utils/google_sheets.pyi,sha256=IjKdc7H3hBLAp8I8jxnwDfKP79D1EIBIRQKKFTUNqjM,939
|
|
51
61
|
gllm_core/utils/imports.py,sha256=obCG8wrTp5MDDzeQ5SbqUgwX1PDJp-OuhPxL7HZAVC0,3625
|
|
52
62
|
gllm_core/utils/imports.pyi,sha256=-KM0pyw7yFVCUZjHjoNBRFgEnI8hlr0pquKuhcA2X9M,2196
|
|
53
|
-
gllm_core/utils/logger_manager.py,sha256=
|
|
54
|
-
gllm_core/utils/logger_manager.pyi,sha256=
|
|
63
|
+
gllm_core/utils/logger_manager.py,sha256=xnM3ON_6GGS-xaWFVEruq_830FwwXyuEvqqCaZJ-g7U,12827
|
|
64
|
+
gllm_core/utils/logger_manager.pyi,sha256=IDRgA-5jRDu4miO5Ru_tFJHql2JlHdr1GvZdmdS9Sg8,7159
|
|
65
|
+
gllm_core/utils/main_method_resolver.py,sha256=lGirchC4Eo4Y0WQdOp3ORIzlhBAyuPY9w1YMwiJODWY,7801
|
|
66
|
+
gllm_core/utils/main_method_resolver.pyi,sha256=dHozSqFMwCyVorQ0ZE9N-c2V4PkpF8FdU1VGGPvTjK4,2178
|
|
55
67
|
gllm_core/utils/merger_method.py,sha256=pf06CAnC8ZhJZB7qjwades6AY_IAgoBGSeeZAxc3NYM,4727
|
|
56
68
|
gllm_core/utils/merger_method.pyi,sha256=JsgHnO47cqenqNxCrHqhAR-nnR_dEqE-7wprVrd8ZFg,1868
|
|
57
|
-
gllm_core/utils/retry.py,sha256=
|
|
58
|
-
gllm_core/utils/retry.pyi,sha256=
|
|
69
|
+
gllm_core/utils/retry.py,sha256=4uYZnqkC2poeGt9rpYiKXfrS7eZ1plnpPwVYB_l7sTY,9084
|
|
70
|
+
gllm_core/utils/retry.pyi,sha256=KxlPzURzZfCSgKC44v98nR2bqamzHqtbRuXLDEuX29c,1614
|
|
59
71
|
gllm_core/utils/similarity.py,sha256=_pMMOkJW0gBxBS3stBvqRGa8IIG3owA-JXiIR6LzJPc,864
|
|
60
72
|
gllm_core/utils/similarity.pyi,sha256=HmSxE5VfPwYZYih_bSIz8QRDbkouO_jij-FX6TSCEdM,439
|
|
61
73
|
gllm_core/utils/validation.py,sha256=Vxd4PxHR2tl-VcfIqJFgA3oHf2VJvcz5D39WbwvorhQ,767
|
|
62
74
|
gllm_core/utils/validation.pyi,sha256=-RdMmb8afH7F7q4Ao7x6FbwaDfxUHn3hA3WiOgzB-3s,397
|
|
63
|
-
gllm_core_binary-0.
|
|
64
|
-
gllm_core_binary-0.
|
|
65
|
-
gllm_core_binary-0.
|
|
66
|
-
gllm_core_binary-0.
|
|
75
|
+
gllm_core_binary-0.4.4.dist-info/METADATA,sha256=K9t-hKGi91YHbA3y4CJOxfMKNZ-9jawHoh-xuNkvi_A,4662
|
|
76
|
+
gllm_core_binary-0.4.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
77
|
+
gllm_core_binary-0.4.4.dist-info/top_level.txt,sha256=UYoTGvK_Yec95-_QUuVCKEr6PUXb5Lc7Dr-x8SeX9uM,10
|
|
78
|
+
gllm_core_binary-0.4.4.dist-info/RECORD,,
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: gllm-core-binary
|
|
3
|
-
Version: 0.3.23b3
|
|
4
|
-
Summary: A library containing core components for Gen AI applications.
|
|
5
|
-
Author-email: Dimitrij Ray <dimitrij.ray@gdplabs.id>, Henry Wicaksono <henry.wicaksono@gdplabs.id>, Resti Febriana <resti.febriana@gdplabs.id>
|
|
6
|
-
Requires-Python: <3.14,>=3.11
|
|
7
|
-
Description-Content-Type: text/markdown
|
|
8
|
-
Requires-Dist: poetry<3.0.0,>=2.1.3
|
|
9
|
-
Requires-Dist: anyio<5.0.0,>=4.10.0
|
|
10
|
-
Requires-Dist: deprecation<3.0.0,>=2.1.0
|
|
11
|
-
Requires-Dist: google<4.0.0,>=3.0.0
|
|
12
|
-
Requires-Dist: google-auth<3.0.0,>=2.38.0
|
|
13
|
-
Requires-Dist: gspread<7.0.0,>=6.1.4
|
|
14
|
-
Requires-Dist: numpy<2.0.0,>=1.26; python_version < "3.12"
|
|
15
|
-
Requires-Dist: numpy<3.0.0,>=1.26; python_version >= "3.12" and python_version < "3.13"
|
|
16
|
-
Requires-Dist: numpy<3.0.0,>=2.2; python_version >= "3.13"
|
|
17
|
-
Requires-Dist: pydantic<3.0.0,>=2.11.4
|
|
18
|
-
Requires-Dist: python-json-logger<4.0.0,>=3.3.0
|
|
19
|
-
Requires-Dist: rich<15.0.0,>=14.1.0
|
|
20
|
-
Requires-Dist: scipy<2.0.0,>=1.15.1
|
|
21
|
-
Requires-Dist: virtualenv==20.30.0
|
|
22
|
-
Provides-Extra: dev
|
|
23
|
-
Requires-Dist: coverage<8.0.0,>=7.4.4; extra == "dev"
|
|
24
|
-
Requires-Dist: mypy<2.0.0,>=1.15.0; extra == "dev"
|
|
25
|
-
Requires-Dist: pre-commit<4.0.0,>=3.7.0; extra == "dev"
|
|
26
|
-
Requires-Dist: pytest<9.0.0,>=8.1.1; extra == "dev"
|
|
27
|
-
Requires-Dist: pytest-asyncio<1.0.0,>=0.23.6; extra == "dev"
|
|
28
|
-
Requires-Dist: pytest-cov<6.0.0,>=5.0.0; extra == "dev"
|
|
29
|
-
Requires-Dist: ruff<1.0.0,>=0.6.7; extra == "dev"
|
|
30
|
-
|
|
31
|
-
# GLLM Core
|
|
32
|
-
|
|
33
|
-
## Description
|
|
34
|
-
|
|
35
|
-
A core library providing foundational components and utilities for Generative AI applications.
|
|
36
|
-
|
|
37
|
-
## Installation
|
|
38
|
-
|
|
39
|
-
### Prerequisites
|
|
40
|
-
1. Python 3.11+ - [Install here](https://www.python.org/downloads/)
|
|
41
|
-
2. Pip (if using Pip) - [Install here](https://pip.pypa.io/en/stable/installation/)
|
|
42
|
-
3. Poetry 2.1.4+ - [Install here](https://python-poetry.org/docs/#installation)
|
|
43
|
-
4. Git (if using Git) - [Install here](https://git-scm.com/downloads)
|
|
44
|
-
5. gcloud CLI (for authentication) - [Install here](https://cloud.google.com/sdk/docs/install)
|
|
45
|
-
6. For git installation, access to the [GDP Labs SDK github repository](https://github.com/GDP-ADMIN/gl-sdk)
|
|
46
|
-
|
|
47
|
-
### 1. Installation from Artifact Registry
|
|
48
|
-
Choose one of the following methods to install the package:
|
|
49
|
-
|
|
50
|
-
#### Using pip
|
|
51
|
-
```bash
|
|
52
|
-
pip install gllm-core-binary
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
#### Using Poetry
|
|
56
|
-
```bash
|
|
57
|
-
poetry add gllm-core-binary
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### 2. Development Installation (Git)
|
|
61
|
-
For development purposes, you can install directly from the Git repository:
|
|
62
|
-
```bash
|
|
63
|
-
git clone git@github.com:GDP-ADMIN/gl-sdk.git
|
|
64
|
-
cd gl-sdk/libs/gllm-core
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Local Development Setup
|
|
68
|
-
|
|
69
|
-
### Quick Setup (Recommended)
|
|
70
|
-
For local development with editable gllm packages, use the provided Makefile:
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
# Complete setup: installs Poetry, configures auth, installs packages, sets up pre-commit
|
|
74
|
-
make setup
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
The following are the available Makefile targets:
|
|
78
|
-
|
|
79
|
-
1. `make setup` - Complete development setup (recommended for new developers)
|
|
80
|
-
2. `make install-poetry` - Install or upgrade Poetry to the latest version
|
|
81
|
-
3. `make auth` - Configure authentication for internal repositories
|
|
82
|
-
4. `make install` - Install all dependencies
|
|
83
|
-
5. `make install-pre-commit` - Set up pre-commit hooks
|
|
84
|
-
6. `make update` - Update dependencies
|
|
85
|
-
|
|
86
|
-
### Manual Development Setup (Legacy)
|
|
87
|
-
If you prefer to manage dependencies manually:
|
|
88
|
-
|
|
89
|
-
1. Go to root folder of `gllm-core` module, e.g. `cd libs/gllm-core`.
|
|
90
|
-
2. Run `poetry shell` to create a virtual environment.
|
|
91
|
-
3. Run `poetry lock` to create a lock file if you haven't done it yet.
|
|
92
|
-
4. Run `poetry install` to install the `gllm-core` requirements for the first time.
|
|
93
|
-
5. Run `poetry update` if you update any dependency module version at `pyproject.toml`.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
## Contributing
|
|
97
|
-
Please refer to this [Python Style Guide](https://docs.google.com/document/d/1uRggCrHnVfDPBnG641FyQBwUwLoFw0kTzNqRm92vUwM/edit?usp=sharing)
|
|
98
|
-
to get information about code style, documentation standard, and SCA that you need to use when contributing to this project
|
|
99
|
-
|
|
100
|
-
### Getting Started with Development
|
|
101
|
-
1. Clone the repository and navigate to the gllm-core directory
|
|
102
|
-
2. Run `make setup` to set up your development environment
|
|
103
|
-
3. Run `which python` to get the path to be referenced at Visual Studio Code interpreter path (`Ctrl`+`Shift`+`P` or `Cmd`+`Shift`+`P`)
|
|
104
|
-
4. Try running the unit test to see if it's working:
|
|
105
|
-
```bash
|
|
106
|
-
poetry run pytest -s tests/unit_tests/
|
|
107
|
-
```
|
|
108
|
-
5. When you want to update the dependencies, run `make update`
|
|
File without changes
|
|
File without changes
|