llama-index
36 строк · 1.2 Кб
1from typing import Optional2
3from llama_index.legacy.core.base_selector import BaseSelector4from llama_index.legacy.selectors.llm_selectors import (5LLMMultiSelector,6LLMSingleSelector,7)
8from llama_index.legacy.selectors.pydantic_selectors import (9PydanticMultiSelector,10PydanticSingleSelector,11)
12from llama_index.legacy.service_context import ServiceContext13
14
15def get_selector_from_context(16service_context: ServiceContext, is_multi: bool = False17) -> BaseSelector:18"""Get a selector from a service context. Prefers Pydantic selectors if possible."""19selector: Optional[BaseSelector] = None20
21if is_multi:22try:23llm = service_context.llm24selector = PydanticMultiSelector.from_defaults(llm=llm) # type: ignore25except ValueError:26selector = LLMMultiSelector.from_defaults(service_context=service_context)27else:28try:29llm = service_context.llm30selector = PydanticSingleSelector.from_defaults(llm=llm) # type: ignore31except ValueError:32selector = LLMSingleSelector.from_defaults(service_context=service_context)33
34assert selector is not None35
36return selector37