11# Copyright (c) ModelScope Contributors. All rights reserved.
22from __future__ import annotations
3+ from typing import Optional
4+
35
46def init_tinker_client (** kwargs ) -> None :
57 """Initialize Tinker client with Twinkle-specific headers.
68
7- After calling this function, users can directly use:
9+ After calling this function, users can directly use::
10+
811 from tinker import ServiceClient
912 client = ServiceClient(base_url='...', api_key='...')
1013
@@ -13,39 +16,57 @@ def init_tinker_client(**kwargs) -> None:
1316 Args:
1417 **kwargs: Additional keyword arguments (currently unused, reserved for future)
1518
16- Example:
17- >>> from twinkle import init_tinker_client
19+ Example::
20+
21+ >>> from twinkle_client import init_tinker_client
1822 >>> init_tinker_client()
1923 >>> from tinker import ServiceClient
2024 >>> client = ServiceClient(base_url='http://localhost:8000', api_key='your_token')
2125 """
2226 from twinkle .utils import requires
23-
27+
2428 requires ('tinker' )
2529 from twinkle_client .utils .patch_tinker import patch_tinker
2630
27- # Apply patches to tinker library (includes header injection)
2831 patch_tinker ()
2932
3033
31- def init_twinkle_client (base_url : str | None = None , api_key : str | None = None , ** kwargs ) -> TwinkleClient :
34+ def init_twinkle_client (
35+ base_url : Optional [str ] = None ,
36+ api_key : Optional [str ] = None ,
37+ session_heartbeat_interval : int = 30 ,
38+ ** kwargs ,
39+ ) -> 'TwinkleClient' :
3240 """
33- Initialize a Twinkle client and setup context variables.
41+ Initialize a Twinkle client.
42+
43+ This function:
44+
45+ * Resolves ``base_url`` and ``api_key`` (env-vars as fallbacks).
46+ * Sets both values into the shared context so that all other client objects
47+ (``MultiLoraTransformersModel``, ``vLLMSampler``, processor clients) created
48+ afterwards automatically inherit the same server configuration.
49+ * Creates a server-side session and stores the ``session_id`` in context so
50+ every subsequent HTTP request carries it in ``X-Twinkle-Session-Id``.
51+ * Starts a background thread that touches the session every
52+ ``session_heartbeat_interval`` seconds.
53+
54+ Args:
55+ base_url: Twinkle server base URL. Falls back to ``TWINKLE_SERVER_URL``.
56+ api_key: Authentication token. Falls back to ``TWINKLE_SERVER_TOKEN``.
57+ session_heartbeat_interval: Seconds between session touch calls (default: 30).
58+ **kwargs: Additional keyword arguments forwarded to :class:`TwinkleClient`.
59+
60+ Returns:
61+ An initialised :class:`~twinkle_client.manager.TwinkleClient` instance.
3462 """
35- from .http .utils import get_api_key , get_base_url , set_api_key , set_base_url
36- from .manager import TwinkleClient , TwinkleClientError
37-
38- if base_url is not None :
39- set_base_url (base_url )
40- else :
41- base_url = get_base_url ()
42-
43- if api_key is not None :
44- set_api_key (api_key )
45- else :
46- api_key = get_api_key ()
47-
48- return TwinkleClient (base_url = base_url , api_key = api_key , ** kwargs )
63+ from .manager import TwinkleClient
64+ return TwinkleClient (
65+ base_url = base_url ,
66+ api_key = api_key ,
67+ session_heartbeat_interval = session_heartbeat_interval ,
68+ ** kwargs ,
69+ )
4970
5071
5172__all__ = ['init_tinker_client' , 'init_twinkle_client' ]
0 commit comments