mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-21 12:49:06 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 52f9f533d7 | |||
| 0c3878ac3c | |||
|
|
d70beee51b | ||
| bc5b351d2b | |||
|
|
07981e8090 |
15
CHANGELOG.md
15
CHANGELOG.md
@@ -1,5 +1,20 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [0.7.2](https://github.com/Monadical-SAS/reflector/compare/v0.7.1...v0.7.2) (2025-08-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* docker image not loading libgomp.so.1 for torch ([#560](https://github.com/Monadical-SAS/reflector/issues/560)) ([773fccd](https://github.com/Monadical-SAS/reflector/commit/773fccd93e887c3493abc2e4a4864dddce610177))
|
||||||
|
* include shared rooms to search ([#558](https://github.com/Monadical-SAS/reflector/issues/558)) ([499eced](https://github.com/Monadical-SAS/reflector/commit/499eced3360b84fb3a90e1c8a3b554290d21adc2))
|
||||||
|
|
||||||
|
## [0.7.1](https://github.com/Monadical-SAS/reflector/compare/v0.7.0...v0.7.1) (2025-08-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* webvtt db null expectation mismatch ([#556](https://github.com/Monadical-SAS/reflector/issues/556)) ([e67ad1a](https://github.com/Monadical-SAS/reflector/commit/e67ad1a4a2054467bfeb1e0258fbac5868aaaf21))
|
||||||
|
|
||||||
## [0.7.0](https://github.com/Monadical-SAS/reflector/compare/v0.6.1...v0.7.0) (2025-08-21)
|
## [0.7.0](https://github.com/Monadical-SAS/reflector/compare/v0.6.1...v0.7.0) (2025-08-21)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,4 +27,15 @@ COPY migrations /app/migrations
|
|||||||
COPY reflector /app/reflector
|
COPY reflector /app/reflector
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Create symlink for libgomp if it doesn't exist (for ARM64 compatibility)
|
||||||
|
RUN if [ "$(uname -m)" = "aarch64" ] && [ ! -f /usr/lib/libgomp.so.1 ]; then \
|
||||||
|
LIBGOMP_PATH=$(find /app/.venv/lib -path "*/torch.libs/libgomp*.so.*" 2>/dev/null | head -n1); \
|
||||||
|
if [ -n "$LIBGOMP_PATH" ]; then \
|
||||||
|
ln -sf "$LIBGOMP_PATH" /usr/lib/libgomp.so.1; \
|
||||||
|
fi \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Pre-check just to make sure the image will not fail
|
||||||
|
RUN uv run python -c "import silero_vad.model"
|
||||||
|
|
||||||
CMD ["./runserver.sh"]
|
CMD ["./runserver.sh"]
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ SearchTotal = Annotated[
|
|||||||
SearchTotalBase, Field(description="Total number of search results")
|
SearchTotalBase, Field(description="Total number of search results")
|
||||||
]
|
]
|
||||||
|
|
||||||
WEBVTT_SPEC_HEADER = "WEBVTT\n\n"
|
WEBVTT_SPEC_HEADER = "WEBVTT"
|
||||||
|
|
||||||
WebVTTContent = Annotated[
|
WebVTTContent = Annotated[
|
||||||
str,
|
str,
|
||||||
@@ -379,7 +379,13 @@ class SearchController:
|
|||||||
)
|
)
|
||||||
|
|
||||||
if params.user_id:
|
if params.user_id:
|
||||||
base_query = base_query.where(transcripts.c.user_id == params.user_id)
|
base_query = base_query.where(
|
||||||
|
sqlalchemy.or_(
|
||||||
|
transcripts.c.user_id == params.user_id, rooms.c.is_shared
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
base_query = base_query.where(rooms.c.is_shared)
|
||||||
if params.room_id:
|
if params.room_id:
|
||||||
base_query = base_query.where(transcripts.c.room_id == params.room_id)
|
base_query = base_query.where(transcripts.c.room_id == params.room_id)
|
||||||
if params.source_kind:
|
if params.source_kind:
|
||||||
|
|||||||
@@ -74,11 +74,12 @@ async def test_empty_transcript_title_only_match():
|
|||||||
"share_mode": "private",
|
"share_mode": "private",
|
||||||
"source_kind": "room",
|
"source_kind": "room",
|
||||||
"webvtt": None,
|
"webvtt": None,
|
||||||
|
"user_id": "test-user-1",
|
||||||
}
|
}
|
||||||
|
|
||||||
await get_database().execute(transcripts.insert().values(**test_data))
|
await get_database().execute(transcripts.insert().values(**test_data))
|
||||||
|
|
||||||
params = SearchParameters(query_text="empty")
|
params = SearchParameters(query_text="empty", user_id="test-user-1")
|
||||||
results, total = await search_controller.search_transcripts(params)
|
results, total = await search_controller.search_transcripts(params)
|
||||||
|
|
||||||
assert total >= 1
|
assert total >= 1
|
||||||
@@ -127,11 +128,12 @@ async def test_search_with_long_summary():
|
|||||||
|
|
||||||
00:00:00.000 --> 00:00:10.000
|
00:00:00.000 --> 00:00:10.000
|
||||||
Basic meeting content without special keywords.""",
|
Basic meeting content without special keywords.""",
|
||||||
|
"user_id": "test-user-2",
|
||||||
}
|
}
|
||||||
|
|
||||||
await get_database().execute(transcripts.insert().values(**test_data))
|
await get_database().execute(transcripts.insert().values(**test_data))
|
||||||
|
|
||||||
params = SearchParameters(query_text="quantum computing")
|
params = SearchParameters(query_text="quantum computing", user_id="test-user-2")
|
||||||
results, total = await search_controller.search_transcripts(params)
|
results, total = await search_controller.search_transcripts(params)
|
||||||
|
|
||||||
assert total >= 1
|
assert total >= 1
|
||||||
@@ -191,23 +193,26 @@ The search feature should support complex queries with ranking.
|
|||||||
|
|
||||||
00:00:30.000 --> 00:00:40.000
|
00:00:30.000 --> 00:00:40.000
|
||||||
We need to implement PostgreSQL tsvector for better performance.""",
|
We need to implement PostgreSQL tsvector for better performance.""",
|
||||||
|
"user_id": "test-user-3",
|
||||||
}
|
}
|
||||||
|
|
||||||
await get_database().execute(transcripts.insert().values(**test_data))
|
await get_database().execute(transcripts.insert().values(**test_data))
|
||||||
|
|
||||||
params = SearchParameters(query_text="planning")
|
params = SearchParameters(query_text="planning", user_id="test-user-3")
|
||||||
results, total = await search_controller.search_transcripts(params)
|
results, total = await search_controller.search_transcripts(params)
|
||||||
assert total >= 1
|
assert total >= 1
|
||||||
found = any(r.id == test_id for r in results)
|
found = any(r.id == test_id for r in results)
|
||||||
assert found, "Should find test transcript by title word"
|
assert found, "Should find test transcript by title word"
|
||||||
|
|
||||||
params = SearchParameters(query_text="tsvector")
|
params = SearchParameters(query_text="tsvector", user_id="test-user-3")
|
||||||
results, total = await search_controller.search_transcripts(params)
|
results, total = await search_controller.search_transcripts(params)
|
||||||
assert total >= 1
|
assert total >= 1
|
||||||
found = any(r.id == test_id for r in results)
|
found = any(r.id == test_id for r in results)
|
||||||
assert found, "Should find test transcript by webvtt content"
|
assert found, "Should find test transcript by webvtt content"
|
||||||
|
|
||||||
params = SearchParameters(query_text="engineering planning")
|
params = SearchParameters(
|
||||||
|
query_text="engineering planning", user_id="test-user-3"
|
||||||
|
)
|
||||||
results, total = await search_controller.search_transcripts(params)
|
results, total = await search_controller.search_transcripts(params)
|
||||||
assert total >= 1
|
assert total >= 1
|
||||||
found = any(r.id == test_id for r in results)
|
found = any(r.id == test_id for r in results)
|
||||||
@@ -220,13 +225,17 @@ We need to implement PostgreSQL tsvector for better performance.""",
|
|||||||
assert test_result.duration == 1800.0
|
assert test_result.duration == 1800.0
|
||||||
assert 0 <= test_result.rank <= 1, "Rank should be normalized to 0-1"
|
assert 0 <= test_result.rank <= 1, "Rank should be normalized to 0-1"
|
||||||
|
|
||||||
params = SearchParameters(query_text="tsvector OR nosuchword")
|
params = SearchParameters(
|
||||||
|
query_text="tsvector OR nosuchword", user_id="test-user-3"
|
||||||
|
)
|
||||||
results, total = await search_controller.search_transcripts(params)
|
results, total = await search_controller.search_transcripts(params)
|
||||||
assert total >= 1
|
assert total >= 1
|
||||||
found = any(r.id == test_id for r in results)
|
found = any(r.id == test_id for r in results)
|
||||||
assert found, "Should find test transcript with OR query"
|
assert found, "Should find test transcript with OR query"
|
||||||
|
|
||||||
params = SearchParameters(query_text='"full-text search"')
|
params = SearchParameters(
|
||||||
|
query_text='"full-text search"', user_id="test-user-3"
|
||||||
|
)
|
||||||
results, total = await search_controller.search_transcripts(params)
|
results, total = await search_controller.search_transcripts(params)
|
||||||
assert total >= 1
|
assert total >= 1
|
||||||
found = any(r.id == test_id for r in results)
|
found = any(r.id == test_id for r in results)
|
||||||
|
|||||||
@@ -54,12 +54,13 @@ The robotics project is making good progress.
|
|||||||
|
|
||||||
00:00:20.000 --> 00:00:30.000
|
00:00:20.000 --> 00:00:30.000
|
||||||
We need to consider various implementation approaches.""",
|
We need to consider various implementation approaches.""",
|
||||||
|
"user_id": "test-user-priority",
|
||||||
}
|
}
|
||||||
|
|
||||||
await get_database().execute(transcripts.insert().values(**test_data))
|
await get_database().execute(transcripts.insert().values(**test_data))
|
||||||
|
|
||||||
# Search for "robotics" which appears in both long_summary and webvtt
|
# Search for "robotics" which appears in both long_summary and webvtt
|
||||||
params = SearchParameters(query_text="robotics")
|
params = SearchParameters(query_text="robotics", user_id="test-user-priority")
|
||||||
results, total = await search_controller.search_transcripts(params)
|
results, total = await search_controller.search_transcripts(params)
|
||||||
|
|
||||||
assert total >= 1
|
assert total >= 1
|
||||||
@@ -131,12 +132,13 @@ Team meeting about general project updates.
|
|||||||
|
|
||||||
00:00:10.000 --> 00:00:20.000
|
00:00:10.000 --> 00:00:20.000
|
||||||
Discussion of timeline and deliverables.""",
|
Discussion of timeline and deliverables.""",
|
||||||
|
"user_id": "test-user-long",
|
||||||
}
|
}
|
||||||
|
|
||||||
await get_database().execute(transcripts.insert().values(**test_data))
|
await get_database().execute(transcripts.insert().values(**test_data))
|
||||||
|
|
||||||
# Search for terms only in long_summary
|
# Search for terms only in long_summary
|
||||||
params = SearchParameters(query_text="cryptocurrency")
|
params = SearchParameters(query_text="cryptocurrency", user_id="test-user-long")
|
||||||
results, total = await search_controller.search_transcripts(params)
|
results, total = await search_controller.search_transcripts(params)
|
||||||
|
|
||||||
found = any(r.id == test_id for r in results)
|
found = any(r.id == test_id for r in results)
|
||||||
@@ -151,7 +153,7 @@ Discussion of timeline and deliverables.""",
|
|||||||
assert "cryptocurrency" in snippet, "Snippet should contain the search term"
|
assert "cryptocurrency" in snippet, "Snippet should contain the search term"
|
||||||
|
|
||||||
# Search for "yield farming" - a more specific term
|
# Search for "yield farming" - a more specific term
|
||||||
params2 = SearchParameters(query_text="yield farming")
|
params2 = SearchParameters(query_text="yield farming", user_id="test-user-long")
|
||||||
results2, total2 = await search_controller.search_transcripts(params2)
|
results2, total2 = await search_controller.search_transcripts(params2)
|
||||||
|
|
||||||
found2 = any(r.id == test_id for r in results2)
|
found2 = any(r.id == test_id for r in results2)
|
||||||
|
|||||||
Reference in New Issue
Block a user