diff --git a/.gitignore b/.gitignore index b18810b57..79f88f5fd 100644 --- a/.gitignore +++ b/.gitignore @@ -132,3 +132,5 @@ dev.sh .jupyter_ystore.db .yarn + +.conda/ diff --git a/examples/commands.ipynb b/examples/commands.ipynb index f2fa722b4..e79e9588f 100644 --- a/examples/commands.ipynb +++ b/examples/commands.ipynb @@ -1117,7 +1117,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.11.5" } }, "nbformat": 4, diff --git a/examples/errors.ipynb b/examples/errors.ipynb index d6d733ea5..0f3fe8525 100644 --- a/examples/errors.ipynb +++ b/examples/errors.ipynb @@ -259,7 +259,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.8" + "version": "3.11.5" } }, "nbformat": 4, diff --git a/examples/images.ipynb b/examples/images.ipynb index be3887ef7..0948fd1e7 100644 --- a/examples/images.ipynb +++ b/examples/images.ipynb @@ -136,7 +136,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.5" } }, "nbformat": 4, diff --git a/packages/jupyter-ai-magics/jupyter_ai_magics/__init__.py b/packages/jupyter-ai-magics/jupyter_ai_magics/__init__.py index b991a49b9..fb6db0328 100644 --- a/packages/jupyter-ai-magics/jupyter_ai_magics/__init__.py +++ b/packages/jupyter-ai-magics/jupyter_ai_magics/__init__.py @@ -7,6 +7,7 @@ GPT4AllEmbeddingsProvider, HfHubEmbeddingsProvider, OpenAIEmbeddingsProvider, + QianfanEmbeddingsEndpointProvider, ) from .exception import store_exception from .magics import AiMagics @@ -26,6 +27,7 @@ GPT4AllProvider, HfHubProvider, OpenAIProvider, + QianfanProvider, SmEndpointProvider, ) diff --git a/packages/jupyter-ai-magics/jupyter_ai_magics/aliases.py b/packages/jupyter-ai-magics/jupyter_ai_magics/aliases.py index ab383af32..96cac4efe 100644 --- a/packages/jupyter-ai-magics/jupyter_ai_magics/aliases.py +++ b/packages/jupyter-ai-magics/jupyter_ai_magics/aliases.py @@ -3,4 +3,7 @@ "gpt3": "openai:text-davinci-003", "chatgpt": "openai-chat:gpt-3.5-turbo", "gpt4": "openai-chat:gpt-4", + "ernie-bot": "qianfan:ERNIE-Bot", + "ernie-bot-4": "qianfan:ERNIE-Bot-4", + "titan": "bedrock:amazon.titan-tg1-large", } diff --git a/packages/jupyter-ai-magics/jupyter_ai_magics/embedding_providers.py b/packages/jupyter-ai-magics/jupyter_ai_magics/embedding_providers.py index 7dcda78b8..75c8fa0a3 100644 --- a/packages/jupyter-ai-magics/jupyter_ai_magics/embedding_providers.py +++ b/packages/jupyter-ai-magics/jupyter_ai_magics/embedding_providers.py @@ -6,6 +6,7 @@ AwsAuthStrategy, EnvAuthStrategy, Field, + MultiEnvAuthStrategy, ) from langchain.embeddings import ( BedrockEmbeddings, @@ -13,6 +14,7 @@ GPT4AllEmbeddings, HuggingFaceHubEmbeddings, OpenAIEmbeddings, + QianfanEmbeddingsEndpoint, ) from langchain.pydantic_v1 import BaseModel, Extra @@ -127,3 +129,14 @@ def __init__(self, **kwargs): models = ["all-MiniLM-L6-v2-f16"] model_id_key = "model_id" pypi_package_deps = ["gpt4all"] + + +class QianfanEmbeddingsEndpointProvider( + BaseEmbeddingsProvider, QianfanEmbeddingsEndpoint +): + id = "qianfan" + name = "ERNIE-Bot" + models = ["ERNIE-Bot", "ERNIE-Bot-4"] + model_id_key = "model" + pypi_package_deps = ["qianfan"] + auth_strategy = MultiEnvAuthStrategy(names=["QIANFAN_AK", "QIANFAN_SK"]) diff --git a/packages/jupyter-ai-magics/jupyter_ai_magics/magics.py b/packages/jupyter-ai-magics/jupyter_ai_magics/magics.py index 8763566f4..5b4fd990e 100644 --- a/packages/jupyter-ai-magics/jupyter_ai_magics/magics.py +++ b/packages/jupyter-ai-magics/jupyter_ai_magics/magics.py @@ -11,6 +11,7 @@ from IPython import get_ipython from IPython.core.magic import Magics, line_cell_magic, magics_class from IPython.display import HTML, JSON, Markdown, Math +from jupyter_ai_magics.aliases import MODEL_ID_ALIASES from jupyter_ai_magics.utils import decompose_model_id, get_lm_providers from langchain.chains import LLMChain from langchain.schema import HumanMessage @@ -28,14 +29,6 @@ ) from .providers import BaseProvider -MODEL_ID_ALIASES = { - "gpt2": "huggingface_hub:gpt2", - "gpt3": "openai:text-davinci-003", - "chatgpt": "openai-chat:gpt-3.5-turbo", - "gpt4": "openai-chat:gpt-4", - "titan": "bedrock:amazon.titan-tg1-large", -} - class TextOrMarkdown: def __init__(self, text, markdown): diff --git a/packages/jupyter-ai-magics/jupyter_ai_magics/providers.py b/packages/jupyter-ai-magics/jupyter_ai_magics/providers.py index 8155c2f2b..a88eb55e4 100644 --- a/packages/jupyter-ai-magics/jupyter_ai_magics/providers.py +++ b/packages/jupyter-ai-magics/jupyter_ai_magics/providers.py @@ -23,6 +23,7 @@ BedrockChat, ChatAnthropic, ChatOpenAI, + QianfanChatEndpoint, ) from langchain.chat_models.base import BaseChatModel from langchain.llms import ( @@ -34,6 +35,7 @@ HuggingFaceHub, OpenAI, OpenAIChat, + QianfanLLMEndpoint, SagemakerEndpoint, ) from langchain.llms.sagemaker_endpoint import LLMContentHandler @@ -703,3 +705,13 @@ async def _agenerate(self, *args, **kwargs) -> Coroutine[Any, Any, LLMResult]: @property def allows_concurrency(self): return not "anthropic" in self.model_id + + +# Baidu QianfanChat provider. temporarily living as a separate class until +class QianfanProvider(BaseProvider, QianfanChatEndpoint): + id = "qianfan" + name = "ERNIE-Bot" + models = ["ERNIE-Bot", "ERNIE-Bot-4"] + model_id_key = "model_name" + pypi_package_deps = ["qianfan"] + auth_strategy = MultiEnvAuthStrategy(names=["QIANFAN_AK", "QIANFAN_SK"]) diff --git a/packages/jupyter-ai-magics/pyproject.toml b/packages/jupyter-ai-magics/pyproject.toml index bb7a6dc57..4ff2f8192 100644 --- a/packages/jupyter-ai-magics/pyproject.toml +++ b/packages/jupyter-ai-magics/pyproject.toml @@ -50,7 +50,8 @@ all = [ "ipywidgets", "pillow", "openai", - "boto3" + "boto3", + "qianfan" ] [project.entry-points."jupyter_ai.model_providers"] @@ -67,6 +68,7 @@ sagemaker-endpoint = "jupyter_ai_magics:SmEndpointProvider" amazon-bedrock = "jupyter_ai_magics:BedrockProvider" anthropic-chat = "jupyter_ai_magics:ChatAnthropicProvider" amazon-bedrock-chat = "jupyter_ai_magics:BedrockChatProvider" +qianfan = "jupyter_ai_magics:QianfanProvider" [project.entry-points."jupyter_ai.embeddings_model_providers"] bedrock = "jupyter_ai_magics:BedrockEmbeddingsProvider" @@ -74,6 +76,7 @@ cohere = "jupyter_ai_magics:CohereEmbeddingsProvider" gpt4all = "jupyter_ai_magics:GPT4AllEmbeddingsProvider" huggingface_hub = "jupyter_ai_magics:HfHubEmbeddingsProvider" openai = "jupyter_ai_magics:OpenAIEmbeddingsProvider" +qianfan = "jupyter_ai_magics:QianfanEmbeddingsEndpointProvider" [tool.hatch.version] source = "nodejs"