Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .fernignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
.github/ISSUE_TEMPLATE/

src/vectara/client.py
src/vectara/base_client.py # do not remove
# src/vectara/base_client.py -- removed to let Fern regenerate with new modules (agents, tools, etc.)
src/vectara/auth/client.py

src/vectara/config/
Expand Down
107 changes: 99 additions & 8 deletions src/vectara/client.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import logging
import typing
from typing import Union, Iterator, Optional

from vectara.managers.corpus import CorpusManager
from vectara.managers.upload import UploadManager
from vectara.managers.document import DocumentManager
from vectara.utils import LabHelper

from . import SearchCorporaParameters, GenerationParameters, ChatParameters, ChatStreamedResponse
from .base_client import BaseVectara, AsyncBaseVectara, OMIT
from . import SearchCorporaParameters, GenerationParameters, ChatParameters, ChatStreamedResponse, QueryStreamedResponse, QueryFullResponse, ChatFullResponse
from .base_client import BaseVectara, AsyncBaseVectara
from .core import RequestOptions

# Sentinel for optional parameters (matches Fern's convention)
OMIT = typing.cast(typing.Any, ...)


class ChatSession:
def __init__(
Expand Down Expand Up @@ -94,13 +98,9 @@ class Vectara(BaseVectara):
We extend the Vectara client, adding additional helper services. Due to the methodology used in the
Vectara constructor, hard-coding dependencies and using an internal wrapper, we use lazy initialization
for the helper classes like the CorpusManager.

TODO Change Client to build dependencies inside constructor (harder to decouple, but removes optionality)

"""

def __init__(self, *args,
**kwargs):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.logger = logging.getLogger(self.__class__.__name__)
self.corpus_manager: Union[None, CorpusManager] = None
Expand All @@ -120,6 +120,98 @@ def set_document_manager(self, document_manager: DocumentManager) -> None:
def set_lab_helper(self, lab_helper: LabHelper) -> None:
self.lab_helper = lab_helper

def query(
self,
*,
query: str,
search: SearchCorporaParameters,
generation: Optional[GenerationParameters] = OMIT,
save_history: Optional[bool] = OMIT,
request_timeout: Optional[int] = None,
request_timeout_millis: Optional[int] = None,
request_options: Optional[RequestOptions] = None,
) -> QueryFullResponse:
"""Convenience method for querying across corpora."""
return self.queries.query(
query=query,
search=search,
generation=generation,
save_history=save_history,
request_timeout=request_timeout,
request_timeout_millis=request_timeout_millis,
request_options=request_options,
)

def query_stream(
self,
*,
query: str,
search: SearchCorporaParameters,
generation: Optional[GenerationParameters] = OMIT,
save_history: Optional[bool] = OMIT,
request_timeout: Optional[int] = None,
request_timeout_millis: Optional[int] = None,
request_options: Optional[RequestOptions] = None,
) -> Iterator[QueryStreamedResponse]:
"""Convenience method for streaming query across corpora."""
return self.queries.query_stream(
query=query,
search=search,
generation=generation,
save_history=save_history,
request_timeout=request_timeout,
request_timeout_millis=request_timeout_millis,
request_options=request_options,
)

def chat(
self,
*,
query: str,
search: SearchCorporaParameters,
generation: Optional[GenerationParameters] = OMIT,
chat: Optional[ChatParameters] = OMIT,
save_history: Optional[bool] = OMIT,
request_timeout: Optional[int] = None,
request_timeout_millis: Optional[int] = None,
request_options: Optional[RequestOptions] = None,
) -> ChatFullResponse:
"""Convenience method for creating a chat."""
return self.chats.create(
query=query,
search=search,
generation=generation,
chat=chat,
save_history=save_history,
request_timeout=request_timeout,
request_timeout_millis=request_timeout_millis,
request_options=request_options,
)

def chat_stream(
self,
*,
query: str,
search: SearchCorporaParameters,
generation: Optional[GenerationParameters] = OMIT,
chat: Optional[ChatParameters] = OMIT,
save_history: Optional[bool] = OMIT,
request_timeout: Optional[int] = None,
request_timeout_millis: Optional[int] = None,
request_options: Optional[RequestOptions] = None,
) -> Iterator[ChatStreamedResponse]:
"""Convenience method for streaming chat."""
return self.chats.create_stream(
query=query,
search=search,
generation=generation,
chat=chat,
save_history=save_history,
request_timeout=request_timeout,
request_timeout_millis=request_timeout_millis,
request_options=request_options,
)

def create_chat_session(
self,
search: SearchCorporaParameters,
Expand All @@ -145,4 +237,3 @@ def create_chat_session(

class AsyncVectara(AsyncBaseVectara):
pass

Loading