본문 바로가기

Artificial Intelligence/LLM

[LLM] Google Generative AI, LangChain으로 LLM 사용하기

Google Generative AI API 인 Google PaLM 2 API를 사용하기 위해 API Key를 우선 발급한다.


https://aistudio.google.com/app
위 링크를 클릭하여 사이트로 이동 후

 

Sign In 버튼 선택 후 본인의 Google 계정으로 로그인 한다.

 

약관 동의 후 계속 입력

 

좌측 상단 Get API Key 선택

 

API 키 만들기 -> 새 프로젝트에서 API 키 만들기 선택

 

API Key 생성 후 복사 버튼으로 복사해서 간직한다.

 

Python JupyterLab 에서 Google LLM 동작 시키기

 
[1]:
위에서 생성한 API key가 제대로 생성되었는지 확인을 하기 위해 JupyterLab에서 아래 API를 호출해 본다.
호출 후 응답이 오면 정상적으로 API key가 동작하는것이다.
!curl \
-H 'Content-Type: application/json' \
-d '{"contents":[{"parts":[{"text":"Write a story about a magic backpack"}]}]}' \
-X POST https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=AIzaSyBtalyoCQDZ7BLVdp4rauxxxxxxxxxxxxx
{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "In the quaint town of Willow Creek, amidst the whispering willows and blooming wildflowers, there lived a peculiar young girl named Anya. Unknown to her, her life was about to take an extraordinary turn when she stumbled upon a hidden treasure—a backpack unlike any other.\n\nAs she rummaged through her grandmother's attic, Anya's eyes sparkled at the sight of an old, dusty backpack tucked away in a forgotten corner. Curiosity got the better of her, and she reached for it. As her fingers brushed against the leather, a faint hum echoed through the room.\n\nSuddenly, the backpack began to glow with an ethereal light. Anya gasped in amazement as it unzipped itself, revealing a kaleidoscopic swirl of colors and symbols. Intrigued, she gingerly slipped it onto her shoulders, and that was when the magic began.\n\nWith each step she took, the backpack seemed to adapt to her needs. Its compartments expanded and contracted magically, holding all her belongings effortlessly. But that wasn't all. As Anya walked through the town, she noticed that people subconsciously made way for her, as if drawn to an inexplicable force emanating from the enchanted backpack.\n\nOne afternoon, as Anya explored the nearby forest, she stumbled upon a group of hikers who had lost their way. Without hesitation, she unzipped a hidden compartment in the backpack that contained a compass and a map. The hikers gasped in gratitude as Anya expertly navigated them back to safety.\n\nWord of Anya's extraordinary backpack spread like wildfire. Soon, people from far and wide sought her help with their troubles. The backpack healed the sick, provided shelter during storms, and even extinguished fires with a mysterious water spout.\n\nBut with great power came great responsibility. As Anya realized the true extent of her backpack's magic, she dedicated herself to using it for good. She became known as \"Anya the Backpack Keeper,\" a symbol of hope and kindness that touched the hearts of all who encountered her.\n\nAnd so, the magic backpack became an integral part of the legend of Willow Creek, a tale whispered throughout generations, reminding people that even the most ordinary of objects can hold extraordinary power when guided by a heart filled with compassion."
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 7,
    "candidatesTokenCount": 447,
    "totalTokenCount": 454
  }
}

 

필요한 packages를 설치한다.

!pip install langchain==0.1.9
!pip install langchain_google_genai==0.0.9
!pip install langchain-community==0.0.24
!pip install langchainhub==0.1.15
!pip install tiktoken==0.6.0
!pip install chromadb==0.4.24

 

실행 결과

더보기
Collecting langchain==0.1.9
  Using cached langchain-0.1.9-py3-none-any.whl.metadata (13 kB)
Requirement already satisfied: PyYAML>=5.3 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain==0.1.9) (6.0.1)
Collecting SQLAlchemy<3,>=1.4 (from langchain==0.1.9)
  Downloading SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.6 kB)
Collecting aiohttp<4.0.0,>=3.8.3 (from langchain==0.1.9)
  Using cached aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.5 kB)
Collecting dataclasses-json<0.7,>=0.5.7 (from langchain==0.1.9)
  Downloading dataclasses_json-0.6.6-py3-none-any.whl.metadata (25 kB)
Collecting jsonpatch<2.0,>=1.33 (from langchain==0.1.9)
  Using cached jsonpatch-1.33-py2.py3-none-any.whl.metadata (3.0 kB)
Collecting langchain-community<0.1,>=0.0.21 (from langchain==0.1.9)
  Downloading langchain_community-0.0.38-py3-none-any.whl.metadata (8.7 kB)
Collecting langchain-core<0.2,>=0.1.26 (from langchain==0.1.9)
  Downloading langchain_core-0.1.52-py3-none-any.whl.metadata (5.9 kB)
Collecting langsmith<0.2.0,>=0.1.0 (from langchain==0.1.9)
  Downloading langsmith-0.1.59-py3-none-any.whl.metadata (13 kB)
Requirement already satisfied: numpy<2,>=1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain==0.1.9) (1.26.4)
Collecting pydantic<3,>=1 (from langchain==0.1.9)
  Downloading pydantic-2.7.1-py3-none-any.whl.metadata (107 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 107.3/107.3 kB 5.9 MB/s eta 0:00:00
Requirement already satisfied: requests<3,>=2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain==0.1.9) (2.31.0)
Collecting tenacity<9.0.0,>=8.1.0 (from langchain==0.1.9)
  Downloading tenacity-8.3.0-py3-none-any.whl.metadata (1.2 kB)
Collecting aiosignal>=1.1.2 (from aiohttp<4.0.0,>=3.8.3->langchain==0.1.9)
  Using cached aiosignal-1.3.1-py3-none-any.whl.metadata (4.0 kB)
Requirement already satisfied: attrs>=17.3.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain==0.1.9) (23.2.0)
Collecting frozenlist>=1.1.1 (from aiohttp<4.0.0,>=3.8.3->langchain==0.1.9)
  Using cached frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)
Collecting multidict<7.0,>=4.5 (from aiohttp<4.0.0,>=3.8.3->langchain==0.1.9)
  Using cached multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.2 kB)
Collecting yarl<2.0,>=1.0 (from aiohttp<4.0.0,>=3.8.3->langchain==0.1.9)
  Using cached yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (31 kB)
Collecting marshmallow<4.0.0,>=3.18.0 (from dataclasses-json<0.7,>=0.5.7->langchain==0.1.9)
  Downloading marshmallow-3.21.2-py3-none-any.whl.metadata (7.1 kB)
Collecting typing-inspect<1,>=0.4.0 (from dataclasses-json<0.7,>=0.5.7->langchain==0.1.9)
  Using cached typing_inspect-0.9.0-py3-none-any.whl.metadata (1.5 kB)
Requirement already satisfied: jsonpointer>=1.9 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from jsonpatch<2.0,>=1.33->langchain==0.1.9) (2.4)
Collecting packaging<24.0,>=23.2 (from langchain-core<0.2,>=0.1.26->langchain==0.1.9)
  Using cached packaging-23.2-py3-none-any.whl.metadata (3.2 kB)
Collecting orjson<4.0.0,>=3.9.14 (from langsmith<0.2.0,>=0.1.0->langchain==0.1.9)
  Downloading orjson-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (49 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.7/49.7 kB 4.9 MB/s eta 0:00:00
Collecting annotated-types>=0.4.0 (from pydantic<3,>=1->langchain==0.1.9)
  Using cached annotated_types-0.6.0-py3-none-any.whl.metadata (12 kB)
Collecting pydantic-core==2.18.2 (from pydantic<3,>=1->langchain==0.1.9)
  Downloading pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.5 kB)
Requirement already satisfied: typing-extensions>=4.6.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from pydantic<3,>=1->langchain==0.1.9) (4.11.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchain==0.1.9) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchain==0.1.9) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchain==0.1.9) (2.2.1)
Requirement already satisfied: certifi>=2017.4.17 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchain==0.1.9) (2024.2.2)
Collecting greenlet!=0.4.17 (from SQLAlchemy<3,>=1.4->langchain==0.1.9)
  Using cached greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (3.8 kB)
Collecting mypy-extensions>=0.3.0 (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain==0.1.9)
  Using cached mypy_extensions-1.0.0-py3-none-any.whl.metadata (1.1 kB)
Using cached langchain-0.1.9-py3-none-any.whl (816 kB)
Using cached aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)
Downloading dataclasses_json-0.6.6-py3-none-any.whl (28 kB)
Using cached jsonpatch-1.33-py2.py3-none-any.whl (12 kB)
Downloading langchain_community-0.0.38-py3-none-any.whl (2.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 20.0 MB/s eta 0:00:00a 0:00:01
Downloading langchain_core-0.1.52-py3-none-any.whl (302 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 302.9/302.9 kB 21.8 MB/s eta 0:00:00
Downloading langsmith-0.1.59-py3-none-any.whl (121 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.2/121.2 kB 15.0 MB/s eta 0:00:00
Downloading pydantic-2.7.1-py3-none-any.whl (409 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 409.3/409.3 kB 25.5 MB/s eta 0:00:00
Downloading pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 42.5 MB/s eta 0:00:00a 0:00:01
Downloading SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 50.2 MB/s eta 0:00:00a 0:00:01
Downloading tenacity-8.3.0-py3-none-any.whl (25 kB)
Using cached aiosignal-1.3.1-py3-none-any.whl (7.6 kB)
Using cached annotated_types-0.6.0-py3-none-any.whl (12 kB)
Using cached frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (272 kB)
Using cached greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (620 kB)
Downloading marshmallow-3.21.2-py3-none-any.whl (49 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.3/49.3 kB 5.7 MB/s eta 0:00:00
Using cached multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (128 kB)
Downloading orjson-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (142 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 142.5/142.5 kB 18.2 MB/s eta 0:00:00
Using cached packaging-23.2-py3-none-any.whl (53 kB)
Using cached typing_inspect-0.9.0-py3-none-any.whl (8.8 kB)
Using cached yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (328 kB)
Using cached mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)
Installing collected packages: tenacity, pydantic-core, packaging, orjson, mypy-extensions, multidict, jsonpatch, greenlet, frozenlist, annotated-types, yarl, typing-inspect, SQLAlchemy, pydantic, marshmallow, aiosignal, langsmith, dataclasses-json, aiohttp, langchain-core, langchain-community, langchain
  Attempting uninstall: packaging
    Found existing installation: packaging 24.0
    Uninstalling packaging-24.0:
      Successfully uninstalled packaging-24.0
Successfully installed SQLAlchemy-2.0.30 aiohttp-3.9.5 aiosignal-1.3.1 annotated-types-0.6.0 dataclasses-json-0.6.6 frozenlist-1.4.1 greenlet-3.0.3 jsonpatch-1.33 langchain-0.1.9 langchain-community-0.0.38 langchain-core-0.1.52 langsmith-0.1.59 marshmallow-3.21.2 multidict-6.0.5 mypy-extensions-1.0.0 orjson-3.10.3 packaging-23.2 pydantic-2.7.1 pydantic-core-2.18.2 tenacity-8.3.0 typing-inspect-0.9.0 yarl-1.9.4
Collecting langchain_google_genai==0.0.9
  Using cached langchain_google_genai-0.0.9-py3-none-any.whl.metadata (2.9 kB)
Collecting google-generativeai<0.4.0,>=0.3.1 (from langchain_google_genai==0.0.9)
  Using cached google_generativeai-0.3.2-py3-none-any.whl.metadata (5.9 kB)
Requirement already satisfied: langchain-core<0.2,>=0.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain_google_genai==0.0.9) (0.1.52)
Collecting google-ai-generativelanguage==0.4.0 (from google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9)
  Using cached google_ai_generativelanguage-0.4.0-py3-none-any.whl.metadata (5.1 kB)
Requirement already satisfied: google-auth in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (2.29.0)
Collecting google-api-core (from google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9)
  Downloading google_api_core-2.19.0-py3-none-any.whl.metadata (2.7 kB)
Requirement already satisfied: typing-extensions in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (4.11.0)
Requirement already satisfied: protobuf in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (4.25.3)
Collecting tqdm (from google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9)
  Downloading tqdm-4.66.4-py3-none-any.whl.metadata (57 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.6/57.6 kB 2.6 MB/s eta 0:00:00
Collecting proto-plus<2.0.0dev,>=1.22.3 (from google-ai-generativelanguage==0.4.0->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9)
  Using cached proto_plus-1.23.0-py3-none-any.whl.metadata (2.2 kB)
Requirement already satisfied: PyYAML>=5.3 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (6.0.1)
Requirement already satisfied: jsonpatch<2.0,>=1.33 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (1.33)
Requirement already satisfied: langsmith<0.2.0,>=0.1.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (0.1.59)
Requirement already satisfied: packaging<24.0,>=23.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (23.2)
Requirement already satisfied: pydantic<3,>=1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (2.7.1)
Requirement already satisfied: tenacity<9.0.0,>=8.1.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (8.3.0)
Collecting googleapis-common-protos<2.0.dev0,>=1.56.2 (from google-api-core->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9)
  Using cached googleapis_common_protos-1.63.0-py2.py3-none-any.whl.metadata (1.5 kB)
Requirement already satisfied: requests<3.0.0.dev0,>=2.18.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-api-core->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (2.31.0)
Requirement already satisfied: cachetools<6.0,>=2.0.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-auth->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (5.3.3)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-auth->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (0.4.0)
Requirement already satisfied: rsa<5,>=3.1.4 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-auth->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (4.9)
Requirement already satisfied: jsonpointer>=1.9 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from jsonpatch<2.0,>=1.33->langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (2.4)
Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langsmith<0.2.0,>=0.1.0->langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (3.10.3)
Requirement already satisfied: annotated-types>=0.4.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from pydantic<3,>=1->langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (0.6.0)
Requirement already satisfied: pydantic-core==2.18.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from pydantic<3,>=1->langchain-core<0.2,>=0.1->langchain_google_genai==0.0.9) (2.18.2)
Requirement already satisfied: grpcio<2.0dev,>=1.33.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.10.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<3.0.0dev,>=1.34.0->google-ai-generativelanguage==0.4.0->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (1.62.1)
Collecting grpcio-status<2.0.dev0,>=1.33.2 (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.10.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<3.0.0dev,>=1.34.0->google-ai-generativelanguage==0.4.0->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9)
  Downloading grpcio_status-1.63.0-py3-none-any.whl.metadata (1.1 kB)
Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from pyasn1-modules>=0.2.1->google-auth->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (0.6.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3.0.0.dev0,>=2.18.0->google-api-core->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3.0.0.dev0,>=2.18.0->google-api-core->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3.0.0.dev0,>=2.18.0->google-api-core->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (2.2.1)
Requirement already satisfied: certifi>=2017.4.17 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3.0.0.dev0,>=2.18.0->google-api-core->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9) (2024.2.2)
INFO: pip is looking at multiple versions of grpcio-status to determine which version is compatible with other requirements. This could take a while.
  Using cached grpcio_status-1.62.2-py3-none-any.whl.metadata (1.3 kB)
Collecting grpcio<2.0dev,>=1.33.2 (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.10.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<3.0.0dev,>=1.34.0->google-ai-generativelanguage==0.4.0->google-generativeai<0.4.0,>=0.3.1->langchain_google_genai==0.0.9)
  Downloading grpcio-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.2 kB)
Using cached langchain_google_genai-0.0.9-py3-none-any.whl (17 kB)
Using cached google_generativeai-0.3.2-py3-none-any.whl (146 kB)
Using cached google_ai_generativelanguage-0.4.0-py3-none-any.whl (598 kB)
Downloading google_api_core-2.19.0-py3-none-any.whl (139 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 139.0/139.0 kB 8.5 MB/s eta 0:00:00
Downloading tqdm-4.66.4-py3-none-any.whl (78 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.3/78.3 kB 6.5 MB/s eta 0:00:00
Using cached googleapis_common_protos-1.63.0-py2.py3-none-any.whl (229 kB)
Using cached proto_plus-1.23.0-py3-none-any.whl (48 kB)
Using cached grpcio_status-1.62.2-py3-none-any.whl (14 kB)
Downloading grpcio-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.6/5.6 MB 37.2 MB/s eta 0:00:0000:0100:01
Installing collected packages: tqdm, proto-plus, grpcio, googleapis-common-protos, grpcio-status, google-api-core, google-ai-generativelanguage, google-generativeai, langchain_google_genai
  Attempting uninstall: grpcio
    Found existing installation: grpcio 1.62.1
    Uninstalling grpcio-1.62.1:
      Successfully uninstalled grpcio-1.62.1
Successfully installed google-ai-generativelanguage-0.4.0 google-api-core-2.19.0 google-generativeai-0.3.2 googleapis-common-protos-1.63.0 grpcio-1.63.0 grpcio-status-1.62.2 langchain_google_genai-0.0.9 proto-plus-1.23.0 tqdm-4.66.4
Collecting langchain-community==0.0.24
  Using cached langchain_community-0.0.24-py3-none-any.whl.metadata (8.1 kB)
Requirement already satisfied: PyYAML>=5.3 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-community==0.0.24) (6.0.1)
Requirement already satisfied: SQLAlchemy<3,>=1.4 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-community==0.0.24) (2.0.30)
Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-community==0.0.24) (3.9.5)
Requirement already satisfied: dataclasses-json<0.7,>=0.5.7 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-community==0.0.24) (0.6.6)
Requirement already satisfied: langchain-core<0.2,>=0.1.26 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-community==0.0.24) (0.1.52)
Requirement already satisfied: langsmith<0.2.0,>=0.1.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-community==0.0.24) (0.1.59)
Requirement already satisfied: numpy<2,>=1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-community==0.0.24) (1.26.4)
Requirement already satisfied: requests<3,>=2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-community==0.0.24) (2.31.0)
Requirement already satisfied: tenacity<9.0.0,>=8.1.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-community==0.0.24) (8.3.0)
Requirement already satisfied: aiosignal>=1.1.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.0.24) (1.3.1)
Requirement already satisfied: attrs>=17.3.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.0.24) (23.2.0)
Requirement already satisfied: frozenlist>=1.1.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.0.24) (1.4.1)
Requirement already satisfied: multidict<7.0,>=4.5 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.0.24) (6.0.5)
Requirement already satisfied: yarl<2.0,>=1.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.0.24) (1.9.4)
Requirement already satisfied: marshmallow<4.0.0,>=3.18.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community==0.0.24) (3.21.2)
Requirement already satisfied: typing-inspect<1,>=0.4.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community==0.0.24) (0.9.0)
Requirement already satisfied: jsonpatch<2.0,>=1.33 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-core<0.2,>=0.1.26->langchain-community==0.0.24) (1.33)
Requirement already satisfied: packaging<24.0,>=23.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-core<0.2,>=0.1.26->langchain-community==0.0.24) (23.2)
Requirement already satisfied: pydantic<3,>=1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchain-core<0.2,>=0.1.26->langchain-community==0.0.24) (2.7.1)
Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langsmith<0.2.0,>=0.1.0->langchain-community==0.0.24) (3.10.3)
Requirement already satisfied: charset-normalizer<4,>=2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchain-community==0.0.24) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchain-community==0.0.24) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchain-community==0.0.24) (2.2.1)
Requirement already satisfied: certifi>=2017.4.17 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchain-community==0.0.24) (2024.2.2)
Requirement already satisfied: typing-extensions>=4.6.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from SQLAlchemy<3,>=1.4->langchain-community==0.0.24) (4.11.0)
Requirement already satisfied: greenlet!=0.4.17 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from SQLAlchemy<3,>=1.4->langchain-community==0.0.24) (3.0.3)
Requirement already satisfied: jsonpointer>=1.9 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from jsonpatch<2.0,>=1.33->langchain-core<0.2,>=0.1.26->langchain-community==0.0.24) (2.4)
Requirement already satisfied: annotated-types>=0.4.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from pydantic<3,>=1->langchain-core<0.2,>=0.1.26->langchain-community==0.0.24) (0.6.0)
Requirement already satisfied: pydantic-core==2.18.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from pydantic<3,>=1->langchain-core<0.2,>=0.1.26->langchain-community==0.0.24) (2.18.2)
Requirement already satisfied: mypy-extensions>=0.3.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain-community==0.0.24) (1.0.0)
Using cached langchain_community-0.0.24-py3-none-any.whl (1.7 MB)
Installing collected packages: langchain-community
  Attempting uninstall: langchain-community
    Found existing installation: langchain-community 0.0.38
    Uninstalling langchain-community-0.0.38:
      Successfully uninstalled langchain-community-0.0.38
Successfully installed langchain-community-0.0.24
Collecting langchainhub==0.1.15
  Using cached langchainhub-0.1.15-py3-none-any.whl.metadata (621 bytes)
Requirement already satisfied: requests<3,>=2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from langchainhub==0.1.15) (2.31.0)
Collecting types-requests<3.0.0.0,>=2.31.0.2 (from langchainhub==0.1.15)
  Using cached types_requests-2.31.0.20240406-py3-none-any.whl.metadata (1.8 kB)
Requirement already satisfied: charset-normalizer<4,>=2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchainhub==0.1.15) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchainhub==0.1.15) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchainhub==0.1.15) (2.2.1)
Requirement already satisfied: certifi>=2017.4.17 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests<3,>=2->langchainhub==0.1.15) (2024.2.2)
Using cached langchainhub-0.1.15-py3-none-any.whl (4.6 kB)
Using cached types_requests-2.31.0.20240406-py3-none-any.whl (15 kB)
Installing collected packages: types-requests, langchainhub
Successfully installed langchainhub-0.1.15 types-requests-2.31.0.20240406
Collecting tiktoken==0.6.0
  Using cached tiktoken-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)
Collecting regex>=2022.1.18 (from tiktoken==0.6.0)
  Downloading regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (40 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.9/40.9 kB 1.9 MB/s eta 0:00:00
Requirement already satisfied: requests>=2.26.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from tiktoken==0.6.0) (2.31.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests>=2.26.0->tiktoken==0.6.0) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests>=2.26.0->tiktoken==0.6.0) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests>=2.26.0->tiktoken==0.6.0) (2.2.1)
Requirement already satisfied: certifi>=2017.4.17 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests>=2.26.0->tiktoken==0.6.0) (2024.2.2)
Using cached tiktoken-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB)
Downloading regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (785 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 785.0/785.0 kB 28.0 MB/s eta 0:00:00
Installing collected packages: regex, tiktoken
Successfully installed regex-2024.5.15 tiktoken-0.6.0
Collecting chromadb==0.4.24
  Using cached chromadb-0.4.24-py3-none-any.whl.metadata (7.3 kB)
Collecting build>=1.0.3 (from chromadb==0.4.24)
  Using cached build-1.2.1-py3-none-any.whl.metadata (4.3 kB)
Requirement already satisfied: requests>=2.28 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (2.31.0)
Requirement already satisfied: pydantic>=1.9 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (2.7.1)
Collecting chroma-hnswlib==0.7.3 (from chromadb==0.4.24)
  Using cached chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (252 bytes)
Collecting fastapi>=0.95.2 (from chromadb==0.4.24)
  Downloading fastapi-0.111.0-py3-none-any.whl.metadata (25 kB)
Collecting uvicorn>=0.18.3 (from uvicorn[standard]>=0.18.3->chromadb==0.4.24)
  Using cached uvicorn-0.29.0-py3-none-any.whl.metadata (6.3 kB)
Requirement already satisfied: numpy>=1.22.5 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (1.26.4)
Collecting posthog>=2.4.0 (from chromadb==0.4.24)
  Using cached posthog-3.5.0-py2.py3-none-any.whl.metadata (2.0 kB)
Requirement already satisfied: typing-extensions>=4.5.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (4.11.0)
Collecting pulsar-client>=3.1.0 (from chromadb==0.4.24)
  Using cached pulsar_client-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.0 kB)
Collecting onnxruntime>=1.14.1 (from chromadb==0.4.24)
  Downloading onnxruntime-1.18.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (4.3 kB)
Collecting opentelemetry-api>=1.2.0 (from chromadb==0.4.24)
  Using cached opentelemetry_api-1.24.0-py3-none-any.whl.metadata (1.3 kB)
Collecting opentelemetry-exporter-otlp-proto-grpc>=1.2.0 (from chromadb==0.4.24)
  Using cached opentelemetry_exporter_otlp_proto_grpc-1.24.0-py3-none-any.whl.metadata (2.2 kB)
Collecting opentelemetry-instrumentation-fastapi>=0.41b0 (from chromadb==0.4.24)
  Using cached opentelemetry_instrumentation_fastapi-0.45b0-py3-none-any.whl.metadata (2.0 kB)
Collecting opentelemetry-sdk>=1.2.0 (from chromadb==0.4.24)
  Using cached opentelemetry_sdk-1.24.0-py3-none-any.whl.metadata (1.4 kB)
Collecting tokenizers>=0.13.2 (from chromadb==0.4.24)
  Using cached tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB)
Collecting pypika>=0.48.9 (from chromadb==0.4.24)
  Using cached PyPika-0.48.9-py2.py3-none-any.whl
Requirement already satisfied: tqdm>=4.65.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (4.66.4)
Requirement already satisfied: overrides>=7.3.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (7.7.0)
Collecting importlib-resources (from chromadb==0.4.24)
  Using cached importlib_resources-6.4.0-py3-none-any.whl.metadata (3.9 kB)
Requirement already satisfied: grpcio>=1.58.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (1.63.0)
Collecting bcrypt>=4.0.1 (from chromadb==0.4.24)
  Downloading bcrypt-4.1.3-cp39-abi3-manylinux_2_28_x86_64.whl.metadata (9.5 kB)
Collecting typer>=0.9.0 (from chromadb==0.4.24)
  Using cached typer-0.12.3-py3-none-any.whl.metadata (15 kB)
Collecting kubernetes>=28.1.0 (from chromadb==0.4.24)
  Using cached kubernetes-29.0.0-py2.py3-none-any.whl.metadata (1.5 kB)
Requirement already satisfied: tenacity>=8.2.3 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (8.3.0)
Requirement already satisfied: PyYAML>=6.0.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (6.0.1)
Collecting mmh3>=4.0.1 (from chromadb==0.4.24)
  Using cached mmh3-4.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)
Requirement already satisfied: orjson>=3.9.12 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from chromadb==0.4.24) (3.10.3)
Requirement already satisfied: packaging>=19.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from build>=1.0.3->chromadb==0.4.24) (23.2)
Collecting pyproject_hooks (from build>=1.0.3->chromadb==0.4.24)
  Downloading pyproject_hooks-1.1.0-py3-none-any.whl.metadata (1.3 kB)
Collecting starlette<0.38.0,>=0.37.2 (from fastapi>=0.95.2->chromadb==0.4.24)
  Using cached starlette-0.37.2-py3-none-any.whl.metadata (5.9 kB)
Collecting fastapi-cli>=0.0.2 (from fastapi>=0.95.2->chromadb==0.4.24)
  Downloading fastapi_cli-0.0.3-py3-none-any.whl.metadata (7.0 kB)
Requirement already satisfied: httpx>=0.23.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from fastapi>=0.95.2->chromadb==0.4.24) (0.27.0)
Requirement already satisfied: jinja2>=2.11.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from fastapi>=0.95.2->chromadb==0.4.24) (3.1.3)
Collecting python-multipart>=0.0.7 (from fastapi>=0.95.2->chromadb==0.4.24)
  Downloading python_multipart-0.0.9-py3-none-any.whl.metadata (2.5 kB)
Collecting ujson!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,>=4.0.1 (from fastapi>=0.95.2->chromadb==0.4.24)
  Downloading ujson-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.3 kB)
Collecting email_validator>=2.0.0 (from fastapi>=0.95.2->chromadb==0.4.24)
  Downloading email_validator-2.1.1-py3-none-any.whl.metadata (26 kB)
Requirement already satisfied: certifi>=14.05.14 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from kubernetes>=28.1.0->chromadb==0.4.24) (2024.2.2)
Requirement already satisfied: six>=1.9.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from kubernetes>=28.1.0->chromadb==0.4.24) (1.16.0)
Requirement already satisfied: python-dateutil>=2.5.3 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from kubernetes>=28.1.0->chromadb==0.4.24) (2.9.0.post0)
Requirement already satisfied: google-auth>=1.0.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from kubernetes>=28.1.0->chromadb==0.4.24) (2.29.0)
Requirement already satisfied: websocket-client!=0.40.0,!=0.41.*,!=0.42.*,>=0.32.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from kubernetes>=28.1.0->chromadb==0.4.24) (1.7.0)
Requirement already satisfied: requests-oauthlib in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from kubernetes>=28.1.0->chromadb==0.4.24) (2.0.0)
Requirement already satisfied: oauthlib>=3.2.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from kubernetes>=28.1.0->chromadb==0.4.24) (3.2.2)
Requirement already satisfied: urllib3>=1.24.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from kubernetes>=28.1.0->chromadb==0.4.24) (2.2.1)
Collecting coloredlogs (from onnxruntime>=1.14.1->chromadb==0.4.24)
  Using cached coloredlogs-15.0.1-py2.py3-none-any.whl.metadata (12 kB)
Requirement already satisfied: flatbuffers in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from onnxruntime>=1.14.1->chromadb==0.4.24) (24.3.25)
Requirement already satisfied: protobuf in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from onnxruntime>=1.14.1->chromadb==0.4.24) (4.25.3)
Collecting sympy (from onnxruntime>=1.14.1->chromadb==0.4.24)
  Using cached sympy-1.12-py3-none-any.whl.metadata (12 kB)
Collecting deprecated>=1.2.6 (from opentelemetry-api>=1.2.0->chromadb==0.4.24)
  Using cached Deprecated-1.2.14-py2.py3-none-any.whl.metadata (5.4 kB)
Collecting importlib-metadata<=7.0,>=6.0 (from opentelemetry-api>=1.2.0->chromadb==0.4.24)
  Using cached importlib_metadata-7.0.0-py3-none-any.whl.metadata (4.9 kB)
Requirement already satisfied: googleapis-common-protos~=1.52 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb==0.4.24) (1.63.0)
Collecting opentelemetry-exporter-otlp-proto-common==1.24.0 (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb==0.4.24)
  Using cached opentelemetry_exporter_otlp_proto_common-1.24.0-py3-none-any.whl.metadata (1.7 kB)
Collecting opentelemetry-proto==1.24.0 (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb==0.4.24)
  Using cached opentelemetry_proto-1.24.0-py3-none-any.whl.metadata (2.2 kB)
Collecting opentelemetry-instrumentation-asgi==0.45b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb==0.4.24)
  Using cached opentelemetry_instrumentation_asgi-0.45b0-py3-none-any.whl.metadata (1.9 kB)
Collecting opentelemetry-instrumentation==0.45b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb==0.4.24)
  Using cached opentelemetry_instrumentation-0.45b0-py3-none-any.whl.metadata (6.1 kB)
Collecting opentelemetry-semantic-conventions==0.45b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb==0.4.24)
  Using cached opentelemetry_semantic_conventions-0.45b0-py3-none-any.whl.metadata (2.2 kB)
Collecting opentelemetry-util-http==0.45b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb==0.4.24)
  Using cached opentelemetry_util_http-0.45b0-py3-none-any.whl.metadata (2.4 kB)
Requirement already satisfied: setuptools>=16.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from opentelemetry-instrumentation==0.45b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb==0.4.24) (65.5.0)
Requirement already satisfied: wrapt<2.0.0,>=1.0.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from opentelemetry-instrumentation==0.45b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb==0.4.24) (1.14.1)
Collecting asgiref~=3.0 (from opentelemetry-instrumentation-asgi==0.45b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb==0.4.24)
  Using cached asgiref-3.8.1-py3-none-any.whl.metadata (9.3 kB)
Collecting monotonic>=1.5 (from posthog>=2.4.0->chromadb==0.4.24)
  Using cached monotonic-1.6-py2.py3-none-any.whl.metadata (1.5 kB)
Collecting backoff>=1.10.0 (from posthog>=2.4.0->chromadb==0.4.24)
  Using cached backoff-2.2.1-py3-none-any.whl.metadata (14 kB)
Requirement already satisfied: annotated-types>=0.4.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from pydantic>=1.9->chromadb==0.4.24) (0.6.0)
Requirement already satisfied: pydantic-core==2.18.2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from pydantic>=1.9->chromadb==0.4.24) (2.18.2)
Requirement already satisfied: charset-normalizer<4,>=2 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests>=2.28->chromadb==0.4.24) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from requests>=2.28->chromadb==0.4.24) (3.7)
Collecting huggingface-hub<1.0,>=0.16.4 (from tokenizers>=0.13.2->chromadb==0.4.24)
  Downloading huggingface_hub-0.23.0-py3-none-any.whl.metadata (12 kB)
Collecting click>=8.0.0 (from typer>=0.9.0->chromadb==0.4.24)
  Using cached click-8.1.7-py3-none-any.whl.metadata (3.0 kB)
Collecting shellingham>=1.3.0 (from typer>=0.9.0->chromadb==0.4.24)
  Using cached shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)
Collecting rich>=10.11.0 (from typer>=0.9.0->chromadb==0.4.24)
  Using cached rich-13.7.1-py3-none-any.whl.metadata (18 kB)
Requirement already satisfied: h11>=0.8 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from uvicorn>=0.18.3->uvicorn[standard]>=0.18.3->chromadb==0.4.24) (0.14.0)
Collecting httptools>=0.5.0 (from uvicorn[standard]>=0.18.3->chromadb==0.4.24)
  Using cached httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.6 kB)
Collecting python-dotenv>=0.13 (from uvicorn[standard]>=0.18.3->chromadb==0.4.24)
  Using cached python_dotenv-1.0.1-py3-none-any.whl.metadata (23 kB)
Collecting uvloop!=0.15.0,!=0.15.1,>=0.14.0 (from uvicorn[standard]>=0.18.3->chromadb==0.4.24)
  Using cached uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)
Collecting watchfiles>=0.13 (from uvicorn[standard]>=0.18.3->chromadb==0.4.24)
  Using cached watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)
Collecting websockets>=10.4 (from uvicorn[standard]>=0.18.3->chromadb==0.4.24)
  Using cached websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)
Collecting dnspython>=2.0.0 (from email_validator>=2.0.0->fastapi>=0.95.2->chromadb==0.4.24)
  Downloading dnspython-2.6.1-py3-none-any.whl.metadata (5.8 kB)
Requirement already satisfied: cachetools<6.0,>=2.0.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb==0.4.24) (5.3.3)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb==0.4.24) (0.4.0)
Requirement already satisfied: rsa<5,>=3.1.4 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb==0.4.24) (4.9)
Requirement already satisfied: anyio in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from httpx>=0.23.0->fastapi>=0.95.2->chromadb==0.4.24) (4.3.0)
Requirement already satisfied: httpcore==1.* in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from httpx>=0.23.0->fastapi>=0.95.2->chromadb==0.4.24) (1.0.5)
Requirement already satisfied: sniffio in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from httpx>=0.23.0->fastapi>=0.95.2->chromadb==0.4.24) (1.3.1)
Collecting filelock (from huggingface-hub<1.0,>=0.16.4->tokenizers>=0.13.2->chromadb==0.4.24)
  Downloading filelock-3.14.0-py3-none-any.whl.metadata (2.8 kB)
Collecting fsspec>=2023.5.0 (from huggingface-hub<1.0,>=0.16.4->tokenizers>=0.13.2->chromadb==0.4.24)
  Downloading fsspec-2024.5.0-py3-none-any.whl.metadata (11 kB)
Collecting zipp>=0.5 (from importlib-metadata<=7.0,>=6.0->opentelemetry-api>=1.2.0->chromadb==0.4.24)
  Downloading zipp-3.18.2-py3-none-any.whl.metadata (3.5 kB)
Requirement already satisfied: MarkupSafe>=2.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from jinja2>=2.11.2->fastapi>=0.95.2->chromadb==0.4.24) (2.1.5)
Collecting markdown-it-py>=2.2.0 (from rich>=10.11.0->typer>=0.9.0->chromadb==0.4.24)
  Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from rich>=10.11.0->typer>=0.9.0->chromadb==0.4.24) (2.17.2)
Collecting humanfriendly>=9.1 (from coloredlogs->onnxruntime>=1.14.1->chromadb==0.4.24)
  Using cached humanfriendly-10.0-py2.py3-none-any.whl.metadata (9.2 kB)
Collecting mpmath>=0.19 (from sympy->onnxruntime>=1.14.1->chromadb==0.4.24)
  Using cached mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)
Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.9.0->chromadb==0.4.24)
  Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /mnt/e/Data/SWA/Learning/Github/example/.venv/lib/python3.11/site-packages (from pyasn1-modules>=0.2.1->google-auth>=1.0.1->kubernetes>=28.1.0->chromadb==0.4.24) (0.6.0)
Using cached chromadb-0.4.24-py3-none-any.whl (525 kB)
Using cached chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB)
Downloading bcrypt-4.1.3-cp39-abi3-manylinux_2_28_x86_64.whl (283 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 283.7/283.7 kB 9.8 MB/s eta 0:00:00
Using cached build-1.2.1-py3-none-any.whl (21 kB)
Downloading fastapi-0.111.0-py3-none-any.whl (91 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 92.0/92.0 kB 6.7 MB/s eta 0:00:00
Using cached kubernetes-29.0.0-py2.py3-none-any.whl (1.6 MB)
Using cached mmh3-4.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (67 kB)
Downloading onnxruntime-1.18.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.8/6.8 MB 30.2 MB/s eta 0:00:0000:0100:01
Using cached opentelemetry_api-1.24.0-py3-none-any.whl (60 kB)
Using cached opentelemetry_exporter_otlp_proto_grpc-1.24.0-py3-none-any.whl (18 kB)
Using cached opentelemetry_exporter_otlp_proto_common-1.24.0-py3-none-any.whl (17 kB)
Using cached opentelemetry_proto-1.24.0-py3-none-any.whl (50 kB)
Using cached opentelemetry_instrumentation_fastapi-0.45b0-py3-none-any.whl (11 kB)
Using cached opentelemetry_instrumentation-0.45b0-py3-none-any.whl (28 kB)
Using cached opentelemetry_instrumentation_asgi-0.45b0-py3-none-any.whl (14 kB)
Using cached opentelemetry_semantic_conventions-0.45b0-py3-none-any.whl (36 kB)
Using cached opentelemetry_util_http-0.45b0-py3-none-any.whl (6.9 kB)
Using cached opentelemetry_sdk-1.24.0-py3-none-any.whl (106 kB)
Using cached posthog-3.5.0-py2.py3-none-any.whl (41 kB)
Using cached pulsar_client-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB)
Using cached tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB)
Using cached typer-0.12.3-py3-none-any.whl (47 kB)
Using cached uvicorn-0.29.0-py3-none-any.whl (60 kB)
Using cached importlib_resources-6.4.0-py3-none-any.whl (38 kB)
Using cached backoff-2.2.1-py3-none-any.whl (15 kB)
Using cached click-8.1.7-py3-none-any.whl (97 kB)
Using cached Deprecated-1.2.14-py2.py3-none-any.whl (9.6 kB)
Downloading email_validator-2.1.1-py3-none-any.whl (30 kB)
Downloading fastapi_cli-0.0.3-py3-none-any.whl (9.2 kB)
Using cached httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (318 kB)
Downloading huggingface_hub-0.23.0-py3-none-any.whl (401 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 401.2/401.2 kB 33.8 MB/s eta 0:00:00
Using cached importlib_metadata-7.0.0-py3-none-any.whl (23 kB)
Using cached monotonic-1.6-py2.py3-none-any.whl (8.2 kB)
Using cached python_dotenv-1.0.1-py3-none-any.whl (19 kB)
Downloading python_multipart-0.0.9-py3-none-any.whl (22 kB)
Using cached rich-13.7.1-py3-none-any.whl (240 kB)
Using cached shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)
Using cached starlette-0.37.2-py3-none-any.whl (71 kB)
Downloading ujson-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 53.6/53.6 kB 6.2 MB/s eta 0:00:00
Using cached uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB)
Using cached watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)
Using cached websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (130 kB)
Using cached coloredlogs-15.0.1-py2.py3-none-any.whl (46 kB)
Downloading pyproject_hooks-1.1.0-py3-none-any.whl (9.2 kB)
Using cached sympy-1.12-py3-none-any.whl (5.7 MB)
Using cached asgiref-3.8.1-py3-none-any.whl (23 kB)
Downloading dnspython-2.6.1-py3-none-any.whl (307 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 307.7/307.7 kB 28.5 MB/s eta 0:00:00
Downloading fsspec-2024.5.0-py3-none-any.whl (316 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 316.1/316.1 kB 32.2 MB/s eta 0:00:00
Using cached humanfriendly-10.0-py2.py3-none-any.whl (86 kB)
Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
Using cached mpmath-1.3.0-py3-none-any.whl (536 kB)
Downloading zipp-3.18.2-py3-none-any.whl (8.3 kB)
Downloading filelock-3.14.0-py3-none-any.whl (12 kB)
Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Installing collected packages: pypika, mpmath, monotonic, mmh3, zipp, websockets, uvloop, ujson, sympy, shellingham, python-multipart, python-dotenv, pyproject_hooks, pulsar-client, opentelemetry-util-http, opentelemetry-semantic-conventions, opentelemetry-proto, mdurl, importlib-resources, humanfriendly, httptools, fsspec, filelock, dnspython, deprecated, click, chroma-hnswlib, bcrypt, backoff, asgiref, watchfiles, uvicorn, starlette, posthog, opentelemetry-exporter-otlp-proto-common, markdown-it-py, importlib-metadata, huggingface-hub, email_validator, coloredlogs, build, tokenizers, rich, opentelemetry-api, onnxruntime, kubernetes, typer, opentelemetry-sdk, opentelemetry-instrumentation, opentelemetry-instrumentation-asgi, opentelemetry-exporter-otlp-proto-grpc, opentelemetry-instrumentation-fastapi, fastapi-cli, fastapi, chromadb
Successfully installed asgiref-3.8.1 backoff-2.2.1 bcrypt-4.1.3 build-1.2.1 chroma-hnswlib-0.7.3 chromadb-0.4.24 click-8.1.7 coloredlogs-15.0.1 deprecated-1.2.14 dnspython-2.6.1 email_validator-2.1.1 fastapi-0.111.0 fastapi-cli-0.0.3 filelock-3.14.0 fsspec-2024.5.0 httptools-0.6.1 huggingface-hub-0.23.0 humanfriendly-10.0 importlib-metadata-7.0.0 importlib-resources-6.4.0 kubernetes-29.0.0 markdown-it-py-3.0.0 mdurl-0.1.2 mmh3-4.1.0 monotonic-1.6 mpmath-1.3.0 onnxruntime-1.18.0 opentelemetry-api-1.24.0 opentelemetry-exporter-otlp-proto-common-1.24.0 opentelemetry-exporter-otlp-proto-grpc-1.24.0 opentelemetry-instrumentation-0.45b0 opentelemetry-instrumentation-asgi-0.45b0 opentelemetry-instrumentation-fastapi-0.45b0 opentelemetry-proto-1.24.0 opentelemetry-sdk-1.24.0 opentelemetry-semantic-conventions-0.45b0 opentelemetry-util-http-0.45b0 posthog-3.5.0 pulsar-client-3.5.0 pypika-0.48.9 pyproject_hooks-1.1.0 python-dotenv-1.0.1 python-multipart-0.0.9 rich-13.7.1 shellingham-1.5.4 starlette-0.37.2 sympy-1.12 tokenizers-0.19.1 typer-0.12.3 ujson-5.10.0 uvicorn-0.29.0 uvloop-0.19.0 watchfiles-0.21.0 websockets-12.0 zipp-3.18.2

 

Python 변수에 전역으로 발급받은 API Key를 저장한다.

GOOGLE_API_KEY = "AIzaSyBtalyoCQDZ7BLVdpxxxxxxxxxxxxxxxxxxxxxxxxx"

 

 

LangChaing 라이브러리를 import하고 GoogleGenerative AI llm 객체를 생성한다.

모델은 text-bison-001 모델을 선택해본다.

from langchain_google_genai import GoogleGenerativeAI
from langchain.prompts import PromptTemplate
from langchain.chains.llm import LLMChain
from langchain.chains.combine_documents.stuff import StuffDocumentsChain

# 현재(24.02.29) 사용 가능 모델: 'models/text-bison-001'(요청 90/분), 'models/gemini-pro' (요청 60/분)
llm = GoogleGenerativeAI(model='models/text-bison-001', google_api_key=GOOGLE_API_KEY)

 

 

간단히 긴 글을 주고 2줄로 요약을 하는 시나리오를 돌려보자. 우선 요약할 대상 문단을 변수에 저장한다.

content = """
TEXT:
The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear or simply panda, is a bear species endemic to China.
It is characterized by its bold black-and-white coat and rotund body.
The name "giant panda" is sometimes used to distinguish it from the red panda, a neighboring musteloid.
Though it belongs to the order Carnivora, the giant panda is a folivore, with bamboo shoots and leaves making up more than 99% of its diet.
Giant pandas in the wild occasionally eat other grasses, wild tubers, or even meat in the form of birds, rodents, or carrion.
In captivity, they may receive honey, eggs, fish, yams, shrub leaves, oranges, or bananas along with specially prepared food."""

 

String 프롬프트를 위한 템플릿(template)을 생성한다. llm에게 2줄로 요약을 요청하는 것이므로 프롬프트는 아래와 같이 영문으로 2줄 요약 명령을 입력한다.

# 1. PromptTemplate.from_template()을 사용하는 방법 (recommended)
prompt = PromptTemplate.from_template("Please provide a summary of the following text in 2 lines. {content}")

# 2. PromptTemplate 생성자를 사용하는 방법
# prompt = PromptTemplate(
#     input_variables=["content"],
#     template="Please provide a summary of the following text in 2 lines. {content}"
# )

 

LLM에 질의 후 결과 받기

 

최종적으로 위에서 생성한 prompt와 llm으로 체인을 만들고 LangChaing의 invoke를 호출하여 Sync 응답을 받는다.

# LLM chain을 설정

# 1. LLMChain 방법을 사용
# llm_chain = LLMChain(llm=llm, prompt=prompt)
# llm_chain.invoke({'content': content})

# 2. LCEL을 사용 (recommended)
llm_chain = prompt | llm
llm_chain.invoke({'content': content})

 

실행결과는 아래와 같다. 두개의 문장으로 요약 결과를 출력해준다.

'The giant panda is a bear species found in China. It is characterized by its black and white fur and eats bamboo.'

 

-- The End --