diff --git a/.gitignore b/.gitignore index 1c75b636c..d256013d2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ cognee/.data/ *.lance/ - +.DS_Store # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/poetry.lock b/poetry.lock index 59b6caecc..270e66027 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "aiofiles" @@ -3215,6 +3215,54 @@ docs = ["mkdocs", "mkdocs-jupyter", "mkdocs-material", "mkdocstrings[python]"] embeddings = ["awscli (>=1.29.57)", "boto3 (>=1.28.57)", "botocore (>=1.31.57)", "cohere", "google-generativeai", "huggingface-hub", "ibm-watsonx-ai (>=1.1.2)", "instructorembedding", "ollama", "open-clip-torch", "openai (>=1.6.1)", "pillow", "sentence-transformers", "torch"] tests = ["aiohttp", "boto3", "duckdb", "pandas (>=1.4)", "polars (>=0.19,<=1.3.0)", "pytest", "pytest-asyncio", "pytest-mock", "pytz", "tantivy"] +[[package]] +name = "langchain-core" +version = "0.3.15" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "langchain_core-0.3.15-py3-none-any.whl", hash = "sha256:3d4ca6dbb8ed396a6ee061063832a2451b0ce8c345570f7b086ffa7288e4fa29"}, + {file = "langchain_core-0.3.15.tar.gz", hash = "sha256:b1a29787a4ffb7ec2103b4e97d435287201da7809b369740dd1e32f176325aba"}, +] + +[package.dependencies] +jsonpatch = ">=1.33,<2.0" +langsmith = ">=0.1.125,<0.2.0" +packaging = ">=23.2,<25" +pydantic = {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""} +PyYAML = ">=5.3" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" +typing-extensions = ">=4.7" + +[[package]] +name = "langchain-text-splitters" +version = "0.3.2" +description = "LangChain text splitting utilities" +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "langchain_text_splitters-0.3.2-py3-none-any.whl", hash = "sha256:0db28c53f41d1bc024cdb3b1646741f6d46d5371e90f31e7e7c9fbe75d01c726"}, + {file = "langchain_text_splitters-0.3.2.tar.gz", hash = "sha256:81e6515d9901d6dd8e35fb31ccd4f30f76d44b771890c789dc835ef9f16204df"}, +] + +[package.dependencies] +langchain-core = ">=0.3.15,<0.4.0" + +[[package]] +name = "langdetect" +version = "1.0.9" +description = "Language detection library ported from Google's language-detection." +optional = false +python-versions = "*" +files = [ + {file = "langdetect-1.0.9-py2-none-any.whl", hash = "sha256:7cbc0746252f19e76f77c0b1690aadf01963be835ef0cd4b56dddf2a8f1dfc2a"}, + {file = "langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0"}, +] + +[package.dependencies] +six = "*" + [[package]] name = "langfuse" version = "2.53.9" @@ -3681,24 +3729,6 @@ htmlmin2 = ">=0.1.13" jsmin = ">=3.0.1" mkdocs = ">=1.4.1" -[[package]] -name = "mkdocs-redirects" -version = "1.2.1" -description = "A MkDocs plugin for dynamic page redirects to prevent broken links." -optional = false -python-versions = ">=3.6" -files = [ - {file = "mkdocs-redirects-1.2.1.tar.gz", hash = "sha256:9420066d70e2a6bb357adf86e67023dcdca1857f97f07c7fe450f8f1fb42f861"}, -] - -[package.dependencies] -mkdocs = ">=1.1.1" - -[package.extras] -dev = ["autoflake", "black", "isort", "pytest", "twine (>=1.13.0)"] -release = ["twine (>=1.13.0)"] -test = ["autoflake", "black", "isort", "pytest"] - [[package]] name = "mkdocstrings" version = "0.26.2" @@ -5035,8 +5065,8 @@ argon2-cffi = {version = ">=23.1.0,<24", optional = true, markers = "extra == \" bcrypt = {version = ">=4.1.2,<5", optional = true, markers = "extra == \"bcrypt\""} [package.extras] -argon2 = ["argon2-cffi (==23.1.0)"] -bcrypt = ["bcrypt (==4.1.2)"] +argon2 = ["argon2-cffi (>=23.1.0,<24)"] +bcrypt = ["bcrypt (>=4.1.2,<5)"] [[package]] name = "pyarrow" @@ -5769,24 +5799,6 @@ async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\ hiredis = ["hiredis (>=3.0.0)"] ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"] -[[package]] -name = "redis" -version = "5.1.1" -description = "Python client for Redis database and key-value store" -optional = false -python-versions = ">=3.8" -files = [ - {file = "redis-5.1.1-py3-none-any.whl", hash = "sha256:f8ea06b7482a668c6475ae202ed8d9bcaa409f6e87fb77ed1043d912afd62e24"}, - {file = "redis-5.1.1.tar.gz", hash = "sha256:f6c997521fedbae53387307c5d0bf784d9acc28d9f1d058abeac566ec4dbed72"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} - -[package.extras] -hiredis = ["hiredis (>=3.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"] - [[package]] name = "referencing" version = "0.35.1" diff --git a/pyproject.toml b/pyproject.toml index ccc75cead..0bc3849b1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,7 +59,7 @@ langsmith = "0.1.139" langdetect = "1.0.9" posthog = "^3.5.0" lancedb = "0.15.0" -litellm = "1.38.10" +litellm = "1.49.1" groq = "0.8.0" langfuse = "^2.32.0" pydantic-settings = "^2.2.1" diff --git a/tools/daily_twitter_stats.py b/tools/daily_twitter_stats.py deleted file mode 100644 index d66f052d9..000000000 --- a/tools/daily_twitter_stats.py +++ /dev/null @@ -1,66 +0,0 @@ -import tweepy -import requests -import json -from datetime import datetime, timezone - -# Twitter API credentials from GitHub Secrets -API_KEY = '${{ secrets.TWITTER_API_KEY }}' -API_SECRET = '${{ secrets.TWITTER_API_SECRET }}' -ACCESS_TOKEN = '${{ secrets.TWITTER_ACCESS_TOKEN }}' -ACCESS_SECRET = '${{ secrets.TWITTER_ACCESS_SECRET }}' -USERNAME = '${{ secrets.TWITTER_USERNAME }}' -SEGMENT_WRITE_KEY = '${{ secrets.SEGMENT_WRITE_KEY }}' - -# Initialize Tweepy API -auth = tweepy.OAuthHandler(API_KEY, API_SECRET) -auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET) -twitter_api = tweepy.API(auth) - -# Segment endpoint -SEGMENT_ENDPOINT = 'https://api.segment.io/v1/track' - - -def get_follower_count(username): - try: - user = twitter_api.get_user(screen_name=username) - return user.followers_count - except tweepy.TweepError as e: - print(f'Error fetching follower count: {e}') - return None - - -def send_data_to_segment(username, follower_count): - current_time = datetime.now(timezone.utc).isoformat() - - data = { - 'userId': username, - 'event': 'Follower Count Update', - 'properties': { - 'username': username, - 'follower_count': follower_count, - 'timestamp': current_time - }, - 'timestamp': current_time - } - - headers = { - 'Content-Type': 'application/json', - 'Authorization': f'Basic {SEGMENT_WRITE_KEY.encode("utf-8").decode("utf-8")}' - } - - try: - response = requests.post(SEGMENT_ENDPOINT, headers=headers, data=json.dumps(data)) - - if response.status_code == 200: - print(f'Successfully sent data to Segment for {username}') - else: - print(f'Failed to send data to Segment. Status code: {response.status_code}, Response: {response.text}') - except requests.exceptions.RequestException as e: - print(f'Error sending data to Segment: {e}') - - -follower_count = get_follower_count(USERNAME) -if follower_count is not None: - send_data_to_segment(USERNAME, follower_count) -else: - print('Failed to retrieve follower count.')