|
4 | 4 | import logging
|
5 | 5 | import time
|
6 | 6 | from collections.abc import Generator
|
7 |
| -from typing import Optional, Union, cast |
| 7 | +from typing import TYPE_CHECKING, Optional, Union, cast |
8 | 8 |
|
9 | 9 | import google.auth.transport.requests
|
10 | 10 | import requests
|
11 |
| -import vertexai.generative_models as glm |
12 | 11 | from anthropic import AnthropicVertex, Stream
|
13 | 12 | from anthropic.types import (
|
14 | 13 | ContentBlockDeltaEvent,
|
|
19 | 18 | MessageStreamEvent,
|
20 | 19 | )
|
21 | 20 | from google.api_core import exceptions
|
22 |
| -from google.cloud import aiplatform |
23 |
| -from google.oauth2 import service_account |
24 | 21 | from PIL import Image
|
25 | 22 |
|
26 | 23 | from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta, LLMUsage
|
|
47 | 44 | from core.model_runtime.errors.validate import CredentialsValidateFailedError
|
48 | 45 | from core.model_runtime.model_providers.__base.large_language_model import LargeLanguageModel
|
49 | 46 |
|
| 47 | +if TYPE_CHECKING: |
| 48 | + import vertexai.generative_models as glm |
| 49 | + |
50 | 50 | logger = logging.getLogger(__name__)
|
51 | 51 |
|
52 | 52 |
|
@@ -102,6 +102,8 @@ def _generate_anthropic(
|
102 | 102 | :param stream: is stream response
|
103 | 103 | :return: full response or stream response chunk generator result
|
104 | 104 | """
|
| 105 | + from google.oauth2 import service_account |
| 106 | + |
105 | 107 | # use Anthropic official SDK references
|
106 | 108 | # - https://github.com/anthropics/anthropic-sdk-python
|
107 | 109 | service_account_key = credentials.get("vertex_service_account_key", "")
|
@@ -406,13 +408,15 @@ def _convert_messages_to_prompt(self, messages: list[PromptMessage]) -> str:
|
406 | 408 |
|
407 | 409 | return text.rstrip()
|
408 | 410 |
|
409 |
| - def _convert_tools_to_glm_tool(self, tools: list[PromptMessageTool]) -> glm.Tool: |
| 411 | + def _convert_tools_to_glm_tool(self, tools: list[PromptMessageTool]) -> "glm.Tool": |
410 | 412 | """
|
411 | 413 | Convert tool messages to glm tools
|
412 | 414 |
|
413 | 415 | :param tools: tool messages
|
414 | 416 | :return: glm tools
|
415 | 417 | """
|
| 418 | + import vertexai.generative_models as glm |
| 419 | + |
416 | 420 | return glm.Tool(
|
417 | 421 | function_declarations=[
|
418 | 422 | glm.FunctionDeclaration(
|
@@ -473,6 +477,10 @@ def _generate(
|
473 | 477 | :param user: unique user id
|
474 | 478 | :return: full response or stream response chunk generator result
|
475 | 479 | """
|
| 480 | + import vertexai.generative_models as glm |
| 481 | + from google.cloud import aiplatform |
| 482 | + from google.oauth2 import service_account |
| 483 | + |
476 | 484 | config_kwargs = model_parameters.copy()
|
477 | 485 | config_kwargs["max_output_tokens"] = config_kwargs.pop("max_tokens_to_sample", None)
|
478 | 486 |
|
@@ -522,7 +530,7 @@ def _generate(
|
522 | 530 | return self._handle_generate_response(model, credentials, response, prompt_messages)
|
523 | 531 |
|
524 | 532 | def _handle_generate_response(
|
525 |
| - self, model: str, credentials: dict, response: glm.GenerationResponse, prompt_messages: list[PromptMessage] |
| 533 | + self, model: str, credentials: dict, response: "glm.GenerationResponse", prompt_messages: list[PromptMessage] |
526 | 534 | ) -> LLMResult:
|
527 | 535 | """
|
528 | 536 | Handle llm response
|
@@ -554,7 +562,7 @@ def _handle_generate_response(
|
554 | 562 | return result
|
555 | 563 |
|
556 | 564 | def _handle_generate_stream_response(
|
557 |
| - self, model: str, credentials: dict, response: glm.GenerationResponse, prompt_messages: list[PromptMessage] |
| 565 | + self, model: str, credentials: dict, response: "glm.GenerationResponse", prompt_messages: list[PromptMessage] |
558 | 566 | ) -> Generator:
|
559 | 567 | """
|
560 | 568 | Handle llm stream response
|
@@ -638,13 +646,15 @@ def _convert_one_message_to_text(self, message: PromptMessage) -> str:
|
638 | 646 |
|
639 | 647 | return message_text
|
640 | 648 |
|
641 |
| - def _format_message_to_glm_content(self, message: PromptMessage) -> glm.Content: |
| 649 | + def _format_message_to_glm_content(self, message: PromptMessage) -> "glm.Content": |
642 | 650 | """
|
643 | 651 | Format a single message into glm.Content for Google API
|
644 | 652 |
|
645 | 653 | :param message: one PromptMessage
|
646 | 654 | :return: glm Content representation of message
|
647 | 655 | """
|
| 656 | + import vertexai.generative_models as glm |
| 657 | + |
648 | 658 | if isinstance(message, UserPromptMessage):
|
649 | 659 | glm_content = glm.Content(role="user", parts=[])
|
650 | 660 |
|
|
0 commit comments