mirror of
https://github.com/BillyOutlast/posthog.git
synced 2026-02-04 03:01:23 +01:00
chore(max): Upgrade /init web search (#38662)
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
@@ -401,6 +401,61 @@ Clash of Clans is a long-running, free-to-play mobile strategy game by Supercell
|
||||
),
|
||||
expected=SCRAPING_TERMINATION_MESSAGE, # Should fall back to enquiry flow AFTER scraping
|
||||
),
|
||||
# Case: Niche music app with multiple bundle IDs
|
||||
EvalCase(
|
||||
input=(
|
||||
"Snare Music",
|
||||
EventTaxonomyItem(
|
||||
property="$app_namespace",
|
||||
sample_values=["com.jackqcook.snare", "com.snaremusic.snare"],
|
||||
sample_count=2,
|
||||
),
|
||||
),
|
||||
expected="""
|
||||
__Here's what I found on Snare (com.jackqcook.snare / com.snaremusic.snare):__
|
||||
|
||||
Snare (aka Snare Music) is a social music-discovery app that converts your listening habits into a feed, letting you follow others, react to their plays, post reviews, and engage over music.
|
||||
|
||||
#### Product features
|
||||
- Connects with streaming platforms (Spotify / Apple Music) to import recent listening history.
|
||||
- Live social feed: shows what friends are currently listening to (or recently listened) in a feed format.
|
||||
- Reaction / engagement tools: users can react (likes, comments) to others' plays.
|
||||
- Reviews / commentary: ability to write reviews on albums/tracks within the app.
|
||||
- Discovery / recommendation features: suggestions (called “Snare Samples” or algorithmic picks) based on user activity.
|
||||
- Social graph: following system (you follow friends / users) to tailor the feed.
|
||||
- Basic version is free; updates indicate bug fixes, UI tweaks, algorithm improvements (e.g. “better algorithm for Snare Samples”)
|
||||
|
||||
#### User / customer segments
|
||||
- Music enthusiasts who like to see what peers are listening to and discuss music.
|
||||
- Early adopters of social / discovery tools in the music space.
|
||||
- Playlist curators, tastemakers, influencers who want social reach or community feedback.
|
||||
- Users dissatisfied with “cold” algorithmic recommendations and seeking more human-curated or socially filtered discovery.
|
||||
|
||||
#### Business model
|
||||
- No public disclosures of paid features or pricing (as of available data).
|
||||
- Likely freemium: core features free, with potential premium tier for enhanced discovery / analytics / filtering / no ads (though not confirmed).
|
||||
- Monetization might include sponsorships, affiliate revenue (for streaming referrals), or future paid features for power users.
|
||||
- No clear revenue metrics or public funding data found.
|
||||
|
||||
#### Technical details
|
||||
- Website: snaremusic.app — “Discover, rate, and share your favorite albums. Connect with friends … join conversations about the tracks that move you.”
|
||||
- App version history: latest version 1.1.0 for iOS at least; update notes mention bug fixes, minor improvements.
|
||||
- Key flows / URL paths likely include:
|
||||
- /login / connect (to Spotify / Apple Music)
|
||||
- /feed (social feed of plays)
|
||||
- /profile / settings
|
||||
- /review / comment pages
|
||||
- /discover / algorithmic suggestions
|
||||
- Mobile first (iOS, possibly Android expectation in future).
|
||||
- The app appears “new” / early stage (version numbering low, frequent iterative changes).
|
||||
|
||||
Brief history
|
||||
- Developer / “Quentin Cook” is listed in app metadata.
|
||||
- First public version around August 2025 (v1.0 in August).
|
||||
- Update cycle is active (versions 1.0 → 1.0.6 → 1.1.0) with feature tweaks like better algorithms, UI changes.
|
||||
- The domain / branding is “Snare — the app for music discovery.
|
||||
""".strip(),
|
||||
),
|
||||
],
|
||||
pytestconfig=pytestconfig,
|
||||
)
|
||||
|
||||
@@ -203,7 +203,7 @@ class MemoryInitializerNode(MemoryInitializerContextMixin, AssistantNode):
|
||||
else:
|
||||
prompt += ChatPromptTemplate.from_messages(
|
||||
[("human", INITIALIZE_CORE_MEMORY_WITH_BUNDLE_IDS_USER_PROMPT)], template_format="mustache"
|
||||
).partial(bundle_ids=",".join(retrieved_prop.sample_values))
|
||||
).partial(bundle_ids=", ".join(retrieved_prop.sample_values))
|
||||
|
||||
chain = prompt | self._model() | StrOutputParser()
|
||||
answer = chain.invoke({}, config=config)
|
||||
@@ -232,7 +232,7 @@ class MemoryInitializerNode(MemoryInitializerContextMixin, AssistantNode):
|
||||
},
|
||||
user=self._user,
|
||||
team=self._team,
|
||||
).bind_tools([{"type": "web_search_preview"}]) # We should use web_search once LangChain supports it
|
||||
).bind_tools([{"type": "web_search"}])
|
||||
|
||||
|
||||
class MemoryInitializerInterruptNode(AssistantNode):
|
||||
|
||||
@@ -27,7 +27,7 @@ Each section should be concise and use bullet points for clarity. Do not repeat
|
||||
Spend the most time on product details.
|
||||
|
||||
IMPORTANT: DO NOT INCLUDE CITATION TOKENS. CITATION LINKS ARE PROHIBITED.
|
||||
DO NOT OFFER THE USER ANY INSTRUCTIONS. AVOID FOLLOW-UP SUGGESTIONS AND PROPOSALS.
|
||||
IMPORTANT: DO NOT OFFER THE USER ANY INSTRUCTIONS. DO NOT OFFER FOLLOW-UP SUGGESTIONS OR PROPOSALS.
|
||||
|
||||
If the given domain doesn't exist OR no relevant data was found, then answer a single sentence:
|
||||
"{SCRAPING_TERMINATION_MESSAGE}"
|
||||
@@ -36,11 +36,13 @@ Do NOT make speculative or assumptive statements, just output that sentence 1:1
|
||||
""".strip()
|
||||
|
||||
INITIALIZE_CORE_MEMORY_WITH_DOMAINS_USER_PROMPT = """
|
||||
Provide an analysis of my product based on the following domain(s): {{domains}}.
|
||||
Provide an analysis of my product based on the following domain(s): {{{domains}}}.
|
||||
Search them individually.
|
||||
""".strip()
|
||||
|
||||
INITIALIZE_CORE_MEMORY_WITH_BUNDLE_IDS_USER_PROMPT = """
|
||||
Provide an analysis of my product based on the following app bundle ID(s): {{#bundle_ids}}{{.}}{{^last}}, {{/last}}{{/bundle_ids}}
|
||||
Provide an analysis of my product based on the following app bundle ID(s): {{{bundle_ids}}}
|
||||
Search them individually.
|
||||
""".strip()
|
||||
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ dependencies = [
|
||||
"kombu==5.3.2",
|
||||
"langchain==0.3.26",
|
||||
"langchain-community==0.3.27",
|
||||
"langchain-openai==0.3.32",
|
||||
"langchain-openai==0.3.33",
|
||||
"langgraph==0.4.10",
|
||||
"lxml==5.2.1",
|
||||
"lzstring==1.0.4",
|
||||
@@ -78,7 +78,7 @@ dependencies = [
|
||||
"natsort==8.4.0",
|
||||
"nh3==0.2.14",
|
||||
"numpy==1.26.4",
|
||||
"openai==1.102.0",
|
||||
"openai==1.109.1",
|
||||
"openpyxl==3.1.2",
|
||||
"orjson==3.10.15",
|
||||
"pandas==2.2.0",
|
||||
|
||||
22
uv.lock
generated
22
uv.lock
generated
@@ -2960,7 +2960,7 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "langchain-core"
|
||||
version = "0.3.75"
|
||||
version = "0.3.76"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "jsonpatch" },
|
||||
@@ -2971,23 +2971,23 @@ dependencies = [
|
||||
{ name = "tenacity" },
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/06/63/270b71a23e849984505ddc7c5c9fd3f4bd9cb14b1a484ee44c4e51c33cc2/langchain_core-0.3.75.tar.gz", hash = "sha256:ab0eb95a06ed6043f76162e6086b45037690cb70b7f090bd83b5ebb8a05b70ed", size = 570876, upload-time = "2025-08-26T15:24:12.246Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/4f/4d/5e2ea7754ee0a1f524c412801c6ba9ad49318ecb58b0d524903c3d9efe0a/langchain_core-0.3.76.tar.gz", hash = "sha256:71136a122dd1abae2c289c5809d035cf12b5f2bb682d8a4c1078cd94feae7419", size = 573568, upload-time = "2025-09-10T14:49:39.863Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/fb/42/0d0221cce6f168f644d7d96cb6c87c4e42fc55d2941da7a36e970e3ab8ab/langchain_core-0.3.75-py3-none-any.whl", hash = "sha256:03ca1fadf955ee3c7d5806a841f4b3a37b816acea5e61a7e6ba1298c05eea7f5", size = 443986, upload-time = "2025-08-26T15:24:10.883Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/77/b5/501c0ffcb09c734457ceaa86bc7b1dd37b6a261147bd653add03b838aacb/langchain_core-0.3.76-py3-none-any.whl", hash = "sha256:46e0eb48c7ac532432d51f8ca1ece1804c82afe9ae3dcf027b867edadf82b3ec", size = 447508, upload-time = "2025-09-10T14:49:38.179Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "langchain-openai"
|
||||
version = "0.3.32"
|
||||
version = "0.3.33"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "langchain-core" },
|
||||
{ name = "openai" },
|
||||
{ name = "tiktoken" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/7e/19/167d9ad1b6bb75406c4acceda01ef0dc1101c7f629f74441fe8a787fb190/langchain_openai-0.3.32.tar.gz", hash = "sha256:782ad669bd1bdb964456d8882c5178717adcfceecb482cc20005f770e43d346d", size = 782982, upload-time = "2025-08-26T14:25:27.917Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/ff/66/4245ffe1fed8cd3812be9d228be50baa406cbb0ef5bd7cb1d98d82dcfe37/langchain_openai-0.3.33.tar.gz", hash = "sha256:2dec058332ea9e8977cd91df6515b95952e187ac7484f349c3fe91d936a92375", size = 784533, upload-time = "2025-09-10T16:03:12.965Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e6/3d/e22ee65fff79afe7bdfbd67844243eb279b440c882dad9e4262dcc87131f/langchain_openai-0.3.32-py3-none-any.whl", hash = "sha256:3354f76822f7cc76d8069831fe2a77f9bc7ff3b4f13af788bd94e4c6e853b400", size = 74531, upload-time = "2025-08-26T14:25:26.542Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/67/31/af0486b7ad8a49f3c5c852ca2b3a7f6d8526cc71a405045dd959c36ec5db/langchain_openai-0.3.33-py3-none-any.whl", hash = "sha256:2d52aab6d2af61da9bb9470616ce782128f4be59df965caee3dece30ae6b2bc4", size = 74961, upload-time = "2025-09-10T16:03:11.732Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3528,7 +3528,7 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "openai"
|
||||
version = "1.102.0"
|
||||
version = "1.109.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "anyio" },
|
||||
@@ -3540,9 +3540,9 @@ dependencies = [
|
||||
{ name = "tqdm" },
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/07/55/da5598ed5c6bdd9939633854049cddc5cbac0da938dfcfcb3c6b119c16c0/openai-1.102.0.tar.gz", hash = "sha256:2e0153bcd64a6523071e90211cbfca1f2bbc5ceedd0993ba932a5869f93b7fc9", size = 519027, upload-time = "2025-08-26T20:50:29.397Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c6/a1/a303104dc55fc546a3f6914c842d3da471c64eec92043aef8f652eb6c524/openai-1.109.1.tar.gz", hash = "sha256:d173ed8dbca665892a6db099b4a2dfac624f94d20a93f46eb0b56aae940ed869", size = 564133, upload-time = "2025-09-24T13:00:53.075Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/bd/0d/c9e7016d82c53c5b5e23e2bad36daebb8921ed44f69c0a985c6529a35106/openai-1.102.0-py3-none-any.whl", hash = "sha256:d751a7e95e222b5325306362ad02a7aa96e1fab3ed05b5888ce1c7ca63451345", size = 812015, upload-time = "2025-08-26T20:50:27.219Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/2a/7dd3d207ec669cacc1f186fd856a0f61dbc255d24f6fdc1a6715d6051b0f/openai-1.109.1-py3-none-any.whl", hash = "sha256:6bcaf57086cf59159b8e27447e4e7dd019db5d29a438072fbd49c290c7e65315", size = 948627, upload-time = "2025-09-24T13:00:50.754Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -4435,7 +4435,7 @@ requires-dist = [
|
||||
{ name = "kombu", specifier = "==5.3.2" },
|
||||
{ name = "langchain", specifier = "==0.3.26" },
|
||||
{ name = "langchain-community", specifier = "==0.3.27" },
|
||||
{ name = "langchain-openai", specifier = "==0.3.32" },
|
||||
{ name = "langchain-openai", specifier = "==0.3.33" },
|
||||
{ name = "langchain-perplexity", specifier = ">=0.1.1" },
|
||||
{ name = "langgraph", specifier = "==0.4.10" },
|
||||
{ name = "linkedin-api-client", specifier = ">=0.3.0" },
|
||||
@@ -4450,7 +4450,7 @@ requires-dist = [
|
||||
{ name = "natsort", specifier = "==8.4.0" },
|
||||
{ name = "nh3", specifier = "==0.2.14" },
|
||||
{ name = "numpy", specifier = "==1.26.4" },
|
||||
{ name = "openai", specifier = "==1.102.0" },
|
||||
{ name = "openai", specifier = "==1.109.1" },
|
||||
{ name = "openpyxl", specifier = "==3.1.2" },
|
||||
{ name = "opentelemetry-exporter-otlp-proto-grpc", specifier = "==1.33.1" },
|
||||
{ name = "opentelemetry-instrumentation-aiokafka", specifier = "==0.54b1" },
|
||||
|
||||
Reference in New Issue
Block a user